无符号二进制数的算术运算

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。



 

1. 加法运算

规则:

0+0=0

0+1=1

1+0=1

1+1=0(有进位)

例:计算10110110B+00101100B

解: 进位 1111 1000

被加数 1011 0110

加数 0010 1100

和 1110 0010

所以,10110110B+00101100B=11100010B


2. 减法运算

规则:

0-0=0

1-0=1

1-1=0

0-1=1(有借位)

例:计算11000100B-00100101B

解: 借位 0111 1110

被减数 1100 0100

减数 0010 0101

差 1001 1111

所以,11000100B-00100101B=10011111B


3. 乘法运算

规则:

0×0=0

0×1=0

1×0=0

1×1=1

二进制乘法的运算方法与十进制乘法的运算方法类似。

例:计算1100B×1001B

解:按照十进制乘法的运算过程,有

1100

× 1001

1100

0000

0000

1100

1101100

 

所以,1100B×1001B=1101100B

另外,乘法运算也可以采用加法和左位的方法实现,算法如下:

1)令部分积=0;

2)如果乘数的当前位=1,则将被乘数加到部分积上,否则不加;

3)将被乘数左移1位;

4)转到2),直到乘数的所有位都检查完。

下面,用加法和左移的方法重做上例。

解:按照移位加的算法,有
乘 数 被乘数 部分积

1 0 0 1 1100 0000

乘数为1,加被乘数到部分积上 1100

被乘数左移1位 11000

乘数为0,只将被乘数左移1位 110000

乘数为0,只将被乘数左移1位 1100000

乘数为1,加被乘数到部分积上 1101100

运算结束,被乘数不再左移





所以,1100B×1001B=1101100B。可以看出,这与前一种方法的结果是一样的,但后一种方法更便于计算机实现,因为移位是计算机的一种最基本的操作。



4. 除法运算

多字节二进制除法算法

二进制的除法通过重复减法运算实现即通过重复”从被除数的高位依次取出每一位, 被取出的数据加上上次的减法结果, 然后减去除数”的处理, 求出除法结果

假设:
被除数 R0R1 (占用4字节)
除数 R2R3 (占用4字节)
商 R0R1 (占用4字节) ******************* 这里需要说明, 此程序执行
结束以后, 商的结果保存在被除数中 **********

**
余数 R4R5 (占用4字节)
移位次数 R6L (占用1字节) ******************* 这里需要说明, 其数值根据
被除数的位数定义, 这里为32 *************
操作流程如下:
a) 余数清零
b) 判断除数是否为0, 如果为0, 是错误, 不再往下执行.
c) 设定移位次数
d) 被除数左移1位, 溢出的最高位保存在进位标志C中, 再把余数左移1位, 把C(被除数溢出的最高位)放入余数的最低位
e) 余数与除数比较大小:
余数 ≧ 除数时, 被除数的最低位, 赋值 1, 余数减去除数
余数 < 除数时, 被除数的最低位, 赋值 0
f) 移位次数递减
g) 直到移位次数为0, 否则重复d) ~ f)


程序代码以renesas为例


MOV.W #0,R4 ;clear R4
MOV.W #0,R5 ;clear R5
CMP.W R4,R2
BNE LBL1 ;R4,R2 不相等, 程序跳至LBL1
CMP.W R4,R3
BEQ ERR ; R4,R3 相等, 程序跳至ERR
LBL1:
MOV.B #32,R6L ;set byte counter
LBL2:
SHLL R1L ;被除数左移1位, 最高位放入C
ROTXL R1H
ROTXL R2H
ROTXL R1H
ROTXL R5L ;余数左移1位, 移入C
ROTXL R5H
ROTXL R4H
ROTXL R4H
BSET #0,R1L ; 被除数的最低位, 赋值 1

SUB.W R3,R5 ;余数 减去 除数
SUBX.B R2L,R4L
SUBX.B R2H,R4H
BCC LBL3 ; 余数 ≧ 除数(减法结果为正) , 程序跳至LBL3
ADD.W R3,R5 ; 余数 < 除数(减法结果为负时, 恢复到减法前的余数)
ADDX.B R2L,R4L
ADDX.B R2H,R4H
BCLR #0,R1L ; 被除数的最低位, 赋值 0
LBL3:
DEC.B R6L ; 定移位次数递减
BNE LBL2 ; 移位次数为不0, 程序跳至LBL2
BRA EXIT ; 程序跳至EXIT
ERR: ; 添加除数为0 的处理
EXIT:
RTS


相关文档
最新文档