我的Sign标志值显示错误?我错了标志旗如何运作?

问题描述 投票:2回答:1

我正在加入axbx。因此,如果结果的MSB为1,则符号标志= 1或者其他符号标志= 0。我对吗?如果我是对的,为什么在输出中显示sign flag = 0?不应该是SF = 1吗?如果我错了,请纠正我。我很迷惑

mov ax,20h
mov bx,80h
add ax,bx
assembly flags emu8086
1个回答
2
投票

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

你是否正确反映了结果最重要部分的符号标志,但在你的补充中,add ax, bxyou正在添加2个单词,这才是最重要的。

考虑添加字节:

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

AL中的结果具有最高有效位(第7位),因此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

© www.soinside.com 2019 - 2024. All rights reserved.