微机原理课后题目答案

更新时间:2024-01-23 11:14:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

微机原理课后题目答案

微机原理课后题目答案[复制链接]

发表于 2010-12-15 08:09 |查看: 1232|回复: 4 返回列表

第一章

1. 什么是冯·诺依曼机? 答: 冯·诺依曼于1945 年提出了存储程序的概念和二进制原理,利用这种概念和原 理设计的电子计算机系统统称为冯·诺依曼机。 它包括运算器、控制器、存储器、输入设备和输出设备五个组成部分。

早期的冯·诺依曼机结构上以运算器和控制器为中心,随着计算机体系结构的发展, 现在已演化为以存储器为中心的结构。

2. 微处理器,微型计算机,微型计算机系统有什么联系与区别? 答:微处理器是微型计算机系统的核心,也称为CPU(中央处理器)。主要完成:①从存储 器中取指令,指令译码;②简单的算术逻辑运算;③在处理器和存储器或者I/O 之间传送数 据;④程序流向控制等。

微型计算机由微处理器、存储器、输入/输出接口电路和系统总线组成。

以微型计算机为主体,配上外部输入/输出设备及系统软件就构成了微型计算机系统。 三者关系如下图:

3. 微处理器有哪些主要部件组成?其功能是什么?

答:微处理器是一个中央处理器,由算术逻辑部件ALU、累加器和寄存器组、指令指针寄 存器IP、段寄存器、标志寄存器、时序和控制逻辑部件、内部总线等组成。 算术逻辑部件ALU 主要完成算术运算及逻辑运算。

累加器和寄存器组包括数据寄存器和变址及指针寄存器,用来存放参加运算的数据、 中间结果或地址。

指令指针寄存器IP 存放要执行的下一条指令的偏移地址,顺序执行指令时,每取一条 指令增加相应计数。

段寄存器存放存储单元的段地址,与偏移地址组成20 位物理地址用来对存储器寻址。 标志寄存器flags 存放算术与逻辑运算结果的状态。

时序和控制逻辑部件负责对整机的控制:包括从存储器中取指令,对指令进行译码和 分析,发出相应的控制信号和时序,将控制信号和时序送到微型计算机的相应部件,使CPU 内部及外部协调工作。

内部总线用于微处理器内部各部件之间进行数据传输的通道。 4. 画一个计算机系统的方框图,简述各部分主要功能。

答:计算机系统由硬件(Hardware)和软件(Software)两大部分组成。

硬件是指物理上存在的各种设备,如显示器、机箱、键盘、鼠标、硬盘和打印机等, 是计算机进行工作的物质基础。

软件是指在硬件系统上运行的各种程序、数据及有关资料。

一个完整的计算机系统不仅应该具备齐全的基本硬件结构,还必须配备功能齐全的基 本软件系统,后者是为了充分发挥基本硬件结构中各部分的功能和方便用户使用计算机而编 制的各种程序,一般称为计算机的软件系统。 主机

外部设备 总线

操作系统 编译系统 服务性程序 数据库系统 应用软件 系统软件 中央处理器 内存储器 控制器 外存 输入设备 输出设备 运算器 硬件系统

计算机系统 软件系统

5. 列出计算机系统中的三种总线结构,画出面向存储器的双总线结构图。 答:(1)面向系统的单总线结构 (2)面向CPU 的双总线结构

(3)面向主存储器的双总线结构

6. 8086 微处理器可寻址多少字节存储器?Pentium II 微处理器可寻址多少字节存储器? 器 7. 什

总线即系统总线的一种,是用来连接构成微处理机的 t Interconnect,即外设互连局部总线,是Intel 公司推出

的3

总线,通用串行总线(Universal Serial Bus),属于外部总线的一种,用作微处理机 系统

插即用和热插拔功能,具有传输速度快,使用方便,连接灵活,独 指令的作用。 (4)DD 数。

75

进制、十六进制。

答:8086 微处理器有20 条地址线,可寻址220=1MB 存储器 Pentium II 处理器有36 条地址线,可寻址236=64GB 存储 么是PCI 总线?什么是USB? 答:PCI 总线是微处理机机箱内的底板 各个插件板的一种数据传输标准。

PCI 全称为Peripheral Componen

2/64 位标准总线。数据传输速率为132MB/s,适用于Pentium 微型机。PCI 总线是同步 且独立于微处理器的,具有即插即用的特性,允许任何微处理器通过桥接口连接到PCI 总

线上。

USB

与系统之间,系统与外部设备之间的信息通道。USB是在1994 年底由英特尔、康柏、

IBM、Microsoft等多家公司联合提出的,不过直到近期,才得到广泛应用,已成为目前电脑 中的标准扩展接口。 USB 接口支持设备的即 立供电等优点。

8. 说明以下一些伪

(1)DB (2)DQ (3)DW

答:(1)在汇编语言中定义字节数据。 (2)在汇编语言中定义4 字数据。 (3)在汇编语言中定义字数据。 (4)在汇编语言中定义双字数据。 9. 将下列二进制数转换为十进制数。 (1)1101.01B (2)111001.0011B (3)101011.0101B (4)111.0001B 答:(1)13.25 (2)57.1875 (3)43.3125 (4)7.0625

10. 将下列十六进制数转换为十进制 (1)A3.3H (2)129.CH (3)AC.DCH (4)FAB.3H

答:(1)163.1875 (2)297.75 (3)172.859375 (4)4011.18

11. 将下列十进制数转换为二进制、八 (1)23 (2)107 (3)1238 (4)92 答:(1)23D=27Q=17H (2)107D=153Q=6BH 2

[-12]补=11110100B [-92]补=10100100B 0000010B 0000100B 0000001B

0000000 00000000B

10010010B (4)10001001B

原码时真值为-18,看作反码时真值为-109,看作补码时真值为-110 15.

5 (4)-1200

1B

000 00000000 00000000 (2)

000000 00000000

00000 00000000 00 00000000

(3)1238D=2326Q=4D6H (4)92D=134Q=5CH

12. 将下列十进制数转换为8 位有符号二进制数。 (1)+32 (2)-12 (3)+100 (4)-9 答:(1)[+32]原=[+32]反=[+32]补=00100000B (2)[-12]原=10001100B [-12]反=11110011B (3)[+100]原=[+100]反= [+100]补=01100100B

(4)[-92]原=11011100B [-92]反=10100011B

13. 将下列十进制数转换为压缩和非压缩格式的BCD 码。 (1)102 (2)44 (3)301 (4)1000 答:(1)[102]压缩BCD=00000001 00000010B [102]非压缩BCD=00000001 00000000 0 (2)[44]压缩BCD=01000100B [44]非压缩BCD=00000100 0

(3)[301]压缩BCD=00000011 00000001B [301]非压缩BCD=00000011 00000000 0 (4)[1000]压缩BCD=00010000 00000000B [1000]非压缩BCD=00000001 00000000 0

14. 将下列二进制数转换为有符号十进制数。 (1)10000000B (2)00110011B (3) 答:(1)看作原码时真值为-0,看作反码时真值为-127,看作补码时真值为-128 (2)+51 (3)看作

(4)看作原码时真值为-9,看作反码时真值为-118,看作补码时真值为-119 将下列十进制数转换为单精度浮点数。 (1)+1.5 (2)-10.625 (3)+100.2 答:(1)+1.5=1.1B=1.1×20,符号为0,移码阶 127+0=127=0111111 尾数 1000000 00000000 00000000 故单精度浮点数为 0 01111111 1000

-10.625=-1010.101B=-1.010101×23,符号为1, 移码阶 127+3=130=10000010B,尾数 0101010 00

故单精度浮点数为 1 10000010 0101010 0000000 0000000 (3)+100.25=1100100.01B=1.10010001×26,符号为0 移码阶 127+6=133=10000101B,尾数 1001000 100 故单精度浮点数为 0 10000101 1001000 10000000 00000000 (4)-1200= -10010110000B=-1.0010110000×210,符号为1 移码阶 127+10=137=10001001B,尾数 0010110 000000 故单精度浮点数为 1 10001001 0010110 00000000 00000000 16. 将下列单精度浮点数转换为十进制数。 (1)0 10000000 1100000 00000000 00000000 (2)1 01111111 0000000 00000000 00000000 (3)0 10000000 1001000 00000000 00000000 答:(1)1.11×21=11.1B=+3.5D (2)-1.0×20=-1B=-1D (3)1.1001×21=11.001B=+3.125D 第二章

1. 8086CPU 内部由哪两部分组成?它们的主要功能是什么?

答:8086CPU 内部由执行单元 EU 和总线接口单元 BIU 组成。

主要功能为:执行单元 EU 负责执行指令。它由算术逻辑单元(ALU)、通用寄存器组、 16 位标志寄存器(FLAGS)、EU 控制电路等组成。EU 在工作时直接从指令流队列中取指令 代码,对其译码后产生完成指令所需要的控制信息。数据在 ALU 中进行运算,运算结果 的特征保留在标志寄存器 FLAGS 中。

总线接口单元 BIU 负责 CPU 与存储器和 I/O 接口之间的信息传送。它由段寄存 器、指令指针寄存器、指令队列、地址加法器以及总线控制逻辑组成。 2. 8086CPU 中有哪些寄存器?各有什么用途?

答:8086CPU 内部包含4 组16 位寄存器,分别是通用寄存器组、指针和变址寄存器、段寄 存器、指令指针和标志位寄存器。

(1)通用寄存器组 包含4 个16 位通用寄存器 AX、BX、CX、DX,用以存放普通 数据或地址,也有其特殊用途。如AX(AL)用于输入输出指令、乘除法指令,BX 在间接 寻址中作基址寄存器,CX 在串操作和循环指令中作计数器,DX 用于乘除法指令等。 (2)指针和变址寄存器 BP、SP、SI 和DI,在间接寻址中用于存放基址和偏移地址。 (3)段寄存器 CS、DS、SS、ES 存放代码段、数据段、堆栈段和附加段的段地址。 (4)指令指针寄存器IP 用来存放将要执行的下一条指令在现行代码段中的偏移地址。 (5)标志寄存器Flags 用来存放运算结果的特征。 3. 8086CPU 和8088CPU 的主要区别是什么?

答:8088CPU 的内部结构及外部引脚功能与8086CPU 大部分相同,二者的主要不同之处如 下:

(1)8088 指令队列长度是4 个字节,8086 是6 个字节。

(2)8088 的BIU 内数据总线宽度是8 位,而EU 内数据总线宽度是16 位,这样对16 位数的存储器读/写操作需要两个读/写周期才能完成。8086 的BIU 和EU 内数据总线宽度都 是16 位。

