我试图确定在执行以下操作后应将各种标志设置为(进位、符号、零、溢出):
mov ax, 7ff0h; ax register is now 7ff0h
add al, 10h;
我对程序集如何处理这个问题感到困惑。因为我们只添加到寄存器中包含 f0h
的 al 部分,所以 f0h + 10h
给出 100h
。这会设置溢出标志吗?携带旗帜?两者都不?我认为会设置溢出标志,但是,我脑海中浮现的另一种可能性是程序检测到这一点并自动将 ah 寄存器从 7fh
更改为 80h
,从而使完整的ax
寄存器8000h
。理论上,这不会设置进位标志,而是设置符号标志和溢出标志,因为我们的总数 8000h
现在为负数。谁能解释一下这是如何处理的?
谢谢。
最佳答案
我玩了一下 debug 命令(随 x86 Windows 一起提供):
-a 100
1A2F:0100 mov ax, 7ff0
1A2F:0103 add al, 10
1A2F:0105
-t =100 2
AX=7FF0 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1A2F ES=1A2F SS=1A2F CS=1A2F IP=0103 NV UP EI PL NZ NA PO NC
1A2F:0103 0410 ADD AL,10
AX=7F00 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1A2F ES=1A2F SS=1A2F CS=1A2F IP=0105 NV UP EI PL ZR NA PE CY
1A2F:0105 0000 ADD [BX+SI],AL DS:0000=CD
-
NV [无溢出] PL(正) CY [进位]
关于汇编语言 - 标志设置让我头疼,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15002143/