![](https://csdnimg.cn/release/download_crawler_static/88334242/bg3.jpg)
(5)leal ( , %eax, 4), %edx
(6)leal (%eax, %ecx), %edx
8. 假设以下地址以及寄存器中存放的机器数如表 3.13 所示。
表 3.13 题 8 用表
地址 机器数 寄存器 机器数
0x8049300 0xfffffff0 EAX 0x08049300
0x8049400 0x80000008 EBX 0x00000100
0x8049384 0x80f7ff00 ECX 0x00000010
0x8049380 0x908f12a8 EDX 0x00000080
分别说明执行以下指令后,哪些地址或寄存器中的内容会发生改变?改变后的内容是什么?条件标志 OF、SF、
ZF 和 CF 会发生什么改变?
(1)addl (%eax), %edx
(2)subl (%eax, %ebx), %ecx
(3)orw 4(%eax, %ecx, 8), %bx
(4)testb $0x80, %dl
(5)imull $32, (%eax, %edx)
(6)decw %cx
9. 假设函数 operate 的部分 C 代码如下:
1 int operate(int x, int y, int z, int k)
2 {
3 int v = ;
4 return v;
5 }
以下汇编代码用来实现第 3 行语句的功能,请写出每条汇编指令的注释,并根据以下汇编代码,填写 operate 函
数缺失的部分。
1 movl 12(%ebp), %ecx
2 sall $8, %ecx
3 movl 8(%ebp), %eax
4 movl 20(%ebp), %edx
5 imull %edx, %eax
6 movl 16(%ebp), %edx
7 andl $65520, %edx
8 addl %ecx, %edx
9 subl %edx, %eax
10. 假设函数 product 的 C 语言代码如下,其中 num_type 是用 typedef 声明的数据类型。
1 void product(num_type *d, unsigned x, num_type y ) {
2 *d = x*y;
3 }
函数 product 的过程体对应的主要汇编代码如下:
1 movl 12(%ebp), %eax
2 movl 20(%ebp), %ecx