Dan*_* P. 1 c x86 assembly x86-64 function
我发现了以下汇编代码,我不知道它应该做什么(主要是因为cmovg遵循movl指令):
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %edx
movl %edx, %eax
sarl $31, %eax
testl %edx, %edx
movl $1, %edx
cmovg %edx, %eax
popl %ebp
ret
所以这就是我到目前为止解释它的方式:推进堆栈
新指针(堆栈指针)创建指向与基指针相同的位置
获取输入(让我们称之为x)
将x复制到寄存器%eax(res = x)
res = res >> 31符号扩展名
测试x
设置x = 1
if>,res = x
恢复指针
返回res
但是,我不确定这个子程序的意义是什么.对我来说似乎毫无用处.如果你能指出这里做了什么,我将不胜感激.
此代码返回X的符号.在C中:
int sign(int x) {
    if (x>0)
        return 1;
    else if (x==0)
        return 0;
    else
        return -1;
}
该指令sarl $31, %eax将会把-1在eax,如果它是消极的,或者0以其他方式.然后cmovg指令将替换此值,1如果x是肯定的话.
| 归档时间: | 
 | 
| 查看次数: | 1370 次 | 
| 最近记录: |