我不明白。这个问题:
mov al,-128d
mov ah,40d
add al,ah ;result is out of 8 bit unsigned range?
为什么携带旗帜不开启? 它需要88,88不要在0-255范围内!
为什么这个数字到底有多少而不是很少?十进制数?
为什么-128 + 40
等于168
?
怎么可能?
答案 0 :(得分:5)
是的,数字后面的小“d”表示“十进制”,因此mov al,-128d
与mov al,-128
或mov al,-80h
相同。
我不明白这部分问题是88。
关于add al,ah
:
它会al = al + ah
。两个寄存器都是8位“宽”,其内容是(二进制)AL = 10000000, AH = 00101000
。当被解释为8位无符号值时,这种加法的结果是十进制的二进制10101000
= 168。
但是当您尝试将相同的值解释为8位有符号值时,它等于-88
。
ADD
本身或寄存器AL
/ AH
无法理解您的解释,他们不在乎,ADD
会做简单的位添加,以及当最后一位顶部位加溢时,CF被置位,在这种情况下它没有(如果AL被解释为无符号8位值,则它等于+128,并且128 + 40 = 168 =>不超过255 =>进位标志= 0)。
实际上结果既不是8位无符号或有符号范围,结果是正确的值168或-88,这取决于你解释它的方式(无符号或有符号),它是{{1中的相同值}}。您如何阅读/解释它取决于以下代码。
要使一些无符号8b算法超出范围,你需要结果超过255,即
AL