第三章习题ddg剖析Word文档格式.docx

上传人:b****5 文档编号:15682352 上传时间:2022-11-15 格式:DOCX 页数:25 大小:80.64KB
下载 相关 举报
第三章习题ddg剖析Word文档格式.docx_第1页
第1页 / 共25页
第三章习题ddg剖析Word文档格式.docx_第2页
第2页 / 共25页
第三章习题ddg剖析Word文档格式.docx_第3页
第3页 / 共25页
第三章习题ddg剖析Word文档格式.docx_第4页
第4页 / 共25页
第三章习题ddg剖析Word文档格式.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

第三章习题ddg剖析Word文档格式.docx

《第三章习题ddg剖析Word文档格式.docx》由会员分享,可在线阅读,更多相关《第三章习题ddg剖析Word文档格式.docx(25页珍藏版)》请在冰豆网上搜索。

第三章习题ddg剖析Word文档格式.docx

移位指令可能会改变哪些条件标志?

(4)执行条件转移指令时所用到的条件标志信息从何而来?

请举例说明。

(5)无条件转移指令和调用指令的相同点和不同点是什么?

(6)按值传递参数和按地址传递参数两种方式有哪些不同点?

(7)为什么在递归深度较深时递归调用的时间开销和空间开销都会较大?

(8)为什么数据在存储器中最好按地址对齐方式存放?

(9)造成缓冲区溢出的根本原因是什么?

3.对于以下AT&

T格式汇编指令,根据操作数的长度确定对应指令助记符中的长度后缀,并说明每个操作数的寻址方式。

(1)mov8(%ebp,%ebx,4),%ax

(2)mov%al,12(%ebp)

(3)add(,%ebx,4),%ebx

(4)or(%ebx),%dh

(5)push$0xF8

(6)mov$0xFFF0,%eax

(7)test%cx,%cx

(8)lea8(%ebx,%esi),%eax

4.使用汇编器处理以下各行AT&

T格式代码时都会产生错误,请说明每一行存在什么错误。

(1)movl0xFF,(%eax)

(2)movb%ax,12(%ebp)

(3)addl%ecx,$0xF0

(4)orw$0xFFFF0,(%ebx)

(5)addb$0xF8,(%dl)

(6)movl%bx,%eax

(7)andl%esi,%esx

(8)movw8(%ebp,,4),%ax

5.假设变量x和ptr的类型声明如下:

src_typex;

dst_type*ptr;

这里,src_type和dst_type是用typedef声明的数据类型。

有以下一个C语言赋值语句:

*ptr=(dst_type)x;

若x存储在寄存器EAX或AX或AL中,ptr存储在寄存器EDX中,则对于表3.12中给出的src_type和dst_type的类型组合,写出实现上述赋值语句的机器级代码。

要求用AT&

T格式汇编指令表示机器级代码。

表3.12题5用表

src_type

dst_type

机器级表示

char

int

unsigned

short

unsignedchar

6.假设某个C语言函数func的原型声明如下:

voidfunc(int*xptr,int*yptr,int*zptr);

函数func的过程体对应的机器级代码用AT&

T汇编形式表示如下:

1movl8(%ebp),%eax

2movl12(%ebp),%ebx

3movl16(%ebp),%ecx

4movl(%ebx),%edx

5movl(%ecx),%esi

6movl(%eax),%edi

7movl%edi,(%ebx)

8movl%edx,(%ecx)

9movl%esi,(%eax)

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

(1)在过程体开始时三个入口参数对应实参所存放的存储单元地址是什么?

(提示:

当前栈帧底部由帧指针寄存器EBP指示)

(2)根据上述机器级代码写出函数func的C语言代码。

7.假设变量x和y分别存放在寄存器EAX和ECX中,请给出以下每条指令执行后寄存器EDX中的结果。

(1)leal(%eax),%edx

(2)leal4(%eax,%ecx),%edx

(3)leal(%eax,%ecx,8),%edx

(4)leal0xC(%ecx,%eax,2),%edx

(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)orw4(%eax,%ecx,8),%bx

(4)testb$0x80,%dl

(5)imull$32,(%eax,%edx)

(6)decw%cx

9.假设函数operate的部分C代码如下:

1intoperate(intx,inty,intz,intk)

2{

3intv=;

4returnv;

5}

以下汇编代码用来实现第3行语句的功能,请写出每条汇编指令的注释,并根据以下汇编代码,填写operate函数缺失的部分。

1movl12(%ebp),%ecx

2sall$8,%ecx

3movl8(%ebp),%eax

4movl20(%ebp),%edx

5imull%edx,%eax

6movl16(%ebp),%edx

7andl$65520,%edx

8addl%ecx,%edx

9subl%edx,%eax

10.假设函数product的C语言代码如下,其中num_type是用typedef声明的数据类型。

1voidproduct(num_type*d,unsignedx,num_typey){

2*d=x*y;

3}

函数product的过程体对应的主要汇编代码如下:

1movl12(%ebp),%eax

2movl20(%ebp),%ecx

3imull%eax,%ecx

4mull16(%ebp)

5leal(%ecx,%edx),%edx

6movl8(%ebp),%ecx

7movl%eax,(%ecx)

8movl%edx,4(%ecx)

请给出上述每条汇编指令的注释,并说明num_type是什么类型。

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

(1)已知je指令的操作码为01110100,je指令的转移目标地址是什么?

call指令中的转移目标地址0x80483b1是如何反汇编出来的?

804838c:

7408jexxxxxxx

804838e:

e81e000000call80483b1<

test>

(2)已知jb指令的操作码为01110010,jb指令的转移目标地址是什么?

movl指令中的目的地址如何反汇编出来的?

8048390:

72f6jbxxxxxxx

8048392:

c60500a8040801movl$0x1,0x804a800

8048399:

000000

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

xxxxxxx:

7e16jle80492e0

89d0mov%edx,%eax

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

8048296:

e900ffffffjmpxxxxxxx

804829b:

29c2sub%eax,%edx

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

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

(1)给出每条汇编指令的注释,并说明为什么C代码只有一个if语句而汇编代码有两条条件转移指令。

(2)按照书中图3.22给出的“if()goto…”语句形式写出汇编代码对应的C语言代码。

 

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

14.已知函数do_loop的C语言代码如下:

1shortdo_loop(shortx,shorty,shortk){

2do{

3x*=(y%k);

4k--;

5}while((k>

0)&

&

(y>

k));

6returnx;

7}

函数do_loop的过程体对应的汇编代码如下:

1movw8(%ebp),%bx

2movw12(%ebp),%si

3movw16(%ebp),%cx

4.L1:

5movw%si,%dx

6movw%dx,%ax

7sarw$15,%dx

8idiv%cx

9imulw%dx,%bx

10decw%cx

11testw%cx,%cx

12jle.L2

13cmpw%cx,%si

14jg.L1

15.L2:

16movswl%bx,%eax

请回答下列问题或完成下列任务:

(1)给每条汇编指令添加注释,并说明每条指令执行后,目的寄存器中存放的是什么信息?

(2)上述函数过程体中用到了哪些被调用者保存寄存器和哪些调用者保存寄存器?

在该函数过程体前面的准备阶段哪些寄存器必须保存到栈中?

(3)为什么第7行中的DX寄存器需要算术右移15位?

15.已知函数f1的C语言代码框架及其过程体对应的汇编代码如下,根据对应的汇编代码填写C代码中缺失部分,并说明函数f1的功能。

16.已知函数sw的C语言代码框架如下:

intsw(intx){

intv=0;

switch(x){

/*switch语句中的处理部分省略*/

}

retu

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 药学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1