汇编语言中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指令是不是默认他是无符号的啊? 展开
add al al //al=12h
其中89h=10001001,如果看成无符号的话相加的话得1 00010010
我的问题是没指定89H是有符号还是无符号的啊,add指令是不是默认他是无符号的啊? 展开
5个回答
展开全部
不是的,虽然算数运算指令主要用来对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,表示有溢出,指出了这一错误。
希望能帮到你。
在加法运算中,若位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,表示有溢出,指出了这一错误。
希望能帮到你。
展开全部
无论,是有符号还是无符号的,算法都是相同的。
即:89H + 89H = (1)12H。
相当于无符号:137 + 137 = 274 = 256 + 18。 256 即为进位 1。
相当于有符号:(-119) + (-119) = +18。 溢出,结果无效。
换一个数,再试试,有符号数,也可以得出正确的结果。
即:89H + 89H = (1)12H。
相当于无符号:137 + 137 = 274 = 256 + 18。 256 即为进位 1。
相当于有符号:(-119) + (-119) = +18。 溢出,结果无效。
换一个数,再试试,有符号数,也可以得出正确的结果。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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型的值即丢失或报错)
要想不丢失,可改为:
(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型的值即丢失或报错)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
无符号数的范围是0-255,有符号数是-128 - 127.应该默认是无符号数,另外标志寄存器里有个of位它是针对有符号数的,如果是mov al,7Fh add al,1 of位会置1 显示有符号数溢出,因为7FH+1=128大于了有符号数的表示范围。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
将al的内容直接相加(注意的是要进行的是十六进制的加法,而不是十进制的)后送到al寄存器中
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询