【发布时间】:2012-04-18 11:29:19
【问题描述】:
我找到了以下汇编代码,但我不知道它应该做什么(主要是因为 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
如果 >, res = x
恢复指针
返回资源
但是,我不确定这个子程序的意义是什么。对我来说似乎没用。如果您能指出这里正在做什么,我将不胜感激。
【问题讨论】:
-
你在哪里找到的?应该给你一个线索,目的是什么。
-
在一个文档中,还有大量其他用于执行数学函数的子例程。该文档没有注释,因此从这个意义上说它非常无用。
-
我猜这是某种数学运算。但这对我帮助不大。
-
您是否丢失了源代码并想根据您的可执行代码重建它?
-
没有源代码。我从机器码开始。
标签: c function assembly x86-64 x86