微机原理课后习题答案

更新时间:2024-01-09 01:05:01 阅读量: 教育文库 文档下载

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

2.1 8086 CPU 在内部结构上由哪几部分组成?其功能是什么?

【答】8086 的内部结构-成两部分:总线接口部件BIU,负责控制存储器读写。执行部件EU,EU 从指令队列中取出指令并执行。8086 是16 位微处理器,有16 根数据线、20 根地址线,内部 寄存器、运算部件以及内部操作都是按16 位设计的。 2.2 8086 的总线接口部件有那几部分组成?

【答】8086 的总线接口部件主要由下面几部分组成:4 个段寄存器CS/DS/ES/SS, 一个16 位 的指令指针寄存器IP, 一个20 位地址加法器, 6 字节的指令队列,内部暂存器以及输入输出 电路组成.

2.3 8086 的执行部件有什么功能?由那几部分组成?

【答】8086 的执行部件主要由下面几部分组成:(1)四个16 位通用寄存器AX、BX、CX、DX, 通用四个16 位专用寄存器,包括二个指针寄存器SP、BP, 二个变址寄存器SI、DI, 算术逻辑 单元ALU,标志寄存器。

2.4 8086CPU 状态标志和控制标志又何不同?程序中是怎样利用这两类标志的? 8086 的状态 标志和控制标志分别有哪些?

【答】标志分两类:状态标志(6 位):反映刚刚完成的操作结果情况。控制标志(3 位):在 某些指令操作中起控制作用。

2.5 8086/8088 和传统的计算机相比在执行指令方面有什么不同?这样的设计思想有什么优 点? 8086CPU 执行转移指令时,指令队列寄存器内容如何变化?

【答】传统的计算机一般按照取指令、指令译码/执行指令的步骤工作。在8086/8088 中,指 令的提取与执行分别由总线接口部件BIU 与执行部件EU 完成,8086/8088 可以在取指令同时 又可以执行指令,这种并行工作方式有力的提高了CPU 的工作效率。

2.6 将两数相加,即0100 1100 加0110 0101,CF、PF、AF、ZF、SF、OF 各为何值? 【答】0100 1100+0110 0101=10110001 CF=0,PF=1,AF=1,ZF=0,SF=1,OF=1

2.7 存储器的逻辑地址由哪几部分组成?存储器的物理地址是怎样形成的?一个具有20 位 地址线的CPU,其最大物理地址为多少?

【答】存储器的逻辑地址由段地址与段内偏移地址组成。存储器的物理地址:将16 位段地址 左移4 位后加上16 位段内偏移地址,形成20 位物理地址。一个具有20 位地址线的CPU,其 最大物理地址为=1MB。 3

2.8 现有6 个字节的数据分别为11H,22H,33H,44H,55H,66H,已知它们在存储器中的 物理地址为400A5H~400AAH.若当前(DS)= 4002H,请说明它们的偏移地址值。如果要从 存储器中读出这些数据,需要访问几次存储器,各读出哪些数据? 【答】由于:物理地址=400A5H=段地址*16+偏移地址=40020H+偏移地址 偏移地址=400A5+40020=85H

从奇地址400A5H 中读出:11H;从偶地址400A6H 读出一个字:22H,33H;从偶地址 400A8H 读出一个字:44H,55H;从偶地址400AAH 中读出:66H。共读4 次。 2.9 已知当前数据段中存有如下图所示的数据,现要求将最后两个 字节改成ODH,OAH,请说明需给出的段基值和偏移地址值,并说明 其写入过程。

【答】数据段段地址=150AH,偏移地址=0004H。CPU 的总线接口部件 根据数据段寄存器的内容150AH,左移4 位,在加上偏移地址0004H, 形成20 位物理地址150A4H,由总线接口送出,选中物理存储单元 150A4H、150A5H,数据0DH 通过数据总线送入150A4H,数据0AH 通

过数据总线送入150A4H。

2.10 在8088/8086 中,逻辑地址FFFF∶0001, 00A2∶37F 和B800∶173F 的物理地址分别是 多少?

2.11 在8088/8086 中,从物理地址388H 开始顺序存放下列三个双字节的数据,651AH, D761H 和007BH,请问物理地址388H, 389H, 38AH, 38BH, 38CH 和38DH 6 个单元中分别是什么数 据?

2.12 8086/8088 内部有哪些通用寄存器?

2.13 8086/8088 内部有几个段寄存器,阐述各段寄存器的用途?

2.14 8086CPU 的形成三大总线时,为什么要对部分地址线进行锁存?用什么信号控制锁存? 【答】为了确保CPU 对存储器和I/O 端口的正常读/写操作,要求地址和数据同时出现在地 址总线和数据总线上。而在8086CPU 中AD0--AD15 总线是地址/数据复用的,因此需在总线周 期的前一部分传送出地址信息,并存于锁存器中,而用后一部分周期传送数据。8086CPU 中 是通过CPU 送出的ALE 高电平信号来控制锁存的。

2.15 段寄存器CS=1200H,指令指针寄存器IP=4000H,此时,指令的物理地址为多少?指向这一 物理地址的CS 值和IP 值是唯一的吗?

【答】此时,指令的物理地址为16000H;这一物理地址的CS 值和IP 值不是唯一的,例如: CS=1000H,IP=6000H。

(2. 80386CPU-选择教学内容)

2.14 80386 最重要的技术特点是什么?

【答】①速度大大提高:时钟达12MHZ/16MHZ, ②寻址空间大大扩展:4GB 物理空间,64GB 虚拟空间, ③除了保持80286 的实地址方式和保护方式外,增加了虚拟8086 方式④80386 设置了转换检测缓冲器,大大加快了存储器访问速度。

2.15 虚拟8086 方式有什么特色?为什么要设置这种方式?

【答】①可以执行8086 的应用程序。②段寄存器的用法和实地址方式时一样,即段寄存器内 容左移4 位加上偏移量为线性地址。③存储器寻址空间为一兆字节,然而可以使用分业方式, 将一兆字节分为256 个业面,每页4K 字节。在80386 多任务系统中,可以其中一个或几个任 4

务使用虚拟8086 方式。此时,一个任务使用的全部页面可以定位于某个物理地址空间,另一 个任务的页面可以定位于其他区域,即每个虚拟8086 方式下的任务可以转换到物理存储器的 不同位置,这样,把存储器虚拟化了,虚拟8086 方式的名称正是由此而来。④虚拟8086 方 式中,程序在最低特权级上运行,因此,80386 指令系统中的一些特权指令不能使用。 虚拟8086 方式是80386 中很重要的设计特点,他可以使大量的8086 软件有效的与 80386 保护方式下的软件并发运行。

2.16 80386 的实地址方式用于什么时候?为什么说它是为建立保护方式作准备的方式?实地 址工作方式有什么特点?

【答】80386 的实地址方式用于为80386 进行初始化用的。常常在实地址方式,为80386 保 护方式所需要的数据结构做好各种配置和准备,因此,这是一种为建立保护方式作准备的方 式。实地址工作方式的特点:1、寻址机构、存储器管理、中断处理机构均和80386 一样。2、 操作数默认长度为16 位,但允许访问80386 的32 位寄存器组,在使用是,指令中要加上前 缀以表示越权存取。3、不用虚拟地址的概念存储器容量最大1M 字节。4、实地址方式下, 存储器中保留两个固定区域,一个为初始化程序区,另一个为中断向量区。5、80386 具有4 个特权级,实地址方式下,程序在最高级(0 级)上执行。 2.17 80386 采用拿几种描述符表?这些表的设置带来什么优点?

【答】80386 共设计三中描述符表即:全局描述符表,局部描述符表,中断描述浮表。采用

描述符表带来如下三方面的优点:1.可以大大扩展存储空间;2. 可以实现虚拟存储;3. 可 以实现多任务隔离。

2.18 80386 在3 种工作方式下,\段\的长度有什么差别?

实地址方式:段的大小固定64K 字节;保护方式:段的大小是可以选择的,1 字节 到4 千兆字节;虚拟8086 方式:对程序员来说,段长度固定为64K。

2.19 Intel86 系列CPU 是从哪一种芯片开始采用RISC 技术的?你能说说RISC 技术最重要的 特点和优点吗?

【答】80486 是首次采用RISC 技术的。80486 把80386 和浮点运算协处理器80387 及8KB 的 超高速缓存器集中到一个芯片中,且支持二级Cache。80486 能在一个时钟周期执行一条指令。 2.20 80486 和80386 相比,有什么技术特点?

【答】① 80486 是首次采用RISC 技术的;②采用片内高速缓存和片内浮点运算协处理器; ③ 80486 采用一种突发式总线方式实现CPU 和内存的高速数据交换;④80386 可以模拟多个 8086 来实现多任务功能。

2.21 80386SL 和80486SL 芯片有什么特点?主要用于什么场合?

【答】① 80386SL 不但具有80386 的三种工作方式,还增加了一种系统管理方式(SMM),在 这种方式,CPU 会根据不同的使用环境自动减速运行或停止运行,还可以控制其他部件停止 工作,从而使微机系统的功耗最小。② 80386SL 采用静态CMOS 工艺制造技术。80486SL 和 80386SL 类似,采用SMI 中断以减少功耗,用于便携机。

2.22 Pentium 有哪些技术特点?你认为在Pentium 基础上主要应从哪几个方面可再作改进? 【答】① 采用超标量双流水线结构,每个流水线包含5 个步级。② 内部采用2 个彼此独立 的8KB 数据高速缓存,这两个高速缓存可以同时被访问。③ Pentium 内部数据总线为32 位, 但是cpu 和内存进行数据交换的外部数据总线为64 位,使一个总线周期的数据传输量提高一 5

倍。④ 采用36 位地址总线,扩展了寻址空间。⑤ 对mov.push.dec.inc 等常用指令不用微 程序而用硬件实现;⑥采用分支预测技术提高流水线效能。⑥ 采用分支预测技术提高流水线 效能。⑦ 浮点运算执行过程分为8 个流水步级。pentium 也存在一些缺点,如功耗大,达15w, 浮点运算功能仍低于一些RISC 处理器。 习题三8086 指令系统

主要内容: 8086 指令系统。主要介绍8086 的基本数据类型、寻址方式和指令系统,重点掌 握8086 指令系统的寻址方式、堆栈操作指令、算术运算指令及其对标志位的影响,串操作指 令,控制传送指令。

