下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
深⼊理解计算机系统第三版第三章家庭作业答案3.58longdecode2(longx,longy,longz){intret;y=y-z;x=x*y;ret=y;ret<<=63;ret>>=63;returnret^x;}算术左移63再右移63,得到的要么是全0,要么全1,取决于y的最低位3.59画了个简单的图便于理解,要不很难说明⽩,图中每个XY都是64位现在分析汇编代码movqrdx,raxcqto//rdx为x//rdx被设置为rax的符号位扩展,也就是要么0要么-1(ffffffff),说⽩了现在rdx是x_h,rax是x_lmovqrsi,rcxsarq$63,rcximulqrax,rcximulqrsi,rdxaddqrdx,rcxmulqrsi//rsi为y_l//rcx为y_h,也是要么0要么-1//rcx=y_h*x_l//rdx=x_h*y_l//将前⾯两个结果相加//x_l*y_l,得到,rax为低64位结果,rdx为进位addqrcx,rdx//进位rdx的值加上之前计算得到的两个⾼位结果,得到最终的⾼64位movqrax,(rdi)//低64位结果赋给destmovqrdx,8(rdi)//⾼64位结果赋给dest+8开始地址ret3.60longloop(longx,intn){longresult=0;longmask;for(mask=1;maks!=0;mask=mask<<(n%256)){result|=(x+mask);}returnresult;}程序都写出来了,下⾯ABCDE是个问题就明了了,不再赘叙3.61搞清楚函数在⼲嘛就像简单呢,xp地址为空,就返回0,要么返回地址⾥⾯的值也就是*xp,但是xp有可能为空,那么⽤*xp就存在风险所以,只能操作xp,不操作*xp,代码如下:longcread_alt(long*xp){longx=0;long*p=xp?xp:&x;return*p;}3.62MODE_A:result=*p2;*p2=*p1;break;MODE_B:result=*p1+*p2;*p1=result;break;MODE_C:*p1=59;result=*p2;break;MODE_D:*p1=*p2;result=27;break;MODE_E:result=27;break;default:result=12;break;3.63intswitch_prob(intx,intn){intresult=x;switch(n){case60:case62:result*=8;break;case63:result>>=3;break;case64:result<<=4;result-=x;x=result;case65:x*=x;case61:default:result=x+0x4b;break;}returnresult;}
3.64A:&A[i}[j][k]=Xa+L(i*S*T+j*T+k)B:可以很容易看出rdx=65i+13j+k,所以T=13;S=5,R=3640/(8*65)=73.65A:rdxB:raxC:8M=120,M=153.66NR(n)=3nNC(n)=1+4n不是1+4n再<<3这是乘以8是因为long每个8字节3.67A:调⽤process之前,栈结构:(调⽤进⼊时会多压⼊⼀个返回地址,要注意区别,rsp会减8)B:结构体strAsCDE,其实看图也看的出来,只是区别在于多压进去⼀个返回地址,所以图中的rsp都要少8,来访问F:允许我略3.68这题关键在于理解数据对齐,这两个结构体都是8字节对齐⾸先t偏移位8,知道1<=B<=8然后u偏移32,知道32-8-4=20,头两个short(4字节)和int对齐8字节,剩下的16字节占了两排,7<=A<=10最后184偏移是y,int两个两个占⼀排(⼀排8字节),最后⼀排可能满也可能缺⼀,所以可能有184/4=46,或45个int,那么结合前⾯的知道B=5,A=9;3.69注意还是8字节对齐⾸先0x120=288,偏移位lastintfirst和浪费的4字节占⼀排,那么中间288-8=280字节位结构体数组a然后bp+40*i+8为结构体的初始地址也就是ap的地址也是ap->idx的地址,这⾥的8是intfirst和4字节剩余的这⾥我们知道了每个结构体是40字节,那么cnt=280/40=7然后注意到movslq指令,猜测idx为int,x为long数组最后0x10+rax+rdx*8这⾥乘8说明了是long型,变形⼀下,8+bp+40*i+8+rdx*8,这⾥rdx就是idx,8+bp+40*i什么意思上⾯已经解释了,再加8是假的intidx和剩余的4字节那么long数组的个数是多少,40-8/8=4所以:a_struct{intidx;longx[4];}3.70A:0,8,0,8B:16voidproc(unionele*up){up->e2.x=*(up->e2.next)-up->e1.y;}3.71不可能申请⼀个⽆穷⼤的空间给你⼀次读进来,所以只能⼀次读有限个字节分多次读取,然后⼀个个输出voidgood_echo(){constintBufferSize=0x8;charbuf[BufferSize];inti;while(fgets(buf,BufferSize,stdin)!=NULL){for(i=0;buf[i];i++)putchar(buf[i]);if(i<BufferSize-1)break;}return;}3.72A:n为奇数的时候取8n+24,为偶数取8n+16,向16取整数倍B:向上取16的整数倍C:n=0,s1=16时候,e1最⼤为16
n=1,s1=1时候,e1最⼩为1D:都是16对齐3.73vxorpsxmm0,xmm0,xmm0movl$3,eaxvucomissxmm0,xmm1//cmpx:0ja.L1//⼤于0je.L2//等于0jb.L3//⼩于0jp.L4.L3:subl$1,eax.L2:subl$1,eax.L1:subl$1,eax.L4:rep;ret3.74vxorpsxmm0,xmm0,xmm0movl$3,eaxmovl$2,ebxmovl$1,ecxmovl$0,edxvucomissxmm0,xmm1//cmpx:0cmovaebx,eax//⼤于0cmoveecx,eax
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医院防疫绩效考核制度
- 国企风控制度
- 经络学护理的社会推广与应用
- 公证处绩效考核制度
- 审计政务服务工作制度范本
- 公司审计档案保管制度
- 4s店经员工绩效考核制度范本
- 2026年及未来5年市场数据中国机动车检测行业市场发展数据监测及投资前景展望报告
- 内审审计食堂购卖制度
- 乡镇慢性病绩效考核制度
- DB32∕T 5167-2025 超低能耗建筑技术规程
- 2026年湖南商务职业技术学院单招职业技能测试必刷测试卷及答案1套
- 雨课堂学堂在线学堂云《科学研究方法与论文写作(复大)》单元测试考核答案
- 高考语文二轮复习高中语文选用变换句式练习题含答案
- 异地升学协议书范本
- 水利工程项目法人保证安全生产措施方案
- 《AIGC文案策划与写作》-课程标准
- 企业管理顶层设计方案
- 2025年军事基础知识试题及答案
- 雨课堂在线学堂《资治通鉴》导读课后作业单元考核答案
- 2025年南京市事业单位招聘考试综合类专业能力测试试卷(管理类)真题
评论
0/150
提交评论