ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:167.01KB ,
资源ID:3354634      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3354634.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第三章习题ddg概要.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第三章习题ddg概要.docx

1、第三章习题ddg概要习 题1 给出以下概念的解释说明。机器语言程序 机器指令 汇编语言 汇编指令 汇编语言程序 汇编助记符汇编程序 反汇编程序 机器级程序通用寄存器 定点通用寄存器 栈指针寄存器指令指针寄存器 标志寄存器 条件标志(条件码)控制标志 寻址方式 立即寻址寄存器寻址 存储器操作数 实地址模式保护模式 比例变址 非比例变址比例系数(比例因子) MMX指令 SSE指令集SIMD 多媒体扩展通用寄存器 栈(Stack)调用者保存寄存器 被调用者保存寄存器 帧指针寄存器当前栈帧 按值传递参数 按地址传递参数嵌套调用 递归调用 缓冲区溢出缓冲区溢出攻击 栈随机化 2 简单回答下列问题。(1)

2、一条机器指令通常由哪些字段组成?各字段的含义分别是什么?(2)将一个高级语言源程序转换成计算机能直接执行的机器代码通常需要哪几个步骤?(3)IA-32中的逻辑运算指令如何生成条件标志?移位指令可能会改变哪些条件标志?(4)执行条件转移指令时所用到的条件标志信息从何而来?请举例说明。(5)无条件转移指令和调用指令的相同点和不同点是什么?(6)按值传递参数和按地址传递参数两种方式有哪些不同点?(7)为什么在递归深度较深时递归调用的时间开销和空间开销都会较大?(8)为什么数据在存储器中最好按地址对齐方式存放?(9)造成缓冲区溢出的根本原因是什么?3 对于以下AT&T格式汇编指令,根据操作数的长度确定

3、对应指令助记符中的长度后缀,并说明每个操作数的寻址方式。(1)mov 8(%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)lea 8(%ebx, %esi), %eax4 使用汇编器处理以下各行AT&T格式代码时都会产生错误,请说明每一行存在什么错误。(1)movl 0xFF, (%eax)(2)movb %ax, 12(%ebp)(3)addl %ecx, $0xF0(4)orw

4、 $0xFFFF0, (%ebx)(5)addb $0xF8, (%dl)(6)movl %bx, %eax(7)andl %esi, %esx(8)movw 8(%ebp, , 4), %ax5 假设变量x和ptr的类型声明如下: src_type x; 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的类型组合,写出实现上述赋值语句的机器级代码。要求用A

5、T&T格式汇编指令表示机器级代码。表3.12 题5用表src_typedst_type机器级表示charintintcharintunsignedshortintunsigned charunsignedcharunsignedintint6 假设某个C语言函数func的原型声明如下: void func(int *xptr, int *yptr, int *zptr); 函数func的过程体对应的机器级代码用AT&T汇编形式表示如下:1 movl 8(%ebp), %eax2 movl 12(%ebp), %ebx3 movl 16(%ebp), %ecx 4 movl (%ebx), %e

6、dx5 movl (%ecx), %esi6 movl (%eax), %edi 7 movl %edi, (%ebx)8 movl %edx, (%ecx)9 movl %esi, (%eax) 请回答下列问题或完成下列任务。(1)在过程体开始时三个入口参数对应实参所存放的存储单元地址是什么?(提示:当前栈帧底部由帧指针寄存器EBP指示)(2)根据上述机器级代码写出函数func的C语言代码。7 假设变量x和y分别存放在寄存器EAX和ECX中,请给出以下每条指令执行后寄存器EDX中的结果。(1)leal (%eax), %edx(2)leal 4(%eax, %ecx), %edx(3)lea

7、l (%eax, %ecx, 8), %edx(4)leal 0xC(%ecx, %eax, 2), %edx(5)leal ( , %eax, 4), %edx(6)leal (%eax, %ecx), %edx8 假设以下地址以及寄存器中存放的机器数如表3.13所示。 表3.13 题8用表地址机器数寄存器机器数0x80493000xfffffff0EAX0x080493000x80494000x80000008EBX0x000001000x80493840x80f7ff00ECX0x000000100x80493800x908f12a8EDX0x00000080分别说明执行以下指令后,哪些

8、地址或寄存器中的内容会发生改变?改变后的内容是什么?条件标志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 %cx9 假设函数operate的部分C代码如下:1 int operate(int x, int y, int z, int k)2 3 int v = ;4 return v;5 以下汇编代码用来实现第3行语句的功能,请写出每条汇编指令的注释,