3.1 下面这些指令哪些是正确的?哪些是错误的?如是错误的,请说明原因。 XCHG CS,AX (′)

MOV [BX],[1000] (′) PUSH CS ()? POP CS (′) IN BX,DX (′) 3.2 单选题:

(1)执行下面指令序列后,结果是( )。 MOV AL,82H CBW

A、AX=0FF82H B、AX=8082H C、AX=0082H D、AX=0F82H 【答】A

(2)与MOV BX,OFFSET VAR 指令完全等效的指令是( )。

A、MOV BX,VAR B、LDS BX,VAR C、LES BX,VAR D、LEA BX,VAR 【答】D

(3)编写分支程序,在进行条件判断前,可用指令构成条件,其中不能形成条件的指令有 A、CMP B、SUB C、AND D、MOV 【答】D

(4)下面指令执行后,改变AL 寄存器内容的指令是( )。 A、TEST AL,02H B、OR AL,AL C、CMP AL,B D、AND AL,BL 【答】D

(5)设DH=10H,执行NEG DH 指令后,正确的结果是( ) A、DH=10H CF=1 B、DH=0F0H CF=0 C、DH=10H CF=0 D、DH=0F0H CF=1 【答】D

(6)设DS=8225H,DI=3942H,指令NEG BYTE PTR[DI]操作数的物理地址是( )。 A、85B92H B、86192H C、BB690H D、12169H 【答】A

(7)检查BUF 的内容是否为正偶数,如是正偶数,则0TAL。下面程序段正确的是( )。 A、MOV AL,BUF JS K1 SHR AL,1 6

JNC K1 MOV AL,0 K1: ??

B、MOV AL,BUF AND AL,11 JNZ K2 MOV AL,0 K2: ??

C、MOV AL,BUF TEST AL,81H JNZ K3 MOV AL,0 K3: ??

D、MOV AL,BUF JNP K4

TEST AL,80H JNZ K4 MOV AL,0 K4: ?? 【答】C

(8)下列指令中,执行速度最快的是( )。 A、MOV AX,100 B、MOV AX,[BX]

C、MOV AX,BX D、MOV AX,[BX+BP] 【答】C

3.3 已知(DS)= 091DH,(SS)= IE4AH,(AX)= 1234H,(BX)= 0024H,(CX)= 5678H, (BP)= 0024H,(SI)= 0012H,(DI)= 0032H,[09226] = 00F6H,[09228]=1E40H, [lE4F6]=091DH,试求单独执行下列指令后的结果? (l) MOV CL ,20H [BX][SI];

【答】由于源操作数有效地址EA=20H+0024H+0012H=0056H,

其物理地址PA=DS*16+EA=091DH*16+56H=09226H, 因此(CL)= F6H (2) MOV [BP][DI],CX;

【答】由于目的操作数有效地址EA= 0024H+0032H=0056H,

目的操作数物理地址PA= SS*16+EA=1E4A0H+0056H=1E4F6H, 因此[1E4F6]=5678H (3) LEA BX ,20H[BX][SI] MOV AX ,2[BX]

【答】第一条指令:源操作数物理地址PA=091D0H+(20+0024H+0012H)=09226H,因此(BX)=0056H 第二条指令:源操作数物理地址PA=091D0H+(2+0056)=09928H, 因此(AX)=1E40H (4) LDS SI ,[BX][DI] MOV [SI],BX

【答】第一条指令: 源操作数物理地址PA=091D0H+(0024H+0032H)=09226H 因此(SI)= 00F6H, (DS)=1E40H

第一条指令:目的操作数物理地址PA=1E400H+00F6H=1E4F6H 因此1E4F6H 单元的内容为0024H, 即[1E4F6H]=0024H 7

(5) XCHG CX,32H[BX] XCHG 20[BX][SI] ,AX

【答】同理可得:(CX)= 00F6H(AX)= 00F6H, [ 09226H]= 1234H 3.4 8086 CPU 执行如下指令后 MOV AL,01100100B

SUB AL,58H ;(AL)=0CH,AF=1,CF=0 DAS ;(AL)=06 ,AF=1,CF=0

【答】首先用TD 调试验证上面的结果;自己定义两个数据,重新验证,写出结果。

3.5 设(IP)= 3D8F H,(CS)= 4050H,(SP)= 0F17C H,当执行CALL 2000:0094H 后, 试求出IP、CS、SP、[SP]、[SP+1][SP+2] 和[SP+3]的内容? 【答】(IP)=0094H ,( CS)=2000H ,(SP)=F178H

[SP]=8FH , [SP+1]=3DH , [SP+2]=50H, [SP+3]=40H

3.6 设(DS)= 2000H,(BX)= 1256H,(SI)= 528FH,TABLE 的偏移量= 20A1H,[232F7H] =3280H,[ 264E5H] = 2450H,执行下述指令 (1)JMP BX ;IP= 1256H

(2)JMP TABLE[BX] ;IP= 3280H (3)JMP [BX][SI] ;IP= 2450H

3.7 分别用一条语句实现下述指明的功能 (1)栈顶内容弹出送字变量DI。(POP DI)

(2)双字变量AYD 存放的地址指针送ES 和SI。(LES SI ,AYD ) (3)不允许中断即关中断。(CLI) (4)子程序返回调用程序。(RET)

(5)AX 的内容加1,要求不影响CF。(INC AX )

(6)BX 的内容加1,要求影响所有标志位。(ADD BX, 1) (7)若操作结果为零转向标号GOON。(JZ GOON) 3.8 8086/8088 用什么途径来更新CS 和IP 的值?

【答】执行CALL、JMP、INT 指令,可以改变CS 和IP 中的值,即改变程序走向。 3.9 字节扩展指令和字扩展指令用在什么场合?举例说明。

【答】需要对带符号数字节扩展为字时,要预先执行CBW 指令。需要对带符号数字扩展为双 字时,要预先执行CWD。

【答】例:求-503/267=?,将商存1000H 单元. MOV AX,-503 MOV BX,267 CWD IDIV

MOV [1000H],AX HLT

3.10 设DS=2100H,SS=5200H,BX=1400H,BP=6200H,说明下面两条指令所进行的具体操作: MOV WORD PTR [BP], 2000 MOV WORD PTR [BX], 2000 8

3.11 以下是格雷码的编码表

0——0000 ,1——0001 ,2——0011, 3——0010, 4——0110 5——0111 ,6——0101, 7——0100, 8——1100, 9——1101 请用换码指令和其他指令设计一个程序段,实现格雷码往ASCII 的转换。

TABLE SEGMENT

TAB_DA DB 30H,31H,33H,32H,37H,36H,34H,35H,0,0 DB 0,0,38H,39H GRA DB 05H ASCII_DA DB ? TABLE ENDS CODE SEGMENT

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

MOV BX,OFFSET TAB_DA MOV AL,GRA XLAT

MOV ASCII_DA,AL CODE ENDS END START

3.12 8086 状态标志寄存器中,作为控制用的标志位有( 3 )个,其中,不可用指令操作的 是(DF、IF、TF)

3.13 设当前的SP=1000H,执行PUSHF 指令后,SP=(0FFE H),若改为执行INT 20H 指令后, 则SP=( 0FFA H)。

【答】执行PUSHF 指令后,SP=(0FFE H)。执行INT 20H 指令后,则SP=( 0FFA H)。 3.14 设当前SS=2010H,SP=FE00H,BX=3457H,计算当前栈顶的地址为多少?当执行PUSH BX 指令后,栈顶地址和栈顶2 个字节的内容分别是什么?

【答】当前栈顶指针(SP)=2FF00H,物理地址=20100H+FE00H=2FF00H

当执行PUSH BX 指令后,栈顶指针(SP)=FE00-2=FDFEH,栈顶物理地址=2FDFEH,栈顶2 个字节的内容分别57H,34H。

3.15 HLT 指令用在什么场合?如CPU 在执行HLT 指令时遇到硬件中断并返回后,以下应执 行哪条指令?

【答】HLT 用在使CPU 处于暂停状态而等待硬件中断的场合。

在执行HLT 指令遇到硬件中断并返回后将执行HLT 后面的一条指令。

3.16 为什么用増量指令或减量指令设计程序时,在这类指令后面不用进位标志作为判断依 9 据?

【答】増量指令或减量指令不影响进位标志CF。

3.17 用普通运算指令执行BCD 码运算时,为什么要进行十进制调整?具体讲,在进行BCD 码 的加、减、乘、除运算时,程序段的什么位置必须加上十进制调整指令?

【答】在BCD 码中,采用4 位二进制数对一个十进制数的编码,只允许0-9 这10 个数字出 现,但CPU 运算结果一般会超过此范围,因此要进行十进制调整。进行加、减法或乘法运算 时,调整指令必须紧跟在算术指令后面,在进行除法运算时,调整指令放在除法指令之前。 3.18 中断指令执行时,堆栈的内容有什么变化?中断处理子程序的人口地址是怎样得到的? 【答】中断指令执行时,堆栈内容变化如下:标志寄存器被推入堆栈,且SP 减2,然后CPU 将主程序的下一条指令地址即断点地址推入堆栈,即段值CS 推入堆栈且SP 减2,偏移量推入 堆栈,且SP 减2。中断处理子程序的入口地址即中断向量,对应的中断类型号的4 倍即为中 断向量地址,在该地址处的4 个字节内容,高地址单元两个字节为中断入口地址的段地址, 低地址单元两个字节为中断入口地址的偏移地址。

3.19 中断返回指令IRET 和普通子程序返回指令RET 在执行时,具体操作内容什么不同? 【答】IRET 从堆栈中依次弹出断点处指令指针IP、代码段CS 内容与标志寄存器的值,而RET 从堆栈中依次弹出断点处指令指针IP 值、代码段CS 内容,不需要弹出标志寄存器的值。 3.20 将存放在0A00H 单元和0A02H 单元的两个无符号数相乘,结果存放在地址为0A04H 开始 的单元中。

【答】参考程序: MOV AL,[0A00H] MOV BL,[0A02H] MUL BL

MOV [0A04],AX

3.21 编程序将AX 中数,最高位保持不变,其余全部左移4 位。 【答】参考程序: MOV BX, AX AND BX , 8000H MOV CL, 4 SHL AX, CL AND AX,7FFFH OR AX, BX

3.22 将0400H 单元中的数,低4 位置零,高4 位保持不变。

