汇编语言中ADD加法指令的问题

moval89h//al=89haddalal//al=12h其中89h=10001001,如果看成无符号的话相加的话得100010010我的问题是没指定89H是有符号还... mov al 89h //al=89h
add al al //al=12h

其中89h=10001001,如果看成无符号的话相加的话得1 00010010

我的问题是没指定89H是有符号还是无符号的啊,add指令是不是默认他是无符号的啊?
展开
 我来答
wslizuda
2013-06-30
知道答主
回答量:3
采纳率:0%
帮助的人:4325
展开全部
不是的,虽然算数运算指令主要用来对8位无符号数据进行算术操作,但也同样用于带符号数的。
在加法运算中,若位7有进位,则进位位CY置1,否则清0;若位3有进位,则半进位位AC置1,否则清0。若看作2个带符号数相加,还需判断溢出位OV;若OV为1,表示和数溢出。
例如:A=AEH,R1=81H,执行指令“ADD A,R1”,则操作如下所示。
1 0 1 0 1 1 1 0
+ )1 0 0 0 0 0 0 1
——————————
1 0 0 1 0 1 1 1 1
结果:A=2FH,CY=1,OV=1,AC=0,P=1。
此例中,若把AEH、81H看作无符号数相加,则结果为12FH(在看作无符号数时,不考虑OV位);若将上述2值看作有符号数,则有“2个负数相加得到正数”的错误结论,此时,OV=1,表示有溢出,指出了这一错误。

希望能帮到你。
做而论道
高能答主

推荐于2017-09-20 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
无论,是有符号还是无符号的,算法都是相同的。

即:89H + 89H = (1)12H。

相当于无符号:137 + 137 = 274 = 256 + 18。 256 即为进位 1。

相当于有符号:(-119) + (-119) = +18。 溢出,结果无效。

换一个数,再试试,有符号数,也可以得出正确的结果。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友cfff287b8
2013-06-30 · TA获得超过321个赞
知道小有建树答主
回答量:632
采纳率:0%
帮助的人:242万
展开全部
89h + 89h = 112h,而al最大是FFh,产生溢出后就生产丢失现象,只保留低位。
要想不丢失,可改为:
(1)作为无符号数时:
xor ah,ah ; 或movzx ax,al这句更好
add ax,ax ; 昨天误打成了add ax,al
则ax是正确的112h即274
(2)作为有符号数时:
movsx ax,al ; 高位扩展为负号即ax=FF89h (-119)
add ax,ax ; 结果为ax=FF12h,即-238
其他高级语言也一样,在声明变量和计算时要考虑数字溢出问题(声明的是short型变量,给的却是int型值,得到的也只会是short型的值即丢失或报错)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fastfs
2013-06-29 · TA获得超过1423个赞
知道大有可为答主
回答量:2659
采纳率:62%
帮助的人:803万
展开全部
无符号数的范围是0-255,有符号数是-128 - 127.应该默认是无符号数,另外标志寄存器里有个of位它是针对有符号数的,如果是mov al,7Fh add al,1 of位会置1 显示有符号数溢出,因为7FH+1=128大于了有符号数的表示范围。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
夕见的
2013-06-29
知道答主
回答量:4
采纳率:0%
帮助的人:4187
展开全部
将al的内容直接相加(注意的是要进行的是十六进制的加法,而不是十进制的)后送到al寄存器中
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式