我使用GCC的32位模式下的Windows 7机器下半.我的职能如下:
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"我相信生成的代码中有错误的乘法指令,但我很难相信GCC有这么简单的错误。请发表意见。
发布于 2016-03-15 00:26:13
编译器依赖于"as-if“规则:没有标准的一致性程序能够检测出程序所做的和程序应该做的事情之间的区别,因为对于这两种指令,结果的最低32位是相同的。
https://stackoverflow.com/questions/36000519
复制相似问题