微处理器又称为的执行过程一般包含什么操作?

更多相关文档当前位置: >>
微机原理与接口技术试题集
前言微机原理与接口技术”是电类专业本科生的必修专业基础课。该课程主要内容包括:计 算机科学技术基础,计算机/微型计算机的组成与结构,微处理器结构,指令系统与汇编语 言程序设计,存储器及其接口,输入/输出及 DMA 接口,中断系统,串并行通信及其接口 电路,模拟接口,总线技术,80x86/Pentium 保护模式的软件体系结构,高性能微处理器、 常见的计算机外部设备等相关知识。 通过教学和实践, 学生能掌握微型计算机的工作原理和 系统结构, 掌握微机测控系统的研发技术和基本方法, 为今后的相关专业课程学习奠定了基 础。由于该课程内容不但包括了硬件知识,而且也包括了软件知识,相对讲覆盖知识面广、 涉及的概念偏多,抽象难以理解、同时也由于其实践性强,要搞好该门课程教学,必须辅之 大量练习题。本书与我校微机原理与接口技术主流教材配套,目的在于指导学生学习、练习 及考试(课程考试与考研) ,书中收集了大量的习题和答案,并同时也精选了一些自测题, 内容简明扼要、重点突出,系统性、实用性较强,可以启迪学生思维,拓宽思路,弥补学生 训练不足,教会学生其自动手能力,激发学生学习兴趣,使学生牢固掌握教材内容,并学以 致用。可作为课程学习和复习考研的辅导用书(必备资料) ,也可供从事微机应用系统开发 的工程技术人员阅读参考。 全书由张坤鳌副教授组织编写,牟奇副教授参编,龚赏福教授、朱宇副教授在百忙中审 阅了全书,并提出许多宝贵意见,在此本人表示衷心。第一章 微型计算机基础习题一1. 简述微型计算机系统的组成。 2. 简述计算机软件的分类及操作系统的作用。 3. 将下列十进制数转换成二进制数: (1) 49; (2)73.8125; (3) 79.75 4. 将二进制数变换成十六进制数: (1)101101B;(2)B;(3)1101B; (4)B;(5)1111111B;(6)B 5. 将十六进制数变换成二进制数和十进制数: (1)FAH;(2)5BH;(3)78A1H;(4)FFFFH; (5) 34.2AH;(6)B8.93H 6. 将下列十进制数转换成十六进制数: (1)39;(2)299.34375;(3)54.5625 7. 将下列二进制数转换成十进制数: (1)B;(2)B;(3)B 8. 计算(按原进制运算): (1)B+11010B;(2)10111B+B;(3)1011110B-1110B; (4)124AH+78FH;(5)5673H+123H;(6)1000H-F5CH; 9. 已知 a=1011B,b=11001B,c=100110B, 按二进制完成下列运算, 并用十进制运算检查计算 结果: (1)a+b;(2)c-a-b;(3)a?b;(4)c/b 10. 已知 a=B, b=B, 计算下列逻辑运算: (1)a AND(2)a OR(3)a XOR(4)NOT a 11. 设机器字长为 8 位,写出下列各数的原码和补码: (1)+1010101B;(2)-1010101B;(3)+1111111B; (4)-1111111B;(5)+1000000B;(6)-. 写出下列十进制数的二进制补码表示(设机器字长为 8 位): (1)15;(2)-1;(3)117;(4)0; (4)-15;(5)127;(6)-128;(7)80 13. 设机器字长为 8 位,先将下列各数表示成二进制补码,然后按补码进行运算,并用十进 制数运算进行检验: (1)87-73;(2)87+(-73);(3)87-(-73); (4)(-87)+73;(5)(-87)-73;(6)(-87)-(-73); 14. 已知 a,b,c,d 为二进制补码: a=B, b=B, c=B, d=B, 计算: (1)a+b;(2)a+c;(3)c+b;(4)c+d; (5)a-b;(6)c-a;(7)d-c;(8)a+d-c 15. 设下列四组为 8 位二进制补码表示的十六进制数,计算 a+b 和 a-b,并判断其结果是否 溢出: (1)a=37H, b=57H; (2)a=0B7H, b=0D7H; (3)a=0F7H, b=0D7H; (4)a=37H, b=0C7H 16. 求下列组合 BCD 数的二进制和十六进制表示形式: (1)907(3)ABCD(4)abcd 17. 将下列算式中的十进制数表示成组合 BCD 码进行运算,并用加 6/减 6 修正其结果: (1)38+42;(2)56+77;(3)99+88;(4)34+69; (5)38-42;(6)77-56;(7)15-76;(8)89-23 18. 将下列字符串表示成相应的 ASCII 码(用十六进制数表示): (1)Example 1;(2)Jinan U(3)-108.652; (4)How are you?;(5)Computer(6)Internet Web 19. 将下列字符串表示成相应的 ASCII 码(用十六进制数表示): (1)Hello(2)123&CR&456;(注:&CR&表示回车)(3)ASCII; (4)The number is 2315[参考答案]3. 解:(1)49=B (2)73. B (3)79.75=B 5. 解:(1)FAH=B=250D (2)5BH=B=91D (3)78A1H=10 D (4)FFFFH=11 D 7. 解:(1)B=22.625 (2)B=146.0625 (3)B=26.8125 9. 解:a=1011B=11, b=11001B=25, c=100110B=38 (1)a+b=100100B=36 (2)c-a-b=10B=2 (3)a?b=B=275 (4)c/b=1??1101B(=13) 11. 解:(1)+1010101B 原码 B 补码 B (2)-1010101B 原码 B 补码 B (3)+1111111B 原码 B 补码 B (4)-1111111B 原码 B 补码 B (5)+1000000B 原码 B 补码 B (6)-1000000B 原码 B 补码 . 解:按补码表示+87=B;+73=B;-87=B; -73=B (1)87-73=B-B=1110B=14 (2)87+(-73)=B+B=[1]B=14(舍去进位) (3)87-(-73)=B-B=[-1]B=-96(溢出) (4)(-87)+73=B+B=B=-14 (5)(-87)-73=B-B=[-1]B=96(溢出) (6)(-87)-(-73)=B-B=B=-14 15. 解:(1)a=37H, b=57H; a+b=8EH; a-b=[-1]E0H=-32 (2)a=0B7H, b=0D7H; a+b=[1]8EH=-114; a-b=[-1]E0H=-32 (3)a=0F7H, b=0D7H; a+b=[1]CEH=-50; a-b=20H=32 (4)a=37H, b=0C7H; a+b=FEH=-2; a-b=[-1]70H=112 17. 解: (1)将 38、42 表示成组合 BCD 码:38H、42H,然后按二进制进行运算, 并根据运算过程 中的 AF,CF 进行加 6/减 6 修正。38H+42H=7AH,低 4 位需要加 6 修正:7AH+6=80H,所 以有 38+42=80; (2)56H+77H=CDH,高 4 位、低 4 位都应加 6 修正:CDH+66H=[1]33H,因此有 56+77 =133; (3)99H+88H=[1]21H(AF=1), 高 4 位、低 4 位都应加 6 修正:[1]21H+66H=[1]87H, 因此 99+88=187 (4)34H+69H=9DH, 低 4 位需要加 6 修正:9DH+6=A3H, 修正结果使高 4 位超出 9, 这时再 对高 4 位进行加 6 修正: A3H+60H=[1]03H, 因此 34+69=103 (5) 38H-42H=[-1]F6H, 因 CF=1(有借位), 高 4 位应减 6 修正: [-1]F6H-60H=[-1]96H, 指 令的借位应表示成 100 的补码, 因此 38-42=96-100=-4 (6)77H-56H=21H, 不需要修正, 因此 77-56=21 (7)15H-76H=[-1]9FH, 高 4 位、低 4 位都应减 6 修正: [-1]9FH-66H=[-1]39H, 因此 15-76=39-100=-61 (8)89H-23H=66H, 不需要修正, 因此 89-23=66 19. 解:字符串的 ASCII 码(用十六进制数表示)为: (1)48,65,6C,6C,6F (2)31,32,33,0D,34,35,36 (3)41,53,43,49,49 (4)54,68,65,20,6E,75,6D,62,65,72,20,69,73,20,32,33习题二一、选择题 1.80486CPU 进行算术和逻辑运算时,可处理的信息的长度为( A、32 位 B、16 位 C、8 位 D、都可以 ) 。D)。2.在下面关于微处理器的叙述中,错误的是( CA、微处理器是用超大规模集成电路制成的具有运算和控制功能的芯片 B、一台计算机的 CPU 含有 1 个或多个微处理器 C、寄存器由具有特殊用途的部分内存单元组成,是内存的一部分 D、不同型号的 CPU 可能具有不同的机器指令 3.若用 MB 作为 PC 机主存容量的计量单位,1MB 等于( B A、210 个字节 B、220 个字节 C、230 个字节 )字节。D、240 个字节 )。4.运算器在执行两个用补码表示的整数加法时,判断其是否溢出的规则为( D A、两个整数相加,若最高位(符号位)有进位,则一定发生溢出 B、两个整数相加,若结果的符号位为 0,则一定发生溢出 C、两个整数相加,若结果的符号位为 1,则一定发生溢出D、两个同号的整数相加,若结果的符号位与加数的符号位相反,则一定发生溢出 5.运算器的主要功能是( C )。 D、函数运算A、算术运算 B、逻辑运算 C、算术运算与逻辑运算 6.运算器由很多部件组成,其核心部分是( B )。A、数据总线 B、算术逻辑单元 C、累加器 D、多路开关 7.在一般的微处理器中,( D )包含在 CPU 中。A、内存 B、输入/输出单元 C、磁盘驱动器 D、算术逻辑单元 8.80486CPU 的标志寄存器中,OF 标志表示运算结果的( C )情况。 A、进/借位 B、符号 C、溢出 D、辅助进位9.若某数据段位于存储区 38000H~47FFFH,则该数据段的段基址为(D)。 A、38000H B、47FFFH C、3000H D、3800H 10.程序设计中所使用的地址是(A)。A、逻辑地址 B、有效地址 C、物理地址 D、段基址 11.80X86 执行程序时,对存储器进行访问时,物理地址可由( B )组合产生。 A、SS 和 IP B、CS 和 IP C、DS 和 IP D、CS 和 BP12.某处理器与内存进行数据交换的外部数据总线为 32 位,它属于( C)。 A、8 位处理器 B、16 位处理器 C、32 位处理器 D、64 位处理器 13.在堆栈操作中,隐含使用的通用寄存器是( D A、AX B、BX C、SI D、SP ) C、质量 ) D、B ) D、价格 )。14.主要决定微机性能的是( A A、CPU B、耗电量15.十进制负数 C38 的八位二进制补码是( B A、B B、B C、B16.若某台微型计算机的型号是奔四 800,则其中 800 的含义是( D A、CPU 中有 800 个寄存器 C、该微机的内存为 800MB B、CPU 中有 800 个运算器 D、时钟频率为 800MHZ17.在计算机内部,一切信息的存取,处理和传送都是以( D )形式进行。 A、EBCDIC 码 B、ASCII 码 C、十六进制编码 D ) D、二进制编码18.16 位 PC 机中整数的有效范围是( A、-
C、0D65535 19.在( C A、原码B、-
或 0D65535)表示中,二进制数 B 表示十进制数C1 B、反码 C、补码 D、BCD 码 )20.用 8 位的二进制数的补码形式表示一个带符号数,它能表示的整数范围是( D A、-127―+127 B、-128―+128 C、-127―+128 D、-128―+127 21.计算机中运算器和控制器合称为( A、CPU B、ALU C、主机A) D、ENIAC B )位(bit)组成。22.32 位的个人计算机,一个字节(Byte)由( A、4 B、8 C、16D、3223.假设机器中浮点数的表示格式如下: 阶符 阶码 尾符 尾码15141211100当尾数用补码,阶码(阶码基数为 2,尾数以规格化数表示)用补码表示时,- 123 . 625 的表示形式为 ( A )。 A、0110 C、0101 24.从功能上,8086 的 CPU 由( A、SP、ALU B、控制器、FLAGS C B、1010 D、0110 )两部分组成。 C、EU、BIU B D、EU、ALU )。25.标志寄存器 FLAGS 中存放两类标志,即( A、符号标志、溢出标志 C、方向标志、进位标志B、控制标志、状态标志 D、零标志、奇偶标志26.若 AL=3BH,AH=7DH,则 AL 和 AH 中的内容相加后,标志 CF、SF 和 OF 的状态分别是 ( A )。 A、0、1、1 B、1、1、1 C、0、0、0 D、1、1、027.若 AL=3BH,AH=7DH,则 AL 和 AH 中的内容相减后,标志 CF、AF 和 PF 的状态分别是 ( B )。 A、0、0、1 B、1、1、1 C、0、1、0 D、1、0、0 B )。28.下列有关指令指针寄存器的说法中,哪一个是正确的( A、IP 存放当前正在执行的指令在代码段中的偏移地址 B、IP 存放下一条将要执行的指令在代码段中的偏移地址 C、IP 存放当前正在执行的指令在存储器中的物理地址 D、IP 存放当前正在执行的指令在存储器中的段地址-----29.最小模式时,当 M/IO为低电平时,表示 CPU 正在对( A、存储器 B、I/O 端口----------B)进行访问。C、外部存储器D、EPROM30.下面有关 MN/ M X 的叙述正确的是(C)A、是工作模式选择信号,由 CPU 产生,为高电平时 CPU 工作在最小模式,为低电平时,CPU 工作在最大模式 B、是工作模式选择信号,由 CPU 产生,为低电平时 CPU 工作在最小模式, 为高电平时,CPU 工作在最大模式 C、是工作模式选择信号,由外部输入,为低电平时 CPU 工作在最小模式,为高电平时,CPU 工作在最大模式 D、是工作模式选择信号,由外部输入,为高电平时 CPU 工作在最小模式,为低电平时,CPU 工作在最大模式 31.某 CPU 的主频为 250MHZ,则它的时钟周期为( A、250ns B、50ns C、40ns D )D、4ns D )32.如果访问存储器时使用 BP 寻址,则默认的段寄存器是( A、CS B、ES C、DS D、SS33.某单元在数据段中,已知 DS=1000H,偏移地址为 1200H,则它的物理地址为( B A、10000H B、11200H C、12100H D、13000H)34. 某系统中, 已知 SS=2360H, SP=0800H, 若将 20H 个字节的数据入栈, SP 的内容为 则 ( A、0780H B、0820H C、23E20H D、07E0HD )35. 某系统中, 已知建立堆栈时 SS=2360H, SP=0800H, 经过一段时间后, 的内容变为 0700H, SP 则堆栈中有多少个字的数据( A ) A、80H B、50H C、100 D、100H 36.设某一个单元的物理地址是 54321H,则正确的逻辑地址表示为( C A、4321H:50000H B、54320H:1H C、5430H:0021H D、5432H:00001H)37.如果一个程序在执行前 CS=1000H,IP=2000H,该程序的起始地址是( B A、3000H B、12000H C、21000H D、1000H)38.如果一个堆栈从地址 1250H:0100H 开始,SP=0050,则 SS 的段地址是( B A、12600H B、1260H C、1265H D、125BH A ))39.若已知[X]补=B,[Y]补=B,则[X C Y ]补=( A、B 二、判断题 1.80486 的逻辑段不允许有段的重叠和交叉。 N N B、B C、BD、溢出2.在 80486 的 32 位标志寄存器中,其每一位都有一定的含义。3. 若一个数据块的起始地址为 20A0H:0F6H, 则该数据块起始地址的实际地址是 21B60H。 4.SP 的内容可以不指向堆栈的栈顶。 5.寄存器寻址其运算速度较低。 N Y N NN6.字长是描述 CPU 数据总线宽度的指标。7.计算机的堆栈是一种特殊的数据存储区,数据存取采用先进先出的原则。 8.当运算结果各位全部为零时,标志 ZF=0。 N 9.逻辑地址不是物理地址,但它是唯一的。 三、填空题 1.计算机是通过( )、( )、( N)总线把各个部件连接在一起,构成一个系统。 )位。 )。 )、( )位的寄存器。 )。2.8086 的数据总线是 ()位,地址总线是(3.PC 机主存储器中的基本存储单元的长度是( 4.80486 可访问 8 位、 ( )、和 (5.在微处理器的实地址方式下,段寄存器的作用是( 6.若一个数中含有 3 个“1”,则其奇偶标志为 ()。 )和( )组8.80486 工作在实模式下时,若需对堆栈区进行操作,其物理地址是由( 合产。 9.程序设计中使用的地址称为( ( )。),而 CPU 对存储器单元进行操作时使用的地址称为10.按存储器的分级原则,其容量最大的一级存储器成为( 11.按存储器的分级原则,其速度最快的一级存储器成为( 12.微机的主要性能指标中,字长是指( 13.微型计算机由( )和( )。)。 )。)两大部分组成。 )H 方取 位,14.上电复位时,若 CPU 的 CS=0FFFFH,IP=0000H,则第一条指令从( 15. 8088 与外部交换数据的总线宽度是 EU 内部总线宽度是 位。位, 与寄存器组之间的数据总线宽度是16. AL=80H, 设 AH=83H, 和 AH 中的内容相加后, AL CF= AF= ,SF= 。, OF=, ZF=, PF=,17. 将整个存储空间划分为许多逻辑段,每个逻辑段容量在 以内,各个逻辑段 相互重叠。 地址,但可以有多个 ,偏移地址来源于 地址。 。18. 中,某单元只能有一个 19.如果对堆栈进行操作,则段基址来源于20.某存储单元物理地址为 32413H,则相对于段地址为 3000H,其偏移地址 为 ,若,它的偏移地址是 1003H,则其段地址为 。 通过系统总21.在
系统中,所有读写存储器或 I/O 端口操作都是由 线完成的。 四、简答题 1.简述 EU 和 BIU 的主要功能? 2.8086 和 8088 的主要区别是什么? [参考答案] 一、选择题 1.D 7.D 13.D 19.C 25.B 31.D 37.B 二、判断题 1. × 2.× 3.× 4.× 5.× 6.√ 7.× 8.× 9.× 2.C 8.C 14.A 20.D 26.A 32.D 38.B 3.B 9.D 15.B 21.A 27. B 33. B 39.A 4.D 10.A 16.D 22.B 28.B 34.D 5.C 11.B 17.D 23.A 29.B 35.A 6.B 12.C 18.D 24.C 30.C 36.C三、填空题 1. 地址;数据;控制 2.16,20 3.字节 4.16,32 5.存放段基址 6.1 8.SS,SP 9.逻辑地址,物理地址 10.外存 11.寄存器 12.一次能处理的二进制位数 13.软件,硬件 14.FFFF0H 15. 8、8、16 16. 1,1,0,1,0,0 17. 64KB、可以 18.物理,逻辑 19. SS、SP 20. 2413H、3141H 21. BIU(总线接口单元) 四、简答题 1.参考答案:EU 的主要功能是执行指令,完成指令规定的所有操作。BIU 的主要功能是负 责与存储器或 I/O 端口的信息传输。它们可以并行操作。 2.参考答案:8086BIU 中指令队列长度是 6B,一旦指令队列空出 2B,BIU 将自动读取指令。 而 8088BIU 中指令队列长度是 4B, 只要指令队列出现一个空闲字节, 都将自动读取指令。 BIU 8088BIU 与外部交换数据的总线宽度是 8 位,总线控制电路与专用寄存器间的数据总线也是 8 位,在 EU 内部则是 16 位。而 8086CPU 则都是 16 位的 第二章 微处理器结构习题一一、简答题 1. 2. 3. 4. 微处理器内部结构由哪几部分组成?阐述各部分的主要功能。 微处理器级总线有哪几类?各类总线有什么作用? 为什么地址总线是单向的,而数据总线是双向的?
微处理器内部有哪些寄存器?其主要作用是什么?5. 什么是虚拟存储器?其作用是什么? 的虚拟存储器容量最大有多少? 6. 何为 RISC 技术?与 CISC 相比其主要特点是什么? 7.
有哪三种工作模式?各有何特点? 8. 什么叫流水线技术和超标量、超流水线技术? 9. 什么叫高度缓冲存储器技术?微机采用这种技术的根本目的是什么? 10. 试比较实工作模式和仿 8086 工作模式的异同。 11. 8086 的逻辑地址、物理地址和线性地址分别指什么?它们的寻址能力分别为多少? 12. 保护工作模式下的保护是何含义?该工作模式下主要进行哪几方面的保护功能? 13. DOS 下对超过 640KB 的内存如何管理? 14. 下列操作可使用哪些寄存器? (1)加法和减法;(2)循环计数;(3)乘法和除法;(4)保存段地址; (5)表示运算结果的特征;(6)指令地址;(7)从堆栈中取数的地址; 15. 将下列两组的词汇和说明关联起来: (1)CPU; (2)EU; (3)BIU; (4)IP; (5)SP; 两种; (6)存储器; (7)堆栈; (8)指令; (9)状态标志; (10)控制标志; F.以后进先出方式工作的存储器空间; G.把汇编语言程序翻译成机器语言程序的系统程序; H.惟一代表存储器空间中的每个字节单元的地址; I.能被计算机直接识别的语言; J.用指令的助记符、符号地址、标号等符号书写程序的语 A.保存当前栈顶地址的寄存器; B.指示下一条要执行指令的地址; C.总线接口部件, 实现执行部件所需要的所有总线操作; D.分析并控制指令执行的部件; E.存储程序、数据等信息的记忆装置,PC 机有 RAM 和 ROM 言; (11)段寄存器; (12)物理地址; (13)汇编语言; (14)机器语言; AF、PF、CF; (15)汇编程序; (16)连接程序; (17)目标码; (18)伪指令 二、计算选择题 1. 如果某微处理器有 20 条地址总线和 16 条数据总线: (1)假定存储器地址空间与 I/O 地址空间是分开的,则存储器地址空间有多大? (2)数据总线上传送的有符号整数的范围有多大? 2. 将十六进制数 62A0H 与下列各数相加,求出其结果及标志位 CF、AF、SF、ZF、OF 和 PF 的值: (1)1234H;(2)4321H;(3)CFA0H;(4)9D60H 3. 4. 从下列各数中减去 4AE0H,求出其结果及标志位 CF、AF、SF、ZF、OF 和 PF 的值: (1)1234H;(2)5D90H;(3)9090H;(4)EA04H 写出下列存储器地址的段地址、偏移地址和物理地址: (1);(2)1FA0:0A1F;(3)267A:B876 5. 给定一个数据的有效地址为 2359H,并且(DS)=490BH,求该数据的物理地址。 6. 如果在一个程序段开始执行之前,(CS)=0A7F0H,(IP)=2B40H,求该程序段的第 一个字的物理地址。 7. 设(BX)=637DH,(SI)=2A9BH,位移量=0C237H,(DS)=3100H,求下列寻址方 式产生的有效地址和物理地址: (1)直接寻址;(2)用 BX 的寄存器间接寻址;(3)用 BX 的寄存器相对寻址; (4)用 BX 和 SI 的基址变址寻址;(5)用 BX 和 SI 的基址变址且相对寻址 8. 若(CS)=5200H 时,物理转移地址为 5A238H,那么(CS)变成 7800H 时,物理转移地 址为多少? 9. 设(CS)=0200H,(IP)=2BC0H,位移量=5119H,(BX)=1200H,(DS)=212AH, (224A0H)=0600H,(275B9H)=098AH。求使用下列寻址方式时的转移地址: (1)段内直接寻址方式; (2)使用 BX 的寄存器寻址的段内间接寻址方式; (3)使用 BX 的寄存器相对寻址的段内间接寻址方式; 10. 有一块 120 个字的存储区域,其起始地址为 625A:234D,写出这个存储区域首末单元的 物理地址。 O.执行部件,由算术逻辑单元(ALU)和寄存器组等组成; P.由汇编程序在汇编过程中执行的指令; Q.告诉 CPU 要执行的操作,在程序运行时执行; R.机器语言代码。 K.把若干个模块连接起来成为可执行文件的系统程序; L.保存各逻辑段的起始地址的寄存器; M.控制操作的标志,PC 机有三位:DF、IF、TF; N.记录指令操作结果的标志,PC 机有六位:OF、SF、ZF、16. IBM PC 有哪些寄存器可用来指示存储器的地址? 11. 两个十六进制数 7825H 和 5A1FH 分别相加和相减后,求运算结果及各标志位的值。[参考答案]一、 1. 答:微处理器内部结构主要由算术逻辑运算单元(ALU)、控制器、工作寄存器和 I/O 控制逻辑组成。 算术逻辑运算单元是 CPU 的核心, 它完成所有的运算操作; 控制器是 CPU 的“指挥中心”,只有在它的控制下,CPU 才能完成指令的读入、寄存、译码和执行; 工作寄存器用于暂时存储寻址信息和计算中间结果;I/O 控制逻辑用于处理 I/O 操作。 3. 9. 答:由于在计算机中地址总是由 CPU 产生的,因此地址总线是单向的。而数据可从 CPU 写到存储器,也可从存储器读到 CPU,因此数据总线是双向的。 解:(1)段地址:2134H; (2)段地址:1FA0H; (3)段地址:267A H; 偏移地址:10A0H; 偏移地址:0A1F H; 偏移地址:B876H; 物理地址:223E0H 物理地址:2041FH 物理地址:32016H11. 解:物理地址为: 0A7F0H×10H+2B40H=A3330H。 15. 答:两组词汇和说明的关联关系为 (1)~O; (2)~D; (3)~C; (4)~B; (5)~A; (6)~E; (7)~F; (8)~Q; (9)~N; (10)~M; (11)~L; (12)~H; (13)~J; (14)~I; (15)~G; (16)~K; (17)~R; (18)~P。 16. 答:指示存储器地址的寄存器有:SI,DI,BX,BP 二、 1. 解:存储空间为 220? 1048576 ? 1M 字节, 数据总线上传送的有符号整数的范围为-32768~+32767。 3. 解:(1)1234H-4AE0H=C754H;CF=1,AF=0,SF=1,ZF=0,OF=0,PF=0 (2)5D90H -4AE0H=12B0H;CF=0,AF=0,SF=0,ZF=0,OF=0,PF=0 (3)9090H-4AE0H=45B0H;CF=0,AF=0,SF=0,ZF=0,OF=0,PF=0 (4)EA04H-4AE0H=9F24H;CF=0,AF=0,SF=1,ZF=0,OF=0,PF=1 8. 解:偏移地址为 5A238H-5200H×10H=8238H,因此当(CS)变成 7800H 时,物理转移 地址为 7800H×10H+8238H=80238H 10.解:存储区域的字节数为:2×120=240=0F0H, 首地址为:625AH×10H+234DH=648EDH, 末地址为:648EDH+0F0H=649DDH, 或者:625AH×10H+(234DH+0F0H)=625A0H+243DH=649DDH。 11. 解: 7825H+5A1FH=0D244H, AF=1, CF=0, ZF=0, SF=1, OF=1 (当将 7825H 和 5A1FH 看作有符号数时,两个正数相加得到一个负数,结果显然是错误的,实际上,在运算过 程中,次高位产生了进位而最高位没有产生进位,故运算产生溢出),PF=1(因为在 44H 中包含有偶数个 1)。 7825H-5A1FH=1E06H,AF=1,CF=0,ZF=0,SF=0,OF=0,PF=1。 5A1FH-7825H=0E1FAH,AF=0,CF=1,ZF=0,SF=1,OF=0,PF=1。 习题一第三章 指令系统和寻址方式习题三一.选择题 1.指令 ADD CX,55H[BP]的源操作数的寻址方式是( )。 (A) 寄存器寻址 (B) 直接寻址 (C) 寄存器间接寻址 (D) 寄存器相对寻址 2.设(SS)=3300H,(SP)=1140H,在堆栈中压入 5 个字数据后,又弹出两个字数据, 则(SP)=( ) 。 (A) 113AH (B) 114AH (C) 1144H (D) 1140H 3.若 SI=0053H,BP=0054H,执行 SUB SI,BP 后,则( )。 (A) CF=0,OF=0 (B) CF=0,OF=1 (C) CF=1,OF=0 (D) CF=1,OF=1 4.已知(BP)=0100H,(DS)=7000H,(SS)=8000H,(80100H)=24H,(80101H)=5AH, (70100H)=01H,(70101H)=02H,指令 MOV BX,[BP]执行后,(BX)=( ) 。 (A) 0102H (B) 0201H (C) 245AH (D) 5A24H 5.实模式下 80486CPU 对指令的寻址由( )决定。 (A) CS,IP (B) DS,IP (C) SS,IP (D) ES,IP 6.使用 80486 汇编语言的伪操作指令定义: VAL DB 2 DUP(1,2,3 DUP(3),2 DUP(1, 0)) 则在 VAL 存储区内前十个字节单元的数据是( )。 (A) 1,2,3,3,2,1,0,1,2,3 (B) 1,2,3,3,3,3,2,1,0,1 (C) 2,1,2,3,3,2,1,0 (D) 1,2,3,3,3,1,0,1,0,1 7.下列四条指令都可用来使累加器清&0&,但其中不能清&进位&位的是( ) 。 (A) XOR AL,AL (B) AND AL,0 (C) MOV AL,0 (D) SUB AL,AL 8.若(AX)=96H,(BX)=65H,依次执行 ADD AX,BX 指令和 DAA 指令后,(AL)=( )。 (A) 0FBH (B) 01H (C) 61H (D) 0BH 9.下列能使 CF 标志置 1 的指令是( ) 。 (A) CMC (B) CLC (C) STC (D) CLD 10.MOV AX,[BP+SI]隐含使用的段寄存器是( )。 (A) CS (B) DS (C) ES (D) SS 11.设 AL=7FH,要使 AL=80H,应使用下列哪一条指令( )。 (A) AND AL,80H (B) OR AL,80H (C) XOR AL,80H (D) NOT AL 12.在执行十进制调整指令 DAA,DAS 之前必须将结果存放于( )中。 (A) AX (B) AH (C) AL (D) BL 13.下列指令执行后影响标志位的是( ) 。 (A) MOV (B) PUSH (C) ADD (D) XCHG 14.唯一能对应存储单元的地址是( )。 (A) 物理地址 (B) 端口地址 (C) 有效地址 (D) 逻辑地址 15.计算机能直接执行的语言是( )。 (A) 机器语言 (B) 汇编语言 (C) 高级语言 (D) 程序设计语言 16.需采用先进后出原则操作的存储区是( )。 (A) 寄存器组 (B) 地址缓冲器 (C) 数据寄存器 (D) 堆栈区 17.寄存器 SP 用于对( )的操作。 (A) 空闲单元 (B) 堆栈单元 (C) 数据单元 (D) 指令单元 18.若(BX)=1000H,(DS)=2000H,(21000H)=12H,(21001H)=34H,执行 LEA SI,[BX] 指令后,SI 寄存器的内容是( )。 (A) 1234H (B) 3412H (C) 1000H (D)0010H 19.若(AL)=80H,执行 NEG AL 指令后,CF 和 OF 标志位的状态分别为( )。 (A) 0 和 0 (B) 0 和 1 (C) 1 和 0 (D) 1 和 1 20. 若要完成 (AX) *7/2 运算, 则在下列四条指令之后添加( )指令。 MOV BX, ;MOV AX CL,3 ;SAL AX,CL ;SUB AX,BX( ) 。 (A) ROR AX,1 (B)SAL AX,1 (C)SAR AX,1 (D)DIV AX,2 21.在保护模式下,代码段的段基址存在于( )中。 (A) 段选择符 (B) 指令指针寄存器 (C) 段寄存器 (D) 段描述符 22.查表指令 XLAT 规定,待查表的首址应存入( )中。 (A) BP (B) SI (C) DI (D) BX 23.将要取的某一条指令的偏移地址由( )提供。 (A) SI (B) BP (C) SP (D) IP 24.寄存器间接寻址方式中,操作数在( )中。 (A) 通用寄存器 (B) 堆栈 (C) 主存单元 (D) 段寄存器 25.运算型指令的寻址和转移型指令的寻址,其不同点在于( )。 (A) 前者取操作数,后者决定程序的转移地址 (B) 后者取操作数,前者决定程序的转移地址 (C) 两者都是取操作数 (D) 两者都是决定程序的转移地址 26.JMP WORD PTR [DI]是( )。 (A) 段内间接转移 (B) 段间间接转移 (C) 段内直接转移 (D) 段间直接转移 27.INC 指令不影响( )标志。 (A) OF (B) CF (C) SF (D) ZF 28.逻辑移位指令 SHL 用于( )。 (A) 带符号数乘 2 (B) 带符号数除 2 (C) 无符号数乘 2 (D) 无符号数除 2 29.算术移位指令 SAR 用于( )。 (A) 带符号数乘 2 (B) 带符号数除 2 (C) 无符号数乘 2 (D) 无符号数除 2 30.下列指令中,有语法错误的是( )。 (A) MOV [SI],AX (B) IN AL,DX (C) XOR AX,1234H (D) OUT 210H,AL 31.在下列伪指令中定义字变量的是( )。 (A) DD (B) DW (C) DQ (D) DT 32.下列指令中,能使 AL 的内容固定为偶数的是( )。 (A) ADD AL,01 H (B) OR AL,0FEH (C) AND AL,0FEH (D) XOR AL,0FEH 33.改变( )寄存器的值,可改变堆栈中栈顶元素的位置。 (A) BP (B) IP (C) SP (D) BX 34.加减类运算指令对标志位的状态( )。 (A) 有影响 (B) 部分影响 (C) 无影响 (D) 任意 35.当 AH=( )时,执行 INT 21H 指令可在屏幕上显示一组字符。 (A) 01H (B) 02H (C) 09H (D) 0AH 36.已知 VAR DW 1,2,$+2,5,6 若汇编时 VAR 分配的偏移地址是 2010 和,则汇 编后 2014H 单元的内容是( )。 (A) 6H (B) 14H (C) 5H (D) 16H 37.若某数据段位于存储区 68000H~7FFFFH,则该数据段的段基址是( )。 (A) 68000H (B) 7FFFFH (C) 6000H (D) 6800H 38.SP 的作用是用来指示( )。 (A) 栈顶元素的有效地址 (B) 下一条要执行指令的地址 (C) 下一条要取的指令的地址 (D) 栈底元素的有效地址 39.在数据传送指令执行过程中,不能直接与立即数进行传送的是()。 (A)通用寄存器 (B)段寄存器 (C)存储器 (D)通用寄存器和存储器 40.转移类指令对标志位的状态( )。 (A)有影响 (B)部分影响 (C)无影响 (D)随意 41.欲从存储单元取某操作数,可采用( )。 (A) 寄存器寻址、寄存器间接寻址 (B) 立即寻址、直接寻址 (C) 立即寻址、寄存器间接寻址 (D) 寄存器间接寻址、直接寻址 42.在指令 MOV AX,0 执行后,CPU 状态标志位 ZF 的取值( )。 (A)为 0 (B)为 1 (C)不确定 (D)不改变 43.已知 AL=H,BL=H,执行 ADD AL,BL 指令后,OF、SF、CF、 ZF 标志的状态为( )。 (A) 1、0、1、1 (B)1、1、0、0 (C)0、0、1、1 (D) 0、1、0、1 44.下列指令中,错误的是( )。 (A) MOV BX,OFFSET BUF (B) LEA SI,BUF (C) LEA DI,OFFSET BUF (D) MOV BP,SEG BUF 45.输入/输出指令对标志位的状态( )。 (A)有影响 (B)部分影响 (C)无影响 (D)任意 46.下列描述正确的是( )。 (A) 汇编语言仅由指令性语句组成 (B) 汇编语言包括指令性语句和伪指令语句 (C) 指令性语句和伪指令语句的格式是完全相同的 (D) 指令性语句和伪指令语句需经汇编程序翻译成机器代码后才能执行 47.下列指令中不属于逻辑运算指令的是( )。 (A)XOR (B)CWD (C)NOT (D)OR 48.假定 DX=B,CL=3,CF=1,则执行指令 SHL DX,CL 后,DX 的值为( )。 (A)005CH (B)0017H (C)1700H (D)05C8H 49.下列指令中不会改变指令指针寄存器内容的是( )。 (A)MOV (B)JMP (C)CALL (D)RET 50.伪指令 ENDP 告诉汇编程序( )。 (A)宏定义结束 (B)过程定义结束 (C)段定义结束 (D)过程运行结束 51.利用 DOS 系统功能调用的 9 号(AH=9)功能,显示一个字符串,其入口参数应 为( )。 (A)DS:DX=字符串首地址 (B)DS:DX=字符串末地址 (C)CS:DX=字符串首地址 (D)CS:DX=字符串末地址 52.在下列伪指令中定义双字变量的是( )。 (A) DB (B) DW (C) DD (D) DT 二、判断题 1.指令 MOV AX,[BX]的源操作数是寄存器寻址方式。 2.对堆栈区的操作必须遵循先进先出的原则。 3.比较两个带符号数的大小,可根据 CF 标志来判断。 4.逻辑操作符 AND,OR,XOR 和 NOT,只能用于数字表达式。 5.不能给段寄存器赋立即数。 6.OF 位可用来表示有符号数的溢出。 7.无条件转移指令只能用于段内直接转移。 8.MOV AX,[BP]的源操作数的物理地址为 16*(DS)+(BP)。 9.指令 MOV DI,OFFSET [BX][SI]是正确的。 10.指令 MOV CS,BX 是非法的。 11.指令 NOT AX,BX 是合法的。 12.MOV [BX][BP],AX 是对的。 13.80486 中对堆栈单元的存取操作是以字节为单位的。 14.JMP 指令要影响标志位。 15.INC 指令影响所有状态标志。 16.欲交换寄存器 SI,DI 的内容,可用指令 XCHG SI,DI 实现。 17.CPU 中的程序计数器 IP 中存放的是指令的逻辑地址。 18.两个符号相同的数相减不会产生溢出。 19.汇编程序就是汇编语言程序。 20.相对寻址中的位移量只能用 16 位表示。 21.CLD 指令是 MOVSB 指令的使用条件之一。 22.段寄存器间不能直接进行数据传送。 23.要把变量 BUFF 的有效地址送给 BX,可用 MOV BX,BUFF 指令。 24.当对堆栈段的数据进行操作时,其操作数的有效地址可保存在 BP 中。 25.TEST 指令属于逻辑运算指令。 26.CS 和 IP 都不能作传送指令的目的操作数。 三、填空题 1.若 SS=5310H,SP=0E30H,其物理地址为( )。 2.若 CH=07H,CL=08H,执行指令 ADD CH,CL 后,AF=( ),CF=( ),OF=( ),PF=( )。 3.指令由( ) 和( ) 两个字段构成。 4. 条件转移指令 JNE 的测试条件是( )。 5.若用指针(BP)访问存储器,则数据包含在( ) 段中。 6. 若 AX=1234H,SP=1000H,指令 PUSH AX 执行后 AX=( ),SP=( ) 。 7.指令采用( )寻址方式时操作数是在代码段中。 四、阅读程序 程序中数据定义如下: DATA1 DW ? DATA2 DB 32 DUP(?) DATA3 DD ? COUNT EQU $-DATA1 此时 COUNT 的值是( )。 2.分析下列程序段,说出其功能。MOV AX,1000H MOV DS,AX MOV ES,AX MOV SI,0100H MOV DI,0200H MOV CX,50D REP MOVSB 3. 写出下列程序段的功能 MOV BX,2000H MOV DS,BX XOR AL,AL MOV CX,100 AGAIN: MOV [BX],AL INC BX LOOP AGAIN 4.写出下列程序段的功能 LEA SI,BUFFER LEA DI,ARRAY MOV CX,100 XOR BL,BL LP: CMP [SI],01H JNZ LP1 INC BL LP1:INC SI LOOP LP MOV [DI],BL 5.写出下列程序段的功能 MOV CX,16 MOV AX,N MOV BH,0 LP0: SHL AX,1 JC LP INC BH LP: LOOP LP0 MOV SUM,BH 6.写出下列程序段的功能 MOV AL,N AND N,0FH MOV BL,N SHR AL,4 MOV BH,AL 7.执行下列程序段后,AX=? MOV AX,0702H MOV BH,09H AAD DIV BH 8.下面程序段执行后 AL=? ABC DW 2152H,3416H,5731H,4684H MOV BX,OFFSET ABC MOV AL,3 XLAT 9.执行下面的程序段后 AX=? MOV CX,5 MOV AX,50 NEXT: SUB AX,CX LOOP NEXT HLT 10. 执行下面的程序段后 AX=? TAB DW 1,2,3,4,5,6 ENTRY EQU 6 MOV BX,OFFSET TAB ADD BX,ENTRY MOV AX,[BX] 11. 执行下面程序段后 AX= ARRAY DW 1,2,3,4,5,6,7,8,9,10 COUNT EQU $-ARRAY XOR AX,AX MOV CX,COUNT MOV SI,OFFSET ARRAY NEXT:ADD AX,[SI] INC SI LOOP NEXT 12.写出下列程序段的功能 MOV AH,1 INT 21H AND AL,0FH MOV BL,AL MOV AH,1 INT 21H SHL AL,4 AND AL,BL 将从键盘接受到的两个字符拼在一起 13.执行下列程序段后 N DB 07H XOR BH,BH MOV BL,N RCL BL,1 ADD BH,BL XOR BH,0FFH HLT 寄存器 BH 的值是 ,寄存器 BL 的值是 。 14. 分析下列程序段 MOV AL,N XOR AH,AH MOV CL,4 DIV CL 当 N=3CH 时,程序执行完后 AX= 15.程序段如下: CLC MOV AL,6 MOV BL,9 ADD AL,BL MOV BL,AL DAA 执行上面程序段后,AL= ,AF= ,BL= 16.执行下列指令后 TABLE DB 19H,55H,9CH LEA BX,TABLE MOV AL,[BX] XOR AL,89H MOV [BX],AL 寄存器 AL 的值是 17.分析下列程序段,说明该程序段执行何种功能。 MOV CX,10 MOV DL,30H NEXT1:MOV AH,2 INT 21H INC DL LOOP NEXT1 18.执行下列指令后 MOV AX,1245H MOV BX,5689H ADD AL,BL MOV CL,AL MOV AL,AH ADC AL,BH DAA 寄存器 AL 的值是 ,寄存器 CL 的值是 19.分析下列程序段: MOV AL,N XOR AH,AH MOV BL,16 DIV BL 当 N=57H 时,程序执行完后 AX=? 20.在下面程序的括号中分别填入如下指令: ① LOOP XH ② LOOPNE XH ③ LOOPE XH 问在这三种情况下,当程序执行完后,AX、BX、CX、DX 四个寄存器中的内容分别是 什么? START:MOV AX,04 MOV BX,02 MOV CX,03 MOV DX,05 XH:INC AX ADD BX,AX SHR DX,1 ( ) HLT 21.阅读程序,请说出该程序的功能是什么? MOV AX,DATA MOV DS,AX LEA SI,BUFFER XOR BL,BL MOV CX,100 AGAIN: MOV AL,[SI] TEST AL,1 JNZ NEXT INC BL NEXT: INC SI LOOP AGAIN HLT 22.从键盘上接收一字符,若是“Y”转 YES,是“N”转 NO,否则继续等待,到输 入“Y”或“N”为止。 程序段如下: MOV AL,N AND AL,0FH ADD AL,90H DAA ADC AL,40H MOV RUT,AL HLT 问: ①若 N=5,下列程序执行后 AL=? ②该程序段的功能是什么? 23.执行下列程序段后: DATA SEGMENT DT1 LABLE WORD DT2 DB 12H,34H DATA ENDS ?????? MOV AL,DT2 MOV DX, DT1 寄存器 AL 的值是 ① ,寄存器 DX 的值是 ② 。 24.读下列程序,请说出该程序的功能是什么? DATA SEGMENT SUM DW 0 DATA ENDS STACK SEGMENT DB 200 DUP(?) STACK ENDS CODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE START: MOV AX,DATA MOV DS,AX MOV CX,50 MOV AX,0 MOV BX,1 NEXT: ADD AX,BX INC BX INC BX DEC CX JNE NEXT MOV SUM,AX MOV AH,4CH INT 21H CODE ENDS END START 25.设伪指令定义如下,请画出内存分配示意图。 BUF DB ? DW ‘AB’ DW ‘C’ DW 1234H DB ‘EF’ 26.执行下列程序段后: DATA SEGMENT DT1 DW 8A9BH DT2 DB 7CH, 6DH DATA ENDS ┇ ┇ MOV AX, DT1 MOV BX, OFFSET DT1 MOV SI, OFFSET DT2 寄存器 BX 的值是 ① ,寄存器 SI 的值是 ② 。 27.执行下列指令后: TABLE DB 10H,33H,41H ┉┉ MOV BX,OFFSET TABLE MOV AL,[BX] XOR AL,80H MOV [BX],AL 寄存器 AL 的值是多少? 28.执行下列程序段后: DATA SEGMENT N1 DW 3355H N2 DB 23H, 89H DATA ENDS ┇ MOV AX, N1 MOV DI, OFFSET N1 MOV BP, OFFSET N2 寄存器 DI 的值是多少?寄存器 BP 的值是多少? 29.执行下列指令后: DAT DB 10H,33H,41H ┉┉ LEA BX,DAT MOV AX,SEG DAT MOV ES,AX MOV AL,ES:[BX] XOR AL,80H MOV ES:[BX],AL 寄存器 AL 的值是多少? 30.执行下列程序段后: BUF DB 01H ?? XOR AL,AL MOV AL,BUF MOV BL,AL SAL AL,1 ADD AL,BL XOR AL,0FFH HLT 寄存器 AL 的值是多少?寄存器 BL 的值是多少?五.程序填空 1.下列程序是在键盘上输入 120 个字符,然后将输入反序后显示在屏幕上。请将程 序填写完整。 STACK1 SEGMENT STP DW 120 DUP ( ? ) STACK1 ENDS CODE SEGMENT ASSUME CS:CODE,SS:STACK1 START: MOV AX, STACK1 MOV SS, AX MOV SP, SIZE STP MOV CX,120 LOOP1: MOV AH,01H INT 21H PUSH AX ( ) MOV DL,0AH MOV AH, 02H INT 21H MOV DL, 0DH INT 21H MOV CX, 120 LOOP2: ( ) MOV AH,02H INT 21H LOOP LOOP2 MOV AH,4CH INT 21H CODE ENDS END START 六、编写程序 1.在 STR 到 STR+49 单元中存放着一个字符串,试编写一个程序,测试字符串中是 否存在数字,如有,则把 DL 的第五位置 1,否则将该位置 0。 2.试编程实现,从键盘接收 N 个(N≤60)8 位二进制数,统计其中奇数的个数, 并将结果显示在屏幕上。 3.已知有 100 字节的数据块存放在以 5C10H: 2000H 开始的存储区内,要求编写一 个完整程序将数据移动到以 5C10H:2008H 开始的存储区内。 4.数组 A 包含 100 个互不相等的整数,数组 B 包含 150 个互不相等的整数,试编程 实现将数组 A 和数组 B 都有的整数存放在数组 C 中。 5.在以 BASE 起始的表中存有一组字符,它以‘回车’(0DH)结束。请编写程序: 实现从该表中查找关键字 KEY(设关键字 KEY 在 AL 中),并将找到的第一个关键字 偏离表首的位置存放在寄存器 DX 中,若无此关键字,DX 返回值为-1。 6.编写一个中断程序,实现人机对话。要求执行程序时,显示‘WHAT IS YOUR NAME?’,在回车换行后,接收键盘输入信息,并显示。 7.编写程序找出 BUF 数据区中 50 个带符号数的最大值和最小值,并分别存入 MAX 和 MIN 单元。 8.试编程实现从键盘接收 N 个(N≤50)8 位二进制数,统计偶数的个数及偶数之 和,并将统计的个数以十进制方式显示在屏幕上。 9.以 STRING 起始的字符串的最大长度为 80 个字符,字符串的结束用字符$表示。 编写程序在该字符串中查找是否有空格符(ASCII 码为 20H),若有就将第一个空格 字符串中的位置(00H~4FH)存入 POST 单元;若无空格则将-1 存入 POST。 10.BUFFER 字节数组中存有一组无序列字节数数据,列的长度表示在 BUFFER 的第 一个字节中 KEY 中为一个字节数据,编写程序在 BUFFER 中查找有无 KEY,若有就结 束,若没有就将 KEY 加入到 BUFFER 中去,并修改列的长度。 11.利用移位及数据循环指令完成将 DH AL 中的 16 位二进制乘以 8 的运算,结果仍 存入 DH AL 中。 12.分别从键盘上接收两长度相等的组数 A 和 B,试完成两数组的求和任务,将结 果存放在数组 C 中,并显示在屏幕上。 13.编写程序,将键盘输入的小写字母用大写字母显示出来。 14.要求从键盘接收一个十进制数字,然后找出它的前导数字和后继数字,并按相 反的顺序显示输出。 15.设在变量 X、Y、Z 中存放有三个数,若三个数都不为 0,则求出三个数之和存 入 U 中,若有一个为 0,则将其它两个单元也清零,编写此程序。 16.求出首地址为 DATA 的 M 个字节的无符号数组中最小奇数,并把它存放于 DL 中。一.选择题 1.(D) 7.(C) 13.(C) 19.(C) 25.(A) 31.(B) 37.(D) 43.(B) 49.(A) 二、判断题 2.(A) 8.(C) 14.(A) 20.(C) 26.(A) 32.(C) 38.(A) 44.(C) 50.(B) 3.(C) 9.(C) 15.(A) 21.(D) 27.(B) 33.(C) 39.(B) 45.(C) 51.(A) 4.(D) 10.(D) 16.(D) 22.(D) 28.(C) 34.(A) 40.(C) 46.(B) 52.(C) 5.(A) 11.(D) 17.(B) 23.(D) 29.(B) 35.(C) 41.(D) 47.(B) 6.(D) 12.(C) 18.(C) 24.(C) 30.(D) 36.(D) 42.(D) 48.(D) 1.× 2.×3.×4.√5.√6.√7.×8.× 9.×10.√ 11.× 12.× 13.× 14.× 15.× 16.√ 17.√18.√ 19.× 20.× 21.× 22.√ 23.× 24.√ 25.√ 三、填空题 1.53F30H 2. 0 ; 0; 0; 1 26.√3.操作码;操作数 4. ZF=0 5.SS 6. 1234H,0FFEH 7.立即 四、阅读程序 1. 38(或 26H) 2. 将以 10100H 起始的 50 个单元的内容传送至以 10200H 起始的 50 个单元 中 3. 将数据段中以 2000H 起始的 100 个单元中的内容清零 4.统计以 BUFFER 为首址的 100 个单元中数字为 1 的个数存入 ARRAY 单 元 5.统计 N 字中 0 的个数 6.将 N 的内容拆为两部分分别存入 BH,BL 中 7.AX=0008H 8.AL=34H 9.AX=23H 10. AX=0004H 11. 12. AX=0055H 将从键盘接受到的两个字符拼在一起13.BH=0FFH,BL=0EH 14. AX=000FH 15.AL=15H,AF=1,BL=0FH 16.90H 17.向屏幕上依次输出 0,1,?。9 18.AL=68H,CL=CEH 19.AX=0705H 20. ① AX=0007H,BX=0014H,CX=0,DX=0② AX=0007H,BX=0014H,CX=0,DX=0 ③ AX=0005H,BX=0007H,CX=0002H ,DX=0002H 21. 程序的功能是: 统计以 BUFFER 为起始地址的 100 个单元中偶数的个 数。 22.① 35H 23.① 12H ② 将十六进制数转换为 ASCII 码 ② 3412H24.程序的功能是:求从 1 开始的 50 个奇数之和。 25.(如下图)26. ①、0000H ②、0002H 27.AL=90H 28.DI=0000H BP=0002H 29. AL=90H 30.①AL=0FCH ②BL=1五.程序填空 1.①、LOOP 六、编写程序 LOOP1 ②、POP AX; MOV DL,AL 1.在 STR 到 STR+49 单元中存放着一个字符串,试编写一个程序,测试字符串 中是否存在数字,如有,则把 DL 的第五位置 1,否则将该位置 0。 DATA SEGMENT STR1 DB 50 DUP(?)DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA MAIN PROC FAR START: PUSH DS MOV AX,0 PUSH AX MOV AX,DATA MOV DS,AX BEGIN: MOV CX,50 MOV SI,0 REP1: MOV AL, STR1[SI] CMP JB CMP JA OR JMP GO: INC LOOP AL, 30H GO AL, 39H GO DL, 20H EXIT SI REP1AND DL, 0DFH EXIT: RET MAIN ENDP CODE ENDS END START 2.试编程实现,从键盘接收 N 个(N≤60)8 位二进制数,统计其中奇数的个 数,并将结果显示在屏幕上。 DATA SEGMENT KEY DB 61KEY1 DB ? KEY2 DB 61 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV DX,OFFSET KEY MOV AH,0AH INT 21H MOV AL,0 LEA SI,KEY2 MOV CH,0 MOV CL,KEY1 LP0: MOV BL,[SI] TEST BL,01H JZ LP1 ADD AL,01H DAA LP1: INC SI LOOP LP0 MOV BL,AL MOV CL,4 SHR AL,CL ADD AL,30H MOV DL,AL MOV AH,02H INT 21H AND BL,0FH ADD BL,30H MOV DL,BL MOV AH,02H INT 21H MOV AH,4CH INT 21H CODE ENDS END START 3.已知有 100 字节的数据块存放在以 5C10H: 2000H 开始的存储区内,要求编 写一个完整程序将数据移动到以 5C10H:2008H 开始的存储区内。 参考程序 CODE SEGMENT ASSUME CS:CODE MAIN: MOV AX,5C10H MOV ES,AX MOV DS,AX MOV SI,2063H MOV DI,206BH STD MOV CX,100 REP MOVSBMOV AH,4CH INT 21H CODE ENDS END MAIN 4.数组 A 包含 100 个互不相等的整数,数组 B 包含 150 个互不相等的整数,试 编程实现将数组 A 和数组 B 都有的整数存放在数组 C 中。 参考程序 DAT SEGMENT A DB 100 DUP(?) B DB 150 DUP(?) C DB 150 DUP(?) N DW 00H DAT ENDS COD SEGMENT ASSUME CS:COD,DS:DAT,ES:DAT START: MOV AX,DAT MOV DS,AX MOV ES,AX CLD LEA SI,B MOV DX,150 LP0: MOV CX, 100 LEA DI,AMOV AL,[SI] REPNZ SCASB JNZ LP1 LEA BX,CADD BX,N MOV [BX],AL INC N LP1: INC SI DEC DX JNZ LP0 MOV AX,004CH INT 21H COD ENDS END START 5.在以 BASE 起始的表中存有一组字符,它以‘回车’(0DH)结束。请编写 程序:实现从该表中查找关键字 KEY(设关键字 KEY 在 AL 中),并将找到的 第一个关键字偏离表首的位置存放在寄存器 DX 中,若无此关键字,DX 返回值 为-1。 LEA DI,BASEMOV DX,-1 LOP: MOV CMP JZ CMP JZ INC JMP BL,[DI]BL,0DH DONE BL,AL LOP1 DI LOPLOP1: MOV DX,DI DONE: HLT 6. 编写一个中断程序, 实现人机对话。 要求执行程序时, ‘WHAT IS YOUR 显示 NAME?’,在回车换行后,接收键盘输入信息,并显示。(提示:使用 09H 和 0AH 功能调用) DATA BUF DB ? DB 81 DUP ( ? ) MESG DB ‘WHAT IS YOUR NAME?’, 0AH, 0DH DB $ DATA ENDS SEGMENT DB 81 STACKSEGMENT PARA STACK ‘STACK’DB 100 DUP ( ? ) STACK CODE ENDSSEGMENTASSUME CS:CODE, DS: DATA, SS: STACK START PROC FARPUSH DS MOV AX, 0 PUSH AX MOV AX, DATA MOV DS, AX DISP: MOV DX,OFFSET MESG MOV AH,09H INT 21H KEYBI: MOV DX, MOV AX, INT 21H LF: MOV DL, 0AH OFFSET BUF 0AHMOV AH,02H INT 21H DISTR:MOV DX,OFFSET BUF+2 09HMOV AH, INT 21H RET START CODE ENDSENDPEND START 7.编写程序找出 BUF 数据区中 50 个带符号数的最大值和最小值,并分别存入 MAX 和 MIN 单元。 参考程序如下: DATA SEGMENT BUF DB 50 DUP(?)MAX DB ? MIN DB ?CONT EQU $-BUF DATA ENDS STACK SEGMENT TP DB 100 DUP(?)STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK MAIN PROC FAR START: PUSH DS SUB AX,AX PUSH AX MOV DS,AX LEA BX,BUFMOV CX,CONT-1 MOV AL,[BX] MOV AH,[BX+1] INC CMP BX AH,ALJGE LOP1 XCHG AH,AL LOP1: INC CMP BX AH,[BX]JGE LIS XCHG AH,[BX] JMP LOP2 LIS:CMP JLEAL,[BX] LOP2XCHG AL,[BX] LOP2: LOOP LOP1MOV MAX,AH MOV MIN,AL RET MAIN ENDP CODE ENDS END START 8.试编程实现从键盘接收 N 个(N≤50)8 位二进制数,统计偶数的个数及偶 数之和,并将统计的个数以十进制方式显示在屏幕上。 DATA SEGMENT KEY1 DB 51 KEY2 DB ? KEY3 DB 51 DUP(?) ENDSDATACODE SEGMENT ASSUME DS:DATA, CS:CODE MAIN: MOV AX,DATA MOV DS,AX MOV SI,OFFSET KEY1 MOV AH,0AH INT 21H LEA XOR BX,KEY3 DX,DXMOV CL,KEY2 MOV CH,0 LP0: MOV AL,[SI] TEST AL,01H JNZ LPADD BL,AL MOV AL,BH ADD AL,1 DAA MOV BH,AL LP: INC SI LOOP LP0SHL AL,4 ADD AL,30H MOV DL,AL MOV AH,01 INT 21H AND BH,0FH MOV DL,30H ADD DL,BH MOV AH,1 INT 21H MOV AH,4CH INT 21H CODE ENDS END MAIN 9.以 STRING 起始的字符串的最大长度为 80 个字符,字符串的结束用字符$表 示。编写程序在该字符串中查找是否有空格符(ASCII 码为 20H),若有就将第 一个空格字符串中的位置(00H~4FH)存入 POST 单元;若无空格则将-1 存入 POST。 LEA BX,STRINGMOV CX,80 NEXT1: MOV AL,[BX] CMP AL,’$’JZ DONE CMP AL,20HJZ NEXT INC BX LOOP JMP NEXT: JMP DONE: END1: NEXT1 DONE MOV POST,BL END1 MOV POST,0FFH ??10. BUFFER 字节数组中存有一组无序列字节数数据, 列的长度表示在 BUFFER 的第一个字节中 KEY 中为一个字节数据, 编写程序在 BUFFER 中查找有无 KEY, 若有就结束,若没有就将 KEY 加入到 BUFFER 中去,并修改列的长度。 LEA SI,BUFFER MOV CL,[SI] INC SI XOR CH,CHNEXT: MOV AL,[SI] CMP AL,KEYJZ DONE INC SI LOOP NEXTMOV AL,KEY MOV [SI],AL INC BYTE PTR DONE: BUFFER???。 11.利用移位及数据循环指令完成将 DH AL 中的 16 位二进制乘以 8 的运算, 结果仍存入 DH AL 中。 MOV CX,3 NEXT: SHL AL,1 RCL DH,1 LOOP NEXT MOV AH,4CH INT 21H 12.分别从键盘上接收两长度相等的组数 A 和 B,试完成两数组的求和任务, 将结果存放在数组 C 中,并显示在屏幕上。 DATA SEGMENT A0 DB 80 A1 DB ? A DB 80 DUP(?)B0 DB 80 B1 DB ? B DB 80 DUP(?) C DB 80 DUP(?)DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA MAIN: MOV AX,DATA MOV DS,AX LEA MOV DX,A0 AH,0AHINT 21H LEA DX,B0MOV AH,0AH INT 21H CLC LEA SI,A LEA LEA BX,B DI,CMOV CL,A1 XOR CH,CHNEXT: MOV AL,[SI] ADC AL,[BX]MOV [DI],AL INC BX INC SI INC DI LOOP NEXTMOV CL,A1 XOR LEA DI,C CH,CHN0: MOV DL,[DI] SHL DL,4 ADD DL,30H CMP DL,39HJNC N1 ADD DL,07H N1: MOV AH,01H INT 21H AND [DI],0FH MOV DL,[DI] ADD DL,30H CMP DL,39HJNC N2 ADD DL,07H N2: MOV AH,01H INT 21H INC DI LOOP N0MOV AH,4CH INT 21HCODE ENDS END MAIN 13.编写程序,将键盘输入的小写字母用大写字母显示出来。 AGAIN: MOV AH,2 INT 21H AND AL,B MOV DL,AL MOV AH,1 INT 21H JMP AGAIN14.要求从键盘接收一个十进制数字,然后找出它的前导数字和后继数字,并按 相反的顺序显示输出。 MOV AH,2 INT 21H MOV CL,AL INC AL MOV DL,AL MOV AH,1 INT 21H MOV DL,CL MOV AH,1 INT 21H DEC CL MOV DL,CL MOV AH,1 INT 21H 15.设在变量 X、Y、Z 中存放有三个数,若三个数都不为 0,则求出三个数之 和存入 U 中,若有一个为 0,则将其它两个单元也清零,编写此程序。 MOV AL,X AND AL,AL JNZ NEXT OR AL,YJZ DONE CMP Z,0JZ DONE MOV Y,0 MOV Z,0 JMP NEXT: CMP DONE Y,0JNZ NEXT1 CMP Z,0JZ DONE MOV X,0 MOV Z,0 JMP NEXT1: CMP DONE Z,0JNZ NEXT2 MOV X,0 MOV Y,0 JMP DONENEXT2: ADD AL,Y ADD AL,Z MOV U,AL DONE: ??16.求出首地址为 DATA 的 M 个字节的无符号数组中最小奇数,并把它存放于 DL 中。 LEA BX,DATAMOV CX,M MOV AH,01H AGAIN: MOV AL,[BX] TEST AL,0FFH JZ NEXT CMP AH,AL JNC NEXT MOV AH,AL NEXT: INC BX LOOP AGAIN MOV DL,AL第四章 汇编语言程序设计习题四例 4-1 写出下列变量的内容: VAR1 DB 125,125/3, -1, -10H VAR2 DW 125, 125/3, -1, -10H VAR3 DB ‘AB’, ‘CD’ VAR4 DW ‘AB’, ‘CD’ 解:按十六进制数依次写出各个变量的内容为: VAR1:7D,29,FF,F0 VAR2:007D,0029,FFFF,FFF0 VAR3:41,42,43,44 VAR4: 按内存存储顺序给出: 7D,29,FF,F0,7D,00,29,00,FF,FF,F0,FF,41,42,43,44,42,41,44,43 例 4.2 START设有下列伪指令: DB 1,2,3,4,’ABCD’ DB 3 DUP(?,1) BUF DB 10 DUP (?),15 L EQU BUF-START求 L 的值。 解:由 EQU 伪指令知,L 的值为 BUF 的偏移地址减去 START 的偏移地址,而变量 START 共占用 8 个字节,第 2 行定义的变量(无变量名)共占用 6 个字节,因此,L 的值为 8+6 =14=0EH。 例 4. 3 在缓冲区 DATABUF 中保存有一组无符号数据 位)其数据个数存放在 DATABUF (8 ,的第 1、2 个字节中,要求编写程序将数据按递增顺序排列。(与教材 p.114 例 4.3.10 类 似, 但方法不同) 解:这里采用双重循环实现数据的排序,这可使程序变得简单。N=100 STACK TOP STACK DATA DW 100H DUP(?) LABEL WORD ENDS SEGMENT DB N DUP(?) DATA CODE START: MOV AX,DATA MOV DS,AX MOV ES,AX MOV AX,STACK MOV SS,AX LEA SP,TOP ; 取出随机数据 MOV CX,DATABUF LEA SI,DATABUF+2 MOV BL,23 MOV AL,11 LP: MOV [SI],AL INC SI ADD AL,BL LOOP LP ENDS SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK ;设有 100 个数据 SEGMENT STACK ‘STACK’DATABUF DW N ; 数据排序 MOV CX,DATABUF DEC CX LEA SI,DATABUF+2 ADD SI,CX LP1: PUSH CX PUSH SI LP2: MOV AL,[SI] CMP AL,[SI-1] JAE NOXCHG XCHG AL,[SI-1] MOV [SI],AL NOXCHG: DEC SI LOOP LP2 POP SI POP CX LOOP LP1 ;数据排序结束 MOV AH,4CH MOV AL,0 INT 21H CODE ENDS END START ;返回 DOS例 4-4有一组数据(16 位而进制数)存放在缓冲区 BUF1 中, 数据个数保存在 BUF1 的头两个字节中。要求编写程序实现在缓冲区中查找某一数据,如果缓冲区中没有该数据, 则将它插入到缓冲区的最后;如果缓冲区中有多个被查找的数据,则只保留第一个,将其 余的删除。 解:在缓冲区 BUF 中搜索指定的数据,当没有找到时,插入该数据;当找到时,进入 搜索多余的重复数据,每找到一个就删除它(将缓冲区的剩余数据向前移动一个字)。当 然应注意更新缓冲区的长度单元。STACK TOP STACK DATA BUF SEGMENT STACK 'STACK' DW 100H DUP(?) LABEL WORD ENDS SEGMENT DW 10 DW H,H,H,H,10A7H,0B612H DW 10 DUP(?); 设缓冲区原有 10 个字,指定的数据为(NEW)=56AAH NEW DATA CODE START:DW 56AAH ENDS SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK MOV AX,DATA MOV DS,AX MOV ES,AX MOV AX,STACK MOV SS,AX LEA SP,TOP MOV CX,BUF LEA SI,BUF+2 MOV AX,NEW ;搜索指定的数据L1: CMP AX,[SI] JZ L2 .......INC SI INC SI LOOP L1 INC BUF JMP OK L2: DEC CX INC SI INC SI L3: CMP AX,[SI] JZ L4 INC SI INC SI LOOP L3 JMP OK L4: PUSH SI DEC CX PUSH CX MOV DI,SI INC SI INC SI CLD REP MOVSW DEC BUF ;找到一个重复数据,则删除它 ;找到后,在剩余部分搜索重复的数据 ;没有找到,则插入数据 MOV [SI],AX POP CX POP SI JMP L3 OK: MOV AH,4CH MOV AL,0 INT 21H CODE ENDS END START ;返回 DOS ;删除后,返回继续搜索重复的数据例 4.5 在缓冲区 DAT1 和 DAT2 中,存放着两组递增有序的 8 位二进制无符号数,其 中前两个字节保存数组的长度,要求编程实现将它们合并成一组递增有序的数据 DAT,DAT 的前两个字节仍用于保存数组长度。 解:这里要用到 3 个指针的使用。对于写指针首选使用 DI,两个读指针可采用 SI 和 BX,分别指示 DAT1 和 DAT2。这样可适时使用字符串指令,以简化程序设计。 在设计中,将用 BX 指示的缓冲区 DAT2 内容读入 AL,这样,当要将 DAT1 的内容传送到 DAT 时,可采用 MOVSB 指令;当要将 DAT2 的内容传送到 DAT 时,可采用 STOSB 指令。STACK TOP STACK DATA DAT1 DAT2 DAT DATA CODE START: MOV AX,DATA MOV DS,AX MOV ES,AX MOV AX,STACK MOV SS,AX LEA SP,TOP MOV CX,DAT1 MOV DX,DAT2 MOV DAT,CX ADD DAT,DX LEA SI,DAT1+2 LEA BX,DAT2+2 SEGMENT STACK 'STACK' DW 100H DUP(?) LABEL WORD ENDS SEGMENT DW 10 DB 10H,25H,67H,68H,73H,83H,95H,0A8H,0C2H,0E6H DW 13 DB 05,12H,26H,45H,58H,65H,67H,70H,76H,88H,92H,0CDH,0DEH DW ? DB 200 DUP(?) ENDS SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK ;设 DAT1 中有 10 个数据,DAT2 中有 13 个数据 LEA DI,DAT+2 CLD L1: MOV AL,[BX] INC BX L2: CMP AL,[SI] JB L3 ;DAT1 区中的数据传送到 DAT 区 MOVSB DEC CX JZ L4 JMP L2 L3: STOSB DEC DX JZ L5 JMP L1 L4: MOV SI,BX DEC SI MOV CX,DX L5: REP MOVSB MOV AH,4CH MOV AL,0 INT 21H CODE ENDS END START ;返回 DOS ;DAT2 区中的数据传送到 DAT 区例 4. 6已知缓冲区 BUFA 内有 20 个互不相等的整数 (其序号从 0 到 19) 缓冲区 BUFB ,内有 30 个互不相等的整数(其序号从 0 到 29)。编写程序完成:将既在 BUFA 中出现又在 BUFB 中出现的整数(设为 x)存放在缓冲区 BUFC 中,并将 x 在 BUFA 和 BUFB 中的序号分别 存放于缓冲区 BUFCA 和 BUFCB 中。 解:这里需要 5 个指针,但 BUFC、BUFCA 和 BUFCB 为同步操作,只需要一个指针,寻址 方式为寄存器相对寻址,即(设 AL 为找到的值,DL、BL 为序号) MOV BUFC[DI],AL MOV BUFCA[DI],DL MOV BUFCB[DI],BL ; 对序号也应小心处理,我们采用寄存器相对寻址,例如 MOV AL,BUFA[SI],其中 SI 即为序号。 STACK TOP STACK SEGMENT STACK 'STACK' DW 100H DUP(?) LABEL WORD ENDS N1=20 N2=30 DATA BUFA BUFB BUFC BUFCA BUFCB DATA CODE START: MOV AX,DATA MOV DS,AX MOV ES,AX MOV AX,STACK MOV SS,AX LEA SP,TOP ;以 BUFA 为外循环,每个字节与 BUFB 的所有字节比较(构成内循环), ;以确定是否存在相同的值。 MOV CX,N1 XOR SI,SI XOR DI,DI L1: MOV AL,BUFA[SI] PUSH CX MOV CX,N2 XOR BX,BX L2: CMP AL,BUFB[BX] JZ L3 INC BX LOOP L2 JMP L4 ;找到相同的值后,进行值传送和序号保存。 L3: MOV BUFC[DI],AL MOV DX,SI MOV BUFCA[DI],DL MOV BUFCB[DI],BL INC DI L4: POP CX SEGMENT DB 10H,25H,67H,26H,68H,73H,83H,58H,0,06H,12H,0CDH,95H DB 0A8H,0C2H,48H,0E6H,0F1H,1AH,0F5H DB 05,12H,26H,45H,53H,60H,6AH,7FH,76H,88H,92H,0C1H,0DEH,0E1H,0F5H DB 09,17H,23H,48H,58H,65H,67H,70H,7CH,82H,96H,0CDH,0D1H,0F1H,0FEH DB 20 DUP(?) DB 20 DUP(?) DB 20 DUP(?) ENDS SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK INC SI LOOP L1 MOV AH,4CH MOV AL,0 INT 21H CODE ENDS END START ;返回 DOS4.21.习题写出完成下列要求的变量定义语句:(1)在变量 var1 中保存 6 个字变量:4512H,4512,-1,100/3,10H,65530; (2)在变量 var2 中保存字符串:’BYTE’, ’word’, ’WORD’; (3)在缓冲区 buf1 中留出 100 个字节的存储空间; (4)在缓冲区 buf2 中,保存 5 个字节的 55H,再保存 10 个字节的 240,并将这一过程 重复 7 次; (5)在变量 var3 中保存缓冲区 buf1 的长度; (6)在变量 pointer 中保存变量 var1 和缓冲区 buf1 的偏移地址。 2. 设变量 var1 的逻辑地址为 ,画出下列语句定义的变量的存储分配图: var1 DB 12,-12,20/6,4 DUP(0,55H) var2 DB ‘Assemble’ var3 DW ‘AB’, ‘cd’, ‘E’ var4 DW var2 var5 DD var2 指令正误判断,对正确指令写出源和目的操作数的寻址方式,对错误指令指出原3.因(设 VAR1, VAR2 为字变量, L1 为标号): (1)MOV SI,100 (2)MOV BX,VAR1[SI] (3)MOV AX, [BX] (4)MOV AL, [DX] (5)MOV BP, AL (6)MOV VAR1, VAR2 (7)MOV CS, AX (8)MOV DS, 0100H (9)MOV [BX][SI], 1 (10)MOV AX, VAR1+VAR2 (11)ADD AX, LENGTH VAR1 (12)OR BL, TYPE VAR2 (13)SUB [DI], 78H (14)MOVS VAR1, VAR2 (15)PUSH 100H (16)POP CS (17)XCHG AX, ES (18)MOV DS, CS (19)JMP L1+5 (20)DIV AX, 10 (21)SHL BL, 2 (22)MOV AL, 15+23 (23)MUL CX (24)XCHG CL, [SI] (25)ADC CS:[0100], AH (26)SBB VAR1-5,154 4. 说明下列指令对的区别: (1) MOV AX,VAR1 与 MOV AX,OFFSET VAR1 (2) MOV AX,VAR2 与 LEA AX,VAR2 MOV AL,LENGTH VAR1 与 MOV AL,SIZE VAR1 MOV AL,ES: [DI] CMP AL, [SI] 与 CMPSB (5) SHR AL,1 与 SAR AL,1 (6) SHR AL,1 与 ROR AL,1 (7) ROL BX,1 与 RCL BX,1 5. 写出下列转移指令的寻址方式(设 L1 为标号,VAR1 为字型变量,DVAR1 为双字型 变量): (1)JMP L1 (2)JMP NEAR L1 (3)JNZ L1 (4)JMP BX (5)JG L1 (6)JMP VAR1[SI] (7)JMP FAR PTR L1 (8)JMP DVAR1 6. 设(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100)=3412H,(20102) (1)MOV AX,1200H; (2)MOV AX,BX; (4)MOV AX, [BX]; 7. (7)MOV AX,1100[BX][SI] 执行下列指令后,DX 寄存器中的内容是多少? TABLE DW 25,36,-1,-16,10000,13 PYL DW 7 ?? MOV BX,OFFSET TABLE ADD BX,PYL MOV DX,[BX] 如果堆栈的起始地址为 ,栈底为 0100H,(SP)=00A8H,求 (1)栈顶地址; (2)SS 的内容; (3)再存入数据 5678H,3AF2H 后,SP 的内容。 设已用伪指令 EQU 定义了 4 个标识符: N1 EQU 2100 N2 EQU 10 N3 EQU 20000 N4 EQU 25000 下列指令是否正确?并说明原因。 (1)ADD AL,N1-N2; (2)MOV AX,N3+N4; (3)SUB BX,N4-N3; (4)SUB AH,N4-N3-N1; (5)ADD AL,N2; (6)MOV AH,N2*N2 10. 按下列要求写出指令: (1)将 AX 寄存器的低 4 位清零,其余位不变; (2)将 BX 寄存器的低 4 位置 1,其余位不变; (3)将 AL 寄存器的低 4 位保持不变,高 4 位取反; (4)测试 BX 中的位 1 和位 2,当这两位同时为 0 时将 AL 置 0FFH,否则 AL 清零; 9. (3)MOV AX, [1200H];(3) (4)=7856H, (21200)=4C2AH, (21202)=65B7H,求下列指令执行后 AX 寄存器的内容: (5)MOV AX,1100[BX];(6)MOV AX, [BX][SI];8. (5)测试 BX 中的位 1 和位 2,当这两位有一位为 0 时将 AL 置 0FFH,否则 AL 清零; (6)将 AL 中保存的字母 ASCII 码变换成相应的大写字母的 ASCII 码; (7)将 AL 中保存的字母 ASCII 码变换成相应的小写字母的 ASCII 码; (8)将 AX 中的各位取反; (9)将 DX 中的低 7 位取反,高 9 位不变; (10)将 CX 中的低 8 位与高 8 位互换。 11. 写出完成下述功能的程序段: (1)传送 40H 到 AL 寄存器; (2)将 AL 的内容乘以 2; (3)传送 16H 到 AH 寄存器; (4)AL 的内容加上 AH 的内容。 计算最后结果(AL)=? 12. 写出完成下述功能的程序段: (1)从缓冲区 BUF 的 0004 偏移地址处传送一个字到 AX 寄存器; (2)将 AX 寄存器的内容右移 2 位; (3)将 AX 内容与 BUF 的 0006 偏移地址处的一个字相乘; (4)相乘结果存入 BUF 的 0020H 偏移地址处(低位在前)。 13. 的内容: (1)XOR BX,VAR; (3)OR BX,VAR; 14. 容: (1)SHR DX,1; (2)SAR DX,CL; (4)SHL DX,1; (5)ROR DX,CL; (7)SAL DH,1; (8)RCL DX,CL; 15. (3)SHL DX,CL; (6)ROL DL,CL; (9)RCR DL,1 (2)AND BX,VAR; (4)XOR BX,B; 设(BX)=B,变量 VAR 的内容为 B,求下列指令单独执行后 BX(5)AND BX,B; (6)TEST BX,1。 设(DX)=B,(CL)=3,(CF)=1,求下列指令单独执行后 DX 的内选择题(各小题只有一个正确答案)(1)执行下列三条指令后: MOV SP,1000H PUSH AX CALL BX a. (SP)=1000H; b. (SP)=0FFEH; c. (SP)=1004H; d. (SP)=0FFCH; (2)要检查寄存器 AL 中的内容是否与 AH 相同,应使用的指令为: a. AND AL, AH b. OR AL, AH c. XOR AL, AH d. SBB AL, AH (3)指令 JMP NEAR PTR L1 与 CALL L1(L1 为标号)的区别在于: a. 寻址方式不同; b. 是否保存 IP 的内容; c. 目的地址不同;d. 对标志位的影响不同。16. 寄存器 DX:AX 组成 32 位数,DX 为高位,编写程序段实现: (1)DX:AX 右移 3 位,并将移出的低 3 位保存在 CL 中; (2)DX:AX 左移 3 位,并将移出的高 3 位保存在 CL 中; 17. 已知在 BUF 的起始处保存有 N 个字符的 ASCII 码,编写汇编语言程序实现,将这组 字符串传送到缓冲区 BUFR 中,并且使字符串的顺序与原来的顺序相反。 18. 利用移位、传送和相加指令实现 AX 的内容扩大 10 倍。 19. 在缓冲区 VAR 中连续存放着 3 个 16 位的无符号数,编写程序实现将其按递增关系 排列;如果 VAR 中保存的为有符号数,则再编写程序实现将其按递减关系排列。 20. 编写程序段实现将 BL 中的每一位重复 4 次,构成 32 位的双字 DX:AX,例如当 BL =B 时,得到的(DX)=0F0FH,(AX)=0FF0FH。 21. 编写程序段实现将 AL 和 BL 中的每一位依次交叉,得到的 16 位字保存在 DX 中,例 如(AL)=B,(BL)=B,则得到的(DX)=11001B。 22. 在变量 VAR1 和 VAR2 中分别保存有两个字节型的正整数,编写完整的汇编语言程序 实现: (1)当两数中有一个奇数时,将奇数存入 VAR1,偶数存入 VAR2; (2)当两数均为奇数时,两个变量的内容不变; (3)当两数均为偶数时,两数缩小一倍后存入原处。 23. 已知在字变量 VAR1、VAR2 和 VAR3 中保存有 3 个相同的代码,但有一个错码,编写 程序段找出这个错码,并将它送 AX,其地址送 SI;如果 3 个代码都相同,则在 AX 中置-1 标志。 24. 分析下列程序段的功能: MOV CL,04 SHL DX,CL MOV BL,AH SHL AX,CL SHR BL,CL OR DL,BL 25. 下列程序段执行后,求 BX 寄存器的内容: MOV CL,3 MOV BX,0B7H ROL BX,1 ROR BX,CL 26. 下列程序段执行后,求 BX 寄存器的内容: MOV CL,5 MOV BX,7D5CH SHR BX,CL 27. 设数组 ARRAY 的第 1 个字节存放数组的长度(&256),从第 2 个字节开始存放无符 号 8 位数,求数组元素之和(结果放在 AX 中)。如果计算的和超出 16 位数的范围,则给出 溢出标志 DX=-1。 28. 设 BUF 中存放有 N 个无符号数 (或有符号数) 编程实现求它们的最小值 , (存入 AX) 和最大值(存入 DX)。 29. 设 BUFFER 中存放有 N 个无符号(第 1 个字节存放缓冲区的长度),编程实现将其 中的 0 元素抹去,并更新其长度。 30. 编写程序实现 N 个字乘以或除以 1 个字,设 BUFN 存放 N 个字,BUF1 存放乘数或除 数,PRODUCT 存放乘积,QUOTIENT 存放商,REMAINDER 存放余数。 31. 编写一个子程序实现统计 AL 中 1 的个数,然后检测出字节型缓冲区 BUF 中 0 和 1 个数相等的元素个数。 32. 设有 n(设为 17)个人围坐在圆桌周围,按顺时针给他们编号(1,2,?,n),从 第 1 个人开始按顺时针方向加 1 报数,当报数到 m(设为 11)时,该人出列,余下的人继续 进行,直到所有人出列为止。编写程序模拟这一过程,求出出列人的编号顺序。 33. 编写子程序实现以十六进制数在屏幕上显示 AL 的内容。 34. 从键盘上读入一个正整数 N(0≤N≤65535),转换成十六进制数存入 AX,并在屏 幕上显示出来。 35. 在缓冲区 BUFFER 中,第 1 个字节存放数组的长度(&256),从第 2 个字节开始存 放字符的 ASCII 码,编写子程序完成在最高位给字符加上偶校验。 36. 37. 编写程序完成求多位数(N 个字)的绝对值。 已知斐波那契数列的定义为:F1 ? 1, F2 ? 1, Fi ? Fi ?1 ? Fi ? 2(i ? 3) ,编写求该数列前 n 项的子程序。 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 编写程序实现循环显示 10 条信息, 保存每条信息的变量分别为 INFOM1~INFORM10。 编写程序实现将包含 20 个数据的数组 ARRAY 分成两个数组: 正数数组 ARRAYP 和负 编写程序实现求缓冲区 BUFFER100 个字中的最小偶数(存入 AX)。 编写程序实现求级数12数数组 ARRAYN,并分别将这两个数组中数据的个数显示出来。? 22 ? ? ? n 2 ? ?的前 n 项和刚大于 2000 的项数 n。已知数组 A 中包含有 15 个互不相等的整数, 数组 B 中包含有 20 个互不相等的整数, 定义一条宏指令,实现将指定数据段的段地址传送到段寄存器 ES 或 DS 的功能。 定义一条宏指令,实现从键盘中输入一个字符串(利用 INT 21H 的 09 号功能)。 定义一条宏指令,实现在屏幕上显示出指定的字符串。 定义一条宏指令,实现在屏幕上输出回车、换行。 利用其它指令完成与下列指令一样的功能: (2)REP LODSB; (4)REP SCASB。编写程序实现将既在数组 A 中出现又在数组 B 中出现的整数存放于数组 C 中。(1)REP MOVSB; (3)REP STOSB; 48.设在数据段中定义了: STR1 DB ‘ASSEMBLE LANGUAGE’ STR2 DB 20 DUP(?)利用字符串指令编写程序段实现: (1)从左到右将 STR1 中的字符串传送到 STR2; (2)从右到左将 STR1 中的字符串传送到 STR2; (3)将 STR1 中的第 6 个和第 7 个字节装入 DX; (4)扫描 STR1 字符串中有无空格,如有则将第一个空格符的地址传送到 SI。 49. 设在数据段中定义了: STRING DB ‘Today is Sunday & July 16, 2000’ 编写程序实现将 STRING 中的’&’用’/’代替。 50. 分析下列程序段完成的功能: MOV CX,100 LEA SI,FIRST LEA DI,SECOND REP MOVSB 51. 分析下列程序段: LEA DI,STRING MOV CX,200 CLD MOV AL,20H REPZ SCASB JNZ FOUND JMP NOT_FOUND问:转移到 FOUND 的条件。 52. 设在数据段的变量 OLDS 和 NEWS 中保存有 5 个字节的字符串, 如果 OLDS 字符串不同于 NEWS 字符串,则执行 NEW_LESS,否则顺序执行程序。 53. 编程实现将 STRING 字符串中的小写字母变换成大写字母。 54. 设在数据段中定义了: STUDENT_NAME DB 30 DUP(?) STUDENT_ADDR DB 9 DUP(?) STUDENT_PRINT DB 50 DUP(?) 编写程序实现: (1)用空格符清除缓冲区 STUDENT_PRINT; (2)在 STUDENT_ADDR 中查找第一个’_’字符; (3)在 STUDENT_ADDR 中查找最后一个’_’字符; (4)如果 STUDENT_NAME 中全为空格符,则 STUDENT_PRINT 全存入’*’; (5)将 STUDENT_NAME 传送到 STUDENT_PRINT 的前 30 个字节中,将 STUDENT_ADDR 传送到 STUDENT_PRINT 的后 9 个字节中。 55. 在 DS:X_BUF 为起始地址的表中存有按由小到大顺序排列的一组 16 位无符号数,其中 该表的第一、二两字节存放数据个数。现在 DS:X_KEY 中存有一个关键字(16 位无符号 数),要求从上述表中查找第一个此关键字,若找到此关键字,则 DI 中存放该关键字 在该表中的偏移量;若无此关键字,则将该关键字插入 X_BUF 表中,使该表依然有序, 并将该关键字在表中的偏移量存放在 DI 中。 56. 分析下列子程序 FUNC1,并回答相应的问题。 FUNC1 PROC XOR MOV MOV JCXZ INC INC DEC JCXZ A10: MOV SHL ADD LOOP A20: MOV RET FUNC1 ENDP NEAR CX,CX DX,01 CL,X A20 DX DX CX A20 AX,02 AX,CL DX,AX A10 Y,DX若该子程序的入口参数为 X(0≤X≤10),其输出参数为 Y,则: (1) 该子程序的功能是 Y=f(X)= (2) 若 X=0 , 则 Y= 若 X=3 , 则 Y= 若 X=5 , 则 Y= 。 ; ; ;57. 已知 N(3&N&100)个 8 位无符号数已存放在缓存区 INX 中, 其中第一个字节存放个数 N, 从第二个字节开始存放数据,下列的 FUNC2 子程序完成对这 N 个数据按由大到小排序, 在划线处填入必要指令,使以下子程序完整。 FUNC2 PROC NEAR LEA SI,INX XOR CX, CX MOV CL, [SI] DEC CX B10: INC SI MOV DI,SI PUSH SI MOV B20: INC CMP MOV MOV B30: LOOP AL,[SI] SI AL,[SI] AL,[SI] DI,SI B20 POP POP MOV MOV MOV LOOP FUNC2 ENDPCX SI AH,[SI] [SI],AL [DI],AH B1058. 假设 X 和 X+2 单元的内容为双精度数 P,Y 和 Y+2 单元的内容为双精度数 Q (P,Q 均 为无符号数,其中 X,Y 为低位数),下列的子程序 FUNC3 完成使 2P&Q 时,(AX)=1; 2P&=Q 时,(AX)=-1 ,在划线处填入必要指令,使以下子程序完整。 FUNC3 PROC NEAR MOV DX,X+2 MOV AX,X ADD AX,AX ADC DX,DX JC C10 CMP DX,Y+2 C20 C10 CMP AX,Y C20 C10: MOV AX,1 C30 C20: MOV AX,-1 C30: RET FUNC3 ENDP 59. (上机题)编写程序实现,将缓冲区 BUFFER 中的 100 个字按递增排序,并按下列格式顺 序显示: 数据 1 &原序号& 数据 2 &原序号& ?? 60. (上机题)按同余法产生一组随机数 N(1&N&=50),并按 N+50 赋给 45 名同学的 5 门 课程的成绩, 要求编程实现计算每个同学的平均成绩, 并根据平均成绩统计全班的成绩 各等级的人数(A:90~100,B:80~89,C:70~79,D:66~69,E:60~65,F:60 分以下),按下列格式显示: Total &总人数& A: B: C: &人数 1& &人数 2& &人数 3& D: E: F:&人数 4& &人数 5& &人数 6&61. (上机题)编写程序实现下列 5 项功能,通过从键盘输入 1~5 进行菜单式选择: (1)按数字键“1”,完成将字符串中的小写字母变换成大写字母。用户输入由英文大 小写字母或数字 0~9 组成的字符串(以回车结束),变换后按下列格式在屏幕上显示: &原字符串&例如:abcdgyt0092 &新字符串& ABCDGYT0092 按任一键重做;按 Esc 键返回主菜单。 (2)按数字键“2”,完成在字符串中找最大值。用户输入由英文大小写字母或数字 0~9 组成的字符串(以回车结束),找出最大值后按下列格式在屏幕上显示: &原字符串& The maximum is &最大值&. 按任一键重做;按 Esc 键返回主菜单。 (3)按数字键“3”,完成输入数据组的排序。用户输入一组十进制数值(小于 255), 然后变换成十六进制数,并按递增方式进行排序,按下列格式在屏幕上显示: &原数值串& &新数值串& 按任一键重做;按 Esc 键返回主菜单。 (4)按数字键“4”,完成时间的显示。首先提示用户对时,即改变系统的定时器 HH:MM:SS(以冒号间隔,回车结束),然后在屏幕的右上角实时显示出时 间:HH:MM:SS。 按任一键重新对时;按 Esc 键返回主菜单。 (5)按数字键“5”,结束程序的运行,返回操作系统。 [参考答案] 1. 解:(1)var1 DW 4512H,4512,-1,100/3,10H,65530 (2)var2 DB ’BYTE’, ’word’, ’WORD’ (3)buf1 DB 100 DUP(?) (4)buf2 DB 7 DUP(5 DUP(55H), 10 DUP(240)) (5)var3 DB LENGTH buf1 (6)pointer DW var1, var2 3. 答: (1)MOV SI,100 ;指令正确,源:立即数寻址,目的:寄存器寻址 (2)MOV BX,VAR1[SI] ;指令正确,源:寄存器相对寻址,目的:寄存器寻址 (3)MOV AX, [BX] ;指令正确,源:寄存器间接寻址,目的:寄存器寻址 (4)MOV AL, [DX] ;指令错误,DX 不能用作为地址寄存器 (5)MOV BP, AL ;指令错误,类型不一致 (6)MOV VAR1, VAR2 ;指令错误,MOV 指令不能从存储器到存储器传送 (7)MOV CS, AX ;指令错误,CS 不能用作为目的操作数 (8)MOV DS, 0100H ;指令错误,MOV 指令不能将立即数传送到段寄存器 (9)MOV [BX][SI], 1 ;指令错误,类型不定 (10)MOV AX, VAR1+VAR2 ;指令错误,MOV 指令中不能完成加法运算 (11)ADD AX, LENGTH VAR1 ;指令正确,源:立即数寻址,目的:寄存器寻址 (12)OR BL, TYPE VAR2 ;指令正确,源:立即数寻址,目的:寄存器寻址 (13)SUB [DI], 78H ;指令错误,类型不定 (14)MOVS VAR1, VAR2 ;指令正确,源:隐含寻址,目的:隐含寻址 (15)PUSH 100H ;指令错误,立即数不能直接压入堆栈 (16)POP CS ;指令错误,CS 不能用作为目的操作数 (17)XCHG AX, ES ;指令错误,XCHG 指令中不能使用段寄存器 (18)MOV DS, CS ;指令错误,MOV 指令不能从段寄存器到段寄存器 (19)JMP L1+5 ;指令正确,段内直接转移 (20)DIV AX, 10 ;指令错误,DIV 指令格式错误 (21)SHL BL, 2 ;指令错误,移位指令的移位数要么是 1,要么是 CL (22)MOV AL, 15+23 ;指令正确,源:立即数寻址,目的:寄存器寻址 (23)MUL CX ;指令正确,源:寄存器寻址,目的:隐含寻址 (24)XCHG CL, [SI] ;指令正确,源:寄存器间接寻址,目的:寄存器寻址 (25)ADC CS:[0100], AH ;指令正确,源:寄存器寻址,目的:直接寻址 (26)SBB VAR1-5,154 ;指令正确,源:立即数寻址,目的:直接寻址 5. 答:(1)JMP L1 ;段内直接寻址 (2)JMP NEAR L1 ;段内直接寻址 (3)JNZ L1 ;段内相对寻址 (4)JMP BX ;段内间接寻址 (5)JG L1 ;段内相对寻址 (6)JMP VAR1[SI] ;段内间接寻址 (7)JMP FAR PTR L1 ;段间直接寻址(8)JMP DVAR1 ;段间间接寻址 7. 9. 答:DX 寄存器中的内容为 10FFH 答:(1)ADD AL,N1-N2 ;指令错误,因为 N1-N2 超出一个字节的范围 (2)MOV AX,N3+N4 ;指令正确 (3)SUB BX,N4-N3 ;指令正确 (4)SUB AH,N4-N3-N1 ;指令错误,因为 N4-N3-N1 超出一个字节的范围 (5)ADD AL,N2 ; 指令正确 (6)MOV AH,N2*N2 ;指令正确 11. 解:(1)MOV AL,40H (2)SHL AL,1 (3)MOV AH,16H (4)ADD AL,AH 执行后(AL)=96H 13. 解:(1)XOR BX,VAR; 执行后(BX)=00F9H (2)AND BX,VAR; 执行后(BX)=0002H (3)OR BX,VAR; 执行后(BX)=00FBH (4)XOR BX,B;执行后(BX)=003BH (5)AND BX,B;执行后(BX)=00C4H (6)TEST BX,1 ; 执行后(BX)=00CBH(不变) 15. 答:(1)d 17. 解:N=30 STACK SEGMENT STACK 'STACK'(2)c(3)b设要传送的字符串有 30 个。 DW 100H DUP(?) TOP STACK DATA ASC1 ASC2 DATA CODE START: MOV AX, DATA MOV DS, AX MOV ES, AX MOV AX, STACK MOV SS, AX LEA SP, TOP MOV CX, N LEA SI, ASC1 ADD SI, CX LEA DI, ASC2 L1: DEC SI MOV AL, [SI] MOV [DI], AL INC DI LOOP L1 MOV AH, 4CH MOV AL, 0 INT 21H CODE ENDS SEGMENT STACK 'STACK' DW 100H DUP(?) TOP STACK DATA VAR DATA CODE START: MOV AX, DATA MOV DS, AX MOV ES, AX LABEL WORD ENDS SEGMENT DW , 2410 ENDS SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK ;返回 DOS LABEL WORD ENDS SEGMENT DB DB ENDS SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK 'abcdefghijklmnopqrstuvwxyz DUP(?)19.解:程序如下:STACK MOV AX, STACK MOV SS, AX LEA SP, TOP MOV AX, VAR CMP AX, VAR+2 JBE L1 XCHG AX, VAR+2 L1: CMP AX, VAR+4 JBE L2 XCHG AX, VAR+4 L2: MOV VAR, AX MOV AX, VAR+2 CMP AX, VAR+4 JBE L3 XCHG AX, VAR+4 MOV VAR+2, AX L3: MOV AH, 4CH ;返回 DOS MOV AL, 0 INT 21H CODE ENDS END START如果 VAR 中保存的为有符号数,则只需将上述程序中的 3 条 JBE 指令改成 JLE 指令。 21. 解:XOR DX, DX MOV CX, 8 L1: SHL BL, 1 RCL DX, 1 SHL AL, 1 RCL DX, 1 LOOP L123. 解:假设字变量 VAR1、VAR2 和 VAR3 中至少有两个相等,程序段如下:MOV AX, VAR1 CMP AX, VAR2 JNZ L1 CMP AX, VAR3 JNZ L2 MOV AX, -1 L1: CMP AX, VAR3 JNZ L3 MOV AX, VAR2 LEA SI, VAR2 JMP L4 L3: LEA SI,VAR1 JMP L4 L2: MOV AX, VAR3 LEA SI, VAR3 L4:25. 答:(BX)=C02DH 32. 提示:在 n 个字节变量中存入 1,每次报数时相当于加上该变量的内容;当报数到 m 时该人出列,相当于使变量内容为 0,其编号为其相当偏移地址,因此最好采用寄存器 相当寻址方式。这样处理的好处是,继续报数时不必考虑已出列的人,只是他们对后续 报数的影响是加 0,也就是说他已不起作用。 34. 提示:显示部分应调用 33 题编写的显示子程序。 43. 解:定义的宏指令如下:TRANSSEG MACRO DATA MOV AX, DATA MOV DS, AX MOV ES, AX ENDM44. 解:定义的宏指令如下:INPUTSTR MACRO BUF LEA DX, BUF MOV AH, 0AH INT 21H ENDM45. 解:定义的宏指令如下:DISPSTR MACRO BUF LEA DX, BUF MOV AH, 09 INT 21H ENDM50. 答:从缓冲区 FIRST 传送 100 个字节到 SECOND 缓冲区。 51. 答:在 STRING 缓冲区中,找到第一个非空格字符时转到 FOUND。 1. 有下面两个源程序模块:模块 1: SSEG TOP SEGMENT STACK DW 100 DUP(?) LABEL WORD SSEG DSEG VAR DSEG ESEG AREA ESEG CSEG ?? CSEG 模块 2: SSEG TOP SSEG DSEG VECT DSEG CSEG ?? CSEGENDS SEGMENT ENDS SEGMENT ENDS SEGMENT ENDS PUBLIC } 300H 个字节 AT 1000H DW 70 DUP(?) COMMON DB 50 DUP(?)SEGMENTSTACKDW 50 DUP(?) LABEL WORD ENDS SEGMENT DB 10 ENDS SEGMENT ENDS PUBLIC } 200H 个字节 COMMON假定连接程序按 SSEG、DSEG 和 CSEG 的次序安排各段,栈底从 20000H 地址开始,请说明连 接后程序在内存中的配置情况。 2. 3. 4. 写出一组语句, 指出变量 VAR1 和远程标号 LAB1 是外部标识符, 变量 VAR2 和标号 LAB2 是本模块定义的、可供其它模块访问的标识符。 在什么情况下 EXTRN 语句中的标号应赋予 NEAR 属性? 假设(1)双字变量 VAR1、字节变量 VAR2 和近程标号 LAB1 在模块 1 中定义,但供模 块 2 和模块 3 使用; (2)字变量 VAR3 和远程标号 LAB2 在模块 2 中定义,而 VAR3 供模 块 1 使用,LAB2 供模块 3 使用;(3)远程标号 LAB3 在模块 3 中定义,供模块 2 使用。 写出每个模块必需的 EXTRN 和 PUBLIC 语句。 5. 编写程序段实现,模块 1 中访问模块 2 中定义的字变量 NUM1、NUM2、NUM3 和 NUMB4。在单独的模块中编写一远程过程:SEARCH,完成在一个字节数组中查找给定的字节,如找到 则将其在数组中的下标(即数组中的偏移量)返回给变量 VAR1;如没有找到则给变量 VAR1 返回-1。变量 VAR1 和数组均为外部标识符(可在主程序模块中定义)。请同时写出调用此 过程的主程序模块。 [参考答案] 1. 答:SSEG 安排在 1FFFFH 以前的存储空间;DESG 段的段地址 2000H,占用 52 个字节; CSEG 的段地址为 2004H, 占用 500H 个字节; ESEG 的段地址为 1000H, 占用 0E0H 个字节。 3. 5.答:当交叉访问的标号与访问语句所在的代码段连接成同一个段时,EXTRN 语句中的 标号应赋予 NEAR 属性。解:模块 1: DATA1 SEGMENT PUBLIC EXTRN NUM1:WORD,NUM2:WORD,NUM3:WORD,NUM4:WORD DATA1 ENDS 模块 2: DATA2 SEGMENT PUBLIC PUBLIC NUM1,NUM2,NUM3,NUM4 NUM1 DW 1200H NUM2 DW 3425H NUM3 DW 1234H NUM4 DW 12ABH DATA2 ENDS第五章 微处理器总线时序和系统总线

我要回帖

更多关于 嵌入式微处理器 的文章

 

随机推荐