好的,所以我有一个功能:
void store_prod(num_t *dest, unsigned x, num_t y){
*dest = x*y;
}
现在,根据这本书,GCC会生成以下汇编代码
(目标为%ebp+8
,x为%ebp+12
,y为%ebp+16
)
1. movl 12(%ebp), %eax
2. movl 20(%ebp),%ecx
3. imull %eax,%ecx
4. mull 16(%ebp)
5. leal (%ecx, %edx), %edx
6. movl 8(%ebp),%ecx
7. movl %eax, (%ecx)
8. movl %edx, 4(%ecx)
我需要找出num_t
是哪种数据类型,并描述用于计算乘积的算法,并证明它是正确的。
请介意,这不是家庭作业,只是书中的练习题。但是,我很高兴有一些见识,因为未签名与已签名的划分变得越来越模糊。