【答】参考程序: MOV AL, [0400H] AND AL, 0F0H MOV [0400H], AL 10

3.23 将BX 中的数,对高位字节求反,低位字节保持不变。 【答】参考程序:NOT BH

3.24 检测Bx 中第13 位(D13),为0 时,把AL 置0,为1 时,把AL 置1。 【答】参考程序:

TEST BX,0010 0000 0000 0000B JZ ZERO MOV AL,01H HLT

ZERO: MOV AL,0 HLT

3.25 利用字串操作指令,将1000H~10FFH 单元全部清零。 【答】参考程序: CLD

MOV DI,1000H MOV CX,100H MOV AL,0 REP STOSB

3.26 从1000H 开始,存放有200 个字节,要查出字符#(ASCII 码为23H), 把存放第一个#的单 元地址送入BX 中。 【答】参考程序: CLD

MOV DI,1000H MOV CX,200 MOV DX,CX MOV AL,23H REPNZ SCASB JZ FIND

JMP NOFOUND FOUND: DEC DI MOV BX,DI NOFOUND: HLT

3.27 编程计算((X+Y)*10)+Z)/X,X、Y、Z 都是16 位无符号数,结果存在RESULT 开始的单 元。

【答】参考程序: MOV AX,X ADD AX,Y MOV BX,0AH MUL BX ADD AX,Z

ADC DX,0H MOV BX,X 11 DIV BX

MOV RESULT,AX MOV RESULT+2,DX HLT

3.28 用简单指令编程求-3/2=?,将商存DL,余数存DH 单元。用TD 调试后,写出DL,DH 的内 容。

【答】参考程序: MOV AL,-3 CBW

MOV BL,2 IDIV BL MOV DL,AL MOV DH,AH HLT

习题四汇编语言程序设计

主要内容:汇编语言程序设计。主要介绍汇编语言程序的设计方法与编程原理,重点掌握算 术运算程序、字符串处理程序、码制转换程序、子程序设计程序、常用DOS 和BIOS 功能调用 程序、汇编语言常用伪指令。

4.1 分析执行下列指令序列后的结果: 1) MOV AX,1234H MOV BX,00FFH AND AX,BX

【答】(AX)=0034H

2) MOV AL,01010101B

AND AL,00011111B ;(AL)=00010101B OR AL,11000000B ;(AL)=11010101B XOR AL,00001111B ;(AL)=11011010B NOT AL

【答】(AL)=00100101B 3) MOV DL,05H MOV AX,0A00H MOV DS,AX MOV SI,0H MOV CX,0FH AGAIN: INC SI CMP [SI],DL LOOPNE AGAIN HLT

本程序实现了什么功能?

【答】在以0A001H 开始的15 个单元中查找05H。 12

4) MOV AX,DSEGADDR MOV DS, AX MOV ES,AX

MOV SI, OFFSET B1ADDR MOV DI,OFFSET B2ADDR MOV CX,N CLD

REP MOVSB HLT

本程序实现了什么功能?

【答】将B1ADDR 中N 个字节数据传送到B2ADDR 开始的15 个存储单元。 5)MOV AX, 0H MOV DS,AX MOV ES, AX MOV AL,05H MOV DI,0A000H MOV CX,0FH CLD

AGAIN: SCASB LOOPNE AGAIN HLT

本程序实现了什么功能?

【答】从地址0A000H 开始的15 个单元中查找字节型数据05H,用条件循环LOOPNZ,控制数 据05H 的查找。 4.2 阅读程序: 1). CLD

LEA DI,[0100H] MOV CX, 0080H XOR AX, AX REP STOSW

本程序实现了什么功能?

【答】将DS 中起始地址为0100H 的128 个字节单元清零。 2).MOV AL, 08H

SAL AL,01H ;(AL)=00010000H MOV BL, AL MOV CL ,02H

SAL AL,CL ;(AL)=01000000H ADD AL,BL ;(AL)=01010000H 本程序实现了什么功能?

【答】将AL 中的内容乘以10。

4.3 试分析下列程序完成什么功能? MOV DX,3F08H 13

MOV AH,0A2H

MOV CL,4

SHL DX,CL ;(DX)=F080H MOV BL,AH

SHL BL,CL ;(BL)=20H SHR BL,CL ;(BL)=02H OR DL,BL ;(DL)=82H

【答】将DX 中的低4 位数据8H 分离出来,将AH 中的低4 位数据2H 分离出来,合并为82H 存放在DL。

4.4 已知程序段如下: MOV AX,1234H MOV CL,4 ROL AX,CL DEC AX MOV CX,4 MUL CX

试问:(1)每条指令执行后,AX 寄存器的内容是什么?(2)每条指令执行后,CF,SF 及ZF 的值分别是什么?(3)程序运行结束时,AX 及DX 寄存器的值为多少? 【答】MOV AX,1234H ; (AX)=1234H, CF=SF=ZF=0 MOV CL,4

ROL AX,CL ; (AX)=2341H ,CF=1,SF=ZF=0 DEC AX ; (AX)=2340H, CF=1,SF=ZF=0 MOV CX,4 ;

MUL CX ;(AX)= 8000H ,CF=ZF=0,SF=1,DX=0 4.5 试分析下列程序段: ADD AX,BX JNC L2

SUB AX,BX JNC L3

JMP SHORTL5

如果AX、BX 的内容给定如下: AX BX

(1)14C6H 80DCH (程序转向L2)

(2)B568H 54B7H (程序转向SHORTL5 )

问该程序在上述情况下执行后,程序转向何处? 【答】(1) 程序转向L2。(2) 程序转向SHORTL5。

4.6 以下为某个数据段,试问各个变量分别占多少字节,该数据段共占多少字节? DATA SEGMENT

VAR1 DW 9 ;2 字节

VAR2 DD 10 DUP(?),2 ;44 字节

VAR3 DB 2 DUP(?,10 DUP(?)) ;22 字节 14

VAR4 DB ‘HOW ARE YOU' ;11 字节 DATA ENDS

【答】该数据段共占79 字节。

4.7 下列语句在存储器中分别为变量分配多少字节空间?并画出存储空 间的分配图。

VAR1 DB 10,2 ;2 字节

VAR2 DW 5DUP(?),0 ;12 字节

VAR3 DB ‘HOW ARE YOU?',‘$' ;13 字节 VAR4 DD -1,1,0 ;12 字节

4.8 编写一段程序,比较两个5 字节的字符串OLDS 和NEWS,若相同,在 RESULT 置0,否则置0FFH。 【答】参考程序: OLDS DB 1,2,3,4,5 NEWS DB 1,2,3,4,5 RESULT DB ?

MOV SI,OFFSET OLDS MOV DI,OFFSET NEWS MOV CX,10 CLD

REP CMPSB

JNZ NOEQU ;串不相等转 MOV AL,0 JMP OUTPT

NOEQU: MOV AL,0FFH OUTPT: MOV RESULT,AL STOP: JMP STOP

4.9 编程求和Y=A1 + A2 + ?. + A100 【答】

DATA SEGMENT

TABLE DW 12,3,45,.. YAL DW ? YAH DW ? DATA ENDS ???

MIAN PROC FAR PUSH DS MOV AX, 0 PUSH AX

MOV AX, DATA MOV DS, AX MOV DX,0

XOR AX, AX ;清AX MOV BX, OFFSET TABLE 15

MOV CX, 4 CLC

LP: ADD AX, [BX] ;求和

。其中Ai 为字节变量。

JNC DON INC DX CLC

DON: INC BX

INC BX ;指向下一个数 LOOP LP ;未加完,继续 MOV YAL,AX ;存和 MOV YAH,DX MAIN ENDP CODE ENDS END START

4.10 内存中以FIRST 和SECOND 开始的单元中分别存放着两个16 位组合的十进制(BCD 码) 数,低位在前。编程序求这两个数的组合的十进制和,并存到以THIRD 开始的单元。 【答】参考程序:1325+9839=? DATA SEGMENT

FIRST DB 05H,02H,03H,01H ; SECOND DB 09H,03H, 08H,09H; THIRD DB 20 DUP (?) DATA ENDS

STACK SEGMENT

ST1 DB 100 DUP (‘SA’) TOP1 EQU LENGTH ST1 STACK ENDS CODE SEGMENT

ASUMME CS:CODE,DS:DATA,SS:STACK MAIN PROC FAR

START: MOV AX, DAT ;初始化数据段 MOV DS, AX

MOV AX, STACK ;初始化堆栈段 MOV SS, AX MOV AX, TOP1 MOV SP, AX

MOV CX, 4 ;计算4 次

MOV SI , OFFSET DAT2 ;取数据地址 MOV DI , OFFSET SUM ;取结果地址 MOV AH, 00H ;将暂存标志的AH 清0 DON1: MOV AL, [BX] ;取第一个数 SAHF ;将AH 中的标志送标志寄存器 ADC AL, [DI] ;与第二个数带进位加 AAA ;十进制校正

LAHF ;将标志寄存器内容送AH OR AL, 30H ;计算值拼成ASCII 码 MOV [DI], AL ;存结果的ASCII 码 16

INC BX ;指向第一个数的下一位 INC SI ;指向第二个数的下一位 INC DI ;指向结果单元的下一位 LOOP DON1 ;未计算完,继续

AND AH, 01H ;将最高位的进位标志送AH OR AH, 30H ;最高位的进位位拼成ASCII 码 MOV [DI], AH ;存结果的最高位

MOV AH, 02H ;调用DOS 的02H 功能显示 MOV CX, 05H ;显示数据的位数 DON2: MOV DL,[DI] ;显示数据送DL INT 21H ;显示

DEC DI ;显示数据所在存储单元加一 LOOP DON2 ;未显示完,继续 MOV AH, 4CH ;返回DOS INT 21H RET

MAIN ENDP CODE ENDS END START

4.11 试编程序,统计由40000H 开始的16K 个单元中所存放的字符“A“的个数,并将结果 存放在DX 中。 【答】参考程序 DATA SEGMENT

DATA1 DB 'DFASFAAAFDFAAFFFA' COUNT EQU $-DATA1 DATA ENDS

STACK SEGMENT

STA DB 100 DUP (?) TOP EQU LENGTH STA STACK ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK BEGIN: MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX MOV CX,COUNT MOV DX,0

LEA SI,DATA1 MOV BL,'A'

NEXT : CMP [SI],BL JNZ OTHER

INC DX

OTHER: INC SI 17

