32位汇编语言习题及答案(全部)(钱晓捷版)ppt课件.ppt

上传人:小飞机 文档编号:1946162 上传时间:2022-12-27 格式:PPT 页数:115 大小:1.30MB
返回 下载 相关 举报
32位汇编语言习题及答案(全部)(钱晓捷版)ppt课件.ppt_第1页
第1页 / 共115页
32位汇编语言习题及答案(全部)(钱晓捷版)ppt课件.ppt_第2页
第2页 / 共115页
32位汇编语言习题及答案(全部)(钱晓捷版)ppt课件.ppt_第3页
第3页 / 共115页
32位汇编语言习题及答案(全部)(钱晓捷版)ppt课件.ppt_第4页
第4页 / 共115页
32位汇编语言习题及答案(全部)(钱晓捷版)ppt课件.ppt_第5页
第5页 / 共115页
点击查看更多>>
资源描述

《32位汇编语言习题及答案(全部)(钱晓捷版)ppt课件.ppt》由会员分享,可在线阅读,更多相关《32位汇编语言习题及答案(全部)(钱晓捷版)ppt课件.ppt(115页珍藏版)》请在三一办公上搜索。

1、32位汇编语言习题解答,课件制作: 钱晓捷,钱晓捷,32位汇编语言程序设计,机械工业出版社,第1章习题:汇编语言基础,1.1 简答题(1、3、6、7、8)1.2 判断题(1、6、7、8、9)1.3 填空题(3、4、5、7、10)1.9、1.13、1.15、1.16,3,1.1 简答题-1,(1)哪个处理器的指令系统成为Intel 80 x86系列处理器的基本指令集?8086(3)什么是通用寄存器?一般指处理器最常使用的整数寄存器,可用于保存整数数据、地址等(6)最高有效位MSB是指哪一位?数据的最高位,例如对8、16、32位数据,MSB依次指D7、D15和D31位,4,1.1 简答题-2,(7

2、)汇编语言中的标识符与高级语言的变量和常量名的组成原则有本质的区别吗?没有(8)汇编语言的标识符大小写不敏感意味着什么?表示字母大小写不同、但表示同一个符号,5,1.2 判断题,1)EAX也被称为累加器,因为它使用最频繁。对,EAX中的A来自英文累加器(Accumulator)6)处理器的传送指令MOV属于汇编语言的执行性语句对7)汇编语言的语句由明显的4部分组成,不需要分隔符区别。错,使用了分隔符才有了明显的4部分8)MASM汇编语言的注释用分号开始,不能用中文分号对,源程序中的分隔符以及各种标识符都是英文9)程序终止执行也就意味着汇编结束,所以两者含义相同。错,两者完全是两个概念,6,1.

3、3 填空题-1,(3)IA-32处理器有8个32位通用寄存器,其中EAX,_,_和EDX,可以分成16位和8位操作;还有另外4个是_,_,_,和_。EBX,ECX,ESI,EDI,EBP,ESP(4)寄存器EDX是_位的,其中低16位的名称是_,还可以分成两个8位的寄存器,其中D0D7和D8D15部分可以分别用名称_和_表示。32,DX,DL,DH(5)IA-32处理器有_个段寄存器,它们都是_位的。6,16,7,1.3 填空题-2,(7)逻辑地址由_和_两部分组成。代码段中下一条要执行的指令由CS和_寄存器指示,后者在实地址模型中起作用的仅有_寄存器部分。段基地址,偏移地址,EIP,IP(1

4、0)MASM要求汇编语言源程序文件的扩展名是_,汇编产生扩展名为OBJ的文件被称为_文件,编写32位Windows应用程序应选择_存储模型。ASM,目标模块,FLAT,8,习题1.9,IA-32处理器有哪三类基本段,各是什么用途?解答:代码段:存放程序的指令代码数据段:存放当前运行程序所用的数据堆栈段:主存中堆栈所在的区域,9,习题1.13,汇编语言语句有哪两种,每种语句由哪4个部分组成解答:汇编语句有两种执行性语句(处理器指令)说明性语句(伪指令)每个语句有4部分组成标号指令助记符操作数或参数注释,10,习题1.15,MASM汇编语言中,下面哪些是程序员可以使用的自定义标识符。FFH,DS,

5、Again,next,data,h_ascii,6364b,flat解答:FFH,Again,next,h_ascii其他符号错误的原因:DS是数据段寄存器名6364b是数字开头data是汇编语言使用预定义符号,表示数据段地址flat是表示平展存储模型的关键字,11,习题1.16,汇编语言程序的开发有哪4个步骤,分别利用什么程序完成、产生什么输出文件。解答:汇编语言程序的开发有4个步骤:编辑:用文本编辑器形成一个以ASM为扩展名的源程序文件。汇编:用汇编程序将ASM文件转换为OBJ模块文件。连接:用连接程序将一个或多个目标文件链接成一个EXE或COM可执行文件。调试:用调试程序排除错误,生成正

6、确的可执行文件。,第2章习题:数据表示和寻址,2.1 简答题(2、3、4、7、8)2.2 判断题(2、4、8、9、10)2.3 填空题(1、2、3、8、9)2.10、2.14、2.15、2.17,13,2.1 简答题-1,(2)字符“F”和数值46H作为MOV指令的源操作数有区别吗?没有,因为字符“F”的ASCII码就是数值46H(3)为什么可以把指令“MOV EAX, (3467H)*3”中的数值表达式看成是常量?汇编程序在汇编过程中对数值表达式计算,得到一个确定的数值,故称数值表达式为常量(4)汇编语言为什么规定十六进制数若以AF开头,需要在前面加个0?以便与标识符区别,因为标识符要求以字

7、母(或特殊符号)开头,14,2.1 简答题-2,(7)为什么将查找操作数的方法称为数据寻“址”方式?指令的操作数需要通过存储器地址或I/O地址,才能查找到数据本身,故称数据寻址方式(8)为什么变量VAR在指令“MOV EAX, VAR”中表达直接寻址?因为这里的变量名VAR实际上表达了从变量所存放的主存单元,即地址,15,2.2 判断题-1,(2)常用的BCD码为8421 BCD码,其中的8表示D3位的权重。对(4)用“BYTE”和“DWORD”定义变量,如果初值相同,则占用的存储空间也一样多。错。用BYTE只占一个存储单元,而DWORD要占4个存储单元(8)立即数寻址只会出现在源操作数中。对

8、,16,2.2 判断题-2,(9)存储器寻址方式的操作数当然在主存了。对(10)指令“MOV EAX, VAR+2”与“MOV EAX, VAR2”功能相同。对,仅是不同的形式罢了,17,2.3 填空题-1,(1)计算机中有一个“01100001”编码。如果把它认为是无符号数,它是十进制数_;如果认为它是BCD码,则表示真值_;又如果它是某个ASCII码,则代表字符_。97,61,小写字母a(2)C语言用“n”表示让光标回到下一行首位,在汇编语言中需要输出两个控制字符:一个是回车,其ASCII码是_,它将光标移动到当前所在行的首位;另一个是换行,其ASCII码是_,它将光标移到下一行。0DH(

9、13),0AH(10),18,2.3 填空题-2,(3)定义字节变量的伪指令助记符是_,获取变量名所具有的偏移地址的操作符是_。BYTE,OFFSET(8)指令“MOV EAX, OFFSET MSG”的目的操作数和源操作数分别采用_和_寻址方式。寄存器寻址,立即数寻址(9)已知ESI04000H,EBX20H,指令“MOV EAX, ESI+EBX*2+8”中访问的有效地址是_。04000H20H2804048H,19,习题2.10-1,按照如下要求定义变量或符号常量:(1) my1b为字符串变量:Personal Computermy1bbyte Personal Computer(2)

