我的Sign标志值显示错误?我对标志标志的工作方式有误吗?

时间:2019-04-06 16:11:49

标签: assembly flags emu8086

我要添加axbx。因此,如果结果的MSB为1,则符号标志= 1或符号标志= 0。我对吗?如果我是对的,为什么输出中显示sign flag = 0?难道不是SF = 1?如果我错了,请纠正我。我很困惑

mov ax,20h
mov bx,80h
add ax,bx

1 个答案:

答案 0 :(得分:2)

  

因此,如果结果的MSB为1,则符号标志= 1或符号标志= 0。我说的对吗?

您正确地看到了反映结果最高有效位的符号标志,但是在您添加的内容add ax, bx中,您要添加2个单词,这就是所有不同之处。

考虑添加字节

mov     al, 20h
mov     bl, 80h
add     al, bl     ; -> AL = 20h + 80h = A0h

AL中的结果具有最高有效位(第7位) set ,因此SF = 1

考虑添加单词

mov     ax, 0020h
mov     bx, 0080h
add     ax, bx     ; -> AX = 0020h + 0080h = 00A0h

AX中的结果具有最高有效位(第15位)已清除,因此SF = 0

提示

写入十六进制数字可能会有所帮助,其中所涉及的寄存器可以容纳的位数尽可能多。 写mov ax, 0020h而不是mov ax, 20h