Assembly 啊可以';不能高于0xFF,是吗?
正如您在下面的代码中所看到的,我将其称为int 0x13。它失败了,我现在想找出原因Assembly 啊可以';不能高于0xFF,是吗?,assembly,x86,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
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”。但是嘿,啊不能包含高于0xFF的值!那怎么可能呢 jg
将在执行设置这些标志的cmp
后,在设置标志ZF
、SF
和时生效。在此上下文中,cmp-ah,0xFF
和jg
一起将ah
作为有符号值与-1
进行比较(这就是将0xFF
视为2的补码8位值时的情况)。如果ah
介于0
和0x7f
(大于-1
)之间,则为真(跳转)。否则,false(不跳转)。jg
将在执行设置这些标志的cmp
后,在设置标志ZF
、SF
和时生效。在此上下文中,cmp-ah,0xFF
和jg
一起将ah
作为有符号值与-1
进行比较(这就是将0xFF
视为2的补码8位值时的情况)。如果ah
介于0
和0x7f
(大于-1
)之间,则为真(跳转)。否则,false(不跳转)。jg
将在执行设置这些标志的cmp
后,在设置标志ZF
、SF
和时生效。在此上下文中,cmp-ah,0xFF
和jg
一起将ah
作为有符号值与-1
进行比较(这就是将0xFF
视为2的补码8位值时的情况)。如果ah
介于0
和0x7f
(大于-1
)之间,则为真(跳转)。否则,false(不跳转)。jg
将在执行设置这些标志的cmp
后,在设置标志ZF
、SF
和时生效。在此上下文中,cmp-ah,0xFF
和jg
一起将ah
作为有符号值与-1
进行比较(这就是将0xFF
视为2的补码8位值时的情况)。如果ah
介于0
和0x7f
(大于-1
)之间,则为真(跳转)。否则,false(不进行跳转)