(3)8088 外部数据总线只有8 条AD7~AD0,即内部是16 位,对外是8 位,故8088 也称为准16 位机。

(4)8088 中,用IO/M信号代替M/IO信号。

(5)8088 中,只能进行8位数据传输,BHE不再需要,改为SS0,与DT/R 和IO/M 一起决定最小模式中的总线周期操作。

4. 简要解释下列名词的意义:CPU,存储器,堆栈,IP,SP,BP,段寄存器,状态标志, 控制标志,物理地址,逻辑地址,机器语言,汇编语言,指令,内部总线,系统总线。 答:CPU:中央处理器,是整个计算机系统的控制中心,主要功能是进行算术和逻辑运算, 以及发出各种控制信号以协调整个系统正常工作。

存储器:是计算机系统中的记忆元件,用于存储指令和数据。

堆栈:在存储器中开辟的一个区域,用来存放需要暂时保存的数据。其操作特点是先 进后出。

IP:指令指针寄存器,用来存放将要执行的下一条指令在现行代码段中的偏移地址。 SP:堆栈指针寄存器,用于指向当前栈顶单元。

BP:基址指针,间接寻址中用于存放基址,隐含段地址为SS。 段寄存器:用于存放逻辑段的段地址。

状态标志:SF、ZF、OF、AF、PF 和CF,反映运算结果的状态特征。

控制标志:IF、DF 和TF,对可屏蔽中断、字符串操作指针变换方向和单步运行起控制 作用。

物理地址:指存储器中存储单元的实际地址编码,是一种绝对地址,是CPU 访问存储 器的实际寻址地址,对于8086 系统,地址范围为00000H~FFFFFH。

逻辑地址:由段基址和偏移地址组成,均为无符号的16 位二进制数,程序设计时采用 逻辑地址,可由逻辑地址变换为物理地址,物理地址=段基址×16+偏移地址。

机器语言:直接用二进制代码指令表达的计算机语言,指令是用0 和1 组成的一串代 码,计算机可以直接识别,不需要进行任何翻译。每台机器的指令,其格式和代码所代表的 含义都是硬性规定的,故称之为面向机器的语言,也称为机器语言,是第一代计算机语言。 汇编语言:使用助记符表示的二进制代码指令语言,是一种符号化的机器语言,必须 经编译程序将汇编语言编译成机器语言,计算机才能识别。

指令:能被计算机识别并执行的二进制代码,规定了计算机能完成的某一操作。 内部总线:微处理器内部各个部件之间传送信息的通道。

系统总线:微处理机机箱内的底板总线,用来连接构成微处理机的各个插件板,如ISA 总线、EISA 总线、PCI 总线等。

5. 要完成下述运算或控制,用什么标志位判别?其值是什么? (1)比较两数是否相等 (2)两数运算后结果是正数还是负数 (3)两数相加后是否溢出 (4)采用偶校验方式,判定是否要补1 (5)两数相减后比较大小 (6)中断信号能否允许 答:(1)ZF,两数相减,若ZF=1,则相等。 (2)SF,SF=1 则为负,否则为正

(3)对有符号数:OF,OF=1 为溢出;对无符号数:CF,CF=1 为溢出 (4)PF,PF=1,不补1

(5)对有符号数:无溢出时(OF=0),如 ZF=1,则两数相等;如 ZF=0 且 SF=0,则 被减数大;如 ZF=0 且 SF=1,则减数大; 有溢出时(OF=1),如 SF=1,则被减数大;如 SF=0,则减数大; 对无符号数:如 ZF=1,则两数相等;如 CF=0,则被减数大;如 CF=1, 则减数大

(6)IF,IF=1,允许中断

6. 8086 系统中存储器采用什么结构?用什么信号来选中存储体?

答:8086 系统中,存储器采用分体结构,1MB 的存储空间分成两个存储体:偶地址存储体 和奇地址存储体,各为512KB。

使用A0 和BHE 来区分两个存储体。当A0=0 时,选中偶地址存储体,与数据总线低8 位相连,从低8 位数据总线读/写一个字节。

当BHE =0 时,选中奇地址存储体,与数据总线高8 位相连,从高8 位数据总线读/写 一个字节。

当A0=0,BHE =0 时,同时选中两个存储体,读/写一个字。

7. 用伪指令DB 在存储器中存储ASCII 码字符串“What time is it?”。并画出内存分布图。 答: STR DB ?What time is it??,?$? ?W? ?h? ?a? ?t? ? ? ?t? ?i? ?m?

?e? ? ? ?i? ?s? ? ? ?i? ?t?

??? ?$?

8. 用伪指令将下列16 位二进制数存储在存储器中,并画出内存分布图。 (1)1234H (2)A122H (3)B100H 答: NUM DW 1234H,A122H,B100H 34H 12H 22H A1H 00H B1H STR

NUM

9. 段寄存器装入如下数据,写出每段的起始和结束地址。 (1)1000H (2)1234H (3)2300H (4)E000H (5)AB00H 答:(1)10000H~1FFFFH (2)12340H~2233FH (3)23000H~32FFFH (4)E0000H~EFFFFH (5)AB000H~BAFFFH

10. 根据下列CS:IP 的组合,求出要执行的下一条指令的存储器地址。 (1)CS:IP=1000H:2000H (2)CS:IP=2000H:1000H (3)CS:IP=1A00H:B000H (4)CS:IP=3456H:AB09H 答:(1)12000H (2)21000H (3)25000H (4)3F069H 11. 求下列寄存器组合所寻址的存储单元地址:

(1)DS=1000H,DI=2000H (2)SS=2300H,BP=3200H (3)DS=A000H,BX=1000H (4)SS=2900H,SP=3A00H

答:(1)12000H (2)26200H (3)A1000H (4)2CA00H

12. 若当前SS=3500H,SP=0800H,说明堆栈段在存储器中的物理地址,若此时入栈10 个 字节,SP 内容是什么?若再出栈6 个字节,SP 为什么值?

答:物理地址:35000H~35800H。入栈 10 个字节后 SP 为 7F6H。再出栈 6 个字节后 SP 为 7FCH。

13. 某程序数据段中存放了两个字,1EE5H 和2A8CH,已知DS=7850H,数据存放的偏移 地址为3121H 及285AH。试画图说明它们在存储器中的存放情况。若要读取这两个字,需 要对存储器进行几次操作?

答:1EE5H 的存储物理地址=78500H+3121H=7B621H,为奇数,故若要读取这个字,需要 对存储器进行两次读操作。

2A8CH 的存储物理地址=78500H+285AH=7AD5AH,为偶数,故若要读取这个字,只 需对存储器进行一次读操作。 M M 8CH 2AH M M E5H 1EH M

7850:0000 7850:285A 7850:3121

14. 存储器中每段容量最多64K 字节,若用debug 调试程序中的r 命令,在屏幕上有如下显 示: C:>debug

-r

AX=0000 BX=0000 CX=0079 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=10E4 ES=10F4 SS=21F0 CS=31FF IP=0100 NV UP DI PL NZ NA PO NC (1)试画出此时存储器分段示意图

(2)写出状态标志OF、SF、ZF、CF 的值 答:(1)代码段首地址:31FF0H 当前指令地址:320F0H 数据段首地址:10E40H

堆栈段首地址:21F00H 堆栈段栈顶地址:31EEEH 附加段首地址:10F40H (2)OF=SF=ZF=CF=0

15. 说明8086 系统中“最小模式”和“最大模式”两种工作方式的主要区别是什么?

答:为了便于组成不同规模的系统,在8086 芯片中设计了两种工作模式,即最小模式和最 大模式。

最小模式用于单机系统,系统中所需要的控制信号全部由8086 直接提供;最大模式用 于多处理机系统,系统中所需要的控制信号由总线控制器8288 提供。

16. 8086 系统中为什么要用地址锁存器?8282 地址锁存器与CPU 如何连接?

答:为了减少引脚的数量,8086CPU 的地址引脚和数据引脚分时复用,为了保证在总线操 作周期中地址信号能有效而稳定的输出,必须使用地址锁存器。

由于8086 有20 条地址线,故需使用三片8282,其中OE 接地,STB 与CPU 的ALE

相连,前两片8282 的DI0~DI7 分别与CPU 的AD0~AD15 相连,第三片8282 的DI0~DI3 分别 与CPU 的AD16~AD19 相连,DI4 与CPU 的BHE 相连。 17. 哪个标志位控制CPU 的INTR 引脚?

答:IF,中断允许标志,IF=1 时,允许可屏蔽中断,IF=0 时,禁止可屏蔽中断。

18. 什么叫总线周期?在CPU 读/写总线周期中,数据在哪个机器状态出现在数据总线上? 答:CPU 完成一次存储器访问或I/O 端口操作所需要的时间称为一个总线周期,由几个T 状态组成。在读/写总线周期中,数据在T2~T4 状态出现在数据总线上。 19. 8284 时钟发生器共给出哪几个时钟信号?

答:OSC:振荡器输出信号,是内部振荡电路的TTL 电平输出,其频率与晶振的频率相等, 在PC/XT 中,其频率为14.318MHz

CLK:三分频OSC 后的时钟,输出频率为4.77MHz,占空比为1/3,供8086CPU 使用。 PCLK:二分频CLK 后的时钟,输出频率为2.38636MHz,TTL 电平,占空比为1/2, 供PC/XT 机的外设使用。

20. 8086CPU 重新启动后,从何处开始执行指令?

答:重新启动后,CS=FFFFH,IP=0000H,故从物理地址为FFFF0H 的位置开始执行指令。 21. 8086CPU 的最小模式系统配置包括哪几部分? 答:8086 最小模式系统配置包括:

8086CPU,存储器,I/O 接口芯片,1 片8284 时钟发生器,3 片8282 地址锁存器,2 片 8286 双向数据总线收发器。 第三章

1. 分别说明下列指令的源操作数和目的操作数各采用什么寻址方式。 (1)MOV AX,2408H (2)MOV CL,0FFH (3)MOV BX,[SI]

(4)MOV 5[BX],BL (5)MOV [BP+100H],AX (6)MOV [BX+DI],?$? (7)MOV DX,ES:[BX+SI] (8)MOV VAL[BP+DI],DX

(9)IN AL,05H (10)MOV DS,AX 答:(1)立即数,寄存器 (2)立即数,寄存器 (3)寄存器间接,寄存器 (4)寄存器,寄存器相对 (5)寄存器,寄存器相对 (6)立即数,基址变址 (7)基址变址,寄存器 (8)寄存器,相对基址变址 (9)直接端口寻址,寄存器 (10)寄存器,寄存器

