小编mor*_*ang的帖子

在32位计算机上实现64位运算

以下代码计算x和y的乘积,并将结果存储在内存中.数据类型ll_t被定义为等于long long.

typedef long long ll_t;
void store_prod(ll_t *dest, int x, ll_t y) {
    *dest = x*y;
}
Run Code Online (Sandbox Code Playgroud)

gcc生成以下汇编代码实现计算:dest at%ebp + 8,x at%ebp + 12,y at%ebp + 16

1 movl 16(%ebp), %esi
2 movl 12(%ebp), %eax
3 movl %eax, %edx
4 sarl $31, %edx
5 movl 20(%ebp), %ecx
6 imull %eax, %ecx
7 movl %edx, %ebx
8 imull %esi, %ebx
9 addl %ebx, %ecx
10 mull %esi
11 leal (%ecx,%edx), %edx
12 movl 8(%ebp), %ecx
13 movl %eax, (%ecx)
14 …
Run Code Online (Sandbox Code Playgroud)

c x86 assembly

5
推荐指数
1
解决办法
4994
查看次数

标签 统计

assembly ×1

c ×1

x86 ×1