LOOP NEXT CODE ENDS END BEGIN

4.12 统计数据块中正数与负数的个数,并将正数与负数分别送到两个缓冲区。 【答】

BLOCK DB -1,-3,5,6,-2,0,20,10 PLUS_D DB 8 DUP(?) ;正数缓冲区 MINUS_D DB 8 DUP(?) ;负数缓冲区 PLUS DB 0 MINUS DB 0

MOV SI,OFFSET BLOCK MOV DI,OFFSET PLUS_D MOV BX,OFFSET MINUS_D MOV CX, 8 ;数据个数送X GOON: LODSB ;AL← [SI] TEST AX, 80H

JNZ JMIUS ;为负数,转 INC PLUS ;正数个数加一 STOSB ;[DI] ←AL,传正数 JMP AGAIN

JMIUS: INC MINUS ;负数个数加一 XCHG BX, DI

STOSB ;送负数到缓冲区 XCHG BX, DI AGAIN: DEC CX JNZ GOON

4.13 编写一个子程序将AX 中的十六进制数,转换成ASCII 码, 存于ADR 开始的四个单元中。 提示:1)、AX 中的数从左到右,转换成ASCII 码,用循环左移ROL 和AND 指令,把提出的一 个十六进制数置BL 中;

2)、0 ~ 9 的ASCII 码:30 ~ 39H,A ~ F 的ASCII 码:41H ~ 46H。

( 先把每个数加30H,判断是否为数字0 ~ 9?若是A ~ F,再加07H,得字母的ASCII 码。) 【答】参考程序: DATA SEGMENT ADR DB 4 DUP(?) DATA ENDS CODE SEGMENT MAIN PROC FAR

ASSUME CS:CODE,DS:DATA

START: MOV AX,7EC3H ;假设ax 中存放7ec3h LEA SI,ADR MOV DL,4

AGAIN: MOV BX,AX 18

AND BX,000FH ADD BL,30H CMP BL,'9' JG ADUST JMP STORE

ADUST: ADD BL ,07H STORE: MOV [SI],BL INC SI MOV CL,4 ROL AX,CL DEC DL JNZ AGAIN MAIN ENDP CODE ENDS END START

4.14 编写一个子程序将AX 中的2 进制数,转换成10 进制ASCII 码, 元中。

【答】参考程序:

BIN EQU 5555H;假设二进制数为5555H DATA SEGMENT ADR DB 4 DUP(?) DATA ENDS

STACK SEGMENT

STA DB 100 DUP (?) TOP EQU LENGTH STA STACK ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX MOV AX,BIN LEA BX,ADR MOV CX,10000D CALL BINTODEC MOV CX,1000D CALL BINTODEC MOV CX,100D

存于ADR 开始的五个单

CALL BINTODEC MOV CX,10D CALL BINTODEC MOV CX,01D CALL BINTODEC 19

MOV AX,04CH ;返回DOS INT 21H MAIN ENDP

;十进制转二进制,完成一位运算,十进制存于ax 中,结果存于bx 所指向的地址中 BINTODEC PROC NEAR MOV DX,0 DIV CX

ADD AL,30H MOV [BX],AL MOV AX,DX INC BX RET

BINTODEC ENDP CODE ENDS END START

4.15 编写一个子程序,对AL 中的数据进行偶校验,并将经过校验的结果放回AL 中。 【答】参考程序: JIAOYAN PROC FAR MOV AL,1001110B OR AL, AL JNP NEXT MOV AL,0 JMP DONE

NEXT: MOV AL,1 DONE: MOV AH,04CH INT 21H

JIAOYAN ENDP

4.16 从2000H 单元开始的区域,存放100 个字节的字符串,其中有几个$符号(ASCII 码为24), 找出第一个$符号,送AL 中,地址送BX。 【答】参考程序: SEARCH PROC FAR MOV DI,2000H MOV CX,100 MOV AL,24H CLD

REPNZ SCASB JNZ STOP DEC DI

MOV BX,DI MOV AL,[DI] STOP: RET SEARCH ENDP

4.17 用串操作指令实现:先将100H 个数从2170H 单元处搬到1000H 单元处,然后从中检索等 20

于AL 中字符的单元,并将此单元换成空格字符。 【答】参考程序: MOV AL,24H MOV SI,2170H MOV DI,1000H MOV CX,100H CLD

DO: REP MOVSB MOV DI,1000H MOV CX,100H CLD

REPNZ SCASB DEC DI

MOV [DI],20H INC DI CMP CX,0 JNZ DO HLT

4.18 从60H 个元素中寻找一个最大的值,并放到AL 中,假设这60 个元素放在DATA1 开始的 单元中。

【答】参考程序: DATA SEGMENT

DATA1 DB 0,1,2,3,4,5,6,7,8,9 ; DATA ENDS

STACK SEGMENT

STA DB 20 DUP (?) TOP EQU LENGTH STA STACK ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX MOV CX,10 MOV AL,0

LEA BX,DATA1

AGAIN: CMP AL,[BX] JGE NEXT ;大于等于转移 MOV AL,[BX] NEXT : INC BX LOOP AGAIN MOV AH,4CH INT 21H 21

CODE ENDS END START

4.19 排序程序设计: 把表中元素按值的大小升序排列。要求显示排序前和排序后的数据。 【答】参考程序: DATA SEGMENT

TAB DB '8095554' N=$-TAB

OK DB 0DH,0AH,'OK!$' DATA ENDS

STACK SEGMENT STA DB 20 DUP(?) TOP EQU LENGTH STA STAC ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK STAR: MOV AX,DATA

MOV DS,AX ;初始化数据段 MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX CALL ARRAY DO: MOV AH,4CH INT 21H ;返回DOS ARRAY PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX

MOV DL,N-1 ;置外循环次数 MOV DH,1 ;设有交换标志 XOR BX, BX

UPPER: OR DH,DH ;

JZ DISP ;无交换,已排好序,退出 MOV DH,0 ;无交换

MOV CX,N-1

SUB CX,BX ;CX=CX-I 内循环次数 MOV SI,0 ;指向表首

INNER: MOV AL,TAB[SI] ;字符送AL INC SI ;指向下个字符

CMP AL,TAB[SI] ;比较表中相邻字符 JBE DON ;小于

XCHG AL,TAB[SI] ;否则交换,大字符下 MOV TAB[SI-1],AL ;小字符上浮 MOV DH,1 ;有交换,DH=1 22

DON: LOOP INNER ;内循环结束?CX-1 INC BX ;一次内循环完成,加一 DEC DL ;外循环次数减一 CMP DL,0

JNZ UPPER ;外循环次数非零,继续 DISP: MOV DX,OFFSET TAB MOV AH,09H

INT 21H ;显示排好序的字符 POP DX POP CX POP BX POP AX RET

ARRAY ENDP CODE ENDS END STAR

4.20 编写一段程序,接收从键盘输入的10 个数,输入回车符表示结束,然后将这些数加密 后存于BUFF 缓冲区中。加密表为:输入数字: 0,1,2,3,4,5,6,7,8,9;密码数字: 7,5,9,1,3,6,8,0,2,4。 【答】参考程序: DATA SEGMENT

TABLE DB 7,5,9,1,3,6,8,0,2,4;密码表 BUFF DB 10 DUP(?) ,'$'存放转换数字的缓冲区 DATA ENDS

STACK SEGMENT STA DB 20 DUP(?) TOP EQU LENGTH STA STACK ENDS CODE SEGMENT MOV AX,STACK MOV SS,AX

MOV DI , OFFSET BUFF LEA BX , TABLE

MOV CX,0DH

RE1: MOV AH , 1 ;从键盘输入 INT 21H

CMP AL,0DH JZ DONE SUB AL,30H XLAT

ADD AL,30H MOV [DI] , AL INC DI LOOP RE1 23

DONE: MOV DX , OFFSET BUFF MOV AH , 09H INT 21H MOV AH,4CH INT 21H CODE ENDS

4.21 编程序从键盘接收一个4 位16 进制数,转换为10 进制数后,送显示。

【答】算法:先将输入的十六进制数保存到BX 中,BX 中的数范围在+32767~-32768 之间,先 检查BX 中的符号位,以决定输出“+”还是“-”;若是负数,应先求补,得到原码后即可与 正数作统一处理。转换方法为将被转换的二进制数先除;以10000,商即为万位数,再将余 数除以1000,商为千位数,依此类推,求出百、十位数,剩的为个位数。最后,将各个数加 上30H,即成为对应字符。 DATA SEGMENT

OUT_ASC_SUM db 6 dup(?),'$' DATA ENDS

STACK SEGMENT STA DB 20 DUP(?) TOP EQU LENGTH STA STACK ENDS CODE SEGMENT

ASSUME CS :CODE,DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX

MOV CX , 4 ;输入4 次 MOV DX , CX ;转换4 次

MOV BX , 0 ;用BX 保存输入数 RE1: MOV AH , 1 ;从键盘输入 INT 21H

CALL ZH ;通过子程序转换

SHL BX , CL ;组合成十六进制数 ADD BL , AL DEC DX

JNZ RE1 ;循环输入四个数 MOV AX,BX

MOV OUT_ASC_SUM , '+' CMP AX , 0

JGE L4 ;不是负数,转移 NEG AX

MOV OUT_ASC_SUM , '-' L4: CWD 24

MOV BX , 10000 DIV BX

ADD AL , 30H ;将万位转换为数字(商应在AX 内,但因为商不大于9, 所以有效部分在al 内)

MOV OUT_ASC_SUM+1 , AL ;保存万位数字

MOV AX , DX ;将余数置入AX 内,以便当作被除数 CWD

MOV BX , 1000 DIV BX

ADD AL , 30H

MOV OUT_ASC_SUM+2 , AL ;保存千位数字 MOV AX , DX ;将余数置入AX 内, 以便当作被除数 MOV BL , 100 DIV BL

ADD AL , 30H

MOV OUT_ASC_SUM+3 , AL ;保存百位数字 MOV AL , AH CBW

MOV BL , 10 DIV BL

ADD AL , 30H

MOV OUT_ASC_SUM+4 , AL ;保存十位数字 ADD AH , 30H

MOV OUT_ASC_SUM+5 , AH ;保存个位数字 MOV DX , OFFSET OUT_ASC_SUM MOV AH , 09H INT 21H MOV AH,4CH INT 21H ZH PROC

