我是x86汇编语言的新手,我有一个保存在寄存器中的有符号整数eax,我想检查数字是负数还是正数.为此,我用bt指令检查第一位.
这是我做的:
bt eax,0
jnc isNegative
Run Code Online (Sandbox Code Playgroud)
bt第一位携带标志,我用来jnc检查进位标志是0还是1.如果是1,它应该是负数,并做负指令...但是,输出是不可预测的,有时我有一个积极的,它认为它是一个负数.难道我做错了什么?
编辑:我刚刚意识到它可能与endianess有关.它实际上是检查最后一位而不是第一位.让我试试吧bt,7
rus*_*lik 17
如果设置了MSB,则该值为负.它可以检查
test eax, 0x80000000
jne is_signed
Run Code Online (Sandbox Code Playgroud)
或者,更简单:
test eax, eax
js signed
Run Code Online (Sandbox Code Playgroud)
或者为字节情况:
test al, al
js is_signed
; or
test eax, 80h
jne is_signed
Run Code Online (Sandbox Code Playgroud)
您可以使用jge和cmp说明:
cmp eax, 0
jl isNegative
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28158 次 |
| 最近记录: |