我是x86汇编语言的新手,我有一个保存在寄存器eax
中的有符号整数,我想检查数字是负数还是正数。为此,我使用bt
指令检查第一位。
这是我做的:
bt eax,0
jnc isNegative
bt
携带第一个进位标志位,我用jnc
检查进位标志是0还是1。
如果它是1,它应该是负数,并做负面指令......
然而,输出是不可预测的,有时我有一个积极的,它认为它是一个负数。我做错了吗?
bt
,7
答案 0 :(得分:17)
如果设置了MSB,则该值为负。可以使用
进行检查test eax, 0x80000000
jne is_signed
或,更简单:
test eax, eax
js signed
或用于字节大小写:
test al, al
js is_signed
; or
test eax, 80h
jne is_signed
答案 1 :(得分:5)
您可以使用jge
和cmp
说明:
cmp eax, 0
jl isNegative
答案 2 :(得分:1)
您当前的解决方案会检查数字是偶数还是奇数,而是测试第31位:
bt eax, 31
jc number_is_negative
或者您可以将数字与零进行比较,并测试它是否大于或等于它。
main:
...
cmp eax, 0 ; Compare the number to zero
jge .number_is_positive ; If it's positive jump to .number_is_positive
; And only arrive here if a number is negative
...
.number_is_positive:
; Yay! number is positive
...