簡體   English   中英

GCC和乘法指令

[英]GCC and the Multiply Instruction

我在cygwin下的Windows 7計算機上以32位模式使用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"

我相信所生成的代碼中包含錯誤的乘法指令,但是我很難相信GCC擁有如此簡單的錯誤。 請評論。

編譯器依賴於“假設”規則:符合標准的程序無法檢測到該程序做什么與該程序應該做什么之間的差異,因為這兩個指令的結果的最低32位相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM