正如您在下面的代码中看到的,我调用了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的值!那怎么可能呢?!
答案 0 :(得分:3)
jg
后, ZF
将SF
设置标记OF
,cmp
和cmp ah,0xFF
。在此背景下,jg
和ah
将-1
作为有符号值与0xFF
进行比较(ah
在被视为2&#39}时是0
。 s补充8位值)。如果0x7f
介于-1
和{{1}}之间(大于{{1}}),则为真(跳转)。否则,为假(不跳跃)。