- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机系统第三章答案剖析
习 题
..’,不一致
(3)目的操作数不能是立即数寻址
(4)操作数位数超过16位,而长度后缀为16位的‘w’
(5)不能用8位寄存器作为目的操作数地址所在寄存器
(6)源操作数寄存器与目操作数寄存器长度不一致
(7)不存在ESX寄存器
(8)源操作数地址中缺少变址寄存器
5..]+8、R[ebp]+12、
R[ebp]+16。
(2)函数func的C语言代码如下:
void func(int *xptr, int *yptr, int *zptr)
{
int tempx=*xptr;
int tempy=*yptr;
int tempz=*zptr;
*yptr=tempx;
*zptr = tempy;
*xptr = tempz;
}
7..:R[edx]←R[edx]+M[R[eax]]=0M[0x8049300]
因此,EDX中的内容改变为0根据表3.5可知,加法指令会影响OF、SF、ZF和CF标志。OF=0,ZF=0,SF=0,CF=1。
(2)指令功能为:R[ecx]←R[ecx]-M[R[eax]+R[ebx]]=0M[0x8049400]
因此,ECX中的内容改为0根据表3.5可知,减法指令会影响OF、SF、ZF和CF标志。OF=1,ZF=0,SF=1,CF=1(0=1。
(3)指令功能为:R[x]←R[bx] or M[R[eax]+R[ecx]*8+4],寄存器BX中内容改变。改变后的内容为以下运算的结果:0x0100 or M[0x8049384]=0100H or FF00H
因此,BX中的内容改为0xFF00。由3.3.3节可知,OR指令执行后OF=CF=0;因为结果不为0,故ZF=0;因为最高位为1,故SF=1。
(4)test指令不改变任何通用寄存器,但根据“与”操作改变标志R[dl] and 0x80
由3.3.3节可知,TEST指令执行后OF=CF=0;因为结果不为0,故ZF=0;因为最高位为1,故SF=1。
(5)指令功能为:M[R[eax]+R[edx]]←M[R[eax]+R[edx]]*32,即存储单元0x8049380中的内容改变为以下运算的结果:M[0x8049380]*32*32,也即只要将0x908f12a8左移5位即可得到结果。
1001 0000 1000 1111 0001 0010 1010 10005
=0001 0001 1110 0010 0101 0101 0000 0000
因此,指令执行后,单元0x8049380中的内容改变为 ←R[cx]-1,即CX寄存器的内容减一。
因此,指令执行后CX中的内容从0x0010变为0x000F。由表3.5可知,DEC指令会影响OF、ZF、SF,根据上述运算结果,得到OF=0,ZF=0,SF=0。
.]←M[R[ebp]+12],将y送ECX
sall $8, %ecx //R[ecx]←R[ecx]8,将y*256送ECX
movl 8(%ebp), %eax //R[eax]←M[R[ebp]+8],将x送EAX
movl 20(%ebp), %edx //R[edx]←M[R[ebp]+20],将k送EDX
imull %edx, %eax //R[eax]←R[eax]*R[edx],将x*k送EAX
movl 16(%ebp), %edx //R[edx]←M[R[ebp]+16],将z送EDX
andl $65520, %edx //R[edx]←R[edx] and 65520,将z0xFFF0送EDX
addl %ecx, %edx //R[edx]←R[edx] + R[ecx],将z0xFFF0+y*256送EDX
subl %edx, %eax //R[eax]←R[eax]-R[edx],将x*k-(z0xFFF0+y*256)送EAX
根据以上分析可知,第3行缺失部分为:
3 int v = x*k-(z0xFFF0+y*256) ;
10.]+20开始的4个字节为高32位字节,记为yh;R[ebp]+16开始的4个字节为低32位字节,记为yl。根据第4行为无符号数乘法指令,得知y的数据类型num_type为unsigned long long。
movl 12(%ebp), %eax //R[eax]←M[R[ebp]+12],将x送EAX
movl 20(%ebp), %ecx //R[ecx]←M[R[ebp]+20],将yh送ECX
imull %eax, %ecx //R[ecx]←R[ecx]
文档评论(0)