带有借用的带符号减法在x86汇编中相当混乱。请考虑以下单词
X = 3A12 H
Y = 4023 H
我写了以下代码
data1 dw 3a12h
data2 dw 4023h
data3 dw ?
;------- THEN --------
mov al, byte ptr data1
mov bl, byte ptr data2
sub al, bl ; 12-23 = EF while carry=1
mov byte ptr data3, al
mov al, byte ptr data1+1
mov bl, byte ptr data2+1
sbb al, bl ; 3A-1(carry from sub)-40=F9 while carry=1
mov byte ptr data3+1, al
现在data3中存储的内容是F9EF
,而Carry标志是1.我们现在人结果是否定的。换句话说,结果实际上是-0611 H
。但是电脑不知道......
接下来,在其他说明中,它会将F9EF
视为正数。这不对吗? x86如何知道F9EF
是负数?
您可以说符号位为1. OK ...那么如果我想将F9EF
用作正数(或无符号),我应该如何告诉他?!