10、my2b为用十进制数表示的字节变量:20my2bbyte 20(3) my3b为用十六进制数表示的字节变量:20my3bbyte 14h(4) my4b为用二进制数表示的字节变量:20my4bbyte 00010100b,20,习题2.10-2,按照如下要求定义变量或符号常量:(5) my5w为20个未赋值的字变量my5wword 20 dup(?)(6) my6c为100的常量my6c= 100(7) my7c表示字符串:Personal Computermy7cequ ,21,习题2.14,按照如下输出格式,在屏幕上显示ASCII表编程在数据段直接构造这样的表格、填写相应ASCII代码值(

11、不是字符本身),然后使用字符串显示子程序DISPMSG实现显示,22,习题2.14解答1,.datatablebyte |0 1 2 3 4 5 6 7 8 9 A B C D E F, 13,10byte -+-, 13,10byte 20 |,20h,20h,21h,20h,22h,20h,23h,20h, 24h,20h,25h,20h,26h,20h,27h,20h,28h,20h,29h,20hbyte 2ah,20h,2bh,20h,2ch,20h,2dh,20h,2eh,20h, 2fh,20h,13,10byte 30 |,30h,20h,31h,20h,32h,20h,33h

12、,20h, 34h,20h,35h,20h,36h,20h,37h,20h,38h,20h,39h,20hbyte 3ah,20h,3bh,20h,3ch,20h,3dh,20h,3eh,20h, 3fh,20h,13,10byte 0,23,习题2.14解答2,ca=2cas=20hbyte ca,0 |,cas,20h,cas+1,20h,cas+2,20h, cas+3,20h,cas+4,20h,cas+5,20h,cas+6,20h,cas+7,20hbyte cas+8,20h,cas+9,20h,cas+0ah,20h,cas+0bh,20h, cas+0ch,20h,cas+0

13、dh,20h,cas+0eh,20h,cas+0fh,20h,13,10cas=cas+10hca=ca+1byte ca,0 |,cas,20h,cas+1,20h,cas+2,20h, cas+3,20h,cas+4,20h,cas+5,20h,cas+6,20h,cas+7,20hbyte cas+8,20h,cas+9,20h,cas+0ah,20h,cas+0bh,20h, cas+0ch,20h,cas+0dh,20h,cas+0eh,20h,cas+0fh,20h,13,10,24,习题2.15,数据段有如下定义:vardword 12345678h现以字节为单位按地址从低到高的

14、顺序,写出这个变量内容。var变量的内容:78H、56H、34H、12H并说明如下指令的执行结果:mov eax,var;EAX12345678Hmov bx,word ptr var;BX5678Hmov cx,word ptr var+2;CX1234Hmov dl,byte ptr var;DL78Hmov dh,byte ptr var+3;DH12H,25,习题2.17,说明源操作数的寻址方式,(1)mov edx,1234h立即数(2)mov edx,vard直接(3)mov edx,ebx寄存器(4)mov edx,ebx寄存器间接(5)mov edx,ebx+1234h寄存器相

15、对(6)mov edx,vardebx寄存器相对(7)mov edx,ebx+edi基址变址(8)mov edx,ebx+edi+1234h相对基址变址(9)mov edx,vardesi+edi相对基址变址(10)mov edx,ebp*4带比例寻址,第3章习题:通用数据处理指令,3.1 简答题(1、2、5、7、9)3.2 判断题(1、4、5、7、10)3.3 填空题(2、4、5、8、10)3.4、3.6、3.11、3.14、3.163.21、3.22,27,3.1 简答题-1,(1)如何修改“MOV ESI, WORD PTR 250”语句使其正确?删除“WORD PTR”即可(2)为什么

16、说“XCHG EDX,CX”是一条错误的指令?源、目标寄存器位数不同,不能用该指令进行数据交换(5)执行了一条加法指令后,发现ZF1,说明结果是什么?(5)表明运算结果为0,28,3.1 简答题-2,(7)大小写字母转换使用了什么规律?大小写字母转换利用它们的ASCII码相差20H(9)除法指令“DIV ESI”的被除数是什么?被除数64位,在EDX和EAX中,EDX保存高32位、EAX保存低32位,29,3.2 判断题-1,(1)指令“MOV EAX,0”使EAX结果为0,所以标志ZF1。错,MOV指令不影响标志(4)虽然ADD指令和SUB指令执行后会影响标志状态,但执行前的标志并不影响它们

