分享
分享赚钱 收藏 举报 版权申诉 / 39

类型汇编语言程序设计教程第2版卜艳萍周伟.doc

  • 上传人:wspkg9802
  • 文档编号:8143867
  • 上传时间:2019-06-10
  • 格式:DOC
  • 页数:39
  • 大小:664KB
  • 配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    汇编语言程序设计教程第2版卜艳萍周伟.doc
    资源描述:

    1、1汇编语言程序设计教程(第二版)习题参考答案第 1 章 计算机基础知识1. 计算机的应用分哪几个方面,请举例说明书中未提到的领域的计算机应用。科学计算、数据处理、计算机控制、计算机辅助设计、人工智能、企业管理、家用电器、网络应用。书中未提及的如:远程教育、住宅小区控制、飞行系统控制与管理等。2. 简述计算机的发展过程,请查阅相关资料,列出微机的发展过程。电子管、晶体管、集成电路、大规模集成电路以 IBM 为例,微机的发展:4004、8008、8080、8086/8088 、80286、80386、80486、Pentium 系列3. 计算机的字长是怎么定义的,试举例说明。计算机能同时处理二进制

    2、信息的位宽定义为计算机的字长。如 8086 能同时进行 16 位二进制数据的运算、存储和传输等操作,该机器的字长为 16 位。4. 汇编语言中的基本数据类型有哪些?数值型数据和非数值型数据。非数值数据如字符、字符串、逻辑值等。5. 简述定点数和浮点数的区别。指标 定点数 浮点数表示范围 较小 比定点数范围大精度 决定于数的位数 规格化时比定点高运算规则 简单 运算步骤多运算速度 快 慢控制电路 简单,易于维护 复杂,难于维护成本 低 高程序编制 选比例因子,不方便 方便溢出处理 由数值部分决定 由阶码大小判断6. 按要求完成进制转换。(1)7BCH=011110111100B=1980D(2)

    3、562Q=101110010B=370D(3)90D=01011010B=5AH(4)1110100.111B=164.7Q=74.EH7. 当字长为八位时,写出下列各数的原码、补码和反码真值 原码 反码 补码25 00011001 00011001 00011001 25 10011001 11100110 11100111100 01100100 01100100 01100100 100 11100100 10011011 100111008. 列出数字 09、大写字母 AZ 及小写字母 az 的 ASCII 码值。30H39H 41H5AH 61H7AH9. 在汇编语言中,如何表示二进

    4、制、八进制、十进制和十六进制的数值?用相应进制的数值加上进制标记即可。二进制用 B,如 10101010B2八进制用 Q,如 437Q。十进制用 D 或不用,如 54D,或 54。十六进制用 H,如 27A8H10. 完成下列二进制数的加减运算。(1)10101010 + 11110000 (2)11001100 + 01010100=110011010 =100100000(3)11011010 01010010 (4)11101110 01001101=10001000 =1010000111. 完成下列十六进制数的加减运算。(1)0FEA9 8888=7621H (2)0FFFF 123

    5、4=EDCBH(3)0EAC0 + 0028=EAE8H (4)3ABC + 1678=5134H12. 完成下列 BCD 码的运算。(1)3+5 =8 0011+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=10

    6、110=0001,0110第 2 章 微型计算机系统概述1. 说明二进制位(bit) ,字节(byte) ,字(word) ,双字(double word)的含义及相互之间的关系。位(bit):一个二进制位字节(byte):8 位二进制位字(word ):一般为机器字长,在 8086 机器中为 16 位二进制位,即两个字节。双字(double word):双倍字长,在 8086 机器中为 32 位二进制位。2. 一台微型计算机,数据线有 8 根,地址线有 16 根,如果采用字节编址,那么它可以访问的最大存储空间是多少字节?试用十六进制数表示该机的地址范围。216 = 64KB,0000HFFF

    7、FH3. 8088CPU 内部分为哪两个大的功能部件?试述这两个部件的作用是什么?8088 微处理器内部分为执行单元(EU)和总线接口单元(BIU )两部分。BIU 单元用来实现 EU 的所有总线操作。它由地址加法器,段寄存器CS、DS 、SS、ES,指令指针 IP,指令队列缓冲器和总线控制逻辑组成。 BIU 负责 CPU 与存储器或外部设备之间的信息交换。地址加法器将段和偏移地址相加,生成 20 位的物理地址。EU 单元负责指令的执行,由算术逻辑单元 ALU、标志寄存器 F、通用寄存器及 EU 控制器等组成,主要进行 16 位的各种运算及有效地址的计算。EU 不与计算机系统总线相关,而从 B

    8、IU 中的指令队列取得指令。这个指令队列中,存放着 BIU 预先由存储器中取出的若干个字节的指令。34. 8088 微处理器中有哪些寄存器?说明它们的功能及分组情况。5. 8086 的寄存器中,有哪些 16 位寄存器可分为两个 8 位寄存器来使用?AX(AH,AL) 、BX(BH,BL) 、CX(CH,CL ) 、DX(DH,DL)6. 8086/8088 的标志寄存器 F 中有哪些标志位?它们的名称和功能是什么?CF进位标志(Carry Flag) 。若 CF=1,表示算术运算时产生进位或借位,否则CF=0。移位指令会影响 CF。PF奇偶标志(Parity Flag) 。若 PF=1,表示操

    9、作结果中“1”的个数为偶数,否则PF=0。这个标志位主要用于检查数据传送过程中的错误。AF辅助进位标志(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中断

    10、允许标志(Interrupt Enable Flag) 。若 IF=1,则 CPU 可以响应外部可屏蔽中断请求;若 IF=0,则 CPU 不允许响应中断请求。IF 的状态可由中断指令设置。DF方向标志(Direction Flag) 。若 DF=1,表示执行字符串操作时按着从高地址向低地址方向进行;否则 DF=0。DF 位可由指令控制。TF单步标志(Trace Flag) 。又称跟踪标志。该标志位在调试程序时可直接控制CPU 的工作状态。当 TF=1 时为单步操作,CPU 每执行一条指令就进入内部的单步中断处理,以便对指令的执行情况进行检查;若 TF=0,则 CPU 继续执行程序。7. 803

    11、86 有哪几种工作方式?简述每种工作方式的特点。80386 有三种工作方式:实地址方式、保护方式和虚拟 8086 方式。实地址方式80386 在实地址方式下的工作原理与 8086 相同,主要差别是 80386 可4以处理 32 位的数据,如进行 32 位的寄存器的运算,以及偏移地址在 64KB 以内的 32 位的数据传送。另外,在实地址方式下 80386 新增加的两个段寄存器 FS 和 GS 是可用的。实地址方式是 80386 复位后立即出现的工作方式。保护方式80386 在保护方式下可以访问 4G 字节的物理存储空间,段的长度在启动页功能时是 4G 字节,不启动页功能时是 1M 字节,页功能

    12、是可选的。在此方式下,可以引入虚拟存储器的概念,以扩充软件所占有的存储器空间。保护方式是支持多任务的方式,提供了一系列的保护机制,如任务地址空间的分离、03 共四个特权级、特权指令、段和页的访问权限(只读或只执行等)以及段限检查。虚拟 8086 方式这是一种既有保护功能,又能执行 8086 代码的工作方式,是一种动态方式。在此方式下,80386 能够迅速、反复进行虚拟 8086 方式和保护方式的切换。从保护方式进入虚拟 8086 方式执行 8086 程序,然后离开虚拟 8086 方式,进入保护方式继续执行固有的 80386 程序。8. 80486 有哪些寄存器?简述各寄存器的功能。表 2-4

    13、80486 的寄存器组基本结构寄存器组 系统级寄存器组 浮点寄存器组通用寄存器指令指针寄存器标志寄存器段寄存器系统地址寄存器控制寄存器测试寄存器调试寄存器数据寄存器标记字寄存器指令和数据指针寄存器控制字寄存器9. Pentium 有哪些主要的寄存器,简述各组寄存器的功能。Pentium 的寄存器组织可以分成三大类,即基本寄存器组、系统寄存器组和浮点寄存器组。其中系统寄存器组只供系统程序访问,其他两组寄存器则供系统程序和应用程序共同访问。Pentium 微处理器对 80486 的寄存器作了一些扩充。EFLAGS 标志寄存器增加了两位:VIF (位 19)和 VIP(位 20) ,它们用于控制 P

    14、entium 虚拟 8086 方式扩充部分的虚拟中断。控制寄存器 CR0 的 CD 位和 NW 位被重新定义以控制 Pentium 的片内高速缓存,并新增了 CR4 控制寄存器对 80486 结构扩充。此外,还增加了几个模式专用寄存器,用于控制可测试性、执行跟踪、性能检测和机器检查错误等功能。10. 在 8086 系统中,段地址和偏移地址如下所示,请分别计算它们的物理地址。(1)F000:0100 物理地址为:F0000H+0100H=F0100H(2)2350:1ABC 物理地址为:23500H+1ABCH=24FBCH(3)3200:1234 物理地址为:32000H+1234H=3323

    15、4H(4)5000:010E 物理地址为:50000H+010EH=5010EH(5)10E0:2020 物理地址为:10E00H+2020H=12E20H(6)2010:1020 物理地址为:20100H+1020H=21120H(7)1000:1000 物理地址为:10000H+1000H=11000H(8)C0C0:C0C0 物理地址为:C0C00H+C0C0H=CCCC0H11. 从 8086 开始的所有 80x86 系列微机系统中,寻址内存的地址总线有多少位?内存的寻址范围为多少?数据宽度为多少?机型 地址总线宽度 内存地址范围 数据总线宽度8086 20 位 00000HFFFFF

    16、H 16 位580286 24 位 000000HFFFFFFH 16 位80386 32 位 00000000HFFFFFFFFH 32 位80486 32 位 00000000HFFFFFFFFH 32 位Pentium 32 位 00000000HFFFFFFFFH 64 位12. 简述上题所涉及的各种微机系统的内存组织方式。8086:存储器分段管理。80286:存储器分段管理,在保护方式下,存储器寻址使用 32 位指针,包含一个 16 位的选择子分量和一个 16 位的偏移量分量。但选择子的内容不再是一个物理存储器的地址的高 16 位,而是进入某一个存储器常驻表的变址值,所要求的段的 2

    17、4 位段基地址要从存储器中的表内取得。16 位偏移量用来加到段基址上,形成 24 位的物理地址80386:CPU 可直接寻址的物理空间达 4GB,除了保留存储器分段管理外,还增加了内存分页管理。80386 的段选择寄存器是在 80286 选择寄存器基础之上新增了两个支持当前数据段的段选择寄存器 FS 和 GS,与段选择寄存器相关联的段描述符高速缓冲器扩充到 64 位。80486:80486 具有 32 位的内存地址空间,对存储器段的访问采用段描述符管理机制。具有三种工作方式,即实地址方式、虚拟地址保护方式和虚拟 8086 方式。在虚拟地址保护方式下,可寻址 4GB 物理地址空间以及 64TB

    18、虚拟地址空间。80486 内部的存储器管理部件 MMU 由分段部件和分页部件组成。分段部件用来把指令给出的逻辑地址转换成线性地址,并对逻辑地址空间进行管理,实现多任务之间存储器空间的隔离和保护,同时也实现了指令和数据区的再定位。分页部件用来把线性地址转换成物理地址,并对物理地址空间进行管理,实现虚拟存储器技术。Pentium:地址总线仍为 32 位,因此物理寻址范围仍为 4GB。Pentium 微处理器在工作方式方面,还增加了一种“系统管理方式(SMM) ”,以实现对电源和 OS 进行管理等高级功能。13. 简述从 8086 到 Pentium 微处理器在组成结构上的变化,分析这些变化,你能得

    19、出什么结论?8086:8086 微处理器内部分为执行单元(EU)和总线接口单元(BIU )两部分。BIU单元用来实现 EU 的所有总线操作, EU 单元负责指令的执行。80286:在内部结构上,8086 中的总线接口部件 BIU 在 80286 中又分成了地址部件AU、指令部件 IU 和总线部件 BU,从而加快了处理器的运行速度。80386:80386 的内部结构由总线接口单元、指令预取部件、指令译码部件、执行部件、分段部件和分页部件 6 个逻辑功能部件组成,每个部件都能独立操作,又可以对同一条指令的不同部分同时并行操作,使多条指令重叠进行,大大提高了 CPU 的速度。80386 是对8028

    20、6 微处理器的彻底改进,在内存管理和处理速度上比 80286 之前的 CPU 有了很大的突破,是一种功能完善高可靠性的 CPU,并在目标代码上保持与 8086、80286 的向上兼容。80486:80486 芯片的内部结构由总线接口、高速缓存、指令预取、指令译码、控制、算术逻辑运算、浮点运算、分段和分页九大部件组成。这些部件可以重叠工作,并构成五级流水线的指令处理。芯片内具有 8KB 的数据/指令高速缓存 Cache,可为频繁访问的数据和指令提供高速缓存,从而加快 CPU 与存储器之间的信息交换。片内集成了浮点运算部件,可支持 32 位、64 位和 80 位的浮点算术运算。由于与 CPU 之间

    21、的数据通道总线加宽,而引线缩短,它们之间的信息交换速度也得到提高。片内具有存储管理部件 MMU,可支持对存储器地址实施管理和对存储器空间进行保护。6Pentium:Pentium 微处理器的基本组成包括总线接口部件、分页部件、片内 Cache 存储器、浮点部件、控制部件、执行部件以及分支目标缓冲器等。Pentium 提供了一个称为分支目标缓冲器 BTB(Branch Target Buffer)的 1KB 的 Cache 来动态地预测程序的分支操作。Pentium 芯片内部集成了 16KB 的 Cache,其中 8KB 作为数据 Cache,另外 8KB 作为指令 Cache,这两个超高速的

    22、Cache 可以并行工作。将指令 Cache 和数据 Cache 分离的目的是使指令预取和数据操作之间可能发生的冲突降至最低,从而提高 CPU 的效率。浮点指令流水线具有 8 级,实际上它是 U 流水线的扩充。U 流水线的前 4 级用来准备一条浮点指令,浮点部件中的后 4 级执行特定的运算操作并报告执行错误。CPU 内部的功能部件数量增加,集成度依次提高,将某些原在 CPU 外部的功能部件集成到 CPU 内部,功能越来越完善。第 3 章 微型计算机的指令系统1. 8086/8088 指令系统中操作数的类型有哪几种?关于操作数的寻址方式有哪几类?立即数、寄存器数和内存单元数。立即寻址、寄存器寻址

    23、、寄存器间接寻址、直接寻址、寄存器相对寻址、基址加变址寻址、基址加变址相对寻址。2. 指出段地址、偏移地址与物理地址之间的关系。有效地址 EA 又是指什么?段地址左移四位加上偏移地址形成 20 位的物理地址。EA 是指段内偏移地址,即表示段内某单元相对于段起始地址的空间位置。3. 指出能用于寄存器间接寻址及变址寻址的寄存器有哪些?它们通常与哪个段寄存器配合形成物理地址?能用于寄存器间接寻址及变址寻址的寄存器有基址寄存器 BX 和 BP,变址寄存器 SI和 DI, BX、SI、DI 与 DS 配合形成物理地址,而 BP 与 SS 配合形成物理地址。4. 与 8086 相比,80386 的堆栈操作

    24、类指令有那些改变?80386 的堆栈操作指令格式 功能PUSH 32 位立即数 将 32 位立即数压入堆栈。该指令执行后 SP 的值将减 4。PUSHAD 将所有通用寄存器 EAX、ECX 、EDX 、EBX、ESP、EBP、ESI和 EDI 的内容顺序压入堆栈,其中压入堆栈的 ESP 是该指令执行前 ESP 的值。执行该指令后,ESP 的值减 32。POPAD 将当前栈顶内容顺序弹至EDI、ESI、EBP、ESP、EBX、EDX、ECX 和 EAX,但是最终ESP 的值为弹出操作对堆栈指针调整后的值(而不是堆栈中保存的 ESP 的值) 。即执行该指令后 ESP 的值,可以通过增加 32来恢复

    25、。PUSHFD 将 32 位标志寄存器 EFLAGS 的内容压入堆栈。POPFD 将当前栈顶的 4 字节内容弹至 EFLAGS 寄存器。5. 简述 80386 微处理器中“系统设置和测试指令”的功能。系统设置和测试指令 80386 新增加的,它们一般出现在操作系统中,用于对系统的设置和测试。(1)清除 TS 标志指令 CLTS,这条指令用来清除机器状态字中的任务切换标志 TS。(2)存储全局/局部/中断描述符表寄存器指令 SGDT/SLDT/SIDT,这三条指令分别将7全局描述符表寄存器、局部描述符表寄存器或中断描述符表寄存器的内容送到存储器中。(3)装入全局/局部/中断描述符表寄存器指令 L

    26、GDT/LLDT/LIDT,这三条指令分别将存储器中的字节装入全局描述符表寄存器、局部描述符表寄存器或中断描述符表寄存器。局部描述符表寄存器为两个字节,其他两个寄存器为六字节宽。(4)存储任务寄存器指令 STR,例如:STR EBX ;将任务寄存器的两个字节内容送到内存,内存首字节地址由 EBX 指出。(5)装入任务寄存器指令 LTR,这条指令一般用于多任务操作系统中,它将内存中两个字节装入任务寄存器 TR。执行 LTR 指令后,相应的任务状态段 TSS 标上“忙”标志。(6)装入访问权指令 LAR,本指令将两个字节选择子中的访问权字节送到目的寄存器。(7)装入段界限值指令 LSL,LSL 将

    27、描述符中的段界限值送目的寄存器,在指令中,由选择子来指出段描述符。(8)检测段类型指令 VERR/VERW,VERR 检测一个选择子所对应的段是否可读,VERW 则检测一个选择子所对应的段是否可写。(9)调整请求特权级指令 ARPL,这条指令的功能为调整选择子的 RPL 字段,由此常用来阻止应用程序访问操作系统中涉及安全的高级别的子程序。ARPL 的第一个操作数可由存储器或寄存器指出,第二个操作数则必定为寄存器。如果前者的 RPL(最后两位)小于后者的 RPL,则 ZF 置为 1,且将前者的 RPL 增值,使其等于后者的 RPL;否则,ZF=0,并不改变前者的 RPL。(10)存储机器状态字指

    28、令 SMSW,将机器状态字 MSW 存到内存指定单元对应的两个字节中。(11)装入机器状态字指令 LMSW本指令将存储器中两个字节送到机器状态字 MSW 中,通过这种方式,可以使 CPU 切换到保护方式。6. 列出 80486 和 Pentium 微处理器新增加的指令,并简述每条指令的功能。除了浮点操作指令系统外,80486 新增加了 6 条指令。(1) BSWAP双字交换。使 32 位寄存器中的操作数按字节首尾交换,即 D31D24 与 D7D0 交换,D23D16 与 D15D8 交换。(2) XADD将源操作数与目的操作数交换并相加,其中源操作数必须为寄存器,而目的操作数可以是寄存器也可

    29、以是内存单元,然后相加,其结果存放在源寄存器中。(3) CMPXCHG比较与交换。该指令使用 3 个操作数:一个寄存器中的源操作数、一个寄存器或内存储器单元的目的操作数和一个隐含(不出现在用户所书写的指令中)的累加器(AL/AX/EAX ) 。如果目的操作数与累加器的值相等,源操作数送目的单元,否则将目的操作数送累加器。(4) INVDCache 无效指令。擦除整个片内 Cache,使之无效,并且启动一个擦除总线周期,使外部电路清除片外二级 Cache 的内容。(5) WBINVDCache 无效且回写指令。擦除整个片内 Cache,使之无效,并启动一个回写总线周期,8将片外二级 Cache

    30、中的数据回写到内存中,再清除二级 Cache 中的内容。(6) INVLPG转换检测缓冲器 TLB 无效指令。该指令带有一个操作数,指示 TLB 中的某一项,使之无效。与 80486 相比,Pentium 新增加了 3 条处理器专用指令和 5 条系统控制指令,但某些新增的指令是否有效与 Pentium 的型号有关,可利用处理器特征识别指令 CPUID 判别处理器是否支持某些新增指令。1、处理器特征识别指令 CPUID根据 EAX 中的参数,将处理器的说明信息送 EAX,特征标志字送 EDX。2、8 字节比较交换指令 CMPXCHG8B该指令带有一个内存储器单元操作数。它能实现将 EDX: EA

    31、X 中的 8 字节值与指定的 8 字节存储器操作数相比较,若相等,则使 ZF=1,且将 ECX:EBX 中的值送指定的 8字节存储单元替换原有的存储器操作数;否则使 ZF=0,且将指定的 8 字节存储器操作数送EDX: EAX。3、读时间标记计数器指令 RDTSC将 Pentium 中的 64 位时间标记计数器的高 32 位送 EDX,低 32 位送 EAX。该计数器随每一个时钟递增,在 Reset 后该计数器被置 0。利用该计数器可检测程序运行性能。4、读模型专用寄存器指令 RDMSR将 ECX 所指定的模型专用寄存器的内容送 EDX、EAX ,具体来说,高 32 位送EDX,低 32 位送

    32、 EAX。若所指定的模型寄存器不是 64 位,则 EDX、EAX 中的对应位无定义。5、写模型专用寄存器指令 WRMSR将 EDX、EAX 的内容送到由 ECX 指定的模型专用寄存器。具体来说, EDX 和 EAX的内容分别作为高 32 位和低 32 位。若指定的模型寄存器有未定义或保留的位,则这些位的内容不变。6、复位到系统管理模式指令 RSM7、将 32 位寄存器中的内容送控制寄存器 CR4 的指令格式为:MOV CR4,R32 8、将控制寄存器 CR4 的内容送 32 位寄存器的指令格式为:MOV R32,CR47. 什么是堆栈操作?以下关于堆栈操作的指令执行后,SP 的值是多少?PUS

    33、H AXPUSH CXPUSH DXPOP AXPUSH BXPOP CXPOP DX堆栈被定义为一种先进后出的数据结构,即最后进栈的元素将被最先弹出来。堆栈从一个称为栈底的位置开始,数据进入堆栈的操作称为压入(或压栈) ,数据退出堆栈的操作称为弹出,每进行一次弹出操作,堆栈就减少一个元素,最后一次压入的元素,称为栈顶元素,压入弹出操作都是对栈顶元素进行的堆栈的两种基本的操作。在进行以上一系列堆栈操作后,SP 指针的值是原 SP+2。98. 用汇编语言指令实现以下操作。(1)将寄存器 AX、BX 和 DX 的内容相加,和放在寄存器 DX 中。ADD AX,BXADD DX,AX(2)用基址变址

    34、寻址方式(BX 和 SI)实现 AL 寄存器的内容和存储器单元 BUF 中的一个字节相加的操作,和放到 AL 中。ADD AL,BYTE PTR BXSI(3)用寄存器 BX 实现寄存器相对寻址方式(位移量为 100H) ,将 DX 的内容和存储单元中的一个字相加,和放到存储单元中。ADD 100HBX,DX(4)用直接寻址方式(地址为 0500H)实现将存储器中的一个字与立即数 3ABCH 相加,和放回该存储单元中。ADD 0500H,3ABCH(5)用串操作指令实现将内存定义好的两个字节串 BUF1 和 BUF2 相加后,存放到另一个串 BUF3 中的功能。MOV CX,COUNTMOV

    35、SI,OFFSET BUF1MOV DI,OFFSET BUF3MOV BX,OFFSET BUF2AGAIN:LODSBADD AL,BXSTOSBINC BXDEC CXJNZ AGAIN9. 指出下列指令中,源操作数及目的操作数的寻址方式。(1)SUB BX,BP+35 ;寄存器寻址、寄存器相对寻址(2)MOV AX,2030H ;寄存器寻址、立即寻址(3)SCASB ;隐含操作数为寄存器寻址和寄存器间接寻址(4)IN AL, 40H ;寄存器寻址、立即寻址(5)MOV DI+BX,AX ;基址加变址寻址、寄存器寻址(6)ADD AX,50HDI ;寄存器寻址、寄存器相对寻址(7)MOV

    36、 AL,1300H ;寄存器寻址、直接寻址(8)MUL BL ;寄存器寻址、目的操作数为隐含寄存器寻址10. 已知(DS)= 1000H, (SI)= 0200H, (BX )= 0100H, (10100H)= 11H, (10101H)= 22H, (10600H)= 33H, (10601H )= 44H, (10300H)= 55H, (10301H)= 66H, (10302H)= 77H, (10303H )= 88H,试分析下列各条指令执行完后 AX 寄存器的内容。(1)MOV AX,2500H (AX)=2500H10(2)MOV AX,500HBX (AX)=4433H(3)

    37、MOV AX,300H (AX)=6655H(4)MOV AX,BX (AX)=2211H(5)MOV AX,BXSI (AX)=6655H(6)MOV AX,BX+SI+2 (AX)=8877H11. 判断下列指令是否有错,如果有错,说明理由。(1)SUB BL,BX ;两个操作数的宽度不一样(2)MOV BYTE PTRBX,3456H ;将 16 位的立即数传送到一个字节的内存单元(3)SHL AX,CH ;移位指令的移位位数用 CL 给出,不能用 CH。(4)MOV AH,SIDI ;不能用两个变址寄存器来实现寻址操作(5)SHR AX,4 ;只有当移位位数为 1 时,才能用立即数表达

    38、(6)MOV CS,BX ;不能对 CS 实现传送操作(7)MOV 125,CL ;立即数不能做目的操作数(8)MOV AX,BYTE PTRSI ;源操作数限定为字节,与目的操作数宽度不一致(9)MOV DI,SI ;两个操作数不能同时为内存数12. 设(DS)= 1000H, ( ES)= 2000H, (SS)= 3000H, (SI )= 0080H, (BX)= 02D0H, (BP)= 0060H,试指出下列指令的源操作数字段是什么寻址方式?它的物理地址是多少?(1)MOV AX,0CBH 立即寻址(2)MOV AX,100H 直接寻址,物理地址为:10100H(3)MOV AX,

    39、BX 寄存器间接寻址,物理地址为:102D0H(4)MOV AX,BP 寄存器间接寻址,物理地址为:20060H(5)MOV AX,BP+50 寄存器相对寻址,物理地址为:200B0H(6)MOV AX,BXSI 基址加变址寻址,物理地址为:10350H13. 分别说明下列每组指令中的两条指令的区别.(1) AND CL,0FH 按位相“与” ,高 4 位为“0000” ,低 4 位保留原值;OR CL,0FH 按位相“或” ,高 4 位为原值,低 4 位为“1111” 。(2) MOV AX,BX 将 BX 寄存器的内容传送到 AX 寄存器中;MOV AX,BX 将 BX 寄存器所指的内存单

    40、元的内容送 AX 寄存器中。(3) SUB BX,CX BX 寄存器内容减去 CX 寄存器的内容,结果送回到 BX;CMP BX,CX BX 内容减去 CX 内容,但结果不送回,而根据标志位的情况做进一步的动作。(4) AND AL,01H AL 内容与 01H 相“与” ,结果为“0000000x”送回 AL 寄存器;TEST AL,01H AL 内容与 01H 相“与” ,结果为“0000000x”不送回 AL寄存器,而根据标志位(ZF)情况做进一步的动作。(5) JMP NEAR PTR NEXT NEXT 所指指令在当前指令的同段内(16 位地址范围) ;JMP SHORT NEXT

    41、NEXT 所指指令在当前指令的 8 位地址范围内。(6) ROL AX,CL 循环左移,进位标志位不参与循环;11RCL AX,CL 循环左移,进位标志位参与循环。(7) PUSH AX 将 AX 内容存入栈顶指针处,即进栈操作;POP AX 将栈顶内容弹出装入 AX 寄存器中,即出栈操作。14. 试分析以下程序段执行完后 BX 的内容为何?MOV BX,1030HMOV CL,3SHL BX,CLDEC BX程序执行完后,BX=817FH,执行过程如下。15. 写出下列指令序列中每条指令的执行结果,并在 DEBUG 环境下验证,注意各标志位的变化情况。MOV BX,126BHADD BL,0

    42、2AHMOV AX,2EA5HADD BH,ALSBB BX,AXADC AX,26HSUB BH,-812第 4 章 8086/8088 汇编语言1. 8086 汇编语言指令由几部分组成?各部分的作用是什么?名字 指令操作符 操作数 ;注释名字可以是常量名、变量名、过程名、段名等标识符等,起标识和标记的作用;指令操作符字段说明指令的功能;操作数字段提供指令操作所需要的源数据和目的数据;注释字段用于程序员对语句或程序段落进行解释说明,增加可读性。2. 请解释变量和标号的含义,两者有何区别?所定义内存单元的名称为变量,可进行读、写操作,一般为数据区。标号是某条指令的地址标记,在代码段。3. 试描

    43、述汇编语言源程序的一般结构。STACK SEGMENT STACKDW 256 DUP(?)STACK ENDSDATA SEGMENTDATA ENDSCODE SEGMENTASSUME CS:CODE,SS:STACK,DS :DATASTART:CODE ENDSEND START4. 开发汇编语言源程序的主要步骤有哪些?首先用 EDIT 等编辑程序产生汇编语言的源程序,源程序是用汇编语言的语句编写的13且不能为机器所识别的程序,所以要经过汇编程序加以翻译,因此汇编程序的作用就是把源文件转换成用二进制代码表示的目标文件(称为 OBJ 文件) 。在转换的过程中,如果源程序中有语法错误,则

    44、汇编结束后,汇编程序将指出源程序中的错误信息,如非法格式,未定义的助记符、标号,漏掉操作数等。用户还可以用编辑程序来修改源程序中的错误,最后得到无语法错误的目标文件。目标文件虽然已经是二进制文件,但它还不能直接上机运行,必须经过连接程序(LINK)把目标文件与库文件或其他目标文件连接在一起形成可执行文件(EXE 文件) ,才可以在机器上运行。5. 数值返回运算符有哪几种?简述 LENGTH 与 SIZE 的区别。数值返回运算符有 TYPE、LENGTH、SIZE、OFFSET 和 SEG5 种。这些操作符把一些特征或存储器地址的一部分作为数值回送,但不改变原操作数的属性。其中:TYPE 是类型

    45、操作符。LENGTH 是分配单元长度操作符。SIZE 是分配字节操作符。OFFSET 是偏移量操作符。SEG 是段基址操作符。且有关系:SIZE=TYPE*LENGTH。6. 在 BUF1 变量中依次存储了 5 个字数据,接着定义了一个名为 BUF2 的字单元,表示如下:BUF1 DW 8765H,6CH,0,1AB5H ,47EAHBUF2 DW ?(1)设 BX 中是 BUF1 的首地址,请编写指令将数据 50H 传送给 BUF2 单元。ADD BX,10MOV WORD PTRBX,50H(2)请编写指令将数据 FFH 传送给数据为 0 的单元。ADD BX,4MOV WORD PTRB

    46、X,FFH7. 下面是一个数据段的定义,请用图表示它们在内存中存放的形式。DATA SEGMENTA1 DB 25H,35H,45HA2 DB 3 DUP(5)A3 DW 200,3AB6HA4 DW 3000H,6A6FHDATA ENDSA1 25H35H45HA2 05H05H05HA3 00H02HB6H3AH14A4 00H30H6FH6AH8. 说明下列语句所分配的存储空间及初始化的数据值。(1)BYTE_VAR DB BYTE,21,-42H,3 DUP(0, ?,2 DUP(2,3),?)(2)WORD_VAR DW 5 DUP(4,2,0) ,?,-8, BY, TE256H

    47、BYTE_VAR42H WORD_VAR 04H59H 00H54H 02H45H 00H15H 00H10111110B 00H0 04H 00H2 02H3 00H2 00H3 00H 04H0 00H 02H2 00H3 00H2 00H3 04H 00H0 02H 00H2 00H3 00H2 04H3 00H 02H00H00H00H11111000B11111111B1542H59H54H45H56H02H9. 在下列数据传送程序段中有些使用不当的语句,请改正之。A DB 10H,20H, OPQ,4FHB DB N DUP(?) ;改为 B DB 6 DUP(?)MOV DI,A

    48、 ;改为 MOV DI,OFFSET AMOV SI,B ;改为 MOV SI,OFFSET BMOV CX,LENGTH A ;改为 MOV CX,LENGTH BCC: MOV AX,DIMOV SI,AXINC SIINC DIDEC CX ;去掉该句LOOP CC10. 以下程序段落拟实现在同一个段内的调用过程,试判断可行性,如不能实现,请改正。CODE SEGMENTASSUME CS:CODEBEGIN:CALL SUB1CALL SUB2SUB1 PROC FARMOV AX,XMOV BX,YMUL BXRETSUB1 ENDPCODE ENDSEND STARTSUB1 应为

    49、 NEAR 型,过程 SUB2 并未定义,应定义 SUB2。程序段落改为:CODE SEGMENTASSUME CS:CODEBEGIN:CALL SUB116CALL SUB2SUB1 PROC NEARMOV AX,XMOV BX,YMUL BXRETSUB1 ENDPSUB2 PROC NEARRETSUB2 ENDPCODE ENDSEND BEGIN11. 有一个数据段定义了如下 6 个变量,请写出该数据段。(1)BUF1 为十进制数字节变量:64;(2)BUF2 为字符串变量:Teacher ;(3)BUF3 为十六进制数字节变量:2FH ;(4)BUF4 为双字变量: 657AH;(5)BUF

    展开阅读全文
    提示  道客多多所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:汇编语言程序设计教程第2版卜艳萍周伟.doc
    链接地址:https://www.docduoduo.com/p-8143867.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    道客多多用户QQ群:832276834  微博官方号:道客多多官方   知乎号:道客多多

    Copyright© 2025 道客多多 docduoduo.com 网站版权所有世界地图

    经营许可证编号:粤ICP备2021046453号    营业执照商标

    1.png 2.png 3.png 4.png 5.png 6.png 7.png 8.png 9.png 10.png



    收起
    展开