我在cygwin下的Windows 7机器上以32位模式使用GCC。我有以下功能:GCC和乘法指令
unsigned f1(unsigned x, unsigned y)
{
return x*y;
}
我想要的代码做一个无符号乘法,因此我希望它产生的MUL指令,而不是IMUL指令。我编译程序 用下面的命令:
gcc -m32 -S t4.c
生成的汇编代码是:
.file "t4.c"
.text
.globl _f1
.def _f1; .scl 2; .type 32; .endef
_f1:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %eax
imull 12(%ebp), %eax
popl %ebp
ret
.ident "GCC: (GNU) 4.8.2"
我相信,生成的代码中有错误的乘法指令,但我觉得很难相信海湾合作委员会有这样一个简单的错误。请给出意见。
代码有什么问题?它不工作或产生错误的结果? – Olaf
由于您对精确选择汇编指令非常关注,您必须阅读'Intel®64和IA-32架构软件开发人员手册',特别是'IMUL-Signed Multiply:[...] 2和3 - 操作数形式也可以与无符号操作数一起使用,因为产品 的下半部分是相同的,无论操作数是有符号还是无符号。但是,CF和OF标志不能用来确定结果的上半部分是否为非零。 – EOF
[无论有符号还是无符号乘法,下半部结果都是相同的](http://stackoverflow.com/q/14063599/995714)。这是2的补充之一 –