CMP AL , '9' ;将ASCII 码转换为16 进制 JBE A2 ;键入值≤’9’(’0’-‘9’)则 减30H

CMP AL, 'a' ;键入值<’a’(‘A’-‘F’) 则减 37H JB A1

SUB AL , 20H ;值在’a’ -‘f’则先减20H,再减37H A1: SUB AL , 7 A2: SUB AL , 30H RET ZH ENDP CODE ENDS END START 25

习题五处理器总线时序与系统总线

主要内容:处理器总线时序与系统总线。8086/8088CPU 外部引脚信号;8086/8088 系统组 成和总线时序。

5.1 8086/8088 CPU 有40 条引脚,请按功能对它们进行分类? 【答】按功能可分为:地址总线:AD0~AD15,A16~A19,ALE,BHE; 数据总线:AD0~AD15,DEN,DT/R;

控制总线:M/IO,WR,RD,HOLD,HLDA,INTR,INTA,READY,RESET.

5.2 8086/8088 有两种工作方式,它们是通过什么方法来实现?在最大方式下其控制信号怎 样产生?

【答】MN/MX 引脚接至电源(+5V),则8086CPU 处在最小组态(模式);MN/MX 引脚接地,则8086CPU 处在最大组态(模式)。

在最大模式下,需要用外加电路来对CPU 发出的控制信号进行变换和组合,以得到对存储 器和I/O 端口的读/写信号和对锁存器8282 及对总线收发器8286 的控制信号。 5.3 8086/8088 CPU 的地址总线有多少位?其寻址范围是多少?

【答】8086/8088CPU 的地址总线均为20 位,.8086/8088CPU 的寻址范围为1MB; 5.4 在8086/8088CPU 工作在最小模式时, (l)当CPU 访问存储器时,要利用哪些信号? (2)当CPU 访问外设接口时,要利用哪些信号?

(3)当HOLD 有效并得到响应时,CPU 的哪些信号置高阻?

【答】(1)当CPU 访问存储器时, 要利用ALE(地址锁存允许信号输出), (数据允许信号),(数 据收发信号), (存储器/输入输出控制信号输出), (读信号输出), (写信号输出), (高8 位数据总线充许),NMI(非屏蔽中断输入引腿)。

(2) 当CPU 访问外设接口时,要利用当CPU 访问存储器时,ALE(地址锁存允许信号输出), (数据允许信号) (数据收发信号), (存储器/输入输出控制信号输出),(读信号输出), 写 信号输出, 高8 位数据总线充许, (中断响应信号输出)。

(3)当HOLD 有效并得到响应时,CPU 使地址/数据总线和控制状态线置高阻。

5.5 若8086 工作于最小方式,试指出当CPU 完成将AH 中的内容送到物理地址为9100H 的存 储单元操作时,以下哪些引脚信号应为低电平: (总线周期的第一部分时间) 、、、。 【答】, 这两个信号为低电平.

5.6 分析8086/8088 CPU 最大方式下的读操作时序。

【答】对于存储器读周期,在T1 开始,8086 发出20 位地址信息和S0~S2 状态信息.在T2 期 间,8086 将AD15~AD0 切换为数据总线,8288 发出有效的读存储器命令MRDC.在T3 状态开始 时,8086 采样READY,当READY 有效时进入T4 状态,8086 读取在数据线上的数据,到此,存储器 读操作结束(I/O 读周期与存储器读周期基本相同,只是I/O 接口的速度较慢,通常会在T3 后 插入TW 等待状态).

5.7 8086/8088 I/O 的读/写周期时序与M 读/写周期的主要差异是什么?

【答】在8086 存储器周期中,控制信号M/IO 始终为高电平;而在I/O 周期中,M/IO 始终为 低电平。 26

5.8 8086 CPU 工作在最小模式(单CPU)和最大模式(多CPU)主要特点是什么?有何区别? 【答】最小模式:MN/MX+5V,构成小规模的应用系统,只有8086 一个微处理器,所有的总线控制 信号均为8086 产生,系统中的总线控制逻辑电路,减少到最小; 不需总线控制器8288;适用 于单一处理机系统。

最大模式:MN/MX 接地,用于大型(中型)8086/8088 系统中,系统总是包含有两个或多个 微处理器,其中一个主处理器就是8086 或8088.其它的处理器称协处理器,协助主处理器工 作,需要总线控制器来变换和组合控制信号, 需总线控制器8288; 适用于多处理机系统。 5.9 总线周期的含义是什么?8086/8088 的基本总线周期由几个时钟组成?如果一个CPU 的时 钟频率为24MHz,那么,它的一个时钟周期为多少?一个基本总线周期为多少?如主频为15MHz 呢?

【答】总线周期:是计算机执行一条访问内存或端口的机器指令的时间;8086/8088 的基本总 线周期由4 个时钟周期T 组成。如果CPU 的时钟频率为24MHz,那么它的一个时钟周期为 41.5ns,一个基本总线周期为166ns;如果CPU 的时钟频率为15MHz,那么它的一个时钟周期 为66.67ns,一个基本总线周期为266.67ns。 5.10 从引腿信号上看,8086 和8088 有什么不同?

【答】① 由于8088 只能传输8 位数据,所以8088 只有8 个地址/数据复用引脚;而8086 是按16 位传输数据的,所以有16 个地址/数据复用引脚;②8086 和8088 的控制线引脚定义 中第28 和34 腿也不一样,在最小模式时,8088 和8086 的第28 引脚的控制信号相反,而8086 的第34 腿为BHE/S7,BHE 用来区分是传送字节、还是字,8088 的第34 腿为SS0,用来指出 状态信息,不能复用。

5.11 CPU 启动时,有那些特征?如何寻找8086/8088 系统的启动程序?

【答】在8088/8086 系统中,CPU 启动后,处理器的标志寄存器、指令指针寄存器IP、段寄 存器DS、SS、ES 和指令队列都被清零,但是代码段寄存器CS 被设置为FFFFH。因为IP=0000, 而CS=FFFFH,所以,8088/8086 将从地址FFFF0H 开始执行指令。通常,在安排内存区域时, 将高地址区作为只读存储区,而且在FFFF0H 单元开始的几个单元中放入一条无条件转移指 令,转到一个特定的程序中,这个程序往往实现系统初始化、引导监控程序或者引导操作系 统等功能,这样的程序叫做引导和装配程序。

5.12 8086 和8088 是怎样解决地址线和数据线的复用问题的? ALE 信号何时处于有效电平? 【答】8086/8088 通过利用ALE 信号的是否有效来解决地址线和数据线的复用问题。ALE 作为 最小模式的地址锁存允许信号输出端,在任何总线周期的T1 状态,ALE 输出有效电平,以表 示当前在地址/数据复用总线上输出的是地址信息。 5.13 BHE 信号和A0 信号 是怎样的组合解决存储器 和外设端口的读/写操作 的? 这种组合决定了

8086 系统中存储器偶地址 体及奇地址体之间应该用 什么信号区分?怎样区分? 27

这种组合决定了8086 系统中存储器偶地址和奇地址之间用AD。若在总线周期的T1 状态为 低电平,则在这一周期中,CPU 将用总线低8 位和偶地址单元或偶地址端口交换数据、代码 组合和对应的操作.

5.14 RESET 信号来到后,CPU 的状态有那些特点?

【答】RESET 信号来到后,CPU 结束当前操作,并对处理器标志寄存器,IP,DS,SS,ES 及 指令队列清零,而将CS 设置为FFFFH,当复位信号变为低电平时,CPU 从FFFF0H 开始执行程 序。

5.15 在中断响应过程中,8086 往8259A 发的两个INTA 信号分别起什么作用?

【答】在中断响应过程中,CPU 向8259A 的INTR 引腿发二个负脉冲。作用:第一个负脉冲通 知8259A ,CPU 允许中断请求,要求送中断类型;第二个负脉冲,8259 传输中断类型码。 5.16 8086 系统在最小模式时应该怎样配置?请画出这种配置并标出主要信号的连接关系. 【答】8086 在最小模式下的典型配置。图在课本第161 页。 1. 有一片8284A,作这时钟发生器。

2. 有3 片8282 或74LL373,用来作为地址锁存器。

3. 当系统中所连的存储器和外设较多时,需要增加数据总线的驱动能力,这时,要用2 片 8286/8287 作为总线收发器。

5.17 8086 构成系统分为哪两个存储体?它们如何与地址、数据总线连接?

【答】8086 构成系统分为偶地址存储体和奇地址存储体。偶地址存储体:连接D7~D0,A0=0 时选通;奇地址存储体:连接D15~D8, BHE=0,A0=1 时选通。

5.18 8086/8088 CPU 在响应外界中断请求后,需要进入中断响应周期,分析该周期有什么 特点?

【答】8086 的中断响应要用两个总线周期。如果在前一个总线周期中,CPU 接收到外界的中 断请求信号,而中断允许标志IF 正好为1,并且正好一条指令执行完毕,那么,CPU 会在当 前总线周期和下一个总线周期中,从引腿上往外设接口各发一个负脉冲。这两个负脉冲都将 从一直维持到状态开始。外设接口收到第二个负脉冲以后,立即把中断类型码送到数据总 线的低8 位上,通过CPU 的地址/数据引腿传输给CPU。这两个总线周期的其余时间, 是 浮空的。

5.19 8086 CPU 读/写总线周期各包含多少个时钟周期?什么情况下需要插入TW 等待周 期? 应插入多少个Tw,取决于什么因素?什么情况下会出现空闲状态Ti ? 【答】8086CPU 读/写总线周期包含4 个时钟周期.

当系统中所用的存储器或外设的工作速度较慢,从而不能用最基本的总线周期执行读

操作时,系统中就要用一个电路来产生READY 信号,READY 信号通过时钟发生器8284A 传递 给CPU。CPU 在状态的前沿(下降沿处)对READY 信号进行采样。如果CPU 没有在状态的一开 始采样到READY 信号为高电平,那么,就会在和之间插入等待状态。插入的个数取决于CPU 接收到高电平READY 信号的时间。CPU 在不执行总线周期时,总线接口部件就不和总线打交 道,此时,进入总线空闲周期。

5.20 现有6 个字节的数据分别为11H,22H,33H,44H,55H,66H,已知它们在存储器中的 物理地址为400A5H~400AAH.若当前(DS)= 4002H,请说明它们的偏移地址值。如果要从 存储器中读出这些数据,需要访问几次存储器,各读出哪些数据? 28

