首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GCC与复式教学

GCC与复式教学
EN

Stack Overflow用户
提问于 2016-03-14 23:37:05
回答 1查看 706关注 0票数 0

我使用GCC的32位模式下的Windows 7机器下半.我的职能如下:

代码语言:javascript
复制
  unsigned f1(unsigned x, unsigned y)
  {
      return x*y;
  }

我希望代码执行无符号乘法,因此我希望它生成mul指令,而不是imul指令。我使用以下命令编译程序:

代码语言:javascript
复制
 gcc -m32 -S t4.c

生成的程序集代码是:

代码语言:javascript
复制
     .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有这么简单的错误。请发表意见。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-15 00:26:13

编译器依赖于"as-if“规则:没有标准的一致性程序能够检测出程序所做的和程序应该做的事情之间的区别,因为对于这两种指令,结果的最低32位是相同的。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36000519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档