9、并根据以下汇编代码,填写operate函数缺失的部分。1 movl 12(%ebp), %ecx2 sall $8, %ecx3 movl 8(%ebp), %eax4 movl 20(%ebp), %edx5 imull %edx, %eax6 movl 16(%ebp), %edx7 andl $65520, %edx8 addl %ecx, %edx9 subl %edx, %eax10 假设函数product的C语言代码如下,其中num_type是用typedef声明的数据类型。 1 void product(num_type *d, unsigned x, num_type y )

10、2 *d = x*y; 3 函数product的过程体对应的主要汇编代码如下:1 movl 12(%ebp), %eax2 movl 20(%ebp), %ecx3 imull %eax, %ecx4 mull 16(%ebp)5 leal (%ecx, %edx), %edx6 movl 8(%ebp), %ecx7 movl %eax, (%ecx)8 movl %edx, 4(%ecx)请给出上述每条汇编指令的注释,并说明num_type是什么类型。11已知IA-32是小端方式处理器,根据给出的IA-32机器代码的反汇编结果(部分信息用x表示)回答问题。(1)已知je指令的操作码为011

11、10100,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, 0x804a8008048399: 00 00 00 (3)已知jle指令的操作码为01111110,mov指

12、令的地址是什么? xxxxxxx: 7e 16 jle 80492e0 xxxxxxx: 89 d0 mov %edx, %eax(4)已知jmp指令的转移目标地址采用相对寻址方式,jmp指令操作码为11101001,其转移目标地址是什么? 8048296: e9 00 ff ff ff jmp xxxxxxx 804829b: 29 c2 sub %eax, %edx12已知函数comp的C语言代码及其过程体对应的汇编代码如下: 要求回答下列问题或完成下列任务。(1)给出每条汇编指令的注释,并说明为什么C代码只有一个if语句而汇编代码有两条条件转移指令。(2)按照书中图3.22给出的“if

13、() goto ”语句形式写出汇编代码对应的C语言代码。13已知函数func的C语言代码框架及其过程体对应的汇编代码如下,根据对应的汇编代码填写C代码中缺失的表达式。14已知函数do_loop的C语言代码如下:1 short do_loop(short x, short y, short k) 2 do 3 x*=(y%k) ;4 k-;5 while (k0) & (yk); 6 return x;7 函数do_loop的过程体对应的汇编代码如下:1 movw 8(%ebp), %bx 2 movw 12(%ebp), %si 3 movw 16(%ebp), %cx 4 .L1:5 mov

14、w %si, %dx6 movw %dx, %ax7 sarw $15, %dx8 idiv %cx 9 imulw %dx, %bx10 decw %cx11 testw %cx, %cx12 jle .L213 cmpw %cx, %si14 jg .L115 .L2:16 movswl %bx, %eax请回答下列问题或完成下列任务:(1)给每条汇编指令添加注释,并说明每条指令执行后,目的寄存器中存放的是什么信息? (2)上述函数过程体中用到了哪些被调用者保存寄存器和哪些调用者保存寄存器?在该函数过程体前面的准备阶段哪些寄存器必须保存到栈中?(3)为什么第7行中的DX寄存器需要算术右移1

15、5位?15已知函数f1的C语言代码框架及其过程体对应的汇编代码如下,根据对应的汇编代码填写C代码中缺失部分,并说明函数f1的功能。16已知函数sw的C语言代码框架如下: int sw(int x) int v=0; switch (x) /* switch语句中的处理部分省略 */ return v; 对函数sw进行编译,得到函数过程体中开始部分的汇编代码以及跳转表如下: 回答下列问题:函数sw中的switch语句处理部分标号的取值情况如何?标号的取值在什么情况下执行default分支?哪些标号的取值会执行同一个case分支?17已知函数test的入口参数有a、b、c和p,C语言过程体代码如下

16、: *p = a; return b*c; 函数test过程体对应的汇编代码如下:1 movl 20(%ebp), %edx2 movsbw 8(%ebp), %ax3 movw %ax, (%edx)4 movzwl 12(%ebp), %eax 5 movzwl 16(%ebp), %ecx6 mull %ecx, %eax 写出函数test的原型,给出返回参数的类型以及入口参数a、b、c和p的类型和顺序。18已知函数funct的C语言代码如下:1 int funct(viod) 2 int x, y;3 scanf(“%x %x”, &x, &y);4 return x-y;5 函数fu