【答】若当前(DS)=4002H,这六个数据的偏移地址为:0085H~008AH.如果要从存储器中读出 这些数据,需要访问4 次存储器,依次读出11H 和22H,33H 和44H,55H 和66H. 5.21 选择题:

(1)某微机具有16M 字节的内存空间,其CPU 的地址总线应有(E)条。 A.26 B.28 C.20 D.22 E.24

(2) 8086/8088 CPU 要求加到RESET 引脚上的复位正脉冲信号,其宽度至少要(4 ) 个时钟周期才能有效复位,如果是上电复位则要求正脉冲的宽度不少于( 50 )us 。 A.4,50 B.5,60 C.4,70 D.5,80

(3)当RESET 信号进入高电平状态时,将使8086/8088 CPU 的( D )寄存器初始化FFFFH。 A.SS B.DS C.ES D.CS

(4) 8086/8088 CPU 与慢速的存储器或I /O 接口之间,为了使传送速度能匹配,要 在(C)状态之间插入若干等待周期Tw。

A.T1 和T2 B.T2 和T3 C.T3 和T4 D.随机 5.22 填空题:

(1) 8086/8088 CPU 执行指令中所需操作数地址由(寻址方式和地址寄存器)计算出 ( 16 )位偏移量部分送( IP ),由(段地址加上偏移量部分)最后形成一个( 20 )位 的内存单元物理地址。

(2) 8086/8088 CPU 在总线周期的T1 ,用来输出(20)位地址信息的最高( 4 ) 位,而在其它时钟周期,则用来输出(状态)信息。

(3) 8086/8088 CPU 复位后,从(FFFF0H )单元开始读取指令字节,一般这个单元 在()区中,在其中设置一条(无条件转移)指令,使CPU 对系统进行初始化。

(4)8086 系统的存储体系结构中,1M 字节存储体分( 两)个存储体,每个存储体的

容量都是(512K )字节,其中和数据总线D15~D8 相连的存储体全部由(奇地址)单元组成, 称为高位字节存储体,并用( 高电平)作为此存储体的选通信号。

(5)8086/8088 系统中,可以有( )个段地址,任意相邻的两个段地址最短相距 (16)个存储单元,最长相距( )存储单元。

(6)用段基值及偏移地址来指明一内存单元地址称为(物理地址)。

(7)在8086/8088 最大方式系统中各微处理器都含有两条(RQ/GT0、RQ1/GT1)引脚, 其中( RQ/GT0 )比(RQ1/GT1 )具有更高的优先级。 习题六存储器

主要内容: 存储器的基本概念和半导体存储器的分类,重点掌握RAM、ROM 和Flash 的结构 和存储器在微机系统中的连接与扩充方法。 6.1 试说明存储器系统的主要性能指标。

6.2 术语“非易失性存储器”是什么意思? PROM 和EPROM 分别代表什么意思? 6.3 在选择存储器件时,最重要的考虑因素是什么?此外还应考虑那些因素? 6.4 存储器的存取时间是什么意思?它在系统设计时有什么实际意义? 6.5 什么是随机存储器?它在系统中起什么作用? 6.6 什么是只读存储器?它在系统中起什么作用? 6.7 试比较静态RAM 和动态RAM 的优缺点。

6.8 计算机的电源掉电后再接电时(系统中无掉电保护装置),存储在各类存储器中的信息 29

是否仍能保存?试从各类存储器的基本原理上来分析说明。

6.9 填空:对由8K×8 位,RAM 组成的存贮器系统,若某组的起始地址为08000H,则其末地 址为()H。

6.10 填空:用2K×4 位的存贮芯片组成6K×8 位的存储器,需用该片数量为()。

6.11 设计一个外设端口译码器,使CPU 能寻址四个地址范围:①0280~0287H,②0288~028FH, ③0290~0297H,④0298~029FH。

6.12 试画出容量为2K×8 的RAM 连接图,CPU 用8088,RAM 用2114,RAM 地址区为 0800H~0FFFH。

6.13 试画出容量为8K×8 的ROM 连接图,CPU 用8086,EPROM 用2716,ROM 地址区从4000H 开始。 本题答案

6.14 一台8 位微机系统,CPU 为8088,需扩展内存16KB,其中ROM 为8K,RAM 为8K。ROM

选用EPROM2716,RAM 选用2114,地址空间从0000H 开始,要求ROM 在低地址,RAM 在高地址。 试画出存储器组构图,并写出各芯片的存储分配范围。 本题答案 30

6.16 8086CPU 最小模式中,有8KB 的RAM,2KB 的ROM。ROM 采用EPROM 2716(2 K′8) ,RAM 采用Intel 2114(1K′4),画出硬件连接图。 本题答案

习题七CPU 与外设的输入输出方式

7.1 什么叫端口?通常有哪几类端口?计算机对I/O 端口编址时通常采用哪两种方法?在 8086/8088 系统中,用哪种方法对I/O 端口进行编址?

【答】CPU 和外设进行数据传输时,各类信息在接口中进入不同的寄存器,一般称这些寄存 器为端口。通常有:数据端口、状态端口、控制端口。对端口编址的两种方法为:计算机对 内存和I/O 端口统一编址;计算机对内存和I/O 端口分别进行编址。在8086/8088 系统中用 计算机对内存和I/O 端口统一编址。

7.2 CPU 和输入/输出设备之间传送的信息有哪几类? 【答】数据信息、状态信息、控制信息。

7.3 一般的IO 接口电路安排有哪三类寄存器?它们各自的作用是什么? 【答】数据寄存器:存放CPU 与外设之间传送的数据信息。 状态寄存器: 存放当前外设所处的工作状态。

控制寄存器: 存放CPU 通过接口向外设传送控制信息。 7.4 简述CPU 与外设进行数据交换的几种常用方式。

【答】CPU 与外设之间的数据传输有以下三种方式:程序方式、中断方式、DMA 方式。其中 程序方式又分为无条件传送方式和条件传送方式两种方式。无条件传送方式用于简单外设, 如LED 显示器。条件传送方式用于外设较少的情形,接口简单,但CPU 效率低。在实时系统 以及多个外设的系统中,采用中断传送方式。这种方式CPU 利用率高,速度快,但需要专门 的中断控制电路。如果要求实现高速数据传输,采用直接存储器传输方式,即DMA 方式。 7.5 无条件传送方式用在哪些场合?画出无条件传送方式的工作原理图并说明。

【答】无条件传送方式适用于对一些简单的外设的操作中,如:开关、七段LED 显示管等。 当CPU 执行输入指令是,读信号RD 有效,选择信号M/IO 处于低电平,因而三态缓冲器被选 通,使其中早已准备好的输入数据进入数据总线,再到达CPU。CPU 执行输出指令时,M/IO 和WR 信号有效,于是接口中的输出锁存器被选中,CPU 输出的信息经过数据总线打入输出锁 存器,输出锁存器保持这个数据,直到外设取走。

7.6 条件传送方式的工作原理是怎样的?主要用在什么场合?画出条件传送(查询)方式输 出过程的流程图。

【答】数据传送有三个环节:1、CPU 从接口中读取状态字。2、CPU 检测状态字的对应位

是否满足“就绪”条件,如不满足,则回到前一步读取状态字。3、如状态字表明外设已处于 31

就绪状态,则传送数据。主要用于非实时系统及单一外设系统。

7.7 现有一输入设备,其数据端口的地址为FFE0H,并于端口FFE2H 提供状态,当其D0 位 为1 时表明输入数据备好。请编采用查询方式进行数据传送的程序段,要求从该设备读取100 个字节并输入到从1 000H:2000H 开始的内存中,注意在程序中加上注释。 【答】

MOV SI,2000H ;初始化数据区地址 MOV AX,1000H MOV DS, AX

LL: MOV DX,0FFE2H IN AX,DX ;读状态

TEST AL,01H ;测试是否满足就绪? JZ LL ;不满足,继续读状态

MOV DX,0FFE0H ;就绪,准备输入数据 IN AX,DX ;从输入接口读取数据 MOV [SI],AX ;存数据 INC SI

LOOP LL ;数据没有输入完,继续

7.8 某字符输出设备,其数据端口和状态端口的地址均为80H,在读取状态时,当标志位D7 为0 时表明该设备闲。请编写采用查询方式进行数据传送的程序段,要求将存放于符号地址 ADDR 处的一串字符(以$为结束标志)输出给该设备,注意在程序中加上注释。 【答】ADDR DB ‘3FSDF3FFF$’ MOV SI,0

DO: IN AL,80H TEST AL,80H JNZ DO

MOV AL,ADDR[SI] CMP AL,’$’ JZ STOP OUT 80H,AL INC SI LOOP DO STOP :

7.9 查询式传送方式有什么优缺点?中断方式为什么能弥补查询方式的缺点?

【答】在查询方式下CPU 不断地读取状态字,如果状态字表明外设没准备好,则CPU 须等 待。这些过程占用了CPU 的大量工作时间,而CPU 真正用于传输数据的时间却很少。另外, 用查询方式工作时,如果一个系统有多个外设,那么CPU 只能轮流对每个外设进行查询,而 这些外设的速度往往并不同。这时CPU 显然不能很好的满足各个外设随机性的对CPU 提出的 输入/输出服务要求,所以,不具备实时性。使用中断传方式时,CPU 就不必花费大量时间去 查询外设的工作状态了,因为当外设就绪时,就会主动向CPU 发中断请求信号。那么在中断 允许标志为1 的情况下,CPU 保留下一条指令的地址和当前的标志,转到中断服务程序去执 行。 32

7.10 画一个用中断方式进行输出传输的接口电路。 【答】见课本

7.11 DMA 的意思是(直接存储器存取方式).进行DMA 传送一般过程是:外设先向DMA 控制器 提出( DMA 请求),DMA 控制器通过信号有效向CPU 提出DMA 请求,CPU 回以( 总线允许) 信号有效表示响应,此时CPU 的三态信号线将输出( 高阻)状态,即将它们交由( DMA 控 制器)进行管理,使数据在DMA 控制器的控制下完成外设和内存间的直接传送。 习题八中断控制器

8.1 8088/8086CPU 管理有哪些中断源?各种中断的产生条件是什么?

【答】NMI 中断和INTR 中断。INTR 中断产生的条件是:无总线请求、FR.IF=1、CPU 执行完 当前指令。

