7.补码的乘法运算
1.进行n轮加法、移位(补码的算术右移),最后再多来一次加法
2.加法的可能值为+0、x的补码、-x的补码(根据MQ的最低位和辅助位确定)
①辅助位 - MQ最低位 = 1:(ACC)+(x的补码)
②辅助位 - MQ最低位 = 0:(ACC)+ 0
③辅助位 - MQ最低位 = -1:(ACC)+(-x的补码)
3.符号位参与运算
4.初始状态:
①ACC置为0,使用双符号位(与原码乘法相同)
②MQ存放乘数,补码的乘法实现中,MQ需要添加一位辅助位(存放在最低位),辅助位初始为0,辅助位加上符号位,因此,设数值位为n位,则实际上MQ需要有n + 2位,并且,ACC和ALU也需要有n + 2位(MQ添加在低位,而ACC和ALU添加在高位)(原码乘法中MQ为n + 1位,仅有符号位,没有辅助位)
③寄存器X存放被乘数,使用双符号位补码形式(原码中被乘数也存放在X)5.手算:
最后一次加法:使得符号位参与运算
8.原码的除法运算
1.符号位不参与运算,单独使用异或得到结果后替换(同原码的乘法思想),数值位取绝对值
2.数值位取绝对值运算
3.计算机在计算的时候,默认当前位的商为1,然后判断ACC和X的大小,若X更大,则恢复余数
4.初始:ACC存放被除数,X存放除数,MQ置为0(存放商),其最后一位为当前将要确定的商
①MQ当前位默认商1,(ACC)+ (-|Y|)补→ACC,ACC负值,说明余数比除数更小,应该商0
②MQ修改当前位为0,(ACC)+ (|Y|)补→ACC,恢复余数
③逻辑左移(错位)
④MQ当前位默认商1,(ACC)+ (-|Y|)补→ACC,ACC负值,说明余数比除数更大,应该商1
⑤逻辑左移
⑥MQ当前位默认商1,(ACC)+ (-|Y|)补→ACC,ACC负值,说明余数比除数更大,应该商1
⑦逻辑左移
⑧MQ当前位默认商1,(ACC)+ (-|Y|)补→ACC,ACC负值,说明余数比除数更小,应该商0
⑨MQ修改当前位为0,(ACC)+ (|Y|)补→ACC,恢复余数
⑩逻辑左移
11. MQ当前位默认商1,(ACC)+ (-|Y|)补→ACC,ACC负值,说明余数比除数更大,应该商1
12.若最后MQ商的结果为负,则也需要恢复余数并商0
13.替换符号
5.小结
6.不恢复余数法:当余数为负时商0,先左移 ,再+除数(直接进行到下一位商的判断)
9.定点补码除法运算
10.C语言类型转换
1.C语言的整数用补码表示
2.无符号数和有符号数的相互转换不会改变数值的存储,但是会改变解释方式(符号位)
3.长整数变短整数:高位截断,保留低位
4.短整数变长整数:符号扩展
11.数据的存储和排列
1.大小端存储:
①大端方式:最高有效字节存在低地址,最低有效字节存在高地址(利于人类阅读)
②小段方式:最低有效字节存在低地址,最高有效字节存在高地址(方便机器处理)
2.按字节、半字、字寻址:设字长位32bit,半字为16bit
①按字节寻址:一个字节对应一个地址
②按半字寻址:一个半字对应两个字节,因此,每个半字对应两个地址。设寻找半字地址为3,则二进制为11,左移一位(一个半字对应两个字节),因此,首字节地址为110,即6
③按字寻址:一个字对应四个字节,因此,一个字对应四个地址。设寻找字地址为2,则二进制为10,左移两位(一个字对应四个字节),因此,首字节地址为1000,即8
3.边界对齐:每次访存只能读/写一个字
12.无符号整数乘法的基本电路结构
1.被乘数存放在被乘数寄存器X中,乘数存放在乘数寄存器Y中
2.乘积寄存器位P数和被乘数寄存器X、乘数寄存器Y相同,逻辑上乘积寄存器P、乘数寄存器Y和进位C是连在一起使用的(即逻辑右移时,原来的C作为现乘积寄存器的最高位原乘积寄存器的最低位作为现乘数寄存器的最高位,原乘数寄存器的最低位舍弃)
3.ALU主要实现加法运算,C是两个数相加可能产生的进位:若当前乘数寄存器的最低位为0,则ALU左边输入乘积寄存器,右边输入0,计算结果输出到乘积寄存器中;若当前乘数寄存器的最低位为1,则ALU左边输入乘积寄存器,右边输入被乘数寄存器,计算结果输入到乘积寄存器中
4.ALU计算完成并输出数据后,进行逻辑右移
5.控制逻辑发出加、右移和写使能控制信号;设乘数和被乘数位n位,则计数器从n开始计数,进行n轮加法、右移,每进行一轮加法和右移后,计数器 - 1
6.两个n位数相乘,结果用2n位暂存,结果最终保留的是乘数寄存器中n bit,乘积寄存器舍弃。若乘积寄存器全0,则不发生溢出;只要有1,则发生溢出
7.初始状态:被乘数寄存器X存放被乘数1101,乘数寄存器Y存放乘数0111,乘积寄存器置为0,计数器 = 4
①第一轮加法:
A.控制逻辑检测乘数寄存器中当前最后一位为1,则乘积寄存器需要加上被乘数
B.控制逻辑发出发出加信号,乘积寄存器输入到ALU的左边,被乘数寄存器输入到ALU的右边,即进行0000 + 1101 = 1101,计算不产生进位,C为0
C.ALU计算完成后,ALU发出写使能信号,使得计算结果写入乘积寄存器中
第一轮右移:逻辑右移
A.进位C、乘积寄存器、乘数寄存器逻辑上是相连的
B.进行逻辑右移,右移后,则原来的C作为现乘积寄存器的最高位,原乘积寄存器的最低位作为现乘数寄存器的最高位,原乘数寄存器的最低位舍弃
此时,第一轮的加法和移位进行完毕,计数器 - 1 = 3
②第二轮加法:
A.控制逻辑检测乘数寄存器中当前最后一位为1,则乘积寄存器需要加上被乘数
B.控制逻辑发出发出加信号,乘积寄存器输入到ALU的左边,被乘数寄存器输入到ALU的右边,即进行0110 + 1101 = 1 0011,计算产生进位,C为1
C.ALU计算完成后,ALU发出写使能信号,使得计算结果写入乘积寄存器中
第二轮右移:逻辑右移此时,第二轮的加法和移位进行完毕,计数器 - 1 = 2
③第三轮加法:
A.控制逻辑检测乘数寄存器中当前最后一位为1,则乘积寄存器需要加上被乘数
B.控制逻辑发出发出加信号,乘积寄存器输入到ALU的左边,被乘数寄存器输入到ALU的右边,即进行1001 + 1101 = 1 0110,计算产生进位,C为1
C.ALU计算完成后,ALU发出写使能信号,使得计算结果写入乘积寄存器中
第三轮右移:
此时,第三轮的加法和移位进行完毕,计数器 - 1 = 1
④第四轮加法:
A.控制逻辑检测乘数寄存器中当前最后一位为0,则乘积寄存器需要加上0
B.控制逻辑发出发出加信号,乘积寄存器输入到ALU的左边,0000输入到ALU的右边,即进行1011 + 0000 = 1011,计算不产生进位,C为0
C.ALU计算完成后,ALU发出写使能信号,使得计算结果写入乘积寄存器中
第四轮右移:
此时,第三轮的加法和移位进行完毕,计数器 - 1 = 0
⑤此时,乘法计算结束,4bit * 4bit = 8bit存储,得到最终结果0101 1011 = 91,若只保留乘数寄存器的n bit,则结果位11,发生溢出