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代码中缺失的表
达式。