习 题
1. 给出以下概念的解释说明。
机器指令2. 简单回答下列问题。
(1)?(2)?
(3)?(4)?(5)?..........
要求回答下列问题或完成下列任务。
(1)给出每条汇编指令的注释,并说明为什么C代码只有一个if语句而汇编代码有两条条件转移指令。
(2)按照书中图3.22给出的“if () goto …”语句形式写出汇编代码对应的C语言代码。
13.
14..
16.
回答下列问题:函数sw中的switch语句处理部分标号的取值情况如何?标号的取值在什么情况下执行default分支?哪些标号的取值会执行同一个case分支?
17..“%x %x”, &x, &y);
4return x-y;
5}
函数funct对应的汇编代码如下:
1 funct:
2pushl%ebp
3movl%esp, %ebp
4subl$40, %esp
5leal-8(%ebp), %eax
6movl%eax, 8(%esp)
7leal-4(%ebp), %eax
8movl%eax, 4(%esp)
9movl$.LC0, (%esp)//将指向字符串“%x %x”的指针入栈
10callscanf//假定scanf执行后x=15,y=20
11movl-4(%ebp), %eax
12subl-8(%ebp), %eax
13leave
14ret
假设函数funct开始执行时,R[esp]=0xbc000020,R[ebp]=0xbc000030,执行第10行call指令后,scanf从标准输入读入的值为0x16和0x100,指向字符串“%x %x”的指针为0x804c000。回答下列问题或完成下列任务。
(1)执行第3、10和13行的指令后,寄存器EBP中的内容分别是什么?
(2)执行第3、10和13行的指令后,寄存器ESP中的内容分别是什么?
(3)局部变量x和y所在存储单元的地址分别是什么?
(4)画出执行第10行指令后funct的栈帧,指出栈帧中的内容及其地址。
19.efunc的C语言代码框架如下:
1int refunc(unsigned x) {
2if ( )
3return ;
4unsigned nx = ;
5int rv = refunc(nx) ;
6return ;
7}
上述递归函数过程体对应的汇编代码如下:
1movl8(%ebp), %ebx
2movl$0, %eax
3testl%ebx, %ebx
4je.L2
5movl%ebx, %eax
6shrl$1, %eax
7movl%eax, (%esp)
8callrefunc
9movl%ebx, %edx
10andl$1, %edx
11leal(%edx, %eax), %eax
12 .L2:
……
ret
根据对应的汇编代码填写C代码中缺失部分,并说明函数的功能。
20..]movw (%edx, %ecx, 2), %ax &S[10]&S[i+2]short *AS+2*i+4leal 4(%edx, %ecx, 2), %eax &S[i]-SS[4*i+4]*(S+i-2)
22...i, j, t;
3for (i = 0; i < M; i++)
4for (j = 0; j < M; j++) {
5t = a[i][j];
6a[i][j] = a[j][i];
7a[j][i] = t;
8}
9}
已知采用优化编译(选项-O2)后函数trans_matrix的内循环对应的汇编代码如下:
1 .L2:
2movl(%ebx), %eax
3movl(%esi, %ecx, 4), %edx
4movl%eax, (%esi, %ecx, 4)
5addl$1, %ecx
6movl%edx, (%ebx)
7addl$76, %ebx
8cmpl%edi, %ecx
9jl.L2
根据上述汇编代码,回答下列问题或完成下列任务。
(1)M的值是多少?常数M和变量j分别存放在哪个寄存器中?
(2)写出上述优化汇编代码对应的函数trans_matrix的C代码。
25.假设结构类型node的定