计算机系统第三章答案_第1页
计算机系统第三章答案_第2页
计算机系统第三章答案_第3页
计算机系统第三章答案_第4页
计算机系统第三章答案_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

学习问题3.请参阅答案:(1)后缀:w,源:默认地址比例地址更改偏移,条目:寄存器(2)后缀:b,源:寄存器,条目:默认地址偏移(3)后缀:l,源:比例地址更改,条目:寄存器(4)后缀:b,源:主地址,条目:寄存器(5)后缀:l,源:立即计数,项目:堆栈(6)后缀:l,源:即时计数,条目:寄存器(7)后缀:w,源:寄存器,条目:寄存器(8)后缀:l,源:默认地址更改偏移,条目:寄存器4.请参阅答案:(1)源操作数立即为0xFF,前面必须加上“$”(2)源操作数为16位,长度后缀为字节“b”,不匹配(3)目的操作数不能是即时寻址(4)操作数超过16个字符,长度后缀为16个字符的“w”(5)不能将8位寄存器用作具有目标操作数地址的寄存器(6)源操作对象寄存器与头部操作对象寄存器长度不匹配(7)没有ESX寄存器(8)源操作数地址缺少地址更改寄存器5.请参阅答案:表3.12问题5表Src_typeDst_type机器层级表现法CharIntMovsbl %al,(IntCharMovb %al,(IntUnsignedMovl(ShortIntMovswl %ax,(Unsigned charUnsignedMovzbl %al,(CharUnsignedMovsbl %al,(IntIntMovl(6.请参阅答案:(1)与xptr、yptr和ztr对应的实际存储设备地址分别为Rebp 8、Rebp 12、Rebp 16。(2)函数func的c语言代码如下:Void func (int * xptr,int * yptr,int * ztr)Int tempx=* xptrInt tempy=* cryptrInt tempz=* ztr* yptr=tempx* ztr=tempy* xptr=tempz7.请参阅答案:(1)Redx=x(2)Redx=x y 4(3)Redx=x 8*y(4)Redx=y 2*x 12(5)Redx=4*y(6)Redx=x y8.请参阅答案:(1)命令功能包括:rEDX850 IrEDXmreax=0x 0000080m0x 8049300,寄存器EDX中的内容发生变化。变更是以下运算的结果:00000080H FFFFFFF0H0000 0000 0000 0000 0000 0000 1000 00001111 1111 1111 1111 1111 1111 1111 00001 0000 0000 0000 0000 0000 0000 0111 0000因此,EDX的内容将更改为0x00000070。根据表3.5,附加命令会影响OF、SF、ZF和CF标志。OF=0、ZF=0、SF=0、CF=1。(2)命令功能包括:r ECX 85燕麦rECX-mreaxrebx=0x 0000010m0x 8049400,寄存器ECX中的内容已更改。变更是以下运算的结果:00000010h-8000008h0000 0000 0000 0000 0000 0000 0001 00000111 1111 1111 1111 1111 1111 1111 10000 1000 0000 0000 0000 0000 0000 0000 1000因此,ECX的内容将更改为0x80000008。根据表3.5,减法命令会影响OF、SF、ZF和CF标志。OF=1、ZF=0、SF=1、CF=10=1。(3)命令功能包括:rBX852;。r bx or m r eax r ecx * 8 4,寄存器bx的内容更改。变更是作业0x 0100 or m0x 8049384=0100h or ff00h的结果0000 0001 0000 00001111 1111 0000 00001111 1111 0000 0000Or因此,BX的内容将更改为0xFF00。如第3.3.3节所示,运行OR命令后of=cf=0;结果非零,因此ZF=0;SF=1,因为最高位为1。(4)test命令不更改公共寄存器,但根据“and”操作(如Rdl and0x80)更改标志1000 00001000 00001000 0000安迪如第3.3.3节所示,运行TEST命令后of=cf=0;结果非零,因此ZF=0;SF=1,因为最高位为1。(5)命令功能包括:mreaxrEDXmreaxrEDX* 32。也就是说,存储单元0x8049380的内容已更改为以下操作的结果:M0x8049380*32=0x908f12a8*32,即0x908f12a8向左移动5位,即可得到结果。1001 0000 1000 1111 0001 0010 1010 10005=0001 1110 0010 0101 0101 00000000000因此,在命令运行后,单位0x8049380的内容将更改为0x11e25500。很明显,这个结果是溢出来的。但是,根据表3.5,乘法命令不影响标志位。也就是说,不创建OF=1。(6)命令功能包括:r CX 85ui CX-1,即从CX寄存器的内容中减去1。0000 0000 0001 00001111 1111 1111 11111 0000 0000 0000 1111因此,在发出命令后,CLARiiON的内容将从0x0010更改为0x000F。在表3.5中,DEC命令影响OF、ZF、SF,并根据上述计算结果得到OF=0、ZF=0、SF=0。9.请参阅答案:Mov l12(,/r ECX 850im r ebp 12),将y发送到ECXSall $8,/r ECX 85燕麦r ECX 8,y*256传输到ECXMovl 8(,/r EAX 85燕麦m r ebp 8),将x发送到EAX将Movl 20(,/r EDX 85uim r ebp 20),k发送到EDXImull/r EAX 85燕麦r eax * r EDX,将x*k发送到EAXMovl 16(,/r EDX 85燕麦m r ebp 16),z发送到EDX将Andl $65520,/r EDX 85燕麦r EDX and 65520,z0xFFF0发送到EDXAddl/r EDX 850ir EDX r ecx,将z0xFFF0 y*256传输到EDX将Subl/r EAX 85燕麦r eax-r EDX,x*k-(z0xFFF0 y*256)发送到EAX根据上述分析,第3行的缺失部分如下:3 intv=x * k-(z0x fff 0y * 256);10.参考答案:在汇编代码的第2行和第4行中,y必须占用8个字节,从Rebp 20开始的4个字节是高32位字节,写为yh。从Rebp 16开始的4个字节是低32位字节,以yl写入。根据动作4的无符号数字乘法命令,可以知道y的数据类型num_type为unsigned long。Movl 12(,/r EAX 85燕麦m r ebp 12),将x发送到EAXMovl 20(,/r ECX 85燕麦m r ebp 20),yh发送到ECXImull/r ECX 85燕麦r ecx * r eax,yh*x的低32位发送到ECXmul 16(/rEDXrEAX850 imrebp16* rEAX,将yl*x发送到EDX-EAXLeal(,/r EDX 85燕麦r ecx r EDX,yl*x的高32位和yh*x的低32位相加,然后发送EDXMovl 8(,/r ECX 85燕麦m r ebp 8),将d发送到ECXMovl (/m r ecx r eax,x*y低32位d指向的低32位Movl 4 (/m r ecx 4 850i EDX,将x*y高度32位传输到d指向的高32位11.参考答案:根据第3.3.4节,条件切换命令以具有(PC)偏移的相对切换方式在段内直接发送。(1)由于je命令的操作码为0110100,机器代码7408H中的08H是偏移,因此发送目的地地址为0x804838c 20x8=0x8048396。Call命令的发送目标地址0x80483b1=0x804838e 50x1e表明,由于IA-32的小结束方式,偏移为000001EH的call命令系统代码的最后4个字节是偏移。Call指令机器代码共占用5个字节,因此以下指令的地址当前为指令地址0x804838e 5:(2)在jb命令中,F6H是偏移值,因此发送目标地址为0x8048390 20xf6=0x8048488。Movl指令的机器代码为10字节,前两个字节为opcode等,后8个字节为2个立即数字。因为这是小纵断面方法,所以第一次立即计数为0804A800H。也就是说,程序集指令的目的地址0x804a800,最后4个字节立即编号000001H,即程序集指令的常数0x1。(3)在jle命令中,假定7EH是操作码,16H是偏移量,在该汇编格式中,0x80492e0是发送目的地地址,因此下面的mov命令的地址为x,则x符合以下公式:0x80492e0=x0x0x16,因此x=0x80492e0=x0x16=0x800492ca。(4)jmp指令的E9H是操作码,接下来的4个字节是单数,因此偏移为FFFFFF00H,即-100H=-256。后面的sub命令的地址为0x804820b,因此jmp命令的发送目标地址为0x 804820 b0x fffff 00=0x 804820 B-0x 100=0x 804819 b。12.请参阅答案:(1)编辑说明如下:1 movb 8(% DL/rDL850 imrebp8),将x发送到DL2movl 12(,/r EAX 85燕麦m r ebp 12),传送p至EAX3 testl/r eax and r eax,确定p是否为零4如果je .L1/p为0,请转至. L1并运行5 testb $0x80,%dl /Rdl and 80H确定x的第一个位是否为零6如果je .L1/x=0,请转至. L1并运行7addb% dl,(/m r eax m r eax r dl,即*p=x)8 .L1:c语言if语句中的条件表达式可以逻辑操作多个条件,而装配代码中的指令只能执行一个逻辑操作,每个逻辑操作命令生成的标志保存在同一个EFLAGS寄存器中,因此建议执行一个逻辑命令后接条件发送指令,在EFLAGS中使用标志,然后根据其他逻辑判断和条件发送。(2)按照下面书图3.22中所示的“if () goto ”语句编写与汇编代码相对应的c语言代码。1 void comp(char x,int *p)2 .3 if (p)!=0)4 if (x0)5 * p=x;613.参考答案:1 int func(int x,int y)2 .3 int z=x * y;4if (x=-100) 5if (yx)6z=x y;7else8z=x-y;9 else if (x=16)10 z=x y;11 return z;1214.参考答案:(1)每个入口参数都按4字节边界对齐,因此参数x、y和k在进入堆栈时占用4字节。1 movw8(,% BX/r bx 85uim r ebp 8,将x传输到BX2将y发送到mov w12(% SI/rSI85 UIMrebp12),SI3

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论