位汇编语言习题及答案全部钱晓捷版.ppt
- 文档编号:18717541
- 上传时间:2023-10-18
- 格式:PPT
- 页数:115
- 大小:1.41MB
位汇编语言习题及答案全部钱晓捷版.ppt
《位汇编语言习题及答案全部钱晓捷版.ppt》由会员分享,可在线阅读,更多相关《位汇编语言习题及答案全部钱晓捷版.ppt(115页珍藏版)》请在冰点文库上搜索。
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)哪个处理器的指令系统成为Intel80x86系列处理器的基本指令集?
8086(3)什么是通用寄存器?
一般指处理器最常使用的整数寄存器,可用于保存整数数据、地址等(6)最高有效位MSB是指哪一位?
数据的最高位,例如对8、16、32位数据,MSB依次指D7、D15和D31位,3,4,1.1简答题-2,(7)汇编语言中的标识符与高级语言的变量和常量名的组成原则有本质的区别吗?
没有(8)汇编语言的标识符大小写不敏感意味着什么?
表示字母大小写不同、但表示同一个符号,4,5,1.2判断题,1)EAX也被称为累加器,因为它使用最频繁。
对,EAX中的A来自英文累加器(Accumulator)6)处理器的传送指令MOV属于汇编语言的执行性语句对7)汇编语言的语句由明显的4部分组成,不需要分隔符区别。
错,使用了分隔符才有了明显的4部分8)MASM汇编语言的注释用分号开始,不能用中文分号对,源程序中的分隔符以及各种标识符都是英文9)程序终止执行也就意味着汇编结束,所以两者含义相同。
错,两者完全是两个概念,5,6,1.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,6,7,1.3填空题-2,(7)逻辑地址由_和_两部分组成。
代码段中下一条要执行的指令由CS和_寄存器指示,后者在实地址模型中起作用的仅有_寄存器部分。
段基地址,偏移地址,EIP,IP(10)MASM要求汇编语言源程序文件的扩展名是_,汇编产生扩展名为OBJ的文件被称为_文件,编写32位Windows应用程序应选择_存储模型。
ASM,目标模块,FLAT,7,8,习题1.9,IA-32处理器有哪三类基本段,各是什么用途?
解答:
代码段:
存放程序的指令代码数据段:
存放当前运行程序所用的数据堆栈段:
主存中堆栈所在的区域,8,9,习题1.13,汇编语言语句有哪两种,每种语句由哪4个部分组成解答:
汇编语句有两种执行性语句(处理器指令)说明性语句(伪指令)每个语句有4部分组成标号指令助记符操作数或参数注释,9,10,习题1.15,MASM汇编语言中,下面哪些是程序员可以使用的自定义标识符。
FFH,DS,Again,next,data,h_ascii,6364b,flat解答:
FFH,Again,next,h_ascii其他符号错误的原因:
DS是数据段寄存器名6364b是数字开头data是汇编语言使用预定义符号,表示数据段地址flat是表示平展存储模型的关键字,10,11,习题1.16,汇编语言程序的开发有哪4个步骤,分别利用什么程序完成、产生什么输出文件。
解答:
汇编语言程序的开发有4个步骤:
编辑:
用文本编辑器形成一个以ASM为扩展名的源程序文件。
汇编:
用汇编程序将ASM文件转换为OBJ模块文件。
连接:
用连接程序将一个或多个目标文件链接成一个EXE或COM可执行文件。
调试:
用调试程序排除错误,生成正确的可执行文件。
11,第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)为什么可以把指令“MOVEAX,(3467H)*3”中的数值表达式看成是常量?
汇编程序在汇编过程中对数值表达式计算,得到一个确定的数值,故称数值表达式为常量(4)汇编语言为什么规定十六进制数若以AF开头,需要在前面加个0?
以便与标识符区别,因为标识符要求以字母(或特殊符号)开头,13,14,2.1简答题-2,(7)为什么将查找操作数的方法称为数据寻“址”方式?
指令的操作数需要通过存储器地址或I/O地址,才能查找到数据本身,故称数据寻址方式(8)为什么变量VAR在指令“MOVEAX,VAR”中表达直接寻址?
因为这里的变量名VAR实际上表达了从变量所存放的主存单元,即地址,14,15,2.2判断题-1,
(2)常用的BCD码为8421BCD码,其中的8表示D3位的权重。
对(4)用“BYTE”和“DWORD”定义变量,如果初值相同,则占用的存储空间也一样多。
错。
用BYTE只占一个存储单元,而DWORD要占4个存储单元(8)立即数寻址只会出现在源操作数中。
对,15,16,2.2判断题-2,(9)存储器寻址方式的操作数当然在主存了。
对(10)指令“MOVEAX,VAR+2”与“MOVEAX,VAR2”功能相同。
对,仅是不同的形式罢了,16,17,2.3填空题-1,
(1)计算机中有一个“01100001”编码。
如果把它认为是无符号数,它是十进制数_;如果认为它是BCD码,则表示真值_;又如果它是某个ASCII码,则代表字符_。
97,61,小写字母a
(2)C语言用“n”表示让光标回到下一行首位,在汇编语言中需要输出两个控制字符:
一个是回车,其ASCII码是_,它将光标移动到当前所在行的首位;另一个是换行,其ASCII码是_,它将光标移到下一行。
0DH(13),0AH(10),17,18,2.3填空题-2,(3)定义字节变量的伪指令助记符是_,获取变量名所具有的偏移地址的操作符是_。
BYTE,OFFSET(8)指令“MOVEAX,OFFSETMSG”的目的操作数和源操作数分别采用_和_寻址方式。
寄存器寻址,立即数寻址(9)已知ESI04000H,EBX20H,指令“MOVEAX,ESI+EBX*2+8”中访问的有效地址是_。
04000H20H2804048H,18,19,习题2.10-1,按照如下要求定义变量或符号常量:
(1)my1b为字符串变量:
PersonalComputermy1bbytePersonalComputer
(2)my2b为用十进制数表示的字节变量:
20my2bbyte20(3)my3b为用十六进制数表示的字节变量:
20my3bbyte14h(4)my4b为用二进制数表示的字节变量:
20my4bbyte00010100b,19,20,习题2.10-2,按照如下要求定义变量或符号常量:
(5)my5w为20个未赋值的字变量my5wword20dup(?
)(6)my6c为100的常量my6c=100(7)my7c表示字符串:
PersonalComputermy7cequ,20,21,习题2.14,按照如下输出格式,在屏幕上显示ASCII表编程在数据段直接构造这样的表格、填写相应ASCII代码值(不是字符本身),然后使用字符串显示子程序DISPMSG实现显示,21,22,习题2.14解答1,.datatablebyte|0123456789ABCDEF,13,10byte-+-,13,10byte20|,20h,20h,21h,20h,22h,20h,23h,20h,24h,20h,25h,20h,26h,20h,27h,20h,28h,20h,29h,20hbyte2ah,20h,2bh,20h,2ch,20h,2dh,20h,2eh,20h,2fh,20h,13,10byte30|,30h,20h,31h,20h,32h,20h,33h,20h,34h,20h,35h,20h,36h,20h,37h,20h,38h,20h,39h,20hbyte3ah,20h,3bh,20h,3ch,20h,3dh,20h,3eh,20h,3fh,20h,13,10byte0,22,23,习题2.14解答2,ca=2cas=20hbyteca,0|,cas,20h,cas+1,20h,cas+2,20h,cas+3,20h,cas+4,20h,cas+5,20h,cas+6,20h,cas+7,20hbytecas+8,20h,cas+9,20h,cas+0ah,20h,cas+0bh,20h,cas+0ch,20h,cas+0dh,20h,cas+0eh,20h,cas+0fh,20h,13,10cas=cas+10hca=ca+1byteca,0|,cas,20h,cas+1,20h,cas+2,20h,cas+3,20h,cas+4,20h,cas+5,20h,cas+6,20h,cas+7,20hbytecas+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,23,24,习题2.15,数据段有如下定义:
vardword12345678h现以字节为单位按地址从低到高的顺序,写出这个变量内容。
var变量的内容:
78H、56H、34H、12H并说明如下指令的执行结果:
moveax,var;EAX12345678Hmovbx,wordptrvar;BX5678Hmovcx,wordptrvar+2;CX1234Hmovdl,byteptrvar;DL78Hmovdh,byteptrvar+3;DH12H,24,25,习题2.17,说明源操作数的寻址方式,
(1)movedx,1234h立即数
(2)movedx,vard直接(3)movedx,ebx寄存器(4)movedx,ebx寄存器间接(5)movedx,ebx+1234h寄存器相对(6)movedx,vardebx寄存器相对(7)movedx,ebx+edi基址变址(8)movedx,ebx+edi+1234h相对基址变址(9)movedx,vardesi+edi相对基址变址(10)movedx,ebp*4带比例寻址,25,第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)如何修改“MOVESI,WORDPTR250”语句使其正确?
删除“WORDPTR”即可
(2)为什么说“XCHGEDX,CX”是一条错误的指令?
源、目标寄存器位数不同,不能用该指令进行数据交换(5)执行了一条加法指令后,发现ZF1,说明结果是什么?
(5)表明运算结果为0,27,28,3.1简答题-2,(7)大小写字母转换使用了什么规律?
大小写字母转换利用它们的ASCII码相差20H(9)除法指令“DIVESI”的被除数是什么?
被除数64位,在EDX和EAX中,EDX保存高32位、EAX保存低32位,28,29,3.2判断题-1,
(1)指令“MOVEAX,0”使EAX结果为0,所以标志ZF1。
错,MOV指令不影响标志(4)虽然ADD指令和SUB指令执行后会影响标志状态,但执行前的标志并不影响它们的执行结果。
对(5)80减90(8090)需要借位,所以执行结束后,进位标志CF1。
对,减法时借位也用CF标志反映,29,30,3.2判断题-2,(7)无符号数在前面加零扩展,数值不变;有符号数前面进行符号扩展,位数加长一位、数值增加一倍。
错,符号扩展也不改变数值大小(10)SHL指令左移一位,就是乘10。
错,左移一位,相当于乘2。
这里的位是二进制比特位,30,31,3.3填空题-1,
(2)指令“POPEDX”的功能也可以用MOV和ADD指令实现,依次应该是_和_指令。
MOVEDX,ESP,ADDESP,4(4)进行8位二进制数加法:
BAH6CH,8位结果是_,标志PF_。
如果进行16位二进制数加法:
45BAH786CH,16位结果是_,标志PF_。
26H,0,BE26H,0,31,32,3.3填空题-2,(5)已知AX98H,执行“NEGAX”指令后,AX_,标志SF_。
68H,0(8)指令“XOREAX,EAX”和“SUBEAX,EAX”执行后,EAX_,CFOF_。
而指令“MOVEAX,0”执行后,EAX_,CF和OF没有变化。
0,0,0(10)欲将EDX内的无符号数除以16,使用指令“SHREDX,_”,其中后一个操作数是一个立即数。
4,32,33,习题3.4,请给每种组合各举一个实例
(1)movreg,imm
(2)movmem,imm(3)movreg,reg(4)movmem,reg(5)movseg,reg(6)movreg,mem(7)movseg,mem(8)movreg,seg(9)movmem,seg,33,34,习题3.6,使用MOV指令实现交换指令“XCHGEBX,EDI”功能。
解答:
moveax,ebxmovebx,edimovedi,eax,34,35,习题3.11-1,执行如下程序片断,说明每条指令的执行结果
(1)moveax,80h;EAX80Haddeax,3;EAX83H,CF0,SF0addeax,80h;EAX103H,CF0,OF0adceax,3;EAX106H,CF0,ZF0,35,36,习题3.11-2,执行如下程序片断,说明每条指令的执行结果
(2)moveax,100;EAX100(64H)addax,200;EAX300(12CH),CF0(3)moveax,100;EAX100(64H)addal,200;EAX44(2CH),CF1(包含256的进位含义:
25644300),36,37,习题3.11-3,执行如下程序片断,说明每条指令的执行结果(4)moval,7fh;AL7FHsubal,8;AL77H,CF0,SF0subal,80h;ALF7H,CF1,OF1sbbal,3;ALF3H,CF0,ZF0,37,38,习题3.14-1,请分别用一条汇编语言指令完成如下功能:
(1)把EBX寄存器和EDX寄存器的内容相加,结果存入EDX寄存器。
addedx,ebx
(2)用寄存器EBX和ESI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL中。
addal,ebx+esi,38,39,习题3.14-2,请分别用一条汇编语言指令完成如下功能:
(3)用EBX和位移量0B2H的寄存器相对寻址方式把存储器中的一个双字和ECX寄存器的内容相加,并把结果送回存储器中。
addebx+0b2h,ecx(4)将32位变量VARD与数3412H相加,并把结果送回该存储单元中。
addvarw,3412h(5)把数0A0H与EAX寄存器的内容相加,并把结果送回EAX中。
addeax,0a0h,39,40,习题3.16-1,执行如下程序片断,说明每条指令的执行结果
(1)movesi,10011100b;ESI9CHandesi,80h;ESI80Horesi,7fh;ESIFFHxoresi,0feh;ESI01H
(2)moveax,1010b;EAX1010B(可有前导0)shreax,2;EAX0010B,CF1shleax,1;EAX0100B,CF0andeax,3;EAX0000B,CF0,40,41,习题3.16-2,执行如下程序片断,说明每条指令的执行结果(3)moveax,1011b;EAX1011B(可有前导0)roleax,2;EAX101100B,CF0rcreax,1;EAX10110B,CF0oreax,3;EAX10111B,CF0(4)xoreax,eax;EAX0,CF0,OF0;ZF1,SF0,PF1,41,42,习题3.21,如下程序片段实现EAX乘以某个数X的功能,请判断X?
请使用一条乘法指令实现上述功能。
movecx,eaxshleax,3leaeax,eax+eax*8subeax,ecx解答:
8*8+8-171imuleax,71,42,43,习题3.22,请使用移位和加减法指令编写一个程序片段计算:
EAX21,假设乘积不超过32位。
提示:
21242220。
解答:
movebx,eax;EBXEAX20shlebx,2;EBXEAX22addeax,ebx;EAXEAX(2220)shlebx,2;EBXEAX24addeax,ebx;EAXEAX(242220),43,第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)什么是奇偶校验?
数据通信时,数据的某一位用做传输数据的奇偶校验位,数据中包括校验位在内的“1”的个数恒为奇数,就是奇校验;恒为偶数,就是偶校验(6)助记符JZ和JE为什么表达同一条指令?
两个数相减,差值为0(JZ)与两个数相等(JE)是一个含义,45,46,4.1简答题-2,(9)如果循环体的代码量远超过128个字节,还能用LOOP指令实现计数控制循环吗?
不能,因为LOOP指令的目标地址采用相对短转移,只能在128127字节之间循环(10)什么是“先循环、后判断”循环结构?
指先执行循环体,然后判断是否继续循环的结构,这种结构通常至少执行一次循环体,46,47,4.2判断题,2)指令的相对寻址都是近转移。
对4)JMP指令对应高级语言的GOTO语句,所以不能使用错,需要使用6)JA和JG指令的条件都是“大于”,所以是同一个指令的两个助记符。
错,JA针对无符号数,JG针对有符号数7)JC和JB的条件都是CF1,所以是同一条指令。
对。
无符号小于(JB)必然借位(JC)10)若ECX0,则LOOP指令和JECX指令都发生转移。
对,47,48,4.3填空题-1,
(2)MASM给短转移、近转移和远转移定义的类型名依次是_、_和_。
SHORT,NEAR,FAR(3)假设在平展存储模型下,EBX1256H,双字变量TABLE的偏移地址是20A1H,线性地址32F7H处存放3280H,执行指令“JMPEBX”后EIP_,执行指令“JMPTABLEEBX”后EIP_。
1256H,3280H,48,49,4.3填空题-2,(4)“CMPEAX,3721H”指令之后是JZ指令,发生转移的条件是EAX_,此时ZF_。
3721H,1(5)执行“SHREBX,4”指令后,JNC发生转移,说明EBX的D3_。
0(6)在EDX等于0时转移,可以使用指令“CMPEDX,_”、也可以使用“TESTEDX,_”构成条件,然后使用JE指令实现转移。
0,EDX,49,50,习题4.4,已知var1、var2、var3和var4是32位无符号整数,用汇编语言程序片段实现如下C+语句:
var4=(var1*6)/(var2-7)+var3moveax,var1movebx,6mulebx;var1*6movebx,var2subebx,7;var2-7divebx;(var1*6)/(var2-7)addeax,var3;(var1*6)/(var2-7)+var3movvar4,eax,50,51,习题4.7,定义COUNT(假设为10)个元素的32位数组,输入元素编号(0COUNT-1),利用DISPHD子程序输出其地址、利用DISPSID子程序输出其值。
;数据段count=10arraydword0,1,2,3,4,5,6,7,8,9;代码段callreaduid;输入N,小于10leaeax,arrayeax*4;EAX地址calldisphd;显示地址moveax,arrayeax*4;EAX变量值calldispsid;显示数值,51,52,习题4.15-1,IA-32处理器的指令CDQ将EAX符号扩展到EDX。
假若没有该指令,编程实现该指令功能。
(1)按照符号扩展的含义编程,即:
EAX最高为0,则EDX0;EAX最高为1,则EDXFFFFFFFFH。
testeax,8000h;测试最高位jznext1;最高位为0,转移movedx,0ffffffffh;最高位为1,设置EDXFFFFFFFFHjmpdone;跳过另一个分支next1:
movdx,0;设置EDX0done:
52,53,习题4.15-2,编程实现指令CDQ,将EAX符号扩展到EDX
(2)使用移位等指令进行优化编程。
方法1:
movedx,eaxsaredx,31方法2:
roleax,1rcredx,1saredx,31roreax,1,53,54,习题4.17-1,编写一个程序,先提示输入数字“InputNumber:
09”,然后在下一行显示输入的数字,结束;如果不是键入了09数字,就提示错误“Error!
”,继续等待输入数字。
方法1:
使用字符输入输出子程序;数据段inmsgbyteInputnumber(09):
0ermsgbyte0dh,0ah,Error!
Inputagain:
0;代码段moveax,offsetinmsg;提示输入数字calldispmsg,54,55,习题4.17-2,方法1:
使用字符输入输出子程序again:
callreadc;等待按键cmpal,0;数字9?
jaerdispcalldispcrlfcalldispcjmpdone,erdisp:
moveax,offsetermsgcalldispmsgjmpagaindone:
55,56,习题4.17-3,方法2:
使用数字输入输出子程序again:
callreaduid;callreadsidcmpeax,0;数字9?
jaerdisp;jgerdispcalldispuid;calldispsidjmpdoneerdisp:
moveax,offsetermsgcalldispmsgjmpagain,56,57,习题4.27-1,习题2.14在屏幕上显示ASCII表,现仅在数据段设置表格缓冲区,编程将ASCII代码值填入留出位置的表格,然后调用显示功能实现(需要利用双重循环)。
tablebyte|0123456789ABCDEF,13,10byte-+-,13,10tab1byte6dup(36dup(?
),13,10)byte0,57,58,习题4.27-2,movebx,offsettab1movedx,|02movax,2020hmovesi,6again0:
movebx,edxaddebx,4movecx,16again1:
movwordptrebx,axaddebx,2incalloopagain1,58,59,习题4.27-3,addebx,2addedx,1decesijnzagain0moveax,offsettablecalldispmsg,59,60,习题4.29素数判断程序-1,
(1)采用直接简单的算法:
假设输入N,将其逐个除以2N-1,只要能整除(余数为0)说明不是素数,只有都不能整除才是素数。
(1)核心程序片段如下:
cmpeax,3jb
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 习题 答案 全部 钱晓捷版