我找到了以下汇编代码,但我不知道它应该做什么(主要是因为 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
所以到目前为止我是这样解释的: pushes on stack
创建一个新指针(堆栈指针)以指向与基指针相同的位置
获取输入(我们称之为 x)
将 x 复制到寄存器 %eax (res = x)
res = res >> 31 符号扩展
测试 x
设置 x = 1
如果 >, res = x
恢复指针
返回资源
但是,我不确定这个子程序的意义是什么。对我来说似乎没用。如果您能指出这里正在做什么,我将不胜感激。