1、汇编语言程序设计教程(第 4 版)习题参考答案第 1 章汇编语言基础知识思考与练习1. 计算机系统分哪几个层次?简述计算机系统的硬件结构。1)数字逻辑层2) 微体系结构层3) 指令系统层4) 操作系统层5) 汇编语言层6) 高级语言层7) 应用层硬件系统是指构成计算机系统的物理实体或物理装置。它由控制器、运算器、存储器、输入设备和输出设备等部件构成。2. 简述用汇编语言进行程序设计的必要性。1) 程序要具有较快的执行时间,或者只能占用较小的存储容量。例如,操作系统的核心程序段,实时控制系统的软件,智能仪器仪表的控制程序等。2) 程序与计算机硬件密切相关,程序要直接、有效地控制硬件。例如,I/O
2、 接口电路的初始化程序段,外部设备的低层驱动程序等。3) 大型软件需要提高性能、优化处理的部分。例如计算机系统频繁调用的子程序、动态连接库等。4) 没有合适的高级语言或只能采用汇编语言的时候。例如,开发最新的处理器程序时, 暂时没有支持新指令的编译程序。5) 汇编语言还有许多实际应用,例如分析具体系统尤其是该系统的低层软件、加密解密软件、分析和防治计算机病毒等。3. 汉字编码主要分哪几类?每类的功能如何?汉字编码主要分为四类:汉字输入码、汉字交换码、汉字机内码和汉字字形码。1) 为了能直接使用西文标准键盘进行输入,就必须为汉字设计相应的编码方法,即用西文标准键盘上的字母数字串表示汉字的编码。目
3、前,汉字输入编码方法主要有三种:数字编码、拼音编码和字形编码。2) 汉字交换码:在不同汉字信息处理系统间进行汉字交换时所使用的编码,就是国标码。无论采用哪种方法输入汉字,一旦输入到计算机中,必须采用统一的国标码标识每个汉字。3) 汉字机内码是汉字在设备或信息处理系统内部最基本的表达形式,是在设备和信息处理系统内部存储、处理、传输汉字用的编码。4) 字形编码也称为字模码,是用点阵表示的汉字字形代码,它是汉字的输出形式。4. 计算机的字长是怎么定义的,试举例说明。计算机能同时处理二进制信息的位宽定义为计算机的字长。如 8086 能同时进行 16 位二进制数据的运算、存储和传输等操作,该机器的字长为
4、 16 位。5. 在汇编语言中,如何表示二进制、八进制、十进制和十六进制的数值? 用相应进制的数值加上进制标记即可。42二进制用 B,如 10101010B八进制用 Q,如 437Q。十进制用 D 或不用,如 54D,或 54。十六进制用 H,如 27A8H6. 汇编语言中的基本数据类型有哪些?简述定点数和浮点数的区别。基本数据类型:数值型数据和非数值型数据。非数值数据如字符、字符串、逻辑值等。指标定点数浮点数表示范围较小比定点数范围大精度决定于数的位数规格化时比定点高运算规则简单运算步骤多运算速度快慢控制电路简单,易于维护复杂,难于维护成本低高程序编制选比例因子,不方便方便溢出处理由数值部分
5、决定由阶码大小判断7. 列出数字 09、大写字母 AZ 及小写字母 az 的 ASCII 码值。30H39H41H5AH61H7AH8. 当字长为八位时,写出下列各数的原码、补码和反码真值25-25 100-100原码00011001100110010110010011100100反码00011001111001100110010010011011补码0001100111100111011001001001110025,-25 ,100,-1009. 按要求完成进制转换。(1)7BCH=011110111100B=1980D(2)562Q=101110010B=370D(3)90D=01011
6、010B=5AH(4)1110100.111B=164.7Q=74.EH10. 完成下列二进制数的加减运算。(1)10101010 + 11110000(2)11001100 + 01010100=110011010=100100000(3)11011010 -01010010(4)11101110 -01001101=10001000=1010000111. 完成下列十六进制数的加减运算。(1)0FEA9 -8888=7621H(2)0FFFF -1234=EDCBH(3)0EAC0 + 0028=EAE8H(4)3ABC + 1678=5134H12. 完成下列 BCD 码的运算。(1)3
7、+5 =80011+0101=1000不用进行十进制调整(2)4+7 =110100+0111=1011 此码不是 BCD 码,需要进行十进制调整1011+0110=10001=0001,0001(3)6+5 =110110+0101=1011 此码不是 BCD 码,需要进行十进制调整1011+0110=10001=0001,0001(4)8+8 =161000+1000=10000 此码不是 BCD 码,需要进行十进制调整10000+0110=10110=0001,0110第 2 章微型计算机体系结构思考与练习1. 简述 Intel 微处理器的发展历程。以 IBM 为例,微机的发展:4004
8、、8008、8080、8086/8088、80286、80386、80486、Pentium 系列。2. 简述 Pentium 微处理器的发展历程。高档 Pentium 微处理器对体系结构进行了全新的设计,其指令集仍是 IA 指令集,保持与 80x86 处理器的兼容。1994 年,为了适应多媒体数据的处理要求,Intel 将多媒体扩展技术 MMX 融入 Pentium形成了 Pentium MMX(多能奔腾)。Pentium MMX 采用饱和运算。Pentium Pro 处理器是 Intel 首个专门为 32 位服务器、工作站设计的处理器,可以应用在高速辅助设计、机械引擎、科学计算等领域。19
9、97 年,Intel 在 Pentium Pro 中也采用了 MMX 技术,推出了 Pentium 。Pentium 继承了 MMX 技术和 Pentium Pro 的动态执行技术,内部一级 Cache 增为 64KB,二级 Cache 为 512KB,时钟频率进一步提高。Pentium 处理器同样全面适合工作站和服务器应用领域。整个 Pentium 是一个相当庞大的系列,所涉及的处理器主频种类非常多,最低的是 450MHz,最高的可达 1.33GHz, 系统总线频率也有两种:133MHz 和 100MHz。2000 年底,Intel 又推出了新增 76 条 SSE2 指令的 Pentium
10、4 处理器,它引入了 NetBurst 微结构,处理器的速度更快。SSE2 既能执行 128 位 SIMD 整数算术操作,也能执行 128 位SIMD 双精度浮点操作。3. 简述多核技术的特点。多核心,又称单芯片多处理器(Chip MultiProcessors,CMP)。CMP 是由美国斯坦福大学提出的,其思想是将大规模并行处理器中的 SMP 集成到同一芯片内,各个处理器并行执行不同的进程。与 CMP 比较,SMP 处理器结构的灵活性比较突出。但是,当半导体工艺进入 0.18 微米以后,线延时已经超过了门延迟,要求微处理器的设计通过划分许多规模更小、局部性更好的基本单元结构来进行。相比之下,
11、由于 CMP 结构已经被划分成多个处理器核来设计,每个核都比较简单,有利于优化设计,因此更有发展前途。多核处理器可以在处理器内部共享缓存,提高缓存利用率,同时简化了多处理器系统设计的复杂度。4. 简述微处理器的发展趋势。得益于 IC 设计和半导体制造技术的交互拉动,在过去数十年历史中,微处理器业界一直为提高芯片的运算性能而努力。微处理器的运算性能始终保持高速提升状态,芯片的集成度、工作频率、执行效率在这个过程中不断提升,计算机工业也由此而改变。微处理器领域真正意义的架构革命将在未来数年内诞生,那就是多核架构将从通用的对 等设计迁移到“主核心+协处理器”的非对等设计,也就是处理器中只有一个或数个
12、通用核 心承担任务指派功能,诸如浮点运算、HDTV 视频解码、JAVA 语言执行等任务都可以由专门的 DSP 硬件核心来完成。由此实现处理器执行效率和最终性能的大幅度跃进IBM Cell、Intel Many Core 和 AMD Hyper Transport 协处理器平台便是该种思想的典型代表。5. IA-32 CPU 通常由哪些单元组成,简述这些单元的作用。IA-32 CPU 由总线接口单元、指令预取单元、指令译码单元、执行单元、分段部件和分页部件六个功能部分组成。总线接口单元 BIU 负责在 CPU 内部各部件与存储器、输入/输出接口之间传送数据或指令。指令预取单元由预取器和预取队列组
13、成。当BIU 不执行取操作数或偏移地址的操作时,如果预取队列有空单元或发生控制转移,预取器便通过分页部件向BIU 发出指令预取请求。指令译码单元直接从指令预取单元的预取队列中读出预取的指令字节并译码,将指令直接转换为内部编码,并存放到已译码指令队列中。执行单元的任务是将已译码指令队列中的内部编码变成按时间顺序排列的一系列控制信息,并发向处理器内部有关的部件,以便完成一条指令的执行。 分段部件的任务是把逻辑地址转换为线性地址并进行保护检查。分页部件由地址加法器、页高速缓存寄存器及控制和属性检验用 PLA 组成。在操作系统控制下,如果分页操作处于允许状态,便执行从线性地址到物理地址的转换,同时还需
14、要检验标准存储器访问与页属性是否一致,并保留一个最近所访问的页的列表。如果分页操作6. 8088 微处理器中有哪些寄存器?说明它们的功能及分组情况,进一步分析 IA-32 CPU寄存器组。IA-32 CPU 寄存器组包括以下几类。IA-32 CPU 中的基本体系结构寄存器:系统级寄存器:IA-32 CPU 中的系统级寄存器包括内存管理寄存器和控制寄存器。内存管理寄存器GDTR、IDTR、LDTR 和TR 用于指示保护模式下系统中特殊段的地址信息, 也称为系统地址寄存器。IA-32 CPU 中有四个 32 位的控制寄存器 CR0、CR1、CR2 和CR3。调试与测试寄存器:IA-32 CPU 中
15、设置了 8 个 32 位的调试寄存器,命名为 DR0DR7,它们为程序调试提供了硬件支持。IA-32 CPU 中设置了 2 个 32 位的测试寄存器,命名为 TR6 和 TR7 。7. 8086 的标志寄存器 FLAG 中,有哪些标志位?它们的名称和功能是什么?IA-32 CPU的标志寄存器增加了哪些标志位,其功能是什么?CF进位标志(Carry Flag)。若 CF=1,表示算术运算时产生进位或借位,否则 CF=0。移位指令会影响 CF。PF奇偶标志(Parity Flag)。若 PF=1,表示操作结果中“1”的个数为偶数,否则 PF=0。这个标志位主要用于检查数据传送过程中的错误。AF辅助
16、进位标志(Auxiliary Carry Flag)。若 AF=1 表示字节运算产生低半字节向高半字节的进位或借位,否则 AF=0。辅助进位也称半进位标志,主要用于 BCD 码运算的十进制调整。ZF全零标志(Zero Flag)。若 ZF=1,表示操作结果全为零,否则 ZF=0。SF符号标志(Sign Flag)。若 SF=1,表示符号数运算后的结果为负数,否则 SF=0。 OF溢出标志(Overflow Flag)。若 OF=1,表示当进行算术运算时,结果超过了最大范围,否则 OF=0。IF中断允许标志(Interrupt Enable Flag)。若 IF=1,则 CPU 可以响应外部可屏
17、蔽中断请求;若 IF=0,则 CPU 不允许响应中断请求。IF 的状态可由中断指令设置。DF方向标志(Direction Flag)。若 DF=1,表示执行字符串操作时按着从高地址向低地址方向进行;否则 DF=0。DF 位可由指令控制。TF单步标志(Trace Flag)。又称跟踪标志。该标志位在调试程序时可直接控制 CPU的工作状态。当 TF=1 时为单步操作,CPU 每执行一条指令就进入内部的单步中断处理,以便对指令的执行情况进行检查;若 TF=0,则 CPU 继续执行程序。IA-32 CPU 的标志寄存器增加的标志位: IOPL 特 权 标 志 。 NT任务嵌套标志。 RF 恢 复 标
18、志 。 VM虚拟方式标志。 AC 对 准 检 查 标 志 。 VIF 虚 拟 中 断 标 志 。 VIP虚拟中断暂挂标志。 ID标识标志。8. 什么叫8086/8088 存储器的段的基地址?什么叫段内偏移地址?什么叫物理地址?以上地址各为多少位?每个段在物理存储器中有一个段的起始地址,称为段基地址,它的低四位二进制码必须是 0000,即段基地址是能被 16 整除的地址。而偏移量是表示段内某一存储单元相对于段起始地址的空间位置,即段内偏移地址,也称有效地址 EA。对于 1M 字节的物理存储空间,每个存储单元都有一个 20 位的物理地址。物理地址是指存储单元的实际编码地址,对存储器的读写操作是需用
19、物理地址进行按址存取。9. 什么是段选择器?什么是段描述符?什么是描述符表?它们之间有什么关系?在保护模式下,段寄存器中存放的不是段基地址本身,而是一个 16 位的段选择器。段选择器索引说明段信息的段描述符,段描述符存放有段基地址信息。段描述符的长度为 8 字节,每一个段都有一个对应的描述符。根据描述符所描述的对象不同,描述符可以分为三类:存储段描述符、系统段描述符、门描述符(控制描述符)。在描述符中定义了段的基地址,界限和访问类型等段属性。为了便于组织管理,IA-32 CPU 把段描述符组织成线性表,称为描述符表。IA-32 CPU有三种类型的描述符表:全局描述符表 GDT,局部描述符表 L
20、DT 和中断描述符表 IDT。 三者的关系:根据段寄存器中保存的段选择器查找相应的描述符表中的对应描述符,根据描述符的内容得出段基地址,将段基地址与偏移地址相加,即得到线性地址。10. 已知物理地址为 FFFE0H,且段内偏移量为 0880H,放在 BX 中,若对应的段基址值放在 DS 中,问:DS=?DS=FF76H11. 一台微型计算机,数据线有 8 根,地址线有 16 根,如果采用字节编址,那么它可以访问的最大存储空间是多少字节?试用十六进制数表示该机的地址范围。216 = 64KB,0000HFFFFH12. 段地址和偏移地址用十六进制数表示如下,请分别计算它们的物理地址。3040:0
21、102 物理地址为:30502H A000:001E 物理地址为:A001EH 1200:0E08 物理地址为:12E08H60E0:002A 物理地址为:60E2AH第 3 章微型计算机的指令系统思考与练习1. 寻址方式?8086/8088 系统中关于存储器操作数的寻址方式有哪几类?80386 及后继处理器支持的新增的存储器寻址方式有哪几种?指令中关于如何求出存放操作数有效地址的方法称为操作数的寻址方式。寻址方式有:寄存器间接寻址、直接寻址、寄存器相对寻址、基址加变址寻址、基址加变址相对寻址。80386 及后继处理器支持的新增的存储器寻址方式有:比例变址寻址方式、基址比例变址寻址方式、相对基
22、址比例变址寻址方式。2. 指令中数据操作数的种类有哪些? 立即数、寄存器数和内存单元数。3. 指出段地址、偏移地址与物理地址之间的关系。有效地址 EA 又是指什么? 段地址左移四位加上偏移地址形成 20 位的物理地址。EA 是指段内偏移地址,即表示段内某单元相对于段起始地址的空间位置。4. 在 8086/8088 系统中,能用于寄存器间接寻址及变址寻址的寄存器有哪些?它们通常与哪个段寄存器配合形成物理地址?能用于寄存器间接寻址及变址寻址的寄存器有基址寄存器 BX 和 BP,变址寄存器 SI 和DI,BX、SI、DI 与 DS 配合形成物理地址,而 BP 与 SS 配合形成物理地址。5. 80x
23、86 指令系统中新增加的数据传送类指令有哪些?分析它们的功能。80x8680286增强的指令增加的指令PUSH立即数80386PUSH立即数PUSHAD/POPADPUSHFD/POPFDPUSHA POPAMOVSX寄存器,寄存器/存储器MOVZX寄存器,寄存器/存储器80486PentiumBSWAPMOV MOVreg32(字节交换)CR4,寄存器寄存器,CR4CR4reg32reg32CR480x86 指令系统中新增加的数据传送类指令有:6. 什么是堆栈操作?以下关于堆栈操作的指令执行后,SP 的值是多少?PUSH AX PUSH CX PUSH DX POP AXPUSHBXPOPC
24、XPOPDX堆栈被定义为一种先进后出的数据结构,即最后进栈的元素将被最先弹出来。堆栈从一个称为栈底的位置开始,数据进入堆栈的操作称为压入(或压栈),数据退出堆栈的操作称为弹出,每进行一次弹出操作,堆栈就减少一个元素,最后一次压入的元素,称为栈顶元素, 压入弹出操作都是对栈顶元素进行的堆栈的两种基本的操作。在进行以上一系列堆栈操作后,SP 指针的值是原 SP+2。7. 用汇编语言指令实现以下操作。(1) 将寄存器 AX、BX 和 DX 的内容相加,和放在寄存器 DX 中。ADD AX,BXADDDX,AX(2) 用基址变址寻址方式(BX 和SI)实现 AL 寄存器的内容和存储器单元 BUF 中的
25、一个字节相加的操作,和放到 AL 中。ADDAL,BYTE PTR BXSI(3) 用寄存器 BX 实现寄存器相对寻址方式(位移量为 100H),将 DX 的内容和存储单元中的一个字相加,和放到存储单元中。ADD100HBX,DX(4) 用直接寻址方式(地址为 0500H)实现将存储器中的一个字与立即数 3ABCH 相加, 和放回该存储单元中。ADD0500H,3ABCH(5) 用串操作指令实现将内存定义好的两个字节串 BUF1 和 BUF2 相加后,存放到另一个串 BUF3 中的功能。MOVCX,COUNT MOVSI,OFFSET BUF1 MOVDI,OFFSET BUF3MOVBX,O
26、FFSET BUF2 AGAIN:LODSBADDAL,BX STOSBINCBXDECCX JNZAGAIN8. 指出下列指令中,源操作数及目的操作数的寻址方式。SUBBX,BP+35;寄存器寻址、寄存器相对寻址MOVAX,2030H;寄存器寻址、立即寻址SCASB;隐含操作数为寄存器寻址和寄存器间接寻址INAL,40H;寄存器寻址、立即寻址MOV DI+BX,AX ;基址加变址寻址、寄存器寻址ADD AX,50HDI ;寄存器寻址、寄存器相对寻址MOV AL,1300H ;寄存器寻址、直接寻址MUL BL;寄存器寻址、目的操作数为隐含寄存器寻址9. 已知(DS)= 1000H,(SI)=
27、0200H,(BX)= 0100H,(10100H)= 11H,(10101H)=22H,(10600H)= 33H,(10601H)= 44H,(10300H)= 55H,(10301H)= 66H,(10302H)= 77H,(10303H)= 88H,试分析下列各条指令执行完后 AX 寄存器的内容。(1)MOVAX,2500H(AX)=2500H(2)MOVAX,500HBX(AX)=4433H(3)MOVAX,300H(AX)=6655H(4)MOVAX,BX(AX)=2211H(5)MOVAX,BXSI(AX)=6655H(6)MOVAX,BX+SI+2(AX)=8877H10判断下
28、列指令是否有错,如果有错,说明理由。SUBBL,BX;两个操作数的宽度不一样MOVBYTE PTRBX,3456H;将 16 位的立即数传送到一个字节的内存单元SHLAX,CH;移位指令的移位位数用 CL 给出,不能用 CH。MOVAH,SIDI;不能用两个变址寄存器来实现寻址操作SHRAX,4;只有当移位位数为 1 时,才能用立即数表达MOVCS,BX;不能对 CS 实现传送操作MOV125,CL;立即数不能做目的操作数MOVAX,BYTE PTRSI;源操作数限定为字节,与目的操作数宽度不一致MOVDI,SI;两个操作数不能同时为内存数11设(DS)= 1000H,(ES)= 2000H,
29、(SS)= 3000H,(SI)= 0080H,(BX)= 02D0H,(BP)= 0060H,试指出下列指令的源操作数字段是什么寻址方式?它的物理地址是多少?MOVAX,0CBH立即寻址MOVAX,100H直接寻址,物理地址为:10100H MOVAX,BX寄存器间接寻址,物理地址为:102D0H MOVAX,BP寄存器间接寻址,物理地址为:20060HMOVAX,BP+50寄存器相对寻址,物理地址为:200B0H MOVAX,BXSI基址加变址寻址,物理地址为:10350H12. 分别说明下列每组指令中的两条指令的区别.(1) ANDCL,0FH按位相“与”,高 4 位为“0000”,低
30、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) JMPNEAR PTR NEXT
31、NEXT 所指指令在当前指令的同段内;JMPSHORT NEXTNEXT 所指指令在当前指令的 8 位地址范围内。(6) ROLAX,CL循环左移,进位标志位不参与循环;RCLAX,CL循环左移,进位标志位参与循环。(7) PUSHAX将 AX 内容存入栈顶指针处,即进栈操作;POPAX将栈顶内容弹出装入 AX 寄存器中,即出栈操作。13试分析以下程序段执行完后 BX 的内容为何?MOVBX,1030H MOVCL,3SHLBX,CL DECBX程序执行完后,BX=817FH,执行过程如下。14. 写出下列指令序列中每条指令的执行结果,并在 DEBUG 环境下验证,注意各标志位的变化情况。MO
32、VBX,126BH ADDBL,02AH MOVAX,2EA5H ADDBH,AL SBBBX,AX ADCAX,26H SUBBH,-815. 编写能实现以下功能的程序段。根据 CL 中的内容决定程序的走向,设所有的转移都是短程转移。若 D0 位等于 1,其他位为 0,转向 LAB1;若 D1 位等于 1,其他位为 0,转向 LAB2;若 D2 位等于 1,其他位为0,转向 LAB3;若 D0、D1、D2 位都是 1,则顺序执行。AND CL,07H CMP CL,01H JZ LAB1CMP CL,02H JZ LAB2CMP CL,04HJZ LAB3CMP CL,07H JNZ OVE
33、R LAB1: LAB2: LAB3: OVER:第 4 章伪指令与汇编语言程序结构设计思考与练习1. EQU 伪指令和等号“=”伪指令有何异同?EQU 伪指令的功能是给各种形式的表达式赋予一个名字。表达式一旦赋予了一个名字, 在以后的程序语句中,凡是出现该表达式的地方,均可用它的名字来代替。与 EQU 伪指令功能类似的是=伪指令,=伪指令又称等号语句。等号语句能对符号进行重新定义,并使其具有新的值,而 EQU 伪指令中的表达式名是不允许重新定义的。2. 汇编语言的语句由几部分构成?分析每部分的作用。汇编语言的语句由一至四个部分组成。名字项操作项操作数项;注释项名字项是一个符号。操作项是一个操
34、作码的助记符,它可以是指令、伪指令或宏指令名。操作数项由一个或多个表达式组成,它提供为执行所要求的操作而需要的信息。注释项用来说明程序或语句的功能。“;”为识别注释项的开始。“;”也可以从一行的第一个字符开始,此时整行都是注释。3. 简述指令和伪指令的区别。指令性语句是由指令组成的由 CPU 执行的语句,完成一定的操作功能,能够翻译成机器代码。指示性语句也叫伪指令语句。指示性语句是指不由 CPU 执行,只为汇编程序在翻译汇编语言源程序时提供有关信息,并不翻译成机器代码的语句。4. 8086/8088 系统中各段如何定义?在段定义中,定位类型、组合类型、类别各起什么作用?段定义伪指令的格式如下:
35、段名SEGMENT定位类型 组合类型 类别;段体段名ENDS定位类型任选项告诉汇编程序如何确定逻辑段的边界在存储器中的位置。组合类型主要用在多个模块的程序中。组合类型规定本段与其他段的组合关系,有六种方式。类别是用单引号括起来的字符串,如代码段(CODE)、堆栈段(STACK)等。当然,也可以是其他名字。设置类别的作用是当几个程序模块进行连接时,将具有相同类别名的逻辑段装入连续的内存区内。5. 汇编语言的可执行程序分哪几类?简述各类的特点。DOS 操作系统支持两种可执行程序的结构,分别为 EXE 程序和 COM 程序。利用程序开发工具,通常会生成 EXE 结构的可执行程序(扩展名为 EXE 的
36、文件)。它有独立的代码段、数据段和堆栈段,还可以有多个代码段或多个数据段,程序长度可以超过64KB。COM 文件是一种只有一个逻辑段的程序,其中包含有代码区、数据区和堆栈区,大小不超过 64KB。COM 文件存储在磁盘上是主存的自我完全映像,与 EXE 文件相比,其装入速度快,占用的磁盘空间少。6. 举例说明 LABEL、PTR 和 THIS 的作用和用法。LABEL 伪指令的功能是定义某变量或标号的类型,同时也定义了该变量或标号的段值和偏移地址。其段值为当前段的段值,偏移地址为下一条指令的偏移地址。LABEL 伪指令本身不开辟新的内存单元,但它可以改变标号(变量)的属性,使这同一标号(变量)
37、对不同的引用可以具有不同的属性。指针操作符 PTR 用于在本语句中取代一个已经定义过的存储器操作数的属性,但并不永久改变该操作数的属性,仅在本语句中有效。指定操作符 THIS 可以象 PTR 一样建立一个指定类型(BYTE、WORD 或 DWORD)的或指定距离(NEAR、FAR)的地址操作数,但该操作数的段地址和偏移地址与下一个存储单元地址相同。7. 在指令 ANDAX,X1 AND X2 中,X1 和X2 是两个已赋值的变量,问两个 AND 分别在何时进行操作?有什么区别?第 1 个 AND 在生成目标代码后,指令执行时进行操作,它是指令助记符;第 2 个 AND在汇编时对 X1 和 X2
38、 进行与运算,它是运算符。8. 在 BUF1 变量中依次存储了 5 个字数据,接着定义了一个名为 BUF2 的字单元,表示如下:BUF1DW8765H,6CH,0,1AB5H,47EAH BUF2DW?设 BX 中是 BUF1 的首地址,请编写指令将数据 50H 传送给 BUF2 单元。ADDBX,10MOVWORD PTRBX,50H请编写指令将数据 FFH 传送给数据为 0 的单元。ADDBX,4MOVWORD PTRBX,FFH9. 下面是一个数据段的定义,请用图表示它们在内存中存放的形式。DATA SEGMENTA1A2DBDB25H,35H,45H3 DUP(5)A3DW200,3A
39、B6HA4DW3000H,6A6FH25H35H45H05H05H05H00H02H B6H 3AH00H30H6FH6AHDATA ENDSA1A2A3A410. 说明下列语句所分配的存储空间及初始化的数据值。(1)BYTE_VARDBBYTE,21,-42H,3 DUP(0,?,2 DUP(2,3),?)(2)WORD_VARDW5 DUP(4,2,0),?,-8,BY,TE256HBYTE_VAR42HWORD_VAR04H59H00H54H02H45H00H15H00H10111110B00H004H200H02H300H200H300H004H00H202H00H300H200H30
40、4H000H02H200H00H300H204H00H02H00H00H00H11111000B11111111B42H59H54H45H56H02H311. 在下列数据传送程序段中有些使用不当的语句,请改正之。A DB10H,20H,OPQ,4FHB DBN DUP(?);改为 BDB6 DUP(?) MOVDI,A;改为 MOVDI,OFFSET AMOVSI,B;改为 MOVSI,OFFSET BMOVCX,LENGTH A;改为 MOVCX,LENGTH B CC: MOVAX,DIMOVSI,AX INCSIINCDIDECCX;去掉该句LOOPCC12. 以下程序段落拟实现在同一个
41、段内的调用过程,试判断可行性,如不能实现,请改正。CODESEGMENTASSUMECS:CODEBEGIN:CALLSUB1CALLSUB2SUB1PROCFAR MOVAX,X MOVBX,YMULBXRETSUB1ENDPCODEENDSENDSTARTSUB1 应为 NEAR 型,过程 SUB2 并未定义,应定义 SUB2。程序段落改为: CODESEGMENTASSUMECS:CODEBEGIN:CALLSUB1CALLSUB2SUB1PROCNEARMOVAX,X MOVBX,YMULBX RETSUB1ENDPSUB2PROC NEARRET SUB2ENDP CODEENDSE
42、NDBEGIN13. 有一个数据段定义了如下 6 个变量,请写出该数据段。(1) BUF1 为十进制数字节变量:64;(2) BUF2 为字符串变量:Teacher;(3) BUF3 为十六进制数字节变量:2FH;(4) BUF4 为双字变量:657AH;(5) BUF5 为字变量:657AH;(6) BUF6 为二进制数字节变量:10101101B。DATA SEGMENT BUF1DB 64BUF2DB TeacherBUF3DB 2FH BUF4DD 657AH BUF5DW 657AHBUF6DB 10101101B14.根据下面的数据定义,填空。VAR1DB6677VAR2DB30
43、DUP(0)VAR3DW10 DUP(?)VAR4DW0A02H,0B03HLENGTHVAR1 =(1)TYPEVAR1 =(1)LENGTHVAR2 =(30)TYPEVAR2 =(1)LENGTHVAR3 =(10)TYPEVAR3 =(2)LENGTHVAR4 =(1)TYPEVAR4 =(2)第 5 章汇编语言程序设计思考与练习1. 开发汇编语言源程序的主要步骤有哪些?(1) 问题定义(2) 建立数学模型(3) 确立算法和处理方案(4) 画流程图(5) 编制程序(6) 上机调试(7) 试运行和分析结果(8) 整理资料,投入运行2. 简述衡量一个程序质量的标准。1) 程序的正确性和完整性。2) 程序的易读性。3) 程序的执行时间和效率。4) 程序所占内存的大小。3. 循环程序由几部分组成?各部分的功能是什么?1) 循环初始化部分。这是循环准备工作阶段,如建立地址指针、设置循环次数、必要的数据保护以及为循环体正常工作而建立的初始状态等。这一部分本身只执行一次。2) 循环体。即循环程序要完成的具体操作,是需要重复执行的程序段。它是循环的核心部分,没有循环体就不能构成循环。3) 循环控制部分。循环控制部分主要用来