17、nct对应的汇编代码如下:1 funct: 2 push l %ebp3 movl %esp, %ebp4 subl $40, %esp5 leal -8(%ebp), %eax6 movl %eax, 8(%esp)7 leal -4(%ebp), %eax8 movl %eax, 4(%esp)9 movl $.LC0, (%esp) /将指向字符串“%x %x”的指针入栈10 call scanf /假定scanf执行后x=15,y=2011 movl -4(%ebp), %eax12 subl -8(%ebp), %eax13 leave14 ret 假设函数funct开始执行时,Re

18、sp=0xbc000020,Rebp=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已知递归函数refunc的C语言代码框架如下:1 int refunc(unsigned x) 2 if ( )

19、3 return ; 4 unsigned nx = ;5 int rv = refunc(nx) ; 6 return ; 7 上述递归函数过程体对应的汇编代码如下: 1 movl 8(%ebp), %ebx 2 movl $0, %eax 3 testl %ebx, %ebx 4 je .L2 5 movl %ebx, %eax 6 shrl $1, %eax 7 movl %eax, (%esp) 8 call refunc 9 movl %ebx, %edx 10 andl $1, %edx 11 leal (%edx, %eax), %eax 12 .L2: ret 根据对应的汇编代

20、码填写C代码中缺失部分,并说明函数的功能。20填写表3.14,说明每个数组的元素大小、整个数组的大小以及第i个元素的地址。表3.14 题20用表数组元素大小(B)数组大小(B)起始地址元素i的地址char A10&A0int B100&B0short *C5&C0short *D6&D0long double E10&E0long double *F10&F021假设short型数组S的首地址AS和数组下标(索引)变量i(int型)分别存放在寄存器EDX和ECX中,下列给出的表达式的结果存放在EAX或AX中,仿照例子填写表3.15,说明表达式的类型、值和相应的汇编代码。表3.15 题21用表表

21、达式类型值汇编代码SS+iSishortMAS+2*imovw (%edx, %ecx, 2), %ax &S10&Si+2short *AS+2*i+4leal 4(%edx, %ecx, 2), %eax &Si-SS4*i+4*(S+i-2)22假设函数sumij的C代码如下,其中,M和N是用#define声明的常数。1 int aMN, bNM;23 int sumij(int i, int j) 4 return aij + bji;5 已知函数sumij的过程体对应的汇编代码如下:1 movl 8(%ebp), %ecx2 movl 12(%ebp), %edx3 leal (,%

22、ecx, 8), %eax4 subl %ecx, %eax5 addl %edx, %eax6 leal (%edx, %edx, 4), %edx7 addl %ecx, %edx8 movl a(, %eax, 4), %eax9 addl b(,%edx, 4), %eax根据上述汇编代码,确定M和N的值。23假设函数st_ele的C代码如下,其中,L、M和N是用#define声明的常数。1 int aLMN;2 3 int st_ele(int i, int j, int k, int *dst) 4 *dst = aijk;5 return sizeof(a);6 已知函数st_e

23、le的过程体对应的汇编代码如下:1 movl 8(%ebp), %ecx2 movl 12(%ebp), %edx3 leal (%edx,%edx, 8), %edx4 movl %ecx, %eax5 sall $6, %eax6 subl %ecx, %eax7 addl %eax, %edx8 addl 16(%ebp), %edx 9 movl a(, %edx, 4), %eax10 movl 20(%ebp), %edx11 movl %eax, (%edx)12 movl $4536, %eax根据上述汇编代码,确定L、M和N的值。24假设函数trans_matrix的C代码如

24、下,其中,M是用#define声明的常数。1 void trans_matrix(int aMM) 2 int i, j, t;3 for (i = 0; i M; i+) 4 for (j = 0; j s1.xintmovl (%eax), %eaxmovl %eax, (%edx)uptr-s1.y&uptr-s1.z uptr-s2.auptr-s2.auptr-s2.b*uptr-s2.p27给出下列各个结构类型中每个成员的偏移量、结构总大小以及在IA-32/Linux下结构起始位置的对齐要求。 (1)struct S1 short s; char c; int i; char d;

25、 (2)struct S2 int i; short s; char c; char d; (3)struct S3 char c; short s; int i; char d; (4)struct S4 short s3; char c; ; (5)struct S5 char c3; short *s; int i; char d; double e;(6)struct S6 struct S1 c3; struct S2 *s; char d;28以下是结构test的声明: struct char c; double d;int i; short s;char *p; long l; long long g; void *v; test; 假设在Windows平台上编译,则这个结构中每个成员的偏移量是多少?结构总大小为多少字节?如何调整成员的先后顺序使得结构所占空间最小?29以下是函数getline存在漏洞和问题的C语言代码实现,右边是其对应的反汇编部分结果:假定

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

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