2. 已知:DS=1000H,BX=0200H,SI=02H,内存10200H~10205H 单元的内容分别为10H, 2AH,3CH,46H,59H,6BH。下列每条指令执行完后AX 寄存器的内容各是什么? (1)MOV AX,0200H (2)MOV AX,[200H] (3)MOV AX,BX

(4)MOV AX,3[BX] (5)MOV AX,[BX+SI] (6)MOV AX,2[BX+SI] 答:(1)0200H (2)2A10H (3)0200H (4)5946H (5)463CH (6)6B59H

3. 设DS=1000H,ES=2000H,SS=3500H,SI=00A0H,DI=0024H,BX=0100H,BP=0200H, 数据段中变量名为VAL 的偏移地址值为0030H,试说明下列源操作数字段的寻址方式是什 么?物理地址值是多少?

(1)MOV AX,[100H] (2)MOV AX,VAL (3)MOV AX,[BX]

(4)MOV AX,ES:[BX] (5)MOV AX,[SI] (6)MOV AX,[BX+10H] (7)MOV AX,[BP] (8)MOV AX,VAL[BP][SI]

(9)MOV AX,VAL[BX][DI] (10)MOV AX,[BP][DI]

答:(1)直接,10100H (2)直接,10030H (3)寄存器间接,10100H

(4)寄存器间接,20100H (5)寄存器间接,100A0H (6)寄存器相对,10110H (7)寄存器间接,35200H (8)相对基址变址,352D0H (9)相对基址变址,10154H (10)基址变址,35224H 4. 写出下列指令的机器码

(1)MOV AL,CL (2)MOV DX,CX (3)MOV [BX+100H],3150H 答:(1)10001010 11000001B (2)10001011 11010001B

(3)11000111 10000111 00000000 00000001 01010000 00110001B 5. 已知程序的数据段为:

DATA SEGMENT A DB ?$?,10H

B DB ?COMPUTER? C DW 1234H, 0FFH D DB 5 DUP(?) E DD 1200459AH

DATA ENDS

求下列程序段执行后的结果是什么。 MOV AL, A MOV DX, C XCHG DL, A

MOV BX, OFFSET B MOV CX, 3[BX] LEA BX, D

LDS SI, E LES DI, E

答:MOV AL, A AL=24H MOV DX, C DX=1234H

XCHG DL, A DL=24H, A=34H MOV BX, OFFSET B BX=2 MOV CX, 3[BX] CX=5550H

LEA BX, D BX=000EH

LDS SI, E DS=1200H, SI=459AH LES DI, E ES=1200H, DI=459AH

6. 指出下列指令中哪些是错误的,错在什么地方。

(1)MOV DL,AX (2)MOV 8650H,AX (3)MOV DS,0200H

(4)MOV [BX],[1200H] (5)MOV IP,0FFH (6)MOV [BX+SI+3],IP (7)MOV AX,[BX][BP] (8)MOV AL,ES:[BP] (9)MOV DL,[SI][DI] (10)MOV AX,OFFSET 0A20H (11)MOV AL,OFFSET TABLE (12)XCHG AL,50H (13)IN BL,05H (14)OUT AL,0FFEH 答:(1)长度不匹配 (2)立即数不能做目的操作数

(3)段寄存器不能用立即数赋值 (4)两个内存单元不能直接传送数据 (5)IP 不能用指令直接修改 (6)指令中不能出现 IP (7)BX/BP 应与 SI/DI 搭配 (8)正确

(9)SI/DI 应与 BX/BP 搭配 (10)OFFSET 后应跟内存单元

(11)偏移地址为16 位,AL 长度不够 (12)立即数不能用于XCHG (13)IN 必须用 AL/AX (14)操作数顺序反向;地址应为 8 位

7. 已知当前数据段中有一个十进制数字0~9 的7 段代码表,其数值依次为40H,79H,24H, 30H,19H,12H,02H,78H,00H,18H。要求用XLAT 指令将十进制数57 转换成相应的 7 段代码值,存到BX 寄存器中,试写出相应的程序段。 答: DATA SEGMENT

TABLE DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,18H DATA ENDS ……

MOV AL,5

MOV BX,OFFSET TABLE XLAT TABLE MOV CL,AL MOV AL,7 XLAT TABLE MOV BL,AL

MOV BH,CL

8. 已知当前SS=1050H,SP=0100H,AX=4860H,BX=1287H,试用示意图表示执行下列指 令过程中,堆栈中的内容和堆栈指针SP 是怎样变化的。 PUSH AX PUSH BX

POP BX POP AX 答:(1)指令执行前 (2)执行PUSH AX 后 ……

10500H

(3)执行PUSH BX 后 (4)执行POP BX 后 (5)执行POP AX 后 …… 87H

12H 60H 48H

9. 下列指令完成什么功能?

(1)ADD AL,DH (2)ADC BX,CX (3)SUB AX,2710H (4)DEC BX (5)NEG CX (6)INC BL

(7)MUL BX (8)DIV CL 答:(1)AL+DH→AL (2)BX+CX+CF→BX (3)AX-2710H→AX (4)BX-1→BX (5)0-CX→CX (6)BL+1→BL

(7)AX*BX→DX,AX (8)AX/CL 商→AL,余数→AH

10. 已知AX=2508H,BX=0F36H,CX=0004H,DX=1864H,求下列每条指令执行后的结果 是什么?标志位CF 等于什么?

(1)AND AH,CL (2)OR BL,30H (3)NOT AX SP-> SP-> 10500H …… 60H 48H SP->

……

10500H 10500H ……

48H 60H 12H 87H SP-> 48H 60H 12H 87H 10500H

SP->

(4)XOR CX,0FFF0H (5)TEST DH,0FH (6)CMP CX,00H (7)SHR DX,CL (8)SAR AL,1 (9)SHL BH,CL (10)SAL AX,1 (11)RCL BX,1 (12)ROR DX,CL 答:(1)AX=0408H,CF=0 (2)BX=0F36H,CF=0 (3)AX=0DAF7H,CF 不变 (4)CX=0FFF4H,CF=0 (5)DX=01864H,CF=0 (6)CX=0004H,CF=0 (7)DX=0186H,CF=0 (8)AX=2504H,CF=0 (9)BX=0F036H,CF=0 (10)AX=4A10H,CF=0 (11)BX=1E6C/1E6DH,CF=0 (12)DX=4186H,CF=0 11. 假设数据段定义如下:

DATA SEGMENT

STRING DB ?The Personal Computer & TV? DATA ENDS

试用字符串操作等指令编程完成以下功能:

(1)把该字符串传送到附加段中偏移量为GET_CHAR 开始的内存单元中。

(2)比较该字符串是否与?The Computer?相同,若相同则将AL 寄存器的内容置1,否则置 0。并要求将比较次数送到BL 寄存器中。

(3)检查该字符串是否有?&?,若有则用空格字符将其替换。

(4)把字符串大写字母传送到附加段中以CAPS 开始的单元中,其余字符传到以CHART 开始的单元中。然后将数据段中存储上述字符串的单元清0。 答:(1) CLD LEA SI,STRING LEA DI,GET_CHAR MOV CX,26 REP MOVSB

(2)补充在附加段定义 STRING1 DB ?The computer? MOV AL,1 CLD

LEA SI,STRING LEA DI,STRING1 MOV CX,12 REPZ CMPSB

JZ SKIP

MOV AL,0

SKIP: MOV BX,12 SUB BX,CX

(3) MOV AX, DATA MOV ES, AX CLD

MOV AL,'&' LEA DI,STRING MOV CX,26

NEXT: REPNE SCASB JZ FIND

JMP EXIT

FIND: MOV BYTE PTR [DI-1], ' ' JCXZ EXIT JMP NEXT

EXIT:

(4) LEA SI,STRING LEA DI,CAPS LEA BX,CHART MOV CX,26 NEXT: MOV AL, [SI] CMP AL,?A? JB OTHER CMP AL,?Z? JA OTHER

MOV ES:[DI],AL

INC DI JMP SKIP

OTHER: MOV ES:[BX],AL INC BX

SKIP: MOV BYTE PTR[SI],0

INC SI

LOOP NEXT

12. 编程将AX 寄存器中的内容以相反的顺序传送到DX 寄存器中,并要求AX 中的内容不 被破坏,然后统计DX 寄存器中?1?的个数是多少。 答:: MOV BL,0 PUSH AX MOV DX,0 MOV CX,16 NEXT: SHL AX,1 JNC SKIP INC BL

SKIP: RCR DX,1

LOOP NEXT

STOP: POP AX

13. 设CS=1200H,IP=0100H,SS=5000H,SP=0400H,DS=2000H,SI=3000H,BX=0300H, (20300H)=4800H,(20302H)=00FFH,TABLE=0500H,PROG_N 标号的地址为1200: 0278H,PROG_F 标号的地址为3400H:0ABCH。说明下列每条指令执行完后,程序将分别 转移到何处执行? (1)JMP PROG_N (2)JMP BX (3)JMP [BX] (4)JMP FAR PROG_F (5)JMP DWORD PTR [BX]

如将上述指令中的操作码JMP 改成CALL,则每条指令执行完后,程序转向何处执行?并 请画图说明堆栈中的内容和堆栈指针如何变化。 答:(1)1200H:0278H (2)1200H:0300H (3)1200H:4800H

(4)3400H:0ABCH (5)00FFH:4800H

将操作码JMP 改成CALL 后:

(1)1200H:0278H

指令长度为3,则IP=0100H+3=0103H,入栈 …… 03H 01H

5000H:0000H 5000H:03FEH 5000H:0400H

􀃅SP

(2)1200H:0300H

指令长度为2,则IP=0100H+2=0102H,入栈 …… 02H

01H

(3)1200H:4800H

指令长度为2,则IP=0100H+2=0102H,入栈 …… 02H

01H

(4)3400H:0ABCH

指令长度为5,则IP=0100H+5=0105H,入栈 …… 05H 01H 00H

12H

(5)00FFH:4800H

指令长度为2,则IP=0100H+2=0102H,入栈 5000H:0000H 5000H:03FEH 5000H:0400H 􀃅SP 5000H:0000H 5000H:03FEH 5000H:0400H 􀃅SP 5000H:0000H

5000H:03FCH 􀃅SP 5000H:03FEH 5000H:0400H …… 02H 01H 00H

12H

14. 在下列程序段括号中分别填入以下指令

(1)LOOP NEXT (2) LOOPE NEXT (3) LOOPNE NEXT

试说明在这三种情况下,程序段执行完后,AX,BX,CX,DX 的内容分别是什么。 START: MOV AX,01H MOV BX,02H MOV DX,03H MOV CX,04H NEXT: INC AX ADD BX,AX SHR DX,1

