📚 文档目录 合集-数的二进制表示-定点运算-BCD 码-浮点数四则运算-内置存储器-Cache-外存-纠错-RAID-内存管理-总线-指令集: 特征- 指令集:寻址方式和指令格式
注意:这里的+均为“或”

可见,Ci 仅与最初的X Y和 C_0有关.令𝑃_𝑖=𝑋_𝑖+𝑌_𝑖, 𝐺_𝑖=𝑋_𝑖𝑌_i则:

总结得:C_{i+1} = G_{i+1}+P_{i+1}C_i, 超前进位加法器采用的是将低一位的逻辑代数代入高一位, 依此类推最终每一个进位输出仅考虑 C_0, X_i, Y_i几个信号, 于是所有的进位都能同时计算.
结合两者
减法运算大致与加法相同,只需要将减数取反加一然后按加法算即可, 注意加一的操作是令 C_0 = 1.
通过加法和移位实现,与竖式乘法极其类似,但是计算机很难像人类那样一次性把各位乘的结果一次性相加,因此采用部分积的方式:例:0111\times0110
部分积 | 乘数 | 得到当前行的操作 |
|---|---|---|
0000 | 0110 | 部分积+乘数末位$\times 0111$ |
0000 | 0011 | 右移 |
0111 | 0011 | 部分积+乘数末位$\times 0111$ |
0011 | 1001 | 右移 |
1010 | 1001 | 部分积+乘数末位$\times 0111$ |
0101 | 0100 | 右移 |
0101 | 0100 | 部分积+乘数末位$\times 0111$ |
0010 | 1010 | 右移 |
原理:

根据上面无符号整数的原理, 可以将二进制补码整数相乘变形如下:

形式上还原了,只是每次乘的不是乘数的末位数, 且注意是算数右移,需要补符号位,例: -7\times-6 = 42,即 1001\times1010=00101010
部分积 | 乘数 | 得到当前行的操作 |
|---|---|---|
0000 | 10100 | 部分积+$(Y_0-Y_1)\times 1001$ |
0000 | 01010 | 右移 |
0111 | 01010 | 部分积+$(Y_1-Y_2)\times 1001$ |
0011 | 10101 | 右移 |
1100 | 10101 | 部分积+$(Y_2-Y_3)\times 1001$ |
1110 | 01010 | 右移 |
0101 | 01010 | 部分积+$(Y_3-Y_4)\times 1001$ |
0010 | 10101 | 右移 |
1.人的计算:除数右移, 2n位

余数 | 除数 | 商 |
|---|---|---|
00000111 | 00110000 | 0000 |
00000111 | 00011000 | 0000 |
00000111 | 00011000 | 0000 |
00000111 | 00001100 | 0000 |
00000111 | 00001100 | 0000 |
00000111 | 00000110 | 0000 |
00000001 | 00000110 | 0001 |
00000001 | 00000011 | 0001 |
00000001 | 00000011 | 0010 |
余数 | 商 | 除数 |
|---|---|---|
0000 | 0111 | 0011 |
0000 | 111 | 0011 |
0000 | 1110 | 0011 |
0001 | 110 | 0011 |
0001 | 1100 | 0011 |
0011 | 100 | 0011 |
0000 | 1001 | 0011 |
0001 | 001 | 0011 |
0001 | 0010 | 0011 |
remaindersign | Divisorsign | Subtraction | Addition | ||
|---|---|---|---|---|---|
0 | 1 | 0 | 1 | ||
0 | 0 | Enough | Not enough | ---- | ---- |
0 | 1 | ---- | ---- | Enough | Not enough |
1 | 0 | ---- | ---- | Not enough | Enough |
1 | 1 | Not enough | Enough | ---- | ---- |


最后,结果取 0010 的补码整数 1110 为最终结果.
2 .加减相消法
规则
将被除数符号拓展 n 位后存储在余数和商寄存器.
如果被除数与除数符号相同, 作减法; 若符号位不同, 作加法.
若新的余数与除数符号相同, 上商 1; 否则上商 0.
新的余数(指左移前的余数)与除数符号位相同, 则
Ri+1=2Ri−Y, 即余数=余数<<1-除数;否则
Ri+1=2Ri+Y
商的修正:
商左移一位. 若被除数和除数异号(即商为负), 商加一
若余数与被除数符号不同:
若被除数和除数同号,余数加除数
若被除数和除数异号,余数减除数
注意:若做完如上修正后,余数为除数相反数,需要将余数置为0,同时商减一
示例:
