已知函数func的C语言代码框架,第三章习题-ddg

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_type是什么类型。

11.已知IA-32是小端方式处理器,根据给出的IA-32机器代码的反汇编结果(部分信息用x表示)回答问题。

(1)已知je指令的操作码为01110100,je指令的转移目标地址是什么?call指令中的转移目标地址0x80483b1是如何反汇编出来的?

804838c : 74 08 je xxxxxxx 804838e: e8 1e 00 00 00 call 80483b1

(2)已知jb指令的操作码为01110010,jb指令的转移目标地址是什么?movl指令中的目的地址如何反汇编出来的?

8048390: 72 f6 jb xxxxxxx

8048392: c6 05 00 a8 04 08 01 movl $0x1, 0x804a800 8048399: 00 00 00

(3)已知jle指令的操作码为01111110,mov指令的地址是什么?

xxxxxxx: 7e 16 jle 80492e0 xxxxxxx: 89 d0 mov %edx, %eax

(4)已知jmp指令的转移目标地址采用相对寻址方式,jmp指令操作码为11101001,其转移目标地址是什么?

8048296: 804829b:

e9 00 ff ff ff 29 c2

jmp xxxxxxx sub %eax, %edx

12.已知函数comp的C语言代码及其过程体对应的汇编代码如下:

1 void comp(char x, int *p) 2 {

3 if (p && x<0) 4

*p += x;

5 }

1 movb 8(%ebp), %dl 2 movl 12(%ebp), %eax 3 testl %eax, %eax 4 je .L1 5 testb $0x80, %dl 6 je .L1

7 addb %dl, (%eax) 8 .L1:

要求回答下列问题或完成下列任务。

(1)给出每条汇编指令的注释,并说明为什么C代码只有一个if语句而汇编代码有两条条件转移指令。 (2)按照书中图3.22给出的“if () goto …”语句形式写出汇编代码对应的C语言代码。

13.已知函数func的C语言代码框架及其过程体对应的汇编代码如下,根据对应的汇编代码填写C代码中缺失的表

达式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值