( ) 答:(1) AX=05H BX=10H CX=0 DX=0 (2) AX=02H BX=04H CX=03H DX=01H (3) AX=03H BX=07H CX=02H DX=0

15. 某班有7 个同学英语成绩低于80 分,分数存在ARRAY 数组中,试编程完成以下工作: (1)给每人加 5 分,结果存到 NEW 数组中 (2)把总分存到SUM 单元中

答: DATA SEGMENT

ARRAY DB ?,?,?,?,?,?,? NEW DB 7 DUP(?) SUM DW 0 DATA ENDS MOV AX,DATA MOV DS, AX

MOV CL,4

SHL DX,CL

XCHG AL,AH ;余数保留在AL 中 SUB AH,AH

MOV CL,10 ;计算十位数

DIV CL

ADD DL,AL ;十位数加到DL 中,DX 左移4 位 MOV CL,4 SHL DX,CL

ADD DL,AH ;加个位数 MOV AX,DX ;结果送到AX 中 POP DX POP CX EXIT: RET

B2TOBCD ENDP

(2)将AX 中4 位BCD 码顺序乘以1000,100,10 和1,然后求和即得。 子程序名:BCDTOB2

输入参数:AX=4 位压缩BCD 码 输出参数:AX=十六位二进制数

使用寄存器:BX:暂存数据,CX:存放乘数,DX:存放中间结果 BCDTOB2 PROC FAR PUSH BX PUSH CX PUSH DX MOV BX,AX MOV CL,4 ROL AX,CL

AND AX,000FH

MOV CX,1000 ;乘以1000 MUL CX MOV DX,AX MOV AX,BX MOV CL,8 ROL AX,CL

AND AX,000FH

MOV CL,100 ;乘以100 MUL CL ADD DX,AX MOV AX,BX MOV CL,4 SHR AX,CL

AND AX,000FH

MOV CL,10 ;乘以10 MUL CL

ADD DX,AX AND BX,000FH ADD DX,BX MOV AX,DX POP DX POP CX POP BX

RET

BCDTOB2 ENDP

9. 编写两个通用过程,一个完成ASCII 码转换成二进制数功能,另一个完成ASCII 字符显 示输出功能。

答:(1)将AX 中两位ASCII 码先转化成数字,然后AH*10+AL。 子程序名:ASCIITOB2

输入参数:AX=2 位ASCII 码 输出参数:AX=转换后二进制数 使用寄存器:BX,CX,DX ASCIITOB2 PROC FAR PUSH BX PUSH CX PUSH DX MOV BX,AX

SUB AH,30H MOV AL,AH

MOV CL,10 ;乘以10 MUL CL MOV DX,AX MOV AX,BX SUB AL,30H MOV AH,0 ADD AX,DX POP DX POP CX POP BX RET

ASCIITOB2 ENDP

(2)使用2 号DOS 功能调用显示字符。 子程序名:DISPLAY

输入参数:AX=2 位ASCII 码 输出参数:无 使用寄存器:BX,DX DISPLAY PROC FAR PUSH BX PUSH DX MOV BX,AX

MOV DL,AH MOV AH,2 INT 21H MOV AX,BX MOV DL,AL MOV AH,2 INT 21H POP DX POP BX RET

DISPLAY ENDP

10. 编制两个通用过程,完成十六进制数转换成ASCII 码并将ASCII 码字符显示。 答:(1)子程序名:HEXTOASC 输入参数:AX:4 位十六进制数

输出参数:DX,AX:4 位ASCII 码,DX 高2 位,AX 低2 位 使用寄存器:BX,CX,DX HEXTOASC PROC FAR PUSH BX PUSH CX PUSH DX

MOV BX,AX

MOV CL,4 ;转换AH 高4 位 SHR AX,CL AND AX,0F00H ADD AH,30H CMP AH,3AH JB A1

ADD AH,7

A1: MOV DH,AH

MOV AX,BX ;转换AH 低4 位 AND AX,0F00H ADD AH,30H CMP AH,3AH JB A2

ADD AH,7

A2: MOV DL,AH

MOV BH,BL ;转换AL 高4 位 MOV CL,4 SHR BL,CL ADD BL,30H CMP BL,3AH JB A3

ADD BL,7

A3: MOV AH,BL

AND BH,0FH ;转换AL 低4 位 ADD BH,30H CMP BH,3AH JB A4

ADD BH,7 A4: MOV AL,BH POP DX POP CX POP BX RET

HEXTOASC ENDP

(2)子程序名:DISPLAYASC 输入参数:DX,AX:4 位ASCII 码 输出参数:无 使用寄存器:BX,CX DISPLAYASC PROC FAR PUSH BX PUSH CX MOV BX,DX MOV CX,AX MOV DL,BH MOV AH,02H INT 21H MOV DL,BL INT 21H MOV DL,CH INT 21H MOV DL,CL INT 21H MOV DL,?H? INT 21H POP CX POP BX RET

DISPLAYASC ENDP

11. 某程序可从键盘接收命令(0~5),分别转向6 个子程序,子程序入口地址分别为P0~ P5,编制程序,用跳转表实现分支结构。 答: DATA SEGMENT TABLE DW 6 DUP(?) DATA ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX

LEA SI, TABLE

MOV WORD PTR[SI],OFFSET P0 MOV WORD PTR[SI+2],OFFSET P1 MOV WORD PTR[SI+4],OFFSET P2 MOV WORD PTR[SI+6],OFFSET P3 MOV WORD PTR[SI+8],OFFSET P4 MOV WORD PTR[SI+10],OFFSET P5 MOV AH,1 INT 21H SUB AL,30H SHL AL,1 MOV AH,0 MOV SI,AX JMP TABLE[SI] P0: P1: P2: P3: P4: P5:

MOV AH,4CH

INT 21H CODE ENDS END START

12. 在首地址为TABLE 的数组中按递增次序存放着100 个16 位补码数,编写一个程序,把 出现次数最多的数及其出现次数分别存放于AX 和BL 中。 答: DATA SEGMENT TABLE DW 100 DUP (?) ;数组中的数据是按增序排列的 NUM DW ? COUNT DW 0 DATA ENDS

CODE SEGMENT

MAIN PROC FAR

ASSUME CS: CODE, DS: DATA START: PUSH DS ;设置返回DOS SUB AX, AX PUSH AX

MOV AX, DATA

MOV DS, AX ;给DS 赋值 BEGIN: MOV CX, 100 ;循环计数器 MOV SI, 0

NEXT: MOV DX, 0 MOV AX, TABLE[SI]

COMP: CMP TABLE [SI], AX ;计算一个数的出现次数

JNE ADDR

INC DX ADD SI, 2 LOOP COMP

ADDR: CMP DX, COUNT ;此数出现的次数最多吗? JLE DONE

MOV COUNT, DX ;目前此数出现的次数最多,记下次数 MOV NUM, AX ;记下此数

DONE: LOOP NEXT ;准备取下一个数 MOV CX, COUNT ;出现最多的次数存入(CX) MOV AX, NUM ;出现最多的数存入(AX) RET

MAIN ENDP

CODE ENDS ;以上定义代码段

END START

13. 将键盘上输入的十六进制数转换成十进制数,在屏幕上显示。 答:DATA SEGMENT

STRING DB 'INPUT 4 HEX NUM:',0AH,0DH,'$' NUM DB 10 DUP(?) DATA ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX

LEA DX,STRING ;显示提示信息 MOV AH,9 INT 21H

MOV BP,4 MOV DX,0

CONT: MOV CL,4 ;输入4 位十六进制数􀃆DX SHL DX,CL D1: MOV AH,1 INT 21H CMP AL,'0' JB D1

CMP AL,'F' JA D1 CMP AL,'A' JB A1 SUB AL,7 A1: SUB AL,30H MOV AH,0 ADD DX,AX DEC BP

JNZ CONT

MOV SI,0 ;将DX 转换成十进制数,再转换成ASCII 码—>NUM MOV AX,DX MOV DX,0 MOV BX,10 D2: DIV BX ADD DL,30H MOV NUM[SI],DL INC SI CMP AX,0 JZ EXIT MOV DX,0

JMP D2

EXIT: MOV DL,0AH ;显示十进制数 MOV AH,2 INT 21H MOV DL,0DH INT 21H D3: DEC SI MOV DL,NUM[SI] MOV AH,2 INT 21H JNZ D3

MOV AH,4CH INT 21H

CODE ENDS END START

14. 将AX 中的无符号二进制数转换成ASCII 字符串表示的十进制数。 答:将13 题输入过程和输出过程去掉即得。

DATA SEGMENT

NUM DB 10 DUP(?) ;转换后ASCII 码按倒序存放于NUM DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AX, ×××× ;无符号二进制数

MOV SI,0 ;将AX 转换成十进制数,再转换成ASCII 码—>NUM MOV DX,0 MOV BX,10 D2: DIV BX ADD DL,30H

MOV NUM[SI],DL INC SI

CMP AX,0

JZ EXIT MOV DX,0 JMP D2

EXIT: MOV AH,4CH INT 21H CODE ENDS

END START

15. 从键盘输入20 个有符号数,将它们排序并在屏幕上显示。 答:DATA SEGMENT

NUM DW 20 DUP(?) ;存放20 个有符号数

ASC DB 10 DUP(?) ;输出时暂时保存每一个数的ASCII 码 DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV CX,20 MOV BX,10 MOV SI,0

MOV BP,0

BEGIN: MOV DX,0 ;输入20 个有符号数(十进制),并 A1: MOV AH,1 ;转化为二进制数存放于NUM 数组 INT 21H

CMP AL,' ' ;判断是否空格 JZ A2

CMP AL,0DH ;是否回车符 JZ A2

CMP AL,'-' ;是否?-? JZ A3 JMP A4

A3: MOV BP,1 JMP A1

A4: PUSH AX MOV AX,DX MUL BX MOV DX,AX POP AX

SUB AL,30H MOV AH,0 ADD DX,AX JMP A1

A2: CMP BP,1 JNZ A5

NEG DX ;若为负数,则取负 A5: MOV NUM[SI],DX MOV BP,0 ADD SI,2 LOOP BEGIN

MOV DL,0DH ;回车换行 MOV AH,2 INT 21H

MOV DL,0AH

INT 21H

MOV BX,0 ;对20 个有符号数按由小到大顺序排序 MOV CX,19 ;采用冒泡法,排序后依然存放于NUM 数组 L1: MOV DX,CX

L2: MOV AX,NUM[BX] CMP AX,NUM[BX+2] JLE CONT1

XCHG AX,NUM[BX+2] MOV NUM[BX],AX CONT1: ADD BX,2 LOOP L2 MOV CX,DX

MOV BX,0 LOOP L1

