有符号数加法问题

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

有符号数加法问题

问题:两个8位数有符号相加,结果要求是16位。

解题思路:如果两个有符号数相加没有溢出,则将加法的结果通过CBW指令扩展成16位。如果加法产生了溢出,则判断加法是否产生了进位,如果没有产生进位,说明这两个有符号数都是正数,此时,在8位的结果前补上00H,将其变成16位的结果;如果产生了进位,说明这两个有符号数都是负数,此时,在8位结果前补上FFH,将其变成16位的结果。

举例:

●两个有符号数01H(真值为1)和02H(真值为2)做加法运算,

因为-128≦1+2≦127,这说明两数相加不会产生溢出,加法的结果为03H(真值为3),通过CBW指令进行扩展,得到16位的结果0003H(真值为3)。

●两个有符号数F6H(真值为-10)和F5H(真值为-11)做加法运

算,因为-128≦(-10)+(-11)≦127,这说明两数相加不会产生溢出,加法的结果为EBH(真值为-21),通过CBW指令进行扩展,得到16位的结果FFEBH(真值为-21)。

●两个有符号数64H(真值为100)和65H(真值为101)做加法运

算,因为100+101≧127,这说明两数相加后会产生溢出,加法的结果为C9H(真值为-55),此时加法没有产生进位,说明两个加数都是正数,在C9H前补上00H得到16位的结果00C9H(真值为201)。

两个有符号数9CH(真值为-100)和9BH(真值为-101)做加法运算,因为(-100)+(-101)≦-128,这说明两数相加后会产生溢出,加法的结果为37H(真值为55),此时加法产生了进位,说明两个加数都是负数,在37H前补上FFH得到16位的结果FF37H(真值为-201)。

通过程序解决该问题(被加数和加数分别放在AL和BL寄存器中,16位的结果放AX中)

ADD AL, BL

JO OVERFLOW ;如产生溢出,则转移到OVERFLOW

CBW ;该指令不会影响任何标志位

JMP NEXT

OVERFLOW: JC L1 ;产生进位说明两个数都是负数AND AH, 00H

JMP NEXT

L1: OR AH, FFH

NEXT: …..

相关文档
最新文档