收藏 分享(赏)

32位汇编语言程序设计第6、7章习题答案.doc

上传人:jmydc 文档编号:6758481 上传时间:2019-04-22 格式:DOC 页数:6 大小:54KB
下载 相关 举报
32位汇编语言程序设计第6、7章习题答案.doc_第1页
第1页 / 共6页
32位汇编语言程序设计第6、7章习题答案.doc_第2页
第2页 / 共6页
32位汇编语言程序设计第6、7章习题答案.doc_第3页
第3页 / 共6页
32位汇编语言程序设计第6、7章习题答案.doc_第4页
第4页 / 共6页
32位汇编语言程序设计第6、7章习题答案.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

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=12

2、0180DCH ;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, ecxjg L1(2)如果 EAX 的内容大于 EBX 的内容,则转去执行 L2;cmp eax, ebxja L2(3)如果 ECX=0,则转去执行

3、L3;cmp ecx, 0jz L3或jecxz L3(4)EAX EBX 是否会发生溢出,如果发生溢出则转去执行 L4;sub eax, ebxjo L4(5)如果 EBX 的内容小于 EAX 的内容,则转去执行 L5;cmp ebx, eaxjb L5(6)如果 ECX 的内容小于 EDX 的内容,则转去执行 L6。cmp ecx, edxjl L65已知 EAX=0000004FH,VALUE= FFFFFF38H。请指出下面每一个语句是否会引起转移?(a) cmp eax, valuejl dest; N(b) cmp eax, valuejb dest; Y(c) cmp eax,

4、04fhje dest ; Y(d) cmp eax, 79jne dest; N(e) cmp value,0jbe dest; N(f) cmp value,-200jge dest ;Y(g) cmp eax, 200js dest; y(h) add value,200jz dest; N6编写程序测试 STATUS 中的状态:如果 STATUS=0,则转去执行 L0;如果D0,D 3,D 5 位为 1 则转去执行 L1;如果 D31,D 29 为 0 则转去执行 L2;如果D15,D 14,D 13 为 1,则转去执行 L3。test status, FFFFHjz L0test s

5、tatus , 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 指 令 、

6、 出 口 为什 么 有 POP 指 令 ? 下 面 的 程 序 段 有 什 么 不 妥 吗 ? 若 有 , 请 改 正 。crazy PROCpush ax ;删去xor ax,axxor dx,dxagain: add ax,bxadc dx,0inc bxinc bxloop again;增加 pop axretendp crazy ;crazy endp答:name proc;保存寄存器;指令;恢复寄存器retname endppush 指令和 pop 指令通常用于保护和恢复寄存器3下面的指令执行后的结果是什么?(3)ESP=0000F83AH,EAX=12345678HPUSH EAX

7、PUSHW 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=?答:返回地址:00402005hesp=00405ffchcall 的时候要把当前指令的下一个指令的 EIP 压栈

8、,以便执行完能返回接着下面的执行。然后把 EIP 设置成要调用的函数的地址。也就是说,call 之后,首先将下一条指令的地址保存在栈顶,然后设置 EIP 指向被调用程序代码开始处。5子程序返回值为 EAX,在程序的入口和返回处是否可以用 PUSHAD 和 POPAD 来保存和恢复寄存器?答:不可以9请按如下子程序说明编写子程序。;子程序功能:把用 ASCII 码表示的两位十进制数转换为对应二进制数;入口参数:DH=十位数的 ASCII 码,DL=个位数的 ASCII 码;出口参数:AL=对应的二进制数答:decTobin procpush cxand dh,0fh ;先转换十位数shl dh,

9、1 ;十位数乘以10(采用移位指令)mov ch,dhshl dh,1shl dh,1add dh,chand dl,0fh ;转换个位数add dh,dl ;十位数加个位数mov al,dh ;设置出口参数pop cxretdecTobin endp10写一个子程序,根据入口参数 AL=0/1/2,分别实现对大写字母转换成小写、小写转换成大写或大小写字母互换。欲转换的字符串在 string 中,用 0 表示结束。答:convert procmov ebx, 1cmp al, 0jne next;大写变小写A1: mov bl, stringebxinc ebxcmp bl, 41hjb A1

10、cmp bl, 5ahja A1xor bl, 20hmov stringebx,blcmp bl, 20hjz endprojmp A1next: cmp al, 1jne next1;小写变大写A2: mov bl, stringebxinc ebxcmp bl, 61hjb A2cmp bl, 7ahja A2xor bl, 20hmov stringebx,blcmp bl, 20hjz endprojmp A2next1:cmp al, 2jne endpro;大小写互换A3: mov bl, stringebxinc ebxcmp bl, 41hjb A3cmp bl, 5ahjb

11、e c1cmp bl, 61hjb A3cmp bl, 7ahja A3C1: xor bl, 20hmov stringebx,blcmp bl, 20hjz endprojmp A2endpro:retconvert endp18编写子程序判断一个字符串是不是十进制字符串。如果是,EAX=0;如果不是,EAX=1。答:isDecDigit proc uses edx,char:byte;判断是否为十进制字符;入口参数 char=输入字符的 ASCII 码;出口参数 eax=0 是十进制字符,eax=1 不是十进制字符xor eax, eaxmov edx, charcmp edx,0jb L1cmp edx,9jbe L2L1:mov eax, 1L2:retisDecDigit endp

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报