MOV CX,20 ;将20 个有符号数(二进制)转换为十进制数 MOV SI,0 ;再转换为ASCII 码并输出屏幕 D1: MOV AX,NUM[SI] ADD SI,2 TEST AX,1000H JZ D4 PUSH AX MOV DL,'-' MOV AH,2 INT 21H POP AX NEG AX

D4: MOV DI,0 MOV DX,0 MOV BX,10 D2: DIV BX ADD DL,30H MOV ASC[DI],DL INC DI CMP AX,0 JZ D3

MOV DX,0

JMP D2

D3: MOV DL,ASC[DI-1] MOV AH,2 INT 21H DEC DI JNZ D3 MOV DL,' ' MOV AH,2 INT 21H

LOOP D1

MOV AH,4CH ;返回DOS INT 21H CODE ENDS

END START

16. 编写多字节有符号数的加法程序,从键盘接收两个加数,在屏幕上显示结果。 答:DATA SEGMENT

STRING1 DB 'INPUT FIRST NUM(HEX):',0DH,0AH,'$' STRING2 DB 'INPUT SECOND NUM(HEX):',0DH,0AH,'$' STRING3 DB 'THE RESULT IS(HEX):',0DH,0AH,'$' NUM1 DW 0,0 ;存放加数1 NUM2 DW 0,0 ;存放加数2 RESULT DB 0,0,0,0 ;存放结果 DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA

MOV DS,AX

LEA DX,STRING1 ;输入第一个加数(4 位十六进制数) MOV AH,9 INT 21H MOV SI,2 MOV CX,8

CONT: PUSH CX CMP CX,4 JNZ B1 SUB SI,2

B1: MOV CL,4 SHL NUM1[SI],CL C1: MOV AH,1 INT 21H CMP AL,'0' JB C1

CMP AL,'F'

JA C1

CMP AL,'A' JB A1 SUB AL,7

A1: SUB AL,30H MOV AH,0 ADD NUM1[SI],AX POP CX

LOOP CONT

MOV DL,0DH ;回车换行 MOV AH,2 INT 21H

MOV DL,0AH INT 21H

LEA DX,STRING2 ;输入第二个加数(4 位十六进制数) MOV AH,9 INT 21H MOV SI,2 MOV CX,8 CONT1: PUSH CX CMP CX,4 JNZ B2 SUB SI,2

B2: MOV CL,4 SHL NUM2[SI],CL C2: MOV AH,1 INT 21H CMP AL,'0' JB C2

CMP AL,'F' JA C2

CMP AL,'A' JB A2 SUB AL,7 A2: SUB AL,30H MOV AH,0 ADD NUM2[SI],AX POP CX

LOOP CONT1

MOV DL,0DH ;回车换行 MOV AH,2 INT 21H

MOV DL,0AH INT 21H

LEA SI,NUM1 ;两数相加 LEA BX,NUM2 LEA DI,RESULT MOV CX,4 CLC

AD: MOV AL,[SI] ADC AL,[BX] MOV [DI],AL INC SI INC BX

INC DI LOOP AD

LEA DX,STRING3 ;显示结果(4 位十六进制数) MOV AH,9 INT 21H MOV CX,4

MOV DI,3 TT: PUSH CX

MOV DL,RESULT[DI] MOV CL,4 SHR DL,CL ADD DL,30H CMP DL,3AH JB D1 ADD DL,7 D1: MOV AH,2 INT 21H

MOV DL,RESULT[DI] AND DL,0FH ADD DL,30H CMP DL,3AH JB D2 ADD DL,7

D2: MOV AH,2 INT 21H DEC DI POP CX

LOOP TT

MOV AH,4CH ;返回DOS INT 21H CODE ENDS

END START

17. 编写2 位非压缩型BCD 码相乘的程序。 答:转化成加法进行累加运算。

DATA SEGMENT DA1 DB 09H,09H DA2 DB 09H,08H

RESULT DB 4 DUP(0) DATA ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX

MOV AL,DA2+1 ;计算加法次数 MOV BL,10 MUL BL MOV BL,DA2 MOV BH,0

ADD AX,BX MOV CX,AX

CONT: MOV AH,0 ;通过循环做累加 MOV AL,RESULT ADD AL,DA1 AAA

MOV RESULT,AL MOV AL,RESULT+1 ADD AL,AH MOV AH,0 AAA

ADD AL,DA1+1 AAA

MOV RESULT+1,AL MOV AL,RESULT+2 ADD AL,AH MOV AH,0 AAA

MOV RESULT+2,AL MOV AL,RESULT+3 ADD AL,AH MOV AH,0 AAA

MOV RESULT+3,AL LOOP CONT

MOV AH,4CH ;返回DOS INT 21H

CODE ENDS END START

18. 编写完整的程序求N!,求N 大于6 时的运算结果,并在屏幕上显示结果。

答:DATA SEGMENT N DB 8 ;求8 的阶乘

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX

MOV AL,N MOV AH,0

CALL FACT ;调用过程求N!,AX=N,BX=N!

CALL B2TODEC ;调用过程将结果转换为十进制,然后屏幕显示 MOV AH,4CH INT 21H FACT PROC CMP AL,0 JNZ CHN MOV BX,1 RET

CHN: PUSH AX

DEC AL

CALL FACT ;递归调用N!=N*(N-1)! POP AX MUL BX MOV BX,AX RET

FACT ENDP

B2TODEC PROC MOV CX,10000 CALL BIN MOV CX,1000 CALL BIN MOV CX,100 CALL BIN MOV CX,10 CALL BIN MOV CX,1 CALL BIN RET

B2TODEC ENDP BIN PROC MOV AX,BX MOV DX,0 DIV CX

MOV BX,DX

MOV DL,AL ADD DL,30H MOV AH,2 INT 21H RET BIN ENDP CODE ENDS

END START

19. 在附加段有一个数组,首地址为BUFF,数组中第一个字节存放了数组的长度。编一个 程序在数组中查找0,找到后把它从数组中删去,后续项向前压缩,其余部分补0。 答:DATA SEGMENT

BUFF DB 10, 1,0,2,3,4,0,5,6,7,0 ;10 个数 M EQU 0 DATA ENDS

CODE SEGMENT

ASSUME CS:CODE, ES:DATA, DS:DATA START: MOV AX, DATA ; 初始化ES,DS MOV ES, AX MOV DS, AX

MOV AL, M ; 关键字M 存入AL MOV DI, OFFSET BUFF

MOV CL, [DI] ; 数组长度存入CX MOV CH, 0

INC DI ;指向数组起始地址 CLD ;清方向标志

L1: REPNE SCASB ;重复搜索关键字 JNZ STOP ; 未找到,转STOP 结束 JCXZ STOP ; 最后一个数是M,转STOP PUSH DI ;关键字下一单元地址和循 PUSH CX ;环次数入栈保护

DEL: MOV BL, [DI] ; 前移,末尾补0 MOV [DI-1], BL INC DI LOOP DEL

MOV BYTE PTR[DI-1], 0 POP CX ; 恢复CX,DI

POP DI

DEC DI ; 由于REPNE SCASB 已自动加1 JMP L1

STOP: MOV AH, 4CH INT 21H

CODE ENDS END START

20. 编程完成将第二个字符串插入到第一个字符串的指定位置上。

答:DATA SEGMENT

STRING1 DB 'THIS IS THE FIRST STRING!','$' DB 100 DUP(0) ;缓冲区

NUM1 DW ? ;字符串1 的长度 STRING2 DB 'the second string!','$' NUM2 DW ? ;字符串2 的长度 POS DW 8 ;插入位置 DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATA MOV DS,AX

MOV ES,AX

LEA DI,STRING1 ;求字符串1 的长度存入NUM1 MOV AL,'$' MOV NUM1,0 CLD

D1: SCASB JZ D2 INC NUM1

JMP D1

D2: LEA DI,STRING2 ;求字符串2 的长度存入NUM2 MOV AL,'$' MOV NUM2,0 CLD D3: SCASB JZ D4

INC NUM2 JMP D3

D4: LEA SI,STRING1 ;将字符串1 自插入位置开始的字符向后移动, ADD SI,NUM1 ;空出位置以便插入字符串2 MOV DI,SI ADD DI,NUM2 STD

MOV CX,NUM1 SUB CX,POS INC CX

REP MOVSB

LEA SI,STRING2 ;将字符串2 插入到字符串1 指定位置 LEA DI,STRING1 ADD DI,POS CLD

MOV CX,NUM2 REP MOVSB

LEA DX,STRING1 MOV AH,9 INT 21H

MOV AH,4CH INT 21H CODE ENDS

END START

21. 将学生的班级、姓名、学号、课程名、成绩定义为一个结构,用结构预置语句,产生5 个学生的成绩登记表,编程序将成绩小于60 分的学生姓名、成绩显示出来。 答:STUDENT STRUC CLASS DB ? ;班级 NAM DB 'ABCDE$' ;姓名 NUM DB ? ;学号

COURSE DB 'ABCD' ;课程 SCORE DB ? ;成绩 STUDENT ENDS

DATA SEGMENT

STUDENT1 STUDENT <1,'XIAOA$',001,'MATH',70> STUDENT2 STUDENT <1,'XIAOB$',002,'MATH',80> STUDENT3 STUDENT <1,'XIAOC$',003,'MATH',50> STUDENT4 STUDENT <1,'XIAOD$',004,'MATH',90> STUDENT5 STUDENT <1,'XIAOE$',005,'MATH',55> DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,ds:DATA START: MOV AX,DATA MOV DS,AX

MOV CX,5 ;通过循环结构进行筛选

MOV SI,0

CONT: MOV AL,STUDENT1.SCORE[SI] ;取成绩

CMP AL,60 JAE D1

LEA DX,STUDENT1.NAM[SI] ;小于60 则显示姓名和成绩 MOV AH,9 INT 21H MOV DL,' ' MOV AH,2

INT 21H

MOV AL,STUDENT1.SCORE[SI] ;成绩转换为ASCII 码显示 MOV AH,0 MOV BL,10 DIV BL PUSH AX MOV DL,AL

ADD DL,30H MOV AH,2 INT 21H POP AX

MOV DL,AH ADD DL,30H MOV AH,2 INT 21H

MOV DL,0DH MOV AH,2 INT 21H

MOV DL,0AH INT 21H

D1: ADD SI,13 LOOP CONT MOV AH,4CH

INT 21H CODE ENDS END START

22. 编程序统计学生的数学成绩,分别归类90 分~99 分,80 分~89 分,70 分~79 分,60 分~69 分及60 分以下,并将各段的人数送入内存单元中。 答:设学生人数为字节,成绩为压缩BCD 码,且都是合法的。 DATA SEGMENT BUFF DB XXH,……. ANUM EQU $-BUFF