17、的执行结果。对(5)80减90(8090)需要借位,所以执行结束后,进位标志CF1。对,减法时借位也用CF标志反映,30,3.2 判断题-2,(7)无符号数在前面加零扩展,数值不变;有符号数前面进行符号扩展,位数加长一位、数值增加一倍。错,符号扩展也不改变数值大小(10)SHL指令左移一位,就是乘10。错,左移一位,相当于乘2。这里的位是二进制比特位,31,3.3 填空题-1,(2)指令“POP EDX”的功能也可以用MOV和ADD指令实现,依次应该是_和_指令。MOV EDX,ESP,ADD ESP,4(4)进行8位二进制数加法:BAH6CH,8位结果是_,标志PF_。如果进行16位二进制数

18、加法:45BAH786CH,16位结果是_,标志PF_。26H,0,BE26H,0,32,3.3 填空题-2,(5)已知AX98H,执行“NEG AX”指令后,AX_,标志SF_。68H,0(8)指令“XOR EAX, EAX”和“SUB EAX, EAX”执行后,EAX_,CFOF_。而指令“MOV EAX, 0”执行后,EAX_,CF和OF没有变化。0,0,0(10)欲将EDX内的无符号数除以16,使用指令“SHR EDX, _”,其中后一个操作数是一个立即数。4,33,习题3.4,请给每种组合各举一个实例(1)mov reg, imm(2)mov mem, imm(3)mov reg,

19、reg(4)mov mem, reg(5)mov seg, reg(6)mov reg, mem(7)mov seg, mem(8)mov reg, seg(9)mov mem, seg,34,习题3.6,使用MOV指令实现交换指令“XCHG EBX,EDI”功能。解答:mov eax,ebxmov ebx,edimov edi,eax,35,习题3.11-1,执行如下程序片断,说明每条指令的执行结果(1)mov eax,80h;EAX80Hadd eax,3;EAX83H,CF0,SF0add eax,80h;EAX103H,CF0,OF0adc eax,3;EAX106H,CF0,ZF0,

20、36,习题3.11-2,执行如下程序片断,说明每条指令的执行结果(2)mov eax,100;EAX100(64H)add ax,200;EAX300(12CH),CF0(3)mov eax,100;EAX100(64H)add al,200;EAX44(2CH),CF1(包含256的进位含义:25644300),37,习题3.11-3,执行如下程序片断,说明每条指令的执行结果(4)mov al,7fh;AL7FHsub al,8;AL77H,CF0,SF0sub al,80h;ALF7H,CF1,OF1sbb al,3;ALF3H,CF0,ZF0,38,习题3.14-1,请分别用一条汇编语言

21、指令完成如下功能:(1)把EBX寄存器和EDX寄存器的内容相加,结果存入EDX寄存器。add edx,ebx(2)用寄存器EBX和ESI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL中。add al,ebx+esi,39,习题3.14-2,请分别用一条汇编语言指令完成如下功能:(3)用EBX和位移量0B2H的寄存器相对寻址方式把存储器中的一个双字和ECX寄存器的内容相加,并把结果送回存储器中。 add ebx+0b2h,ecx(4)将32位变量VARD与数3412H相加,并把结果送回该存储单元中。 add varw,3412h(5)把数0A0H与EAX寄存器的内容

22、相加,并把结果送回EAX中。 add eax,0a0h,40,习题3.16-1,执行如下程序片断,说明每条指令的执行结果(1)mov esi,10011100b;ESI 9CHand esi,80h;ESI 80Hor esi,7fh;ESI FFHxor esi,0feh;ESI 01H(2)mov eax,1010b;EAX 1010B(可有前导0)shr eax,2;EAX 0010B,CF1shl eax,1;EAX 0100B,CF0and eax,3;EAX 0000B,CF0,41,习题3.16-2,执行如下程序片断,说明每条指令的执行结果(3)mov eax,1011b;EAX

23、 1011B(可有前导0)rol eax,2;EAX 101100B,CF0rcr eax,1;EAX 10110B,CF0or eax,3;EAX 10111B,CF0(4)xor eax,eax;EAX0,CF0,OF0;ZF1,SF0,PF1,42,习题3.21,如下程序片段实现EAX乘以某个数X的功能,请判断X?请使用一条乘法指令实现上述功能。mov ecx, eaxshl eax, 3lea eax, eax+eax*8sub eax, ecx解答:8*8+8-171imul eax, 71,43,习题3.22,请使用移位和加减法指令编写一个程序片段计算:EAX21,假设乘积不超过3

