汇编语言程序设计教程第3版 卜艳萍参考答案.docx
- 文档编号:27035417
- 上传时间:2023-06-26
- 格式:DOCX
- 页数:72
- 大小:118.51KB
汇编语言程序设计教程第3版 卜艳萍参考答案.docx
《汇编语言程序设计教程第3版 卜艳萍参考答案.docx》由会员分享,可在线阅读,更多相关《汇编语言程序设计教程第3版 卜艳萍参考答案.docx(72页珍藏版)》请在冰豆网上搜索。
汇编语言程序设计教程第3版卜艳萍参考答案
汇编语言程序设计教程(第3版)
习题参考答案
第1章汇编语言基础知识
思考与练习
1.计算机系统分哪几个层次?
简述计算机系统的硬件结构。
1)数字逻辑层
2)微体系结构层
3)指令系统层
4)操作系统层
5)汇编语言层
6)高级语言层
7)应用层
硬件系统是指构成计算机系统的物理实体或物理装置。
它由控制器、运算器、存储器、输入设备和输出设备等部件构成。
2.简述用汇编语言进行程序设计的必要性。
1)程序要具有较快的执行时间,或者只能占用较小的存储容量。
例如,操作系统的核心程序段,实时控制系统的软件,智能仪器仪表的控制程序等。
2)程序与计算机硬件密切相关,程序要直接、有效地控制硬件。
例如,I/O接口电路的初始化程序段,外部设备的低层驱动程序等。
3)大型软件需要提高性能、优化处理的部分。
例如计算机系统频繁调用的子程序、动态连接库等。
4)没有合适的高级语言或只能采用汇编语言的时候。
例如,开发最新的处理器程序时,暂时没有支持新指令的编译程序。
5)汇编语言还有许多实际应用,例如分析具体系统尤其是该系统的低层软件、加密解密软件、分析和防治计算机病毒等。
3.汉字编码主要分哪几类?
每类的功能如何?
汉字编码主要分为四类:
汉字输入码、汉字交换码、汉字机内码和汉字字形码。
1)为了能直接使用西文标准键盘进行输入,就必须为汉字设计相应的编码方法,即用西文标准键盘上的字母数字串表示汉字的编码。
目前,汉字输入编码方法主要有三种:
数字编码、拼音编码和字形编码。
2)汉字交换码:
在不同汉字信息处理系统间进行汉字交换时所使用的编码,就是国标码。
无论采用哪种方法输入汉字,一旦输入到计算机中,必须采用统一的国标码标识每个汉字。
3)汉字机内码是汉字在设备或信息处理系统内部最基本的表达形式,是在设备和信息处理系统内部存储、处理、传输汉字用的编码。
4)字形编码也称为字模码,是用点阵表示的汉字字形代码,它是汉字的输出形式。
4.计算机的字长是怎么定义的,试举例说明。
计算机能同时处理二进制信息的位宽定义为计算机的字长。
如8086能同时进行16位二进制数据的运算、存储和传输等操作,该机器的字长为16位。
5.在汇编语言中,如何表示二进制、八进制、十进制和十六进制的数值?
用相应进制的数值加上进制标记即可。
二进制用B,如10101010B
八进制用Q,如437Q。
十进制用D或不用,如54D,或54。
十六进制用H,如27A8H
6.汇编语言中的基本数据类型有哪些?
简述定点数和浮点数的区别。
基本数据类型:
数值型数据和非数值型数据。
非数值数据如字符、字符串、逻辑值等。
指标
定点数
浮点数
表示范围
较小
比定点数范围大
精度
决定于数的位数
规格化时比定点高
运算规则
简单
运算步骤多
运算速度
快
慢
控制电路
简单,易于维护
复杂,难于维护
成本
低
高
程序编制
选比例因子,不方便
方便
溢出处理
由数值部分决定
由阶码大小判断
7.列出数字0~9、大写字母A~Z及小写字母a~z的ASCII码值。
30H~39H41H~5AH61H~7AH
8.当字长为八位时,写出下列各数的原码、补码和反码
25,25,100,100
真值
原码
反码
补码
25
00011001
00011001
00011001
25
10011001
11100110
11100111
100
01100100
01100100
01100100
100
11100100
10011011
10011100
9.按要求完成进制转换。
(1)7BCH=011110111100B=1980D
(2)562Q=101110010B=370D
(3)90D=01011010B=5AH
(4)1110100.111B=164.7Q=74.EH
10.完成下列二进制数的加减运算。
(1)10101010+11110000
(2)11001100+01010100
=110011010=100100000
(3)1101101001010010(4)1110111001001101
=10001000=10100001
11.完成下列十六进制数的加减运算。
(1)0FEA98888=7621H
(2)0FFFF1234=EDCBH
(3)0EAC0+0028=EAE8H(4)3ABC+1678=5134H
12.完成下列BCD码的运算。
(1)3+5=8
0011+0101=1000不用进行十进制调整
(2)4+7=11
0100+0111=1011此码不是BCD码,需要进行十进制调整
1011+0110=10001=0001,0001
(3)6+5=11
0110+0101=1011此码不是BCD码,需要进行十进制调整
1011+0110=10001=0001,0001
(4)8+8=16
1000+1000=10000此码不是BCD码,需要进行十进制调整
10000+0110=10110=0001,0110
第2章微型计算机体系结构
思考与练习
1.简述Intel微处理器的发展历程。
以IBM为例,微机的发展:
4004、8008、8080、8086/8088、80286、80386、80486、Pentium系列。
2.IA-32CPU通常由哪些单元组成,简述这些单元的作用。
IA-32CPU由总线接口单元、指令预取单元、指令译码单元、执行单元、分段部件和分页部件六个功能部分组成。
总线接口单元BIU负责在CPU内部各部件与存储器、输入/输出接口之间传送数据或指令。
指令预取单元由预取器和预取队列组成。
当BIU不执行取操作数或偏移地址的操作时,如果预取队列有空单元或发生控制转移,预取器便通过分页部件向BIU发出指令预取请求。
指令译码单元直接从指令预取单元的预取队列中读出预取的指令字节并译码,将指令直接转换为内部编码,并存放到已译码指令队列中。
执行单元的任务是将已译码指令队列中的内部编码变成按时间顺序排列的一系列控制信息,并发向处理器内部有关的部件,以便完成一条指令的执行。
分段部件的任务是把逻辑地址转换为线性地址并进行保护检查。
分页部件由地址加法器、页高速缓存寄存器及控制和属性检验用PLA组成。
在操作系统控制下,如果分页操作处于允许状态,便执行从线性地址到物理地址的转换,同时还需要检验标准存储器访问与页属性是否一致,并保留一个最近所访问的页的列表。
如果分页操作
3.8088微处理器中有哪些寄存器?
说明它们的功能及分组情况,进一步分析IA-32CPU寄存器组。
IA-32CPU寄存器组包括以下几类。
①IA-32CPU中的基本体系结构寄存器:
②系统级寄存器:
IA-32CPU中的系统级寄存器包括内存管理寄存器和控制寄存器。
内存管理寄存器GDTR、IDTR、LDTR和TR用于指示保护模式下系统中特殊段的地址信息,也称为系统地址寄存器。
IA-32CPU中有四个32位的控制寄存器CR0、CR1、CR2和CR3。
③调试与测试寄存器:
IA-32CPU中设置了8个32位的调试寄存器,命名为DR0~DR7,它们为程序调试提供了硬件支持。
IA-32CPU中设置了2个32位的测试寄存器,命名为TR6和TR7。
4.8086的标志寄存器FLAG中,有哪些标志位?
它们的名称和功能是什么?
IA-32CPU的标志寄存器增加了哪些标志位,其功能是什么?
CF——进位标志(CarryFlag)。
若CF=1,表示算术运算时产生进位或借位,否则CF=0。
移位指令会影响CF。
PF——奇偶标志(ParityFlag)。
若PF=1,表示操作结果中“1”的个数为偶数,否则PF=0。
这个标志位主要用于检查数据传送过程中的错误。
AF——辅助进位标志(AuxiliaryCarryFlag)。
若AF=1表示字节运算产生低半字节向高半字节的进位或借位,否则AF=0。
辅助进位也称半进位标志,主要用于BCD码运算的十进制调整。
ZF——全零标志(ZeroFlag)。
若ZF=1,表示操作结果全为零,否则ZF=0。
SF——符号标志(SignFlag)。
若SF=1,表示符号数运算后的结果为负数,否则SF=0。
OF——溢出标志(OverflowFlag)。
若OF=1,表示当进行算术运算时,结果超过了最大范围,否则OF=0。
IF——中断允许标志(InterruptEnableFlag)。
若IF=1,则CPU可以响应外部可屏蔽中断请求;若IF=0,则CPU不允许响应中断请求。
IF的状态可由中断指令设置。
DF——方向标志(DirectionFlag)。
若DF=1,表示执行字符串操作时按着从高地址向低地址方向进行;否则DF=0。
DF位可由指令控制。
TF——单步标志(TraceFlag)。
又称跟踪标志。
该标志位在调试程序时可直接控制CPU的工作状态。
当TF=1时为单步操作,CPU每执行一条指令就进入内部的单步中断处理,以便对指令的执行情况进行检查;若TF=0,则CPU继续执行程序。
IA-32CPU的标志寄存器增加的标志位:
IOPL——特权标志。
NT——任务嵌套标志。
RF——恢复标志。
VM——虚拟方式标志。
AC——对准检查标志。
VIF——虚拟中断标志。
VIP——虚拟中断暂挂标志。
ID——标识标志。
5.什么叫8086/8088存储器的段的基地址?
什么叫段内偏移地址?
什么叫物理地址?
以上地址各为多少位?
每个段在物理存储器中有一个段的起始地址,称为段基地址,它的低四位二进制码必须是0000,即段基地址是能被16整除的地址。
而偏移量是表示段内某一存储单元相对于段起始地址的空间位置,即段内偏移地址,也称有效地址EA。
对于1M字节的物理存储空间,每个存储单元都有一个20位的物理地址。
物理地址是指存储单元的实际编码地址,对存储器的读写操作是需用物理地址进行按址存取。
6.什么是段选择器?
什么是段描述符?
什么是描述符表?
它们之间有什么关系?
在保护模式下,段寄存器中存放的不是段基地址本身,而是一个16位的段选择器。
段选择器索引说明段信息的段描述符,段描述符存放有段基地址信息。
段描述符的长度为8字节,每一个段都有一个对应的描述符。
根据描述符所描述的对象不同,描述符可以分为三类:
存储段描述符、系统段描述符、门描述符(控制描述符)。
在描述符中定义了段的基地址,界限和访问类型等段属性。
为了便于组织管理,IA-32CPU把段描述符组织成线性表,称为描述符表。
IA-32CPU有三种类型的描述符表:
全局描述符表GDT,局部描述符表LDT和中断描述符表IDT。
三者的关系:
根据段寄存器中保存的段选择器查找相应的描述符表中的对应描述符,根据描述符的内容得出段基地址,将段基地址与偏移地址相加,即得到线性地址。
7.已知物理地址为FFFE0H,且段内偏移量为0880H,放在BX中,若对应的段基址值放在DS中,问:
DS=?
DS=FF76H
8.段地址和偏移地址用十六进制数表示如下,请分别计算它们的物理地址。
3040:
0102物理地址为:
30502H
A000:
001E物理地址为:
A001EH
1200:
0E08物理地址为:
12E08H
60E0:
002A物理地址为:
60E2AH
9.一台微型计算机,数据线有8根,地址线有16根,如果采用字节编址,那么它可以访问的最大存储空间是多少字节?
试用十六进制数表示该机的地址范围。
216=64KB,0000H~FFFFH
第3章微型计算机的指令系统
思考与练习
1.寻址方式?
8086/8088系统中关于存储器操作数的寻址方式有哪几类?
80386及后继处理器支持的新增的存储器寻址方式有哪几种?
指令中关于如何求出存放操作数有效地址的方法称为操作数的寻址方式。
寻址方式有:
寄存器间接寻址、直接寻址、寄存器相对寻址、基址加变址寻址、基址加变址相对寻址。
80386及后继处理器支持的新增的存储器寻址方式有:
比例变址寻址方式、基址比例变址寻址方式、相对基址比例变址寻址方式。
2.指令中数据操作数的种类有哪些?
立即数、寄存器数和内存单元数。
3.指出段地址、偏移地址与物理地址之间的关系。
有效地址EA又是指什么?
段地址左移四位加上偏移地址形成20位的物理地址。
EA是指段内偏移地址,即表示段内某单元相对于段起始地址的空间位置。
4.在8086/8088系统中,能用于寄存器间接寻址及变址寻址的寄存器有哪些?
它们通常与哪个段寄存器配合形成物理地址?
能用于寄存器间接寻址及变址寻址的寄存器有基址寄存器BX和BP,变址寄存器SI和DI,BX、SI、DI与DS配合形成物理地址,而BP与SS配合形成物理地址。
5.80x86指令系统中新增加的数据传送类指令有哪些?
分析它们的功能。
80x86指令系统中新增加的数据传送类指令有:
80x86
增强的指令
增加的指令
80286
PUSH立即数
PUSHA
POPA
80386
PUSH立即数
PUSHAD/POPAD
PUSHFD/POPFD
MOVSX寄存器,寄存器/存储器
MOVZX寄存器,寄存器/存储器
80486
BSWAPreg32(字节交换)
Pentium
MOVCR4,寄存器
MOV寄存器,CR4
CR4reg32
reg32CR4
6.什么是堆栈操作?
以下关于堆栈操作的指令执行后,SP的值是多少?
PUSHAX
PUSHCX
PUSHDX
POPAX
PUSHBX
POPCX
POPDX
堆栈被定义为一种先进后出的数据结构,即最后进栈的元素将被最先弹出来。
堆栈从一个称为栈底的位置开始,数据进入堆栈的操作称为压入(或压栈),数据退出堆栈的操作称为弹出,每进行一次弹出操作,堆栈就减少一个元素,最后一次压入的元素,称为栈顶元素,压入弹出操作都是对栈顶元素进行的堆栈的两种基本的操作。
在进行以上一系列堆栈操作后,SP指针的值是原SP+2。
7.用汇编语言指令实现以下操作。
(1)将寄存器AX、BX和DX的内容相加,和放在寄存器DX中。
ADDAX,BX
ADDDX,AX
(2)用基址变址寻址方式(BX和SI)实现AL寄存器的内容和存储器单元BUF中的一个字节相加的操作,和放到AL中。
ADDAL,BYTEPTR[BX][SI]
(3)用寄存器BX实现寄存器相对寻址方式(位移量为100H),将DX的内容和存储单元中的一个字相加,和放到存储单元中。
ADD100H[BX],DX
(4)用直接寻址方式(地址为0500H)实现将存储器中的一个字与立即数3ABCH相加,和放回该存储单元中。
ADD[0500H],3ABCH
(5)用串操作指令实现将内存定义好的两个字节串BUF1和BUF2相加后,存放到另一个串BUF3中的功能。
……
MOVCX,COUNT
MOVSI,OFFSETBUF1
MOVDI,OFFSETBUF3
MOVBX,OFFSETBUF2
AGAIN:
LODSB
ADDAL,[BX]
STOSB
INCBX
DECCX
JNZAGAIN
……
8.指出下列指令中,源操作数及目的操作数的寻址方式。
SUBBX,[BP+35];寄存器寻址、寄存器相对寻址
MOVAX,2030H;寄存器寻址、立即寻址
SCASB;隐含操作数为寄存器寻址和寄存器间接寻址
INAL,40H;寄存器寻址、立即寻址
MOV[DI+BX],AX;基址加变址寻址、寄存器寻址
ADDAX,50H[DI];寄存器寻址、寄存器相对寻址
MOVAL,[1300H];寄存器寻址、直接寻址
MULBL;寄存器寻址、目的操作数为隐含寄存器寻址
9.已知(DS)=1000H,(SI)=0200H,(BX)=0100H,(10100H)=11H,(10101H)=22H,(10600H)=33H,(10601H)=44H,(10300H)=55H,(10301H)=66H,(10302H)=77H,(10303H)=88H,试分析下列各条指令执行完后AX寄存器的内容。
MOVAX,2500H(AX)=2500H
MOVAX,500H[BX](AX)==4433H
MOVAX,[300H](AX)=6655H
MOVAX,[BX](AX)=2211H
MOVAX,[BX][SI](AX)=6655H
MOVAX,[BX+SI+2](AX)=8877H
10.判断下列指令是否有错,如果有错,说明理由。
SUBBL,BX;两个操作数的宽度不一样
MOVBYTEPTR[BX],3456H;将16位的立即数传送到一个字节的内存单元
SHLAX,CH;移位指令的移位位数用CL给出,不能用CH。
MOVAH,[SI][DI];不能用两个变址寄存器来实现寻址操作
SHRAX,4;只有当移位位数为1时,才能用立即数表达
MOVCS,BX;不能对CS实现传送操作
MOV125,CL;立即数不能做目的操作数
MOVAX,BYTEPTR[SI];源操作数限定为字节,与目的操作数宽度不一致
MOV[DI],[SI];两个操作数不能同时为内存数
11.设(DS)=1000H,(ES)=2000H,(SS)=3000H,(SI)=0080H,(BX)=02D0H,(BP)=0060H,试指出下列指令的源操作数字段是什么寻址方式?
它的物理地址是多少?
MOVAX,0CBH立即寻址
MOVAX,[100H]直接寻址,物理地址为:
10100H
MOVAX,[BX]寄存器间接寻址,物理地址为:
102D0H
MOVAX,[BP]寄存器间接寻址,物理地址为:
20060H
MOVAX,[BP+50]寄存器相对寻址,物理地址为:
200B0H
MOVAX,[BX][SI]基址加变址寻址,物理地址为:
10350H
12.分别说明下列每组指令中的两条指令的区别.
(1)ANDCL,0FH按位相“与”,高4位为“0000”,低4位保留原值;
ORCL,0FH按位相“或”,高4位为原值,低4位为“1111”。
(2)MOVAX,BX将BX寄存器的内容传送到AX寄存器中;
MOVAX,[BX]将BX寄存器所指的内存单元的内容送AX寄存器中。
(3)SUBBX,CXBX寄存器内容减去CX寄存器的内容,结果送回到BX;
CMPBX,CXBX内容减去CX内容,结果影响标志位。
(4)ANDAL,01HAL内容与01H相“与”,结果为“0000000x”送回AL寄存器;
TESTAL,01HAL内容与01H相“与”,结果影响标志位(ZF)。
(5)JMPNEARPTRNEXTNEXT所指指令在当前指令的同段内;
JMPSHORTNEXTNEXT所指指令在当前指令的8位地址范围内。
(6)ROLAX,CL循环左移,进位标志位不参与循环;
RCLAX,CL循环左移,进位标志位参与循环。
(7)PUSHAX将AX内容存入栈顶指针处,即进栈操作;
POPAX将栈顶内容弹出装入AX寄存器中,即出栈操作。
13.试分析以下程序段执行完后BX的内容为何?
MOVBX,1030H
MOVCL,3
SHLBX,CL
DECBX
程序执行完后,BX=817FH,执行过程如下。
14.写出下列指令序列中每条指令的执行结果,并在DEBUG环境下验证,注意各标志位的变化情况。
MOVBX,126BH
ADDBL,02AH
MOVAX,2EA5H
ADDBH,AL
SBBBX,AX
ADCAX,26H
SUBBH,-8
15.编写能实现以下功能的程序段。
根据CL中的内容决定程序的走向,设所有的转移都是短程转移。
若D0位等于1,其他位为0,转向LAB1;若D1位等于1,其他位为0,转向LAB2;若D2位等于1,其他位为0,转向LAB3;若D0、D1、D2位都是1,则顺序执行。
……
ANDCL,07H
CMPCL,01H
JZLAB1
CMPCL,02H
JZLAB2
CMPCL,04H
JZLAB3
CMPCL,07H
JNZOVER
……
LAB1:
……
LAB2:
……
LAB3:
……
OVER:
……
第4章伪指令与汇编语言程序结构设计
思考与练习
1.EQU伪指令和等号“=”伪指令有何异同?
EQU伪指令的功能是给各种形式的表达式赋予一个名字。
表达式一旦赋予了一个名字,在以后的程序语句中,凡是出现该表达式的地方,均可用它的名字来代替。
与EQU伪指令功能类似的是=伪指令,=伪指令又称等号语句。
等号语句能对符号进行重新定义,并使其具有新的值,而EQU伪指令中的表达式名是不允许重新定义的。
2.汇编语言的语句由几部分构成?
分析每部分的作用。
汇编语言的语句由一至四个部分组成。
[名字项]操作项[操作数项][;注释项]
名字项是一个符号。
操作项是一个操作码的助记符,它可以是指令、伪指令或宏指令名。
操作数项由一个或多个表达式组成,它提供为执行所要求的操作而需要的信息。
注释项用来说明程序或语句的功能。
“;”为识别注释项的开始。
“;”也可以从一行的第一个字符开始,此时整行都是注释。
3.简述指令和伪指令的区别。
指令性语句是由指令组成的由CPU执行的语句,完成一定的操作功能,能够翻译成机器代码。
指示性语句也叫伪指令语句。
指示性语句是指不由CPU执行,只为汇编程序在翻译汇编语言源程序时提供有关信息,并不翻译成机器代码的语句。
4.8086/8088系统中各段如何定义?
在段定义中,定位类型、组合类型、类别各起什么作用?
段定义伪指令的格式如下:
段名SEGMENT[定位类型][组合类型][‘类别’]
┇;段体
段名ENDS
定位类型任选项告诉汇编程序如何确定逻辑段的边界在存储器中的位置。
组合类型主要用在多个模块的程序中。
组合类型规定本段与其他段的组合关系,有六种方式。
类别是用单引号括起来的字符串,如代码段(‘CODE’)、堆栈段(‘STACK’)等。
当然,也可以是其他名字。
设置类别的作用是当几个程序模块进行连接时,将具有相同类别名的逻辑段装入连续的内存区内。
5.汇编语言的可执行程序分哪几类?
简述各类的特点。
DOS操作系统支持两种可执行程序的结构,分别为EXE程序和COM程序。
利用程序开发工具,通常会生成EXE结构的可执行程序(扩展名为EXE的文件)。
它有独立的代码段、数据段和堆栈段,还可以有多个代码段或多个数据段,程序长度可以超过64KB。
COM文件是一种只有一个逻辑段的程序,其中包含有代码区、数据区和堆栈区,大小不超过64KB。
COM文件存储在磁盘上是主存的自我完全映像,与EXE文件相比,其装入速度快,占用的磁盘空间少。
6.举例说明LABEL、PTR和THIS的作用和用法。
LABEL伪指令的功
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言程序设计教程第3版 卜艳萍参考答案 汇编语言 程序设计 教程 卜艳萍 参考答案