SNUM DB 5 DUP(0) ;存放各类成绩统计结果 BUFF1 DB ANUM DUP(0) ;存放60 分以下成绩 BUFF2 DB ANUM DUP(0) ;存放60 分~69 分成绩 BUFF3 DB ANUM DUP(0) ;存放70 分~79 分成绩 BUFF4 DB ANUM DUP(0) ;存放80 分~89 分成绩 BUFF5 DB ANUM DUP(0) ;存放90 分以上成绩 DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS: DATA,ES: DATA START: MOV AX, DATA MOV DS,AX

MOV ES,AX

MOV CL,ANUM ;取学生人数 MOV CH,0 MOV BH,0

MOV SI,OFFSET BUFF MOV DI,OFFSET SNUM D1: MOV AL,[SI] CMP AL,60H

JAE NEXT1

MOV BL,[DI]

MOV BUFF1[BX],AL INC BYTE PTR [DI] JMP NEXT5

NEXT1: CMP AL,69H JA NEXT2

MOV BL,[DI+1]

MOV BUFF2[BX],AL INC BYTE PTR [DI+1] JMP NEXT5

NEXT2: CMP AL,79H JA NEXT3

MOV BL,[DI+2] MOV BUFF2[BX],AL INC BYTE PTR [DI+2] JMP NEXT5

NEXT3: CMP AL,89H JA NEXT4 MOV BL,[DI+3] MOV BUFF3[BX],AL INC BYTE PTR [DI+3] JMP NEXT5

NEXT4: MOV BL,[DI+4] MOV BUFF4[BX],AL INC BYTE PTR [DI+4] NEXT5: INC SI LOOP D1

MOV AH,4CH INT 21H

CODE ENDS END START

23. 编制宏定义,将存储器区中一个用?$?结尾的字符串传送到另一个存储器区中,要求源地 址、目的地址、串结尾符号可变。

答:SEND MACRO SCHARS, DCHARS , FLAG

LOCAL NEXT, EXIT ;LOCAL 用于解决宏定义内的标号问题 PUSH AX ;SCHARS 源串地址,DCHARS 目的串地址 PUSH SI ;FLAG 串结尾符号 MOV SI, 0

NEXT: MOV AL, SCHARS[SI] MOV DCHARS[SI], AL CMP AL, FLAG JZ EXIT INC SI

JMP NEXT

EXIT: POP SI POP AX ENDM

24. 定义宏指令名FINSUM:它完成比较两个数X 和Y,若X>Y,则执行X+2*Y 结果送到 SUM,若X≤Y,则执行2*X+Y 结果送到SUM。 答:FINSUM MACRO X, Y, SUM IF X GT Y MOV AX, Y SHL AX, 1 ADD AX, X MOV SUM, AX ELSE

MOV AX, X SHL AX, 1 ADD AX, Y

MOV SUM, AX ENDIF ENDM

25. DOS 功能调用需要在AH 寄存器中存放不同的功能码,试将这些功能调用定义成宏指令 DOS,再定义宏指令DISP,完成显示字符的功能,并展开宏调用DISP ?*?。 答: DOS MACRO NUM MOV AH, NUM INT 21H ENDM

DISP MACRO ZIFU MOV DL, ZIFU DOS 02H ENDM

宏调用:DISP ?*? 宏展开:MOV DL, ?*? MOV AH, 02H

INT 21H

26. 编一段程序产生乐曲。 答:演奏儿歌《一闪一闪亮晶晶》 1 1|5 5|6 6|5-|4 4|3 3|2 2|1-| 5 5|4 4|3 3|2-|5 5|4 4|3 3|2-|

1 1|5 5|6 6|5-|4 4|3 3|2 2|1-|| DATA SEGMENT

FREQUECY DW 65535,262,294,330,349,392,440,494 ;各音阶频率,65535 对应0, DW 523,578,659,698,784,880,988 ;表示不发声

DW 1046,1175,1318,1397,1568,1760,1976

TABLE DW 0,8,8,12,12,13,13,12,0, 11,11,10,10,9,9,8,0 ;乐谱各音符频率在 DW 12,12,11,11,10,10,9,0, 12,12,11,11,10,10,9,0 ;FREQUECY 中的相对

DW 8,8,12,12,13,13,12,0, 11,11,10,10,9,9,8,0 ;位置 DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV BP,49 ;CI SHU LEA SI,TABLE

CONT: MOV BX,[SI] INC SI INC SI SHL BX,1

MOV DI,[FREQUECY+BX] CALL PLAY DEC BP JNZ CONT

EXIT: MOV AH,4CH INT 21H PLAY PROC MOV AL,10110110B OUT 43H,AL MOV DX,12H MOV AX,34DEH DIV DI

OUT 42H,AL MOV AL,AH OUT 42H,AL IN AL,61H MOV AH,AL OR AL,03H OUT 61H,AL

MOV CX,0FFFFH DELAY: MOV DX,1700H GOON: DEC DX JNZ GOON LOOP DELAY IN AL,61H MOV AH,AL AND AL,0FCH OUT 61H,AL MOV CX,0FFFFH DELAY1: MOV DX,100H GOON1: DEC DX JNZ GOON1

LOOP DELAY1

RET

PLAY ENDP CODE ENDS END START 第五章

1. 静态RAM 与动态RAM 有何区别?

答:(1)静态RAM 内存储的信息只要电源存在就能一直保持,而动态RAM 的信息需要定 时刷新才能保持

(2)静态RAM 的集成度比较低,运行速度快,而动态RAM 的集成度高,运行相对较

(3)静态RAM 造价成本高,动态RAM 价格便宜

2. ROM、PROM、EPROM、EEPROM 在功能上各有何特点?

答:ROM 是只读存储器,根据写入方式的不同可以分为四类:掩膜型ROM、PROM、EPROM 和EEPROM。

掩膜型ROM 中信息是厂家根据用户给定的程序或数据,对芯片图形掩膜进行两次光刻 而写入的,用户对这类芯片无法进行任何修改。PROM 出厂时,里面没有信息,用户采用 一些设备可以将内容写入PROM,一旦写入,就不能再改变了,即只允许编程一次。 EPROM可编程固化程序,且在程序固化后可通过紫外光照擦除,以便重新固化新数据。 EEPROM可编程固化程序,并可利用电压来擦除芯片内容,以重新编程固化新数据。 3. DRAM 的CAS和RAS输入的用途是什么?

答:CAS为列地址选通信号,用于指示地址总线上的有效数据为列地址;RA 行地址选 通信号,用于指示地址总线上的有效数据为列地址。 S 为

4. 什么是Cache?作用是什么?它处在微处理机中的什么位置?

答:Cache 也称为高速缓存,是介于主存和CPU 之间的高速小容量存储器。

为了减少CPU 与内存之间的速度差异,提高系统性能,在慢速的DRAM 和快速CPU 之间插入一速度较快、容量较小的SRAM,起到缓冲作用,使CPU 既可以以较快速度存取 SRAM 中的数据,又不使系统成本上升过高,这就是Cache 的作用。 Cache 在微处理机中的位置如下图:

5. 直接映像Cache 和成组相联Cache 的组成结构有什么不同?

答:直接映象 Cache 是将主存储器中每一页大小分成和 Cache 存储器大小一致,Cache 中 每一块分配一个索引字段以确定字段,这样可以通过一次地址比较即可确定是否命中,但如 果频繁访问不同页号主存储器时需要做频繁的转换,降低系统性能;

成组相联Cache 内部有多组直接映象的 Cache,组间采用全关联结构,并行地起着高 速缓存的作用。访问时需要进行两次比较才能确定是否命中。

6. 为什么要保持Cache 内容与主存储器内容的一致性?为了保持Cache 与主存储器内容的 一致性应采取什么方法?

答:由于Cache 的内容只是主存部分内容的拷贝,故应当与主存内容保持一致。数据不一致 问题通常是由于更新了Cache 的数据而没有更新与其关联的存储器的数据,或更新了存储器 数据却没有更新Cache 的内容所引起的。

为了保持Cache 与主存储器内容的一致性,有两种写入策略: (1)通写法

在此方法中,当CPU 写入数据到Cache 中后,Cache 就立即将其写入主存中,使主存

始终保持Cache 中的最新内容。此方法简单,更新内容不会丢失,但每次对Cache 的修改同 时要写入主存储器,总线操作频繁,影响系统性能。 (2)回写法

此方法中,Cache 的作用好像缓冲区一样,当CPU 写入数据到Cache 中后,Cache 并不 立即将其回写到主存中,而是等到系统总线空闲时,才将Cache 中的内容回写到主存中,此 方法使得CPU 可以持续运行而不必等待主存的更新,性能比通写法要提高很多,但其Cache 控制器复杂,价格高。

7. 用1024×1 位的RAM 芯片组成16K×8 位的存储器,需要多少芯片?在地址线中有多少 位参与片内寻址?多少位组合成片选择信号?(设地址总线为16 位)

答:由于所用的芯片为1024×1 位,构成1024×8 位(即1K×8 位)的存储器需要8 片, 因此组成16K×8 位的存储器需要16×8=128 片。 片内有1024 个单元,需要10 根地址线。

16 组(每组8 片)存储器需要16 根片选信号,至少需要4 根地址线经译码器输出。 8. 现有一存储体芯片容量为512×4 位,若要用它组成4KB 的存储器,需要多少这样的芯 片?每块芯片需要多少寻址线?整个存储系统最少需要多少寻址线? 答:4K×8 / 512×4=16 片

每块芯片内有512 个单元,故需要9 根地址线 整个存储系统最少需要12 根地址线 9. 利用1024×8 位的RAM 芯片组成4K×8 位的存储器系统,试用A15~A12 地址线用线性 选择法产生片选信号,存储器的地址分配有什么问题,并指明各芯片的地址分配。 答:组成4K×8 的存储器,那么需要4 片这样的芯片:将A15 取反后分配芯片1 的CS;将 A14 取反后分配给芯片2 的CS;将A13 取反后分配芯片3 的CS;将A12 取反后分配给芯片 4 的CS。

芯片1 的地址范围8000H~83FFH、8400H~87FFH、8800H~8BFFH、8C00H~8FFFH 芯片2 的地址范围4000H~43FFH、4400H~47FFH、4800H~4BFFH、4C00H~4FFFH 芯片3 的地址范围2000H~23FFH、2400H~27FFH、2800H~2BFFH、2C00H~2FFFH 芯片4 的地址范围1000H~13FFH、1400H~17FFH、1800H~1BFFH、1C00H~1FFFH 这样会造成地址的重叠。