24、2位。提示:21242220。解答:mov ebx,eax;EBXEAX20shl ebx,2;EBXEAX22add eax,ebx;EAXEAX(2220)shl ebx,2;EBXEAX24add eax,ebx;EAXEAX(242220),第4章习题:程序结构,4.1 简答题(2、5、6、9、10)4.2 判断题(2、4、6、7、10)4.3 填空题(2、3、4、5、6)4.4、4.7、4.15、4.17、4.27、4.29,45,4.1 简答题-1,(2)数据的直接寻址和指令的直接寻址有什么区别?数据的直接寻址给出数据所在的存储器地址,指令的直接寻址给出指令所在的存储器地址。(5)

25、什么是奇偶校验?数据通信时,数据的某一位用做传输数据的奇偶校验位,数据中包括校验位在内的“1”的个数恒为奇数,就是奇校验;恒为偶数,就是偶校验(6)助记符JZ和JE为什么表达同一条指令?两个数相减,差值为0(JZ)与两个数相等(JE)是一个含义,46,4.1 简答题-2,(9)如果循环体的代码量远超过128个字节,还能用LOOP指令实现计数控制循环吗?不能,因为LOOP指令的目标地址采用相对短转移,只能在128127字节之间循环(10)什么是“先循环、后判断”循环结构?指先执行循环体,然后判断是否继续循环的结构,这种结构通常至少执行一次循环体,47,4.2 判断题,2)指令的相对寻址都是近转移

26、。对4)JMP指令对应高级语言的GOTO语句,所以不能使用错,需要使用6)JA和JG指令的条件都是“大于”,所以是同一个指令的两个助记符。错,JA针对无符号数,JG针对有符号数7)JC和JB的条件都是CF1,所以是同一条指令。对。无符号小于(JB)必然借位(JC)10)若ECX0,则LOOP指令和JECX指令都发生转移。对,48,4.3 填空题-1,(2)MASM给短转移、近转移和远转移定义的类型名依次是_、_和_。SHORT,NEAR,FAR(3)假设在平展存储模型下,EBX1256H,双字变量TABLE的偏移地址是20A1H,线性地址32F7H处存放3280H,执行指令“JMP EBX”

27、后EIP_,执行指令“JMP TABLEEBX”后EIP_。1256H,3280H,49,4.3 填空题-2,(4)“CMP EAX,3721H”指令之后是JZ指令,发生转移的条件是EAX_,此时ZF_。3721H,1(5)执行“SHR EBX,4”指令后,JNC发生转移,说明EBX的D3_。0(6)在EDX等于0时转移,可以使用指令“CMP EDX,_”、也可以使用“TEST EDX,_”构成条件,然后使用JE指令实现转移。0,EDX,50,习题4.4,已知var1、var2、var3和var4是32位无符号整数,用汇编语言程序片段实现如下C+语句:var4=(var1*6)/( var2-

28、7)+var3mov eax,var1mov ebx,6mul ebx;var1*6mov ebx,var2sub ebx,7;var2-7div ebx;(var1*6)/( var2-7) add eax,var3;(var1*6)/( var2-7)+var3mov var4,eax,51,习题4.7,定义COUNT(假设为10)个元素的32位数组,输入元素编号(0COUNT-1),利用DISPHD子程序输出其地址、利用DISPSID子程序输出其值。;数据段count= 10arraydword 0,1,2,3,4,5,6,7,8,9;代码段call readuid;输入N,小于10le

29、a eax,arrayeax*4;EAX地址call disphd;显示地址mov eax,arrayeax*4;EAX变量值call dispsid;显示数值,52,习题4.15-1,IA-32处理器的指令CDQ将EAX符号扩展到EDX。假若没有该指令,编程实现该指令功能。(1)按照符号扩展的含义编程,即:EAX最高为0,则EDX0;EAX最高为1,则EDXFFFFFFFFH。test eax,8000h;测试最高位jz next1;最高位为0,转移mov edx,0ffffffffh;最高位为1,设置EDXFFFFFFFFHjmp done;跳过另一个分支next1:mov dx,0;设置

