32位汇编语言程序设计第6、7章习题答案.doc_第1页
32位汇编语言程序设计第6、7章习题答案.doc_第2页
32位汇编语言程序设计第6、7章习题答案.doc_第3页
32位汇编语言程序设计第6、7章习题答案.doc_第4页
32位汇编语言程序设计第6、7章习题答案.doc_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

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

文档简介

习 题62指出下面转移指令的类型(相对近转移,相对短转移,间接转移)。.DATAaddrStore DWORD ?.CODEagain:(3 instructions)jmp again; 短转移(200 instructions)jmp again ;近转移jmp addrStore; 段内间接转移jmp eax ; 段内间接转移jmp edi ; 段内或段间间接转移3代码段有以下指令:ADD EAX, EBXJNO L1JNC L2SUB EAX, EBXJNO L3JNC L4JMP SHORT L5如果EAX和EBX的内容如下:(1)EAX=0102147BH,EBX=120180DCH ;L1(2)EAX=12348756H,EBX=800080DCH ;L1(3)EAX=D0230000H,EBX=9FD0000H ;L3(4)EAX=94B70000H,EBX=B568000H ; L1指令执行完后,程序怎样转移?4假设EAX和EBX的内容是无符号数,ECX和EDX的内容是有符号数,请用比较指令实现以下判断:(1)如果EDX的内容大于ECX的内容,则转去执行L1; cmp edx, ecx jg L1(2)如果EAX的内容大于EBX的内容,则转去执行L2;cmp eax, ebx ja L2(3)如果ECX=0,则转去执行L3;cmp ecx, 0 jz L3或jecxz L3(4)EAXEBX是否会发生溢出,如果发生溢出则转去执行L4;sub eax, ebxjo L4(5)如果EBX的内容小于EAX的内容,则转去执行L5;cmp ebx, eaxjb L5(6)如果ECX的内容小于EDX的内容,则转去执行L6。cmp ecx, edx jl L65已知EAX=0000004FH,VALUE= FFFFFF38H。请指出下面每一个语句是否会引起转移?(a) cmp eax, value jl dest; N(b) cmp eax, value jb dest; Y(c) cmp eax, 04fh je dest; Y(d) cmp eax, 79 jne dest; N(e) cmp value,0 jbe dest; N(f) cmp value,-200 jge dest;Y(g) cmp eax, 200 js dest; y(h) add value,200 jz dest; N6编写程序测试STATUS中的状态:如果STATUS=0,则转去执行L0;如果D0,D3,D5位为1则转去执行L1;如果D31,D29为0则转去执行L2;如果D15,D14,D13为1,则转去执行L3。test status, FFFFHjz L0test status , 29H jne L1test status, C0000000Hjz L2test status, 00e00000Hjne L37指出下面每一个循环的循环次数:(a) mov ecx,10again: loop again10(b) mov ecx,1again: loop again1(c) mov ecx,0again: loop again4294967296(c) mov ecx,-1again: loop again4294967295习 题71子程序定义的一般格式是怎样的?子程序入口为什么常有PUSH指令、出口为什么有POP指令?下面的程序段有什么不妥吗?若有,请改正。crazyPROCpush ax ;删去xor ax,axxor dx,dxagain:add ax,bxadc dx,0inc bxinc bxloop again ;增加pop axretendp crazy ;crazy endp答:name proc ;保存寄存器 ;指令 ;恢复寄存器 ret name endppush指令和pop指令通常用于保护和恢复寄存器3下面的指令执行后的结果是什么?(3)ESP=0000F83AH,EAX=12345678HPUSH EAXPUSHW 30POP BXPOP ECXECX=? ESP=? EAX=? BX=?答:esp=000083Ah-4-2+2+4=000083AH, bx=30, ecx=12345678H, eax不变pushw和pushd助记符强制汇编器生成16位或32位代码4假设主程序中有子程序调用语句:CALL Myproc。如果这条call指令所在地址是00402000h,esp=00406000h,这条call指令执行后,堆栈中保存的返回地址是多少?ESP=?答:返回地址:00402005h esp=00405ffchcall的时候要把当前指令的下一个指令的EIP压栈,以便执行完能返回接着下面的执行。然后把EIP设置成要调用的函数的地址。也就是说,call之后,首先将下一条指令的地址保存在栈顶,然后设置EIP指向被调用程序代码开始处。5子程序返回值为EAX,在程序的入口和返回处是否可以用PUSHAD和POPAD来保存和恢复寄存器?答:不可以9请按如下子程序说明编写子程序。;子程序功能:把用ASCII码表示的两位十进制数转换为对应二进制数;入口参数:DH=十位数的ASCII码,DL=个位数的ASCII码;出口参数:AL=对应的二进制数答:decTobin proc push cxand dh,0fh ;先转换十位数shl dh,1 ;十位数乘以10(采用移位指令)mov ch,dhshl dh,1shl dh,1add dh,chand dl,0fh ;转换个位数add dh,dl ;十位数加个位数mov al,dh ;设置出口参数pop cxret decTobin endp10写一个子程序,根据入口参数AL=0/1/2,分别实现对大写字母转换成小写、小写转换成大写或大小写字母互换。欲转换的字符串在string中,用0表示结束。答:convert proc mov ebx, 1cmp al, 0 jne next ;大写变小写 A1: mov bl, stringebx inc ebxcmp bl, 41h jb A1 cmp bl, 5ah ja A1 xor bl, 20h mov stringebx,bl cmp bl, 20h jz endpro jmp A1 next: cmp al, 1 jne next1 ;小写变大写A2: mov bl, stringebx inc ebxcmp bl, 61h jb A2 cmp bl, 7ah ja A2 xor bl, 20h mov stringebx,bl cmp bl, 20h jz endpro jmp A2 next1: cmp al, 2 jne endpro ;大小写互换 A3: mov bl, stringebx inc ebxcmp bl, 41hjb A3cmp bl, 5ahjbe c1cmp bl, 61h jb A3 cmp bl, 7ah ja A3 C1: xor bl, 20h mov stringebx,bl cmp bl, 20h jz endpro jmp A2endpro: ret convert endp18编写子程序判断一个字符串是不是十进制字符串。如果是,EAX=0;如果不是,EAX=1。答:isDecDigit proc uses

温馨提示

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

评论

0/150

提交评论