10. 当从存储器偶地址单元读一个字节数据时,写出存储器的控制信号和它们的有效逻辑电 平信号。(8086 工作在最小模式) 答:8086 发出20 位地址信息和BHE =1,通过地址锁存信号锁存至8282,然后发出M/IO=1 和RD =0 等控制信号,20 位地址信号和BHE =1 送给存储器,经过译码,选中偶地址单元 一字节,将其数据读出,送至数据总线,经过由DEN =0 和DT/R =0 控制的数据收发器8286 传送至CPU。

11. 当要将一个字写入到存储器奇地址开始的单元中去,列出存储器的控制信号和它们的有 效逻辑电平信号。(8086 工作在最小模式) 答:此时要启动2 个写总线周期,第一个写周期将字的低8 位写入存储器奇地址单元,第二 个写周期将字的高8 位写入存储器奇地址单元下一个单元。 第一个写周期中,BHE =0,第二个写周期中,BHE =1。

其余信号M/IO=1,WR =0,DEN =0,DT/R =1 12. 设计一个64K×8 存储器系统,采用74LS138 和EPROM2764 器件,使其寻址存储器的 地址范围为40000H~4FFFFH。 答:因为EPROM2764 是8K×8 的ROM,所以要构成64K×8 的存储器系统,需要8 片

EPROM2764。其中CPU 的A12~A0 直接与8 片EPROM 的A12~A0 相连(没有考虑驱动能力

问题),A15、A14和A13与138 的A、B、C 三个端口相连,其他地址线(A19~A16)和M/IO 组合连到G1、G2A 和G2B 上,确保A19=0、A18=1、A17=0 和A16=0 即可。 13. 用8K×8 位的EPROM2764、8K×8 位的RAM6264 和译码器74LS138 构成一个16K 字 ROM、16K 字RAM 的存储器子系统。8086 工作在最小模式,系统带有地址锁存器8282, 数据收发器8286。画出存储器系统与CPU 的连接图,写出各块芯片的地址分配。 答: CE

D77~~D00 D1155~~D88 A1122~~A00 OE CE

A1133~~A11 RD 11## 22776644 CE

D77~~D00 D1155~~D88 A1122~~A00 OE CE

A1133~~A11 RD 22## 22776644 CE22 D77~~D00 D1155~~D88 A1122~~A00 WEE CE11 A1133~~A11 WR 33## 66226644 CE22 D77~~D00 D1155~~D88 A1122~~A00 WE CE11 A1133~~A11 WR 44## 66226644 CE22 CE22 A00

Y00 Y11 Y22

Y33 BHE M//IIO A1199 A1188 A1177 A1166 A1155 A1144 B

A C

G22BB G22AA G11

BHEE

Y22 Y33 A00 A00 C B A

A19 A18 A17 A16 A15 A14 A13~A0 1 0 0 0 0 0 Y0 有效80000~83FFFH

1 0 0 0 0 1 Y1 有效84000~87FFFH 1 0 0 0 1 0 Y2 有效88000~8BFFFH 1 0 0 0 1 1 Y3 有效8C000~8FFFFH

14. 上题中若从74LS138 的Y2 开始选择ROM 和RAM 芯片,写出各块芯片的地址分配。 答: C B A

A19 A18 A17 A16 A15 A14 A13~A0 1 0 0 0 1 0 Y2 有效88000~8BFFFH 1 0 0 0 1 1 Y3 有效8C000~8FFFFH 1 0 0 1 0 0 Y4 有效90000~93FFFH 1 0 0 1 0 1 Y5 有效94000~97FFFH

第六章

1. CPU 与外设交换数据时,为什么要通过I/O 接口进行?I/O 接口电路有哪些主要功能? 答:CPU 和外设之间的信息交换存在以下一些问题:速度不匹配;信号电平不匹配;信号 格式不匹配;时序不匹配。

I/O 接口电路是专门为解决CPU 与外设之间的不匹配、不能协调工作而设置的,处于 总线和外设之间,一般应具有以下基本功能: ⑴设置数据缓冲以解决两者速度差异所带来的不协调问题;

⑵设置信号电平转换电路,来实现电平转换。 ⑶设置信息转换逻辑,如模拟量必须经 A/D 变换成数字量后,才能送到计算机去处理, 而计算机送出的数字信号也必须经D/A 变成模拟信号后,才能驱动某些外设工作。 ⑷设置时序控制电路; ⑸提供地址译码电路。

2. 在微机系统中,缓冲器和锁存器各起什么作用?

答:缓冲器多用在总线上,可提高总线驱动能力、隔离前后级起到缓冲作用,缓冲器多半有 三态输出功能。

锁存器具有暂存数据的能力,能在数据传输过程中将数据锁住,然后在此后的任何时 刻,在输出控制信号的作用下将数据传送出去。

3. 什么叫I/O 端口?一般的接口电路中可以设置哪些端口?计算机对I/O 端口编址时采用哪 两种方法?在8086/8088CPU 中一般采用哪些编址方法?

答:在CPU 与外设通信时,传送的信息主要包括数据信息、状态信息和控制信息。在接口 电路中,这些信息分别进入不同的寄存器,通常将这些寄存器和它们的控制逻辑统称为I/O 端口。

一般的接口电路中可以设置数据端口、状态端口和命令端口。

计算机对I/O 端口编址时采用两种方法:存储器映像寻址方式、I/O 单独编址方式。 在8086/8088CPU 中一般采用I/O 单独编址方式。 4. CPU 与外设间传送数据主要有哪几种方式?

答:CPU 与外设间的数据传送方式主要有:程序控制方式、中断方式、DMA 方式。 程序控制传送方式:CPU 与外设之间的数据传送是在程序控制下完成的。⑴无条件传 送方式:也称为同步传送方式,主要用于对简单外设进行操作,或者外设的定时是固定的或 已知的场合。 ⑵条件传送:也称为查询式传送方式,在开始传送前,必须先查询外设已处 于准备传送数据的状态,才能进行传送。

采用中断方式:CPU 平时可以执行主程序,只有当输入设备将数据准备好了,或者输

出端口的数据缓冲器已空时,才向CPU 发中断请求。CPU 响应中断后,暂停执行当前的程 序,转去执行管理外设的中断服务程序。在中断服务程序中,用输入或输出指令在CPU 和 外设之间进行一次数据交换。等输入或输出操作完成之后,CPU 又回去执行原来的程序。 DMA 方式:也要利用系统的数据总线、地址总线和控制总线来传送数据。原先,这些

总线是由CPU 管理的,但当外设需要利用DMA 方式进行数据传送时,接口电路可以向CPU 提出请求,要求CPU 让出对总线的控制权,用DMA 控制器来取代CPU,临时接管总线, 控制外设和存储器之间直接进行高速的数据传送。这种控制器能给出访问内存所需要的地址 信息,并能自动修改地址指针,也能设定和修改传送的字节数,还能向存储器和外设发出相 应的读/写控制信号。在DMA 传送结束后,它能释放总线,把对总线的控制权又交还给CPU。 5. 说明查询式输入和输出接口电路的工作原理。

答:查询式传送方式也称为条件传送方式。一般情况下,当CPU 用输入或输出指令与外设 交换数据时,很难保证输入设备总是准备好了数据,或者输出设备已经处在可以接收数据的 状态。为此,在开始传送前,必须先确认外设已处于准备传送数据的状态,才能进行传送, 于是就提出了查询式传送方式。

查询式传送方式的工作过程:

在传送数据前,CPU 要先执行一条输入指令,从外设的状态口读取它的当前状态。如 果外设未准备好数据或处于忙碌状态,则程序要转回去反复执行读状态指令,不断检测外设 状态;如果该外设的输入数据已经准备好,CPU 便可执行输入指令,从外设读入数据。 查询式输入方式的接口电路如下:

查询式输入方式的工作过程:

当输入设备准备好数据后,就向I/O 接口电路发一个选通信号。此信号有两个作用:一 方面将外设的数据打入接口的数据锁存器中,另一方面使接口中的D 触发器的Q 端置l。 CPU首先执行IN指令读取状态口的信息,这时M/ IO和RD信号均变低,M/ IO为低,使 I/O译码器输出低电平的状态口片选信号CS1。CS1和RD经门1 相与后的低电乎输出,使

三态缓冲器开启,于是Q 端的高电平经缓冲器(1 位)传送到数据线上的READY(D0)位,并 被读入累加器。程序检测到READY 位为1 后,便执行IN指令读数据口。这时M/ IO和RD 信号再次有效,先形成数据口片选信号CS2 ,CS2 和RD 经门2 输出低电平。它一方面开 启数据缓冲器,将外设送到锁存器中的数据经8 位数据缓冲器送到数据总线上后进入累加 器,另一方面将D 触发器清0,一次数据传送完毕。接着就可以开始下一个数据的传送。当 规定数目的数据传送完毕后,传送程序结束,程序将开始处理数据或进行别的操作。 查询式输出方式的接口电路如下:

查询式输出方式的工作过程:

当CPU 准备向外设输出数据时,它先执行IN 指令读取状态口的信息。这时,低电平的 M/ IO和有效的端口地址信号使I/O 译码器的状态口片选信号CS1变低,CS1再和有效的 RD 信号经门l 相与后输出低电平,它使状态口的三态门开启,从数据总线的D1 位读入 BUSY 状态。若BUSY=l,表示外设处在接收上一个数据的忙碌状态。只有在BUSY=0 时, CPU 才能向外设输出新的数据。当CPU 检查到BUSY=0 时,便执行OUT 指令将数据送向 数据输出口。这时低电平的M/ IO使I/O 译码器的状态口片选信号CS2变低,CS2再和 WR 信号经门2 相与后输出低电平的选通信号,它用来选通数据锁存器,将数据送向外设。 同时,选通信号的后沿还使D 触发器翻转,置Q 为高电平,即把状态口的BUSY 位置成l, 表示忙碌。当输出设备从接口中取走数据后,就送回一个应答信号ACK,它将D 触发器清 0,即置BUSY=0,允许CPU 送出下一个数据。

6. 简述在微机系统中,DMA 控制器从外设提出请求到外设直接将数据传送到存储器的工作 过程。

答:DMA 方式,外设向內存传输数据的过程:

当一个接口中有数据要输入时,就向DMA 控制器发送DMA 请求; DMA 控制器接收 到请求后,便往控制总线上发一个总线请求;如果CPU 允许让出总线,则发一个总线允许 信号;DMA 控制器接到此信号后,就将地址寄存器的内容送到地址总线上,同时往接口发 一个DMA 回答信号,并发一个1/O 读信号和一个内存写信号;接口接到 DMA 回答信号 以后,将数据送到数据总线上,并撤除DMA 请求信号;内存在接收到数据以后,一般往 DMA 控制器回送一个准备好信号,DMA 控制器的地址寄存器内容加 1 或减 1,计数器的 值减1,而且撤除总线请求信号,这样,就完成了对一个数据的DMA 输入传输。DMA 传 输结束时,往接口发一个结束信号,向CPU 交回总线控制权。其状态寄存器的传输结束标 志置“1”。查询时,CPU 在主程序中通过查询状态寄存器的传输结束标志,决定是否进行 后续处理。

7. 某一个微机系统中,有8 块I/O 接口芯片,每个芯片占有8 个端口地址,若起始地址为 300H,8 块芯片的地址连续分布,用74LS138 做译码器,试画出端口译码电路,并说明每 块芯片的端口地址范围。

答:

8. 什么叫总线?总线分哪几类?在微型计算机中采用总线结构有什么好处?

答:在微型计算机系统中,将用于各部件之间传送信息的公共通路称为总线(BUS)。 总线分三类:片级总线、系统总线、外部总线。 在微型计算机中采用总线的好处有:

(1)总线具有通用性,只要按统一的总线标准进行设计或连接,不同厂家生产的 插件板可以互换,不同系统之间可以互连和通信,很适合于大批量生产、组装和调 试,也便于更新和扩充系统。

(2)对于用户来说,可以根据自身需要,灵活地选购接口板和存储器插件,还可 以根据总线标准的要求,自行设计接口电路板,来组装成适合自己应用需要的系统

或更新原有系统。

9. PC 总线和ISA 总线各用于何种类型的微型计算机中?它们的数据总线各有多少根? 答:IBM PC/XT 使用的总线称为PC 总线,有8 条数据线。 ISA 总线又称AT 总线,是以80286 为CPU 的PC/AT 机及其兼容机所用的总线,具有 16 条数据线。

10. PCI 总线有哪些主要特点?根据PCI 总线引脚图和典型时序图,说明如何完成PCI 突发 读交易。

答:PCI 总线的特点:

(1)PCI 总线传输数据的位数为32 位,也可扩展到64 位。32 位PCI 总线在读写传送中, 以33MHz 的频率进行,传输速率为132MB/s,当数据宽度为64 位时,以66MHz 的频率运 行,传输速率高达528MB/s。

(2)PCI 总线支持突发传送方式(Burst Transfer)。

(3)PCI 总线支持即插即用(Plug and Play,PnP)功能。

(4)PCI 总线与微处理器之间不直接相连,而是通过与CPU 结构无关的中间部件桥接器 相连。

PCI 总线突发读交易的过程:

PCI 突发读交易以周期帧信号FRAME#有效后开始进行PCI 交易,交易的第一个时钟 周期为地址时段,此时主设备通过驱动地址总线寻址目标,驱动PCI 命令确定交易类型。 因PCI 的地址线/数据线(AD)和命令信号(C/BE#)都是分时复用的,所以每个PCI 目标 设备在下一个时钟周期的上升沿将地址信号和命令信号锁存,然后经译码,确定自己是否是 本次寻找的目标和将要交易的类型是什么。PCI 目标确定自己是交易的目标后,则将设备选 择信号DEVSEL#置为有效状态,向交易的启动方声明本次交易有效。在主设备的IRDY#和 目标设备的TRDY#都有效的情况下可以连续进行交易,传送多个数据,直至交易结束为止。 第七章

1. 什么叫中断?什么叫可屏蔽中断和不可屏蔽中断?

答:当CPU 正常运行程序时,由于微处理器内部事件或外设请求,引起CPU 中断正在运行 的程序,转去执行请求中断的外设(或内部事件)的中断服务子程序,中断服务程序执行完毕, 再返回被中止的程序,这一过程称为中断。

可屏蔽中断由引脚INTR 引入,采用电平触发,高电平有效,INTR 信号的高电平必须 维持到CPU 响应中断才结束。可以通过软件设置来屏蔽外部中断,即使外部设备有中断请 求,CPU 可以不予响应。当外设有中断申请时,在当前指令执行完后,CPU 首先查询IF 位, 若IF=0,CPU 就禁止响应任何外设中断;若IF=1,CPU 就允许响应外设的中断请求。 不可屏蔽中断由引脚NMI 引入,边沿触发,上升沿之后维持两个时钟周期高电平有效。 不能用软件来屏蔽的,一旦有不可屏蔽中断请求,如电源掉电等紧急情况,CPU 必须予以 响应。

2. 列出微处理器上的中断引脚和与中断有关的指令。 答:INTR:可屏蔽中断请求输入引脚。 NMI:不可屏蔽中断请求输入引脚 INTA :可屏蔽中断响应引脚

INT n :软件中断指令,其中n 为中断类型号

INTO:溢出中断,运算后若产生溢出,可由此指令引起中断。 CLI:中断标志位IF 清0 STI:置位中断标志位为1

3. 8086/8088 系统中可以引入哪些中断?

答:(1)外部中断

两种外部中断:不可屏蔽中断NMI 和可屏蔽中断INTR (2)内部中断

内部中断又称软件中断,有三种情况引起: ①INT n :中断指令引起的中断

②CPU 的某些运算错误引起的中断:包括除法错中断和溢出中断 ③由调试程序debug 设置的中断:单步中断和断点中断。 4. CPU 响应中断的条件是什么?简述中断处理过程。 答:CPU 响应中断要有三个条件:

外设提出中断申请;本中断位未被屏蔽;中断允许。 可屏蔽中断处理的过程一般分成如下几步:

中断请求;中断响应;保护现场;转入执行中断服务子程序;恢复现场和中断返回。 CPU 在响应外部中断,并转入相应中断服务子程序的过程中,要依次做以下工作: ⑴从数据总线上读取中断类型号,将其存入内部暂存器。

⑵将标志寄存器PSW 的值入钱。 ⑶将PSW 中的中断允许标志IF 和单步标志TF 清0,以屏蔽外部其它中断请求,避 免CPU 以单步方式执行中断处理子程字。 ⑷保护断点,将当前指令下面一条指令的段地址CS 和指令指针IP 的值入栈,中断 处理完毕后,能正确返回到主程序继续执行。

⑸根据中断类型号到中断向量表中找到中断向量,转入相应中断服务子程序。 ⑹中断处理程序结束以后,从堆栈中依次弹出IP、CS 和PSW,然后返回主程序断点 处,继续执行原来的程序。

5. 中断服务子程序中中断指令STI 放在不同位置会产生什么不同结果?中断嵌套时,STI 指令应如何设置?

答:由于响应中断时CPU 自动关闭中断(IF=0),故在中断服务子程序中STI 指令后方可 实现中断嵌套。一般在中断服务子程序中保护现场后即设置开中断指令STI(IF=1),以便 实现中断嵌套。

6. 中断结束命令EOI 放在程序不同位置处会产生什么不同结果?

答:中断结束命令EOI 后,清除中断服务寄存器中的标志位,即允许响应同级或低级中断, 为避免错误,一般将中断结束命令EOI 置于中断服务子程序结束前。 7. 中断向量表的功能是什么?

答:中断向量表又称中断服务程序入口地址表。

将每个设备的中断服务程序入口地址(矢量地址)集中,依次放在中断向量表中。当CPU

响应中断后,控制逻辑根据外设提供的中断类型号查找中断向量表,然后将中断服务程序的 入口地址送到段寄存器和指令指针寄存器,CPU 转入中断服务子程序,这样可大大加快中 断处理的速度。

8086/8088 系统允许处理256 种类型的中断,对应类型号为0~FFH。在存储器的

00000H~003FFH,占1K 字节空间,用作存放中断向量。每个类型号占4 个字节,高2 个字 节存放中断入口地址的段地址,低2 个字节存放段内偏移地址。

8. 假定中断类型号15 的中断处理程序的首地址为ROUT15,编写主程序为其建立一个中断 向量。 PUSH ES MOV AX,0 MOV ES,AX

MOV DI,54H ;15H*4

MOV AX,OFFSET ROUT15 ;中断处理程序的偏移→AX CLD STOSW

MOV AX,SEG ROUT15 ;中断处理程序的段地址→AX STOSW

POP ES

9. 8086/8088CPU 如何获得中断类型号? 答:对于内部中断

①INT n :n 即为中断类型号

②除法错中断自动获得类型号0,INTO 溢出中断自动获得中断类型号4 ③单步中断自动获得类型号1,断点中断自动获得类型号3。 对于外部中断: ① 不可屏蔽中断 NMI:自动获得中断类型号2

② 可屏蔽中断 INTR:

CPU 响应可屏蔽中断,对中断接口电路发出两个中断响应信号INTA ,中断接口电路 收到第二个INTA 以后,通过数据线向CPU 送中断类型号。

10. 给定SP=0100H,SS=0500H,PSW=0240H,在存储单元中已有内容为(00024H)=0060H, (00026H)=1000H,在段地址为0800H 及偏移地址为00A0H 的单元中有一条中断指令INT 9, 试问执行INT 9 指令后,SP、SS、IP、PSW 的内容是什么?栈顶的三个字是什么?

答:执行INT 9 指令,标志寄存器PSW、下一条指令的段地址CS 和指令指针IP 的值分别 入栈,PSW 中的中断允许标志IF 和单步标志TF 清0,中断向量表的中断入口地址送CS 和 IP,转入中断服务子程序。所以此时SP=00FAH,SS=0500H,CS=1000H,IP=0060H, PSW=0040H。栈顶的三个字是:(0500H:00FAH)=00A2H、(0500H:00FCH)=0800H、 (0500H:00FEH)=0240H 标志寄存器 PSW

X X X X OF DF IF TF SF ZF X AF X PF X CF 执行INT 9前 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 执行INT 9后 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0

PSW=0040H

11. 8259A 优先权管理方式有哪几种?中断结束方式又有哪几种? 答:8259A 优先权管理方式有如下4 种: (1)全嵌套方式

此方式下,中断优先级分配固定级别0~7 级,IR0 具有最高优先级,IR7 优先级最低。 (2)特殊全嵌套工作方式

此种工作方式主要用于8259A 级联情况。此方式与全嵌套工作方式基本相同,区别在 于当处理某级中断时,有同级中断请求进入,8259A 也会响应,从而实现了对同级中断请求 的特殊嵌套。

(3)优先级自动循环方式

优先级可以改变,初始优先级次序为IR0~IR7,当任何一级中断被处理完后,它的优 先级别变为最低,将最高优先级赋给原来比它低一级的中断请求。 (4)优先级特殊循环方式

特殊循环方式下,初始时优先级由程序指定,而不是固定的。

本文来源:https://www.bwwdw.com/article/9e6o.html

Top