30、EDX0done:,53,习题4.15-2,编程实现指令CDQ,将EAX符号扩展到EDX(2)使用移位等指令进行优化编程。方法1:mov edx,eaxsar edx,31方法2:rol eax,1rcr edx,1sar edx,31ror eax,1,54,习题4.17-1,编写一个程序,先提示输入数字“Input Number:09”,然后在下一行显示输入的数字,结束;如果不是键入了09数字,就提示错误“Error!”,继续等待输入数字。方法1:使用字符输入输出子程序;数据段inmsgbyte Input number(09): ,0ermsgbyte 0dh,0ah,Error! In

31、put again: ,0;代码段mov eax,offset inmsg;提示输入数字call dispmsg,55,习题4.17-2,方法1:使用字符输入输出子程序again:call readc;等待按键cmp al,0;数字 9?ja erdispcall dispcrlfcall dispcjmp done,erdisp:mov eax,offset ermsgcall dispmsgjmp againdone:,56,习题4.17-3,方法2:使用数字输入输出子程序again:call readuid;call readsidcmp eax,0;数字 9?ja erdisp;jg

32、erdispcall dispuid;call dispsidjmp doneerdisp:mov eax,offset ermsgcall dispmsgjmp again,57,习题4.27-1,习题2.14在屏幕上显示ASCII表,现仅在数据段设置表格缓冲区,编程将ASCII代码值填入留出位置的表格,然后调用显示功能实现(需要利用双重循环)。tablebyte |0 1 2 3 4 5 6 7 8 9 A B C D E F,13,10byte -+-,13,10tab1byte 6 dup(36 dup(?),13,10)byte 0,58,习题4.27-2,mov ebx,offse

33、t tab1mov edx,| 02mov ax,2020hmov esi,6again0:mov ebx,edxadd ebx,4mov ecx,16again1:mov word ptr ebx,axadd ebx,2inc alloop again1,59,习题4.27-3,add ebx,2add edx,1dec esijnz again0mov eax,offset tablecall dispmsg,60,习题4.29 素数判断程序-1,(1)采用直接简单的算法:假设输入N,将其逐个除以2N-1,只要能整除(余数为0)说明不是素数,只有都不能整除才是素数。(1)核心程序片段如下:

34、cmp eax,3jbe doney;小于等于3的都是素数cdqmov esi,eax;EDI.ESI=N3mov edi,edxmov ebx,2;EBX从2开始,61,习题4.29 素数判断程序-2,again:div ebxtest edx,edxjz donen;余数为0,能整除,不是素数inc ebxcmp ebx,esi;EBX到N-1结束mov eax,esimov edx,edijb again,62,习题4.29 素数判断程序-3,(2)采用只对奇数整除的算法:1、2和3是素数,所有大于3的偶数不是素数,从5开始的数字只要除以从3开始的奇数,只有都不能整除才是素数。提示:排除

35、4的情况,从3开始除,每次循环加2mov ebx,3add ebx,2,第5章习题:模块化程序设计,5.1 简答题(1、4、5、6、7)5.2 判断题(2、5、6、7、8)5.3 填空题(1、4、5、6、7)5.7、5.8、5.11、5.13,64,5.1 简答题-1,(1)指令“CALL EBX”采用了指令的什么寻址方式?寄存器间接寻址(4)参数传递的“传值”和“传址”有什么区别?传值是传递参数的拷贝,传址是传递参数的地址(5)子程序采用堆栈传递参数,为什么要特别注意堆栈平衡问题?子程序保持堆栈平衡才能保证正确返回主程序保持堆栈平衡,才能释放传递参数占用的堆栈空间,否则多次调用该子程序可能致

36、使堆栈溢出,65,5.1 简答题-2,(6)INCLUDE语句和INCLUDELIB有什么区别?INCLUDE语句包含的是文本文件、是源程序文件的一部分;INCLUDELIB语句包含的是子程序库文件(7)什么是子程序库?子程序库就是子程序模块的集合,其中存放着各子程序的名称、目标代码以及有关定位信息,便于子程序的管理和调用,66,5.2 判断题-1,(2)CALL指令的执行并不影响堆栈指针ESP。错,要改变,因为返回地址要压入堆栈(5)子程序需要保护寄存器,包括保护传递入口参数和出口参数的通用寄存器。错,不能保护传递出口参数的寄存器(6)利用INCLUDE包含的源文件实际上只是源程序的一部分。

