相关疑难解决方法(0)

为什么imul用于乘以无符号数?

我编译了以下程序:

#include <stdint.h>

uint64_t usquare(uint32_t x) {
  return (uint64_t)x * (uint64_t)x;
}
Run Code Online (Sandbox Code Playgroud)

这拆解为:

 0: 89 f8                   mov    eax,edi
 2: 48 0f af c0             imul   rax,rax
 6: c3                      ret  
Run Code Online (Sandbox Code Playgroud)

但是imul用于乘以有符号数字的指令.那为什么用gcc呢?

/ edit:使用uint64_t程序集时类似:

0:  48 0f af ff             imul   rdi,rdi
4:  48 89 f8                mov    rax,rdi
7:  c3                      ret  
Run Code Online (Sandbox Code Playgroud)

x86 assembly unsigned x86-64 multiplication

8
推荐指数
1
解决办法
2339
查看次数

标签 统计

assembly ×1

multiplication ×1

unsigned ×1

x86 ×1

x86-64 ×1