8.2 8088/8086 中断向量表的作用是什么?

【答】中断向量是中断服务程序的入口地址。将所有中断向量集中放在一起,形成中断向量 表。8086 系统有256 个类型的中断源。每个类型对应一个中断向量,一个中断向量由四个字 节组成:2 个高地址字节:存放中断服务程序的代码段的段值;2 个低地址字节:存放中断服 务程序的偏移地址。中断向量表放在内存的地段地址0 单元开始的单元:00000H~03FFFH。 8.3 什么叫中断向量?它放在哪里?对应于1CH 的中断向量在哪里?如1CH 中断程序从 5110H:2030H 开始,则中断向量应怎样存放?

【答】中断向量是中断处理子程序的入口地址,它放在中断向量表中,由1ch*4=70h 知中断 向量存放在0000:0070 处。由于中断处理入口地址为5110:2030 所以0070H,0071H, 0072H,0073H 这四个单元的值分别为30H,20H,10H,51H。

8.4 叙述可屏蔽中断的响应过程,一个可屏蔽中断或者非屏蔽中断响应后,堆栈顶部四个单 元中是什么内容?

【答】当CPU 在INTR 引脚上接受一个高电平的中断请求信号并且当前的中断允许标志为1,CPU 就会在当前指令执行完后开始响应外部的中断请求,具体如下:

1、从数据总线上读取外设送来的中断类型码,将其存入内部暂存器中; 2、将标志寄存器的值推入堆栈; 3、将标志寄存器中IF 和TF 清零; 4、将断点保护到堆栈中;

5、根据中断类型获取中断向量转入中断处理子程序; 6、处理完后恢复现场。

响应后堆栈的顶部4 个单元是IP,CS。

8.5 从8086/8088 的中断向量表中可以看到,如果一个用户想定义某个中断,应该选择在什 么范围?

【答】从8086/8088 的中断向量表中可以看出,由于系统占用了部分中断类型码,主要包括: (1) 专用中断:0~4,占中断向量表000~013H。 (2) 系统备用中断:5~31H (3) 用户使用中断:32H~0FFH 33

如果一个用户想定义一个中断,可以选择中断类型码32H-FFH,其中断向量在中断向量表的 0C8H-01BFH。

8.6 非屏蔽中断处理程序的入口地址怎样寻找?

【答】非屏蔽对应类型2,它位于中断向量表0000:0008H-0000:000BH 处,4 个单元的值即为 非屏蔽中断处理程序的入口地址:08H、09H 放偏移量,0AH、0BH 放段地址。

8.7 类型号为20H 的中断服务程序入口符号地址为INT-5,试写出中断向量的装入程序片断。

【答】中断向量的地址:20H×4=001 0 00 0000=80H 中断向量的装入参考程序: CLI PUSH DS XOR AX,AX MOV DS,AX

MOV AX,OFFSET INT-5 MOV WORD PTR [080H],AX MOV AX,SEG INT-5

MOV WORD PTR [082H],AX POP DS STI ??

INT-5 PROC NEAR ??. IRET

INT-5 ENDP

8.8 8259A 中IRR、IMR 和ISR 三个寄存器的作用是什么? 【答】中断请求寄存器IRR:保存对应位的中断请求 中断屏蔽寄存器IMR:屏蔽对应位的中断请求;

中断服务寄存器ISR:保存当前正在服务的中断申请。

8.9 填空:某时刻8259A 的IRR 内容是08H(00001000B),说明(_IR3 引脚有中断请求_)。 某时刻8259A 的ISR 内容是08H,说明(_IR3 引脚的中断请求正在服务_)。在两片8259A 级 连的中断电路中,主片的第5 级IR5 作为从片的中断请求输入,则初始化主、从片时,ICW3 的控制字分别是(00100000 和00000101)。

8.10 8529A 仅占用两个I/O 地址,它是如何区别4 条ICW 命令和3 条OCW 命令的?在地址 引脚A0=l 时读出的是什么? 【答】

A0=0 写ICW1、OCW2、OCW3,以其特征位区分。

A0=1 写ICW2、ICW3、ICW4、OCW1,写ICW1 后顺序写的是ICW2、ICW3、ICW4。

A0=0 读IRR、ISR、轮询字,由OCW3 的RR 和RIS 两位区分IRR 和ISR,通过OCW3 的P 位向8259 发轮询命令后读出的是轮询字。 A0=1 时,读IMR。 34

8.11 一个可屏蔽中断请求来到时,通常只要中断允许标志为1,便可在执行完当前指令后 响应,在哪些情况下有例外?

【答】如果发出中断请求信号时,正好碰到CPU 执行封锁指令,由于CPU 封锁指令和下一条 指令合在一起看成一个整体,所以必须等到下一条指令执行完后才响应中断。如果是执行往 寄存器传送数据指令,那一定要等下一条指令执行完后,才允许中断。无总线请求;CPU 执 行完当前指令。

8.12 一个可屏蔽中断响应时,CPU 要执行哪些读/写周期?对一个软件中断又如何? 【答】当一个可屏蔽中断被响应时,cpu 实际执行的总线时序如下:

第一步:执行2 个中断响应总线周期,之间用2 至3 个空闲状态搁开。被响应的外设

接口在第二个中断响应总线周期中通过低8 位数据线送回一个字节的中断类型码。cpu 接收

中断类型码,将它左移两位后,成为中断向的起始地址,存人暂存寄存器。 第二步:执行一个总线写周期,把标志寄存器的值推入堆栈。

第三步:中断允许标志IF 和单步标志TF 置成0,禁止了中断响应过程中有其他可屏 蔽中断进入,还禁止了中断处理过程中出现单步中断。

第四步:执行一个总线写周期,在这个周期内,将CS 的内容推入堆栈。 第五步:执行一个总线写周期,在这个周期内,将IP 的内容推入堆栈。

第六步:执行一个总线读周期,在这个周期内,把中断向量前两个字节作为中断处理 子程序入口地址的偏移量送到IP 寄存器中。

第七步:执行一个总线读周期,在这个周期中,把中断向量后两个字节作为中断子程 序入口地址的段值送到CS 寄存器中。

如果是可屏蔽中断或者软中断,则跳过第一步,而从第二步开始按次序执行到第七步。 8.13 软件中断有哪些特点?在中断处理子程序和主程序的关系上,软件中断和硬件中断有 什么不同之处?

【答】(1)软件中断用一条指令进入中断处理子程序,中断类型码由指令提供。进入中断时, 不需要执行中断响应总线周期,也不从数据总线读取中断类型码。不受中断允许标志IF 的影 响。不过,软件中断的一号中断受标志寄存器中另外一个标志既TF 的影响,只有TF 为1 时, 才能执行单步中断。

(2)正在执行软件中断时,如果有外部硬件中断请求,并且是非屏蔽中断请求,那么, 会在执行完当前指令后立即给予响应。 (3)软中断没有随机性。

8.14 8259A 的ICW2 设置了中断类型码的哪几位?说明对8259A 分别设置ICW2 为30H、38H、 36H 有什么差别?

【答】8259A 的ICW2 设置了中断类型为D7-D3 位。30H 和36H 对应的高五位为:00110,表示 的中断类型码相同;而38H 的高五位为:00111,与前面的两者不同

8.15 试按照如下要求对8259A 设置初始化命令字:系统中有一片8259A,中断请求信号用 边沿触发方式,下面要用ICW4,中断类型码为60H、61H、62H??67H,用特殊全嵌套方式, 不用缓冲方式,采用中断自动结束方式。8259A 的端口地址为96H、94H。 【答】初始化命令字的过程: MOV AL,13H

OUI 94H,AL ;设置ICW1 MOV AL,60H 35

OUT 96H,AL ;设置ICW2 MOV AL,13H

OUT 96H,AL ;设置ICW4

8.16 怎样用8259A 的屏蔽命令字来禁止IR3 和IR5 引腿上的请求?又怎样撤消这一禁止命 令?设8259A 的端口地址为93H、94H。

【答】从8259A 的奇地址端口(93H)进行设置来禁止IR3 和IR5 引腿上的请求,如下: IN AL,93H ;读取屏蔽寄存器OCW1 中的数据 OR AL,28H ;将IR3 和IR5 中对应位置1 OUT 93H,AL ;将OCW1 中置入新的数据 撤消这一禁令如下:

IN AL,93H ;读取屏蔽寄存器OCW1 中的数据 AND AL,0D7H ;清除IR3 和IR5 屏蔽位

OUT 93H,AL ;恢复原来的屏蔽位 习题九定时器/计数器8253

9.1 定时和计数有哪几种实现方法?各有什么特点?

【答】软件定时: 利用CPU 执行某一指令需要一定机器周期的原理,在软件编程时循环执行 一段指令,从而产生累积的定时。优点是不需要增加硬件。缺点是耗费CPU 资源,故软件定 时只适用于短时定时。而且,不同CPU 的时钟频率不同,同一段软件延时程序在不同的机器 上运行,可能结果不同,即兼容性不强。

硬件定时和计数:以硬件计数器构成,计数脉冲触发硬件计数器计数,如果计数脉冲的周期 固定,则计数同时产生定时。优点是不占用CPU 资源,定时精确,定时范围大。缺点是增加 一些硬件开销。

9.2 试说明定时器/计数器芯片Intel 8253 的内部结构。

【答】它由与CPU 的接口、一个控制寄存器以及三个16 位计数器所组成。每个计数器通过3 个引腿和外部联系,1 个为时钟输入端CLK,1 个为门控信号输入端GATE,别1 个为输出端OUT。 9.3 设8253 计数器0—2 和控制字的I/O 地址依次为F8H~FBH,说明如下程序的作用。 MOV AL, 33H OUT 0FBH,AL MOV AL,80H OUT 0F8H,AL MOV AL,50H OUT 0F8H,AL

【答】写入控制字后,输出端OUT 即以高电平作为起始电平,门控信号GATE 上升沿到来时, 边沿触发器受到触发,下一个时钟脉冲时,输出端OUT 变为低电平,并在计数到达0 以前一 直维持低电平,如果中间又来一个门控触发信号,按新的50H 计数值作减1 计数。 MOV AL,33H ;写控制字,定义计数器0 为模式1,计数值为四位BCD 码 OUT 0FBH,AL

MOV AL,80H ;写低位计数值80 OUT 0F8H,AL 36

MOV AL,50H ;写高位计数值50 OUT 0F8H,AL

