Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 啊可以';不能高于0xFF,是吗?_Assembly_X86 - Fatal编程技术网

Assembly 啊可以';不能高于0xFF,是吗?

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

正如您在下面的代码中所看到的,我将其称为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”。但是嘿,啊不能包含高于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(不进行跳转)