2022年计算机系统第三章答案剖析.docx
《2022年计算机系统第三章答案剖析.docx》由会员分享,可在线阅读,更多相关《2022年计算机系统第三章答案剖析.docx(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选学习资料 - - - - - - - - - 习 题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 位,
2、而长度后缀为16 位的w(5)不能用 8 位寄存器作为目的操作数地址所在寄存器(6)源操作数寄存器与目操作数寄存器长度不一样(7)不存在 ESX 寄存器(8)源操作数地址中缺少变址寄存器5参考答案:表 3.12 题 5 用表src_type dst_type 机器级表示char int movsbl %al, %edx int char movb %al, %edx int unsigned movl %eax, %edx short int movswl %ax, %edx unsigned char unsigned movzbl %al, %edx char unsigned movsb
3、l %al, %edx int int movl %eax, %edx 6参考答案:(1)xptr、yptr 和 zptr 对应实参所存放的储备单元地址分别为:Rebp+16 ;(2)函数 func 的 C 语言代码如下:void funcint *xptr, int *yptr, int *zptr int tempx=*xptr; int tempy=*yptr; int tempz=*zptr; *yptr=tempx; *zptr = tempy; *xptr = tempz; Rebp+8 、Rebp+12 、名师归纳总结 - - - - - - -第 1 页,共 11 页精选学习资
4、料 - - - - - - - - - 7参考答案:(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+y 8参考答案:(1)指令功能为: Redx Redx+MReax=0x00000080+M0x8049300 ,寄存器 EDX 中内容转变;转变后的内容为以下运算的结果:00000080H+FFFFFFF0H 0000 0000 0000 0000 0000 0000 1000 0000 + 1111 1111 1111 1111 1111 1111 1111 0000 1 0000 00
5、00 0000 0000 0000 0000 0111 0000 因此,EDX 中的内容转变为0x00000070 ;依据表 3.5 可知,加法指令会影响OF、SF、ZF 和 CF 标志;OF=0,ZF=0 ,SF=0,CF=1;(2)指令功能为:Recx Recx- MReax+Rebx=0x00000010+M0x8049400,寄存器ECX 中内容转变;转变后的内容为以下运算的结果:00000010H - 80000008H 0000 0000 0000 0000 0000 0000 0001 0000 + 0111 1111 1111 1111 1111 1111 1111 1000
6、0 1000 0000 0000 0000 0000 0000 0000 1000 因此, ECX 中的内容改为 0x80000008;依据表 3.5 可知,减法指令会影响 OF、SF、ZF 和 CF 标志; OF=1,ZF=0 ,SF=1,CF=1 0=1;(3)指令功能为:Rbx Rbx or MReax+Recx*8+4,寄存器 BX 中内容转变;转变后的内容为以下运算的结果: 0x0100 or M0x8049384=0100H or FF00H 0000 0001 0000 0000 or 1111 1111 0000 0000 1111 1111 0000 0000 因此, BX
7、中的内容改为0xFF00;由 3.3.3 节可知, OR 指令执行后OF=CF=0 ;由于结果不为0,故 ZF=0 ;由于最高位为1,故 SF=1;Rdl and 0x80(4)test 指令不转变任何通用寄存器,但依据以下“ 与”操作转变标志:1000 0000 and 1000 0000 1000 0000 由 3.3.3 节可知, TEST 指令执行后 OF=CF=0;由于结果不为 0,故 ZF=0 ;由于最高位为 1,故 SF=1;(5)指令功能为:MReax+Redx MReax+Redx*32,即储备单元 0x8049380 中的内容转变为以下运算的结果: M0x8049380*3
8、2=0x908f12a8*32,也即只要将 0x908f12a8 左移 5 位即可得到结果;1001 0000 1000 1111 0001 0010 1010 10005 =0001 0001 1110 0010 0101 0101 0000 0000 名师归纳总结 因此,指令执行后,单元0x8049380 中的内容转变为0x11e25500;明显,这个结果是溢出的;但是,依据表 3.5 可知,乘法指令不影响标志位,也即并不会使OF=1;第 2 页,共 11 页- - - - - - -精选学习资料 - - - - - - - - - (6)指令功能为:Rcx R cx- 1,即 CX 寄存
9、器的内容减一;0000 0000 0001 0000 + 1111 1111 1111 1111 1 0000 0000 0000 1111 因此,指令执行后 CX 中的内容从 0x0010 变为 0x000F;由表 3.5 可知, DEC 指令会影响 OF、ZF、SF,依据上述运算结果,得到 OF=0,ZF=0 ,SF=0;9参考答案:movl 12%ebp, %ecx /Recx MRebp+12 ,将 y 送 ECX sall $8, %ecx /Recx Recx=0,就转 .L1 执行7 addb %dl, %eax /MReax MReax+Rdl,即 *p+=x 8 .L1: 由
10、于 C 语言 if 语句中的条件表达式可以对多个条件进行规律运算,而汇编代码中一条指令只能进行一种规律运算,并且在每条规律运算指令生成的标志都是存放在同一个EFLAGS 寄存器中,所以,最好在一条规律指令后跟一条条件转移指令,把 EFLAGS 中标志用完, 然后再执行另一次规律判定并依据条件进行转移的操作;(2)依据书中图 3.22 给出的“if goto ” 语句形式写出汇编代码对应的 C 语言代码如下:1 void compchar x, int *p 2 3 if p.=0 4 if x0 5 *p += x; 6 13参考答案:1 int funcint x, int y 2 3 in
11、t z = x*y ; 4 if xx 6 z = x+y ; 7 else 8 z = x-y ; 9 else if x=16 10 z = x &y ; 11 return z; 12 14参考答案:名师归纳总结 (1)每个入口参数都要按4 字节边界对齐,因此,参数x、y 和 k 入栈时都占4 个字节;第 4 页,共 11 页1 movw 8%ebp, %bx /Rbx MRebp+8 ,将 x 送 BX 2 movw 12%ebp, %si /Rsi MRebp+12 ,将 y 送 SI 3 movw 16%ebp, %cx /Rcx MRebp+16 ,将 k 送 CX 4 .L1:
12、 - - - - - - -精选学习资料 - - - - - - - - - 5 movw %si, %dx /Rdx Rsi ,将 y 送 DX 6 movw %dx, %ax /Rax Rdx ,将 y 送 AX 16 位送 DX 7 sarw $15, %dx /Rdx Rdx15 ,将 y 的符号扩展8 idiv %cx /Rdx Rdx-ax Rcx 的余数,将y%k 送 DX /Rax Rdx-ax Rcx 的商,将 y/k 送 AX 9 imulw %dx, %bx /Rbx Rbx*Rdx,将 x* y%k 送 BX 10 decw %cx /Rcx Rcx-1 ,将 k-1
13、送 CX 11 testw %cx, %cx /Rcx and Rcx ,得 OF=CF=0 ,负数就 SF=1,零就 ZF=1 12 jle .L2 /如 k 小于等于 0,就转 .L2 13 cmpw %cx, %si /Rsi - Rcx ,将 y 与 k 相减得到各标志14 jg .L1 /如 y 大于 k,就转 .L1 15 .L2: 16 movswl %bx, %eax / Reax Rbx ,将 x*y%k 送 AX (2)被调用者储存寄存器有 BX 、SI,调用者储存寄存器有 AX 、CX 和 DX ;在该函数过程体前面的预备阶段,被调用者储存的寄存器EBX 和 ESI 必需
14、储存到栈中;( 3)由于执行第 8 行除法指令前必需先将被除数扩展为 32 位,而这里是带符号数除法,因此,采纳算术右移以扩展 16 位符号,放在高 16 位的 DX 中,低 16 位在 AX 中;15参考答案:1 int f1unsigned x x 中有奇数个1,就返回2 3 int y = 0 ; 4 while x.=0 5 y =x ; 6 x=1 ; 7 8 return y&0x1 ; 9 函数 f1 的功能返回: x x1 x2 . & 0x1 ,因此 f1 用于检测 x 的奇偶性,当为 1,否就返回0;16参考答案:函数 sw 只有一个入口参数x,依据汇编代码的第25 行指令
15、知,当x+37 时转标号 .L7 处执行,否就,依据跳转表中的地址转移执行,x 与跳转目标处标号的关系如下:x+3=0:.L7 x+3=1:.L2 x+3=2:.L2 x+3=3:.L3 x+3=4:.L4 x+3=5:.L5 x+3=6:.L7 x+3=7:.L6 由此可知, switch x 中省略的处理部分结构如下:case -2: case -1: / .L2 标号处指令序列对应的语句 break; case 0: 名师归纳总结 - - - - - - -第 5 页,共 11 页精选学习资料 - - - - - - - - - break; case 1: / .L3 标号处指令序列对
16、应的语句 . break; case 2: break; case 4: break; default: / .L4 标号处指令序列对应的语句/ .L5 标号处指令序列对应的语句/ .L6 标号处指令序列对应的语句/ .L7 标号处指令序列对应的语句17参考答案:依据第 2、3 行指令可知,参数 a 是 char 型,参数 p 是指向 short 型变量的指针;依据第 4、5 行指令可知,参数b 和 c 都是 unsigned short 型,依据第 6 行指令可知, test 的返回参数类型为 unsigned int;因此, test 的原型为:unsigned int testchar
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022 计算机系统 第三 答案 剖析
限制150内