9.4 8253 每个计数通道与外设接口有哪些信号线,每个信号的用途是什么? 【答】CLK 计数器的时钟输入 GATE 计数器的门脉冲控制输入 OUT 计数器的输出

9.5 定时/计数器芯片Intel 8253 占用几个端口地址?各个端口分别对应什么?

【答】4 个端口地址:片内选址为00 对应计数器0,片内选址为01 对应计数器1,片内选址 为10 对应计数器2,片内选址为11 对应控制寄存器。

9.6 填空:8253 每个通道有6 种工作方式可供选择。若设定某通道为方式0 后,其输 出引脚为低电平;当通道开始计数,信号端每来一个脉冲就减1;当减到0,则输出引 脚输出高电平,表示计数结束。8253 的CLK0 接1.5MHZ 的时钟,欲使OUT0 产生频率为 300kHZ 的方波信号,则8253 的计数值应为__5__,应选用的工作方式是3 。 n=1500000/300000=5

9.7 试按如下要求分别编写8253 的初始化程序,已知8253 的计数器0~ 2 和控制字I/O 地 址依次为04H~07H。

(l)使计数器1 工作在方式0,仅用8 位二进制计数,计数初值为128。 【答】

MOV AL,01010000B OUT 07H,AL MOV AL,128 OUT 05H,AL

(2)使计数器0 工作在方式1,按BCD 码计数,计数值为3000。 【答】

MOV AL,00110011B OUT 07H,AL MOV AX,3000H OUT 04H,AL MOV AL,AH OUT 04H,AL

(3)使计数器2 工在方式2,计数值为02F0H。 【答】

MOV AL,10110100B OUT 07H,AL MOV AX,02F0H OUT 06H,AL MOV AL,AH OUT 06H,AL 37

9.8 设一个8253 的计数器0 产生20ms 的定时信号,试对它进行初始化编程。 【答】设外部时钟频率为f=2MHZ, MOV AL,00110100B OUT CONTROL,AL MOV AX,40000 OUT PORT0,AL MOV AL,AH OUT PORT0,AL

9.9 让一个计数器3 工作在单稳态方式,让它产生脉冲宽度为15ms(设输入频率为2MHz)。 【答】

MOV AL,11110010B OUT CONTROL,AL MOV AX,30000 OUT PORT3,AL MOV AL,AH OUT PORT3,AL

9.10 请把一个8253 与8086CPU 相连,地址为2FF0~2FF3H。

【答】8086 的IO/M 和高位地址A19~A2 经过译码器输出(IO/M=1,A19~A2=00101111111100 时输出有效)连接8253 的CS,低位地址A1、A0 接8253 的A1、A0, RD、WR 接8253 的RD、 WR。AD7~AD0 接8253 的D7~D0。

9.11 某系统中8253 芯片的通道0~2 和控制端口地址分别为330H~333H。定义通道0 工作在

方式2,CLK 0 =2MHz,要求输出OUT 0 为1kHz 的速率波;定义通道l CLK l 输入外部计 数事件,每计满100 个向CPU 发出中断请求。试写出8253 通道0 和通道1 的初始化程序。 【答】MOV DX,333H MOV AL,00100101B

OUT DX,AL ;计数器0 方式设置 MOV DX,330H MOV AL,20H

OUT DX,AL ;计数器0 分频系数为2000 MOV DX,333H

MOV AL,01010100B

OUT DX,AL ;计数器1 方式设置 MOV DX,331H MOV AL,100

OUT DX,AL ;计数器1 的计数值为100

9.12 为了用8253 测量一个事件的持续时间长短,一般都将事件的持续时间转换成一定的脉 冲宽度,试设计测量此脉冲宽度时间的硬件电路和初始化编程。

【答】8253 计数器0 作为计数器,8255PC1 作为计数器输出,8255PC0 作为事件脉冲输入, 通过查询事件脉冲控制计数器计数。内存字单元COUH 和COUL 存计数值,乘以CLK0 的周期就 是事件的长 38

COUH DW 0 COUL DW 0

MOV AL,10000001B

OUT 63H,AL ;8255 方式设置 MOV 00010000B

OUT 43H,AL ;8253 方式设置

L1: IN AL,62H ;查询事件脉冲是否到来 TEST AL,01H

JZ L1 ;事件脉冲未到,继续查询

MOV AL,0 ;事件脉冲到来,启动8253 计数器0 定时 OUT 40H,AL

L2: IN AL,62H ;查询事件脉冲是否结束 TEST AL,01H

JZ STOP ;事件脉冲结束

TEST AL,02H ;查询8253 计数器0 定时

JZ L2 ;8253 计数器0 定时未到,继续查询事件脉冲 INC COUH ;8253 计数器0 定时到,计数单元高位字加1 MOV AL,0 ;再启动8253 计数器0 定时 OUT 40H

JMP L2 ;继续查询事件脉冲 STOP: MOV AL,00000000B

OUT 43H,AL ;事件脉冲结束,锁存8253 计数器0 的当前计数器值 IN AL,40H ;读8253 计数器0 的当前计数低字节 MOV AH,AL

IN AL,40H ;读8253 计数器0 的当前计数高字节 XCHG AH,AL

NEG AX ;获得计数单元低位字 MOV COUL,AX

9.13 利用8253 的记时功能,结合软件方法设计一个能记秒,分,小时的时钟。

【答】根据8253 计数器2 输入系统时钟为1.19MHz,分频输出为100Hz 的连续脉冲,引发中 断。

COU DB 0 ;0.01 秒计数单元 SEC DB 0 ;秒计数单元 MIN DB 0 ;分计数单元 HOU DB 0 ;小时计数单元

INIT: MOV AX,0 ;设置计数中断的中断向量 MOV DS,AX

MOV [54H*4],OFFSET INT54 MOV [54H*4+2],SEG INT54 STI

MOV AL,10110100B 39

OUT 43H,AL ;8253 计数器2 方式设置 MOV AX,11900

OUT 42H,AL ;写计数值低位 MOV AL,AH

OUT 42H,AL ;写计数值高位

INT54: STI ;每0.01 秒进入中断服务子程序 INC COU ; 0.01 秒计数单元加1 CMP COU,100 ;判断是否到1 秒 JNZ TORET MOV COU,0 INC SEC

CMP SEC,60 ;判断是否到1 分 JNE TORET MOV SEC,0 INC MIN

CMP MIN,60 ;判断是否到1 小时 JNE TORET MOV MIN,0 INC HOU

CMP HOU,24 ;判断是否到1 天 JNE TORET MOV HOU,0 TORET: IRET

9.14 试设计一个记时器方案,它应能对场内的长跑成绩进行记时,要求精度达1/100 秒, 且能记录运动员每跑一圈的成绩。

【答】8253 计数器0 作为定时器,为Mode3,根据CLK0 周期设定计数值(COUH、COUL)使其

输出脉冲周期为1/100 秒,最大计时时间为655.36 秒。8255PC0 作为START/STOP 输入,8255PC1 作为圈输入。内存字单元COU 和SUBC 存总成绩和圈成绩。 COU DW 0

BUF DW 20 DUP(0) SUBC DW 20 DUP(0)

MOV BX,OFFSET BUF ;当前成绩指针 MOV SI,OFFSET SUBC ;圈成绩指针 MOV AL,10000001B

OUT 63H,AL ;8255 方式设置 MOV 00110110B

OUT 43H,AL ;8253 计数器0 方式设置 L1: IN AL,62H ;查询是否比赛开始 TEST AL,01H JZ L1 40

MOV AL,COUL ;比赛开始,启动计数器0 计数 OUT 40H,AL MOV AL,COUH OUT 40H,AL

L2: IN AL,62H ;查询是否比赛结束 TEST AL,01H JZ STOP

TEST AL,02H ;查询是否一圈结束 JZ L2

MOV AL,00000000B

OUT 43H,AL ;一圈结束,锁存计数器0 当前计数器值 IN AL,40H ;读当前计数器值低位 MOV AH,AL

IN AL,40H ;读当前计数器值高位 XCHG AH,AL

NEG AX ;获得当前成绩 MOV [BX],AX ;存当前成绩

SUB AX,[BX-1] ;获得当前圈成绩 MOV [SI],AX ;存当前圈成绩 INC BX INC SI

CALL DELAY ;躲过重复圈查询 JMP L2

STOP: MOV AL,00000000B

OUT 43H,AL ;比赛结束,锁存计数器值 IN AL,40H ;读当前计数器值低位 MOV AH,AL

IN AL,40H ;读当前计数器值高位 XCHG AH,AL

NEG AX ;获得总成绩 MOV COU,AX ;存总成绩 END

9.15 试编写一程序,使IBM PC 机系统板上的发声电路发出200Hz 至900Hz 频率连续变化 的报警声。

【答】MOV AL,0B6H ;10110110B,TIMER2,MODE3 OUT 43H,AL

MOV DX,0020H ;fCLK=1.19MHZ MOV AX,34DEH

DIV DI ;AX←计数初值N=FCLK÷音频 OUT 42H,AL MOV AL,AH OUT 42H,AL

IN AL,61H ;读8255PB 41

MOV AH,AL

OR AL,3 ;PB0=1,PB1=1 声音输出有效 OUT 61H,AL

WAIT1: MOV CX,7FFFH DELAY: LOOP DELAY DEC BX ;延时系数 JNZ WAIT1 MOV AL,AH

OUT 61H,AL ;恢复8255PB

9.16 已知: PC/XT 微机系统中用作定时及计数的8253 芯片的端口地址为40H~43H, CLK2 输入频率为1.19MHz,通道2 每计500 个脉冲向CPU 发出中断类型号为54H 的中断请求,CPU 响应这一中断后继续写入计数值,重新开始计数。试编写程序完成以上任务。 【答】INIT: MOV AX,0 ;设置计数中断的中断向量 MOV DS,AX

MOV [54H*4],OFFSET INT54 MOV [54H*4+2],SEG INT54 STI

MOV AL, 10111000B

OUT 43H,AL ;8253 计数器2 方式设置 MOV AX, 2380

OUT 42H,AL ;写计数值低位 MOV AL,AH

OUT 42H,AL ;写计数值高位 INT54: STI

MOV AX,2380 ;再启动计数器2 OUT 42H,AL MOV AL,AH OUT 42H,AL IRET__

本文来源:https://www.bwwdw.com/article/7uyo.html

Top