解释汇编代码

时间:2012-04-18 11:29:19

标签: c function assembly x86-64 ia-32

我发现了以下汇编代码,我不知道它应该做什么(主要是因为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

但是,我不确定这个子程序的意义是什么。对我来说似乎毫无用处。如果你能指出这里做了什么,我将不胜感激。

1 个答案:

答案 0 :(得分:6)

此代码返回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