37、对,67,5.2 判断题-2,(7)宏调用与子程序调用一样都要使用CALL指令实现。错,宏调用是通过宏展开实现的调用,不用CALL指令(8)宏定义与子程序一样一般书写与主程序之后。错,宏需要先定义后调用,一般在源程序开头部分。,68,5.3 填空题-1,(1)指令“RET i16”的功能相当于“RET”指令和“ADD ESP, _”组合。i16(4)数值10在计算机内部用二进制“1010”编码表示,用十六进制表达是:_。如果将该编码加37H,则为_,它是字符_的ASCII码值。A,41H,A(5)利用堆栈传递子程序参数的方法是固定的,例如寻址堆栈段数据的寄存器是_。EBP,69,5.3 填空题

38、-2,(6)MASM汇编语言中,声明一个共用的变量应使用_伪指令;而使用外部变量要使用_伪指令声明。PUBLIC,EXTERN(7)过程定义开始是“TEST PROC”语句,则过程定义结束的语句是_。宏定义开始是“DISP MACRO”语句,则宏定义结束的语句是_。TEST ENDP,ENDM,70,习题5.7-1,编写一个源程序,在键盘上按一个键,将其返回的ASCII码值显示出来,如果按下退格键(对应ASCII码是08H)则程序退出。请调用书中的HTOASC子程序;代码段,主程序again:call readccmp al,08h;退格键BS=08Hjz donemov bl,almov a

39、l,:call dispc,71,习题5.7-2,mov al,blrol al,4call htoasc;调用子程序call dispc;显示一个字符mov al,blcall htoasc;调用子程序call dispc;显示一个字符call dispcrlfjmp againdone:,72,习题5.8-1,编写一个子程序,它以二进制形式显示EAX中32位数据,并设计一个主程序验证。;代码段,主程序mov eax,8F98FF00Hcall dispbd;调用子程序;代码段,子程序dispbdproc;32位二进制数的输出push ecxmov ecx,32;要输出的字符个数dbd:ro

40、l eax,1;AL循环左移一位,73,习题5.8-2,ush eaxand al,01h;取AL最低位add al,30h;转化成相应的ASCLL码值call dispc;以二进制的形式显示pop eaxloop dbdpop ecxretdispbdendp,74,习题5.11,;计算字节校验和的通用过程;入口参数:DS:EBX数组的段地址:偏移地址ECX元素个数;出口参数:AL校验和;说明:除EAX/EBX/ECX外,不影响其他寄存器checksumprocxor al,al;累加器清0sum:add al,ebx;求和inc ebx;指向下一个字节loop sumretchecksum

41、endp,75,习题5.13-1,利用十六进制字节显示子程序DISPHB设计一个从低地址到高地址逐个字节显示某个主存区域内容的子程序DISPMEM。其入口参数:EAX主存偏移地址,ECX字节个数(主存区域的长度)。同时编写一个主程序进行验证。;数据段varbyte This is a test!;主程序mov eax,offset varmov ecx,sizeof varcall dispmem,76,习题5.13-2,;子程序dispmemprocpush ebxmov ebx,eaxdispm1:cmp ecx,0jz dispm2mov al,ebxcall disphb mov al

42、, call dispc,inc ebxdec ecxjmp dispm1dispm2:pop ebxretdispmemendp,第6章习题:Windows编程,6.1 简答题(3、5、6、7)6.2 判断题(1、3、4)6.3 填空题(1、3、6)6.4、6.6、6.7,78,6.1 简答题-1,(3)运行Windows应用程序,有时为什么会提示某个DLL文件不存在?Windows程序在运行时需要加载其配套的动态连接库DLL文件,当其没有被搜索到时就会提示不存在。(5)ExitProcess函数可以按汇编语言习惯全部使用小写字母表示吗?不能,因为Windows的API函数按照C语言习惯区别

