AH不能高于0xFF,可以吗?

时间:2014-05-02 20:40:13

标签: assembly x86

正如您在下面的代码中看到的,我调用了int 0x13。它失败了,我现在想找出原因。

mov si,bx                   ; BX points to my DAP
mov ah,0x42
mov dl,[BOOTDRIVE]
int 0x13
jc .fail

           ...
.fail:
cmp ah,0xFF                           ;what is the error code?
jg .something_wrong

           ...

.something_wrong:
mov ah,0xe
mov al,'E'                   ; 'E' stands for "ERROR"
int 0x10
jmp $

但我不能!因为执行了jg指令!当我在QEMU中运行此代码时,它会打印一个'E'。但是,嘿,AH不能包含高于0xFF的值!那怎么可能呢?!

1 个答案:

答案 0 :(得分:3)

在执行设置这些标记的jg后,

ZFSF设置标记OFcmpcmp ah,0xFF 。在此背景下,jgah-1作为有符号值与0xFF进行比较(ah在被视为2&#39}时是0。 s补充8位值)。如果0x7f介于-1和{{1}}之间(大于{{1}}),则为真(跳转)。否则,为假(不跳跃)。