43、大小写字母,是不同的,79,6.1 简答题-2,(6)Win32 API中可以使用哪两种字符集?8位的ASCII字符集和16位的Unicode字符集(7)为什么调用API函数之后,ECX等寄存器改变了?因为API函数并不是按照汇编语言的规则编写的,它的规则是不保护它们,80,6.2 判断题,(1)Windows可执行文件中包含动态连接库中的代码。错,不含,运行时才加载(3)INVOKE语句只能传递主存操作数,不能传递寄存器值。错,可以使用寄存器参数(4)Windows控制台是命令行窗口,也就是MS-DOS窗口。错,Windows控制台与DOS窗口本质不同,81,6.3 填空题,(1)Windo

44、ws系统有3个最重要的系统动态连接库文件,它们是_、_和_。KERNEL32.DLL,USER32.DLL,GDI32.DLL(3)获得句柄函数GetStdHandle执行结束,使用_提供返回结果。EAX(6)WriteConsole和ReadConsole函数的参数类似,都有5个,第1个参数是_,第2个参数是输出或输入缓冲区的_,第3个参数是输出或输入的字符_,第4个参数指向实际输出或输入字符个数的变量,最后1个参数一般要求代入_。句柄实例,地址,个数,0,82,习题6.4-1,执行CPUID指令,直接使用控制台输出函数将处理器识别字符串显示出来。.686.model flat,stdcal

45、loption casemap:noneincludelib binkernel32.libExitProcess proto,:dword,83,习题6.4-2,GetStdHandleproto,:dwordWriteConsoleA proto,:dword,:dword,:dword,:dword,:dwordWriteConsoleequ STD_OUTPUT_HANDLE = -11 .dataouthandledword ?outbufferbyte The processor , 12 dup(0)outbufsize= sizeof outbufferoutsizedword

46、 ?,84,习题6.4-3,mov eax,0cpuid;执行处理器识别指令mov dword ptr outbuffer+outbufsize-12,ebxmov dword ptr outbuffer+outbufsize-8,edxmov dword ptr outbuffer+outbufsize-4,ecxinvoke GetStdHandle,STD_OUTPUT_HANDLEmov outhandle,eaxinvoke WriteConsole,outhandle, addr outbuffer,outbufsize,addr outsize,0invoke ExitProce

47、ss,0,85,习题6.6-1,直接使用控制台输出函数实现主存区域内容的显示显示形式每行显示16个字节(128位)每行开始先显示首个主存单元的偏移地址然后用冒号分隔主存内容,86,习题6.6-2,.datavarbyte This is a test!,ABCDEFG,0123456789_outsizedword ?_outhandledword ?_membufferbyte 57 dup(20h),13,10.codestart:mov eax,offset varmov ecx,sizeof varcall dispmeminvoke ExitProcess,0,87,习题6.6-3,

48、dispmemproctest ecx,ecx;个数为0,不显示jz dispm11;退出pushadmov esi,ecx;ESI=要显示内容的字节数mov edi,eax;EDI=要显示内容的地址invoke GetStdHandle,STD_OUTPUT_HANDLEmov _outhandle,eax;获得输出句柄,88,习题6.6-4,;1.显示缓冲区全部填充为空格dispm1: xor ebx,ebx;指示显示缓冲区dispm2:mov _membufferebx, inc ebxcmp ebx,(sizeof _membuffer)-2jb dispm2;2.显示内容所在的存储器

49、地址xor ebx,ebxmov ecx,8;地址是十六进制8位mov eax,edi,89,习题6.6-5,dispm3:rol eax,4mov dl,aland dl,0fhor dl,30hcmp dl,39hjbe dispm4add dl,7dispm4:mov _membufferebx,dlinc ebxloop dispm3mov _membufferebx,:;显示冒号add ebx,2,90,习题6.6-6,mov ecx,16;一行最多显示16个字节;3.显示一个字节内容dispm5: mov al,edimov dl,alshr dl,4or dl,30hcmp dl

50、,39hjbe dispm6add dl,7dispm6:mov _membufferebx,dlinc ebx,91,习题6.6-7,and al,0fhor al,30hcmp al,39hjbe dispm7add al,7dispm7:mov _membufferebx,aladd ebx,2inc edi;指向下一个要显示的字节dec esijz dispm10;没有要显示的内容,退出loop dispm5,92,习题6.6-8,invoke WriteConsole,_outhandle,addr _membuffer,sizeof _membuffer,addr _outsize

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号