2024年1月5日发(作者:)

.

第1章

1. 将下列二进制数转换成十进制数。

(1)11001010B=202

(2)00111101B=61

绪论作业

(3)01001101B=77

(4)10100100B=164

3. 将下列十进制数分别转换为二进制数和十六进制数。

(2)76= 100 1100B =4CH

( 4)134= 1000 0110B =86H

4. 求下列十进制数的 BCD码

( 1)327=11 0010 0111 (BCD码)

( 2)1256=1 0010 0101 0110 ( BCD码)

6. 求出下列 10 进制数的原码、反码和补码

(2)+85 (4)-85

解: 85=0101 0101B

原码: +85= 0101 0101B

-85= 1101 0101B

反码: +85= 0101 0101B

-85= 1010 1010B

补码: +85= 0101 0101B

-85= 1010 1011B

10. 画出微型计算机的基本结构框图,说明各部分的主要功能是什么?

解:

微型计算机的基本结构框图如下:

微处理器

地址总线

CPU

存储器

I/O 接口

I/O 总线

I/O 设备

数据总线

控制总线

微处理器 CPU:控制微处理器与存储器或 I/O 设备间的数据交换;进行算术和逻辑运算等操作;判定和控制程

序流向。

微处理器主要完成:

( 1)指令控制:从存储器中取指令,指令译码;

( 2)数据加工:简单的算术逻辑运算;

( 3)操作控制:在微处理器和存储器或者I/O 之间传送数据;

( 4)时间控制:程序流向控制。

存储器: 用来存放数据和指令。

I/O

接口: 主机和外设间的桥梁,提供数据缓冲驱动、信号电平转换、信息转换、地址译码、定时控制等

.

.

各种功能。

I/O 设备: 输入原始数据和程序,转换成计算机能识别的信息,送入存储器去等待处理。输出运算结果。

总线: 连接计算机系统中各功能部件的信息通道。

第 2 章 8086CPU 作业

2. 8086CPU 内部由哪两部分组成?它们的大致是如何工作的

?

答:

( 1)8086CPU 由指令执行部件 EU 和总线接口部件 BIU 两部分组成。

( 2)

① BIU 先执行读存储器操作,从给定地址单元中取出指令,送到先进先出的指令队列中等待执行。

存储器的物理地址 =CS 16+IP ,在地址加法器

中形成。

② EU 从指令队列中取走指令,经 EU 控制器译码分析后,向各部件发控制命令,以完成执行指令的操作。 BIU 与 EU 是并行工作方式。

③ 当指令队列已满, EU 在执行指令,未向总线接口单元 BIU 申请读 /写内存或 I/O 操作时, BIU 处于空闲状态。

④ 指令执行过程中,若需对存储器或

I/O 端口存取数据, EU 就要求 BIU 去完成相应的总线周期。

5. 两个带符号数 1011 0100B 和 1100 0111B 相加,运算后各标志位的值等于多少?哪些标志位是有意义的?如果把这两个数当成无符号数,相加后哪些标志位是有意义的?

解:

(1)两个带符号数:

不考虑 CF 标志

1011 0100

+ 1100 0111

1 0111 1011

运算后各标志位状态如下:

CF=1 ,有进位,对于带符号数,无意义。

PF=1,结果有偶数个

1

AF=0 ,无半进位,非 BCD 码运算,无意义。

ZF=0,结果非

0

SF =0,结果为正数

OF=1,溢出(两个负数相加,结果变成了正数)

(2)两个无符号数:

不考虑 SF 和 OF 标志

1011 0100

+ 1100 0111

1 0111 1011

运算后各标志位状态如下:

CF=1 ,有进位

PF=1,结果有偶数个

1

ZF=0,结果非

0

AF 、SF、 OF 无意义。

20. 简要解释下列名词的意义。

CPU :中央处理单元 CPU (Control Processing Unit )也称微处理器,是微型计算机的核心部件,由运算器 ALU 、控制器、寄存器组以及总线接口等部件组成。主要完成各种运算,负责对整机的控制。

存储器: 用于存储程序和数据的硬件设备。

堆栈: 堆栈是一种数据结构,是内部

RAM 的一段区域。设置堆栈的目的是用于数据的暂存,中断、

子程序调用时断点和现场的保护与恢复。

IP :指令指针寄存器,用于控制

CPU 的指令执行顺序(只存放偏移量)

,只能和代码段寄存器

CS 配

合使用, 可以确定当前所要取的指令的内存地址,

且始终指向代码段中下一条将要读取到

CPU 指令队列的

那条指令。顺序执行程序时,

CPU 每取一个指令字节, IP 自动加 1,指向下一个要读取的字节。

SP:堆栈指针寄存器,用于指示堆栈的栈顶地址偏移量的寄存器,它决定了堆栈在内部

RAM 中的物

理位置。只能和 SS 段寄存器配合使用, 且始终指向堆栈的栈顶, 在堆栈指令中隐含的使用它来定位栈顶数据。

BP :基址指针寄存器。用于存放偏移量,通常和

SS 段寄存器配合使用,在间接寻址中用于定位堆栈

段中的内存单元。

段寄存器: 由于 CPU 内部的寄存器都是 16 位的,为了能够提供 20 位的物理地址, 8086 系统中采用

了存储器分段的方法。 规定存储器的一个段为 64KB ,由段寄存器来确定存储单元的段基址, 由指令提供该单元相对于相应段起始地址的 16 位偏移量。

状态标志: 表示前一步操作(如加、减等)执行以后,

ALU 所处的状态,后续操作可以根据这些状态

.

.

标志进行判断,实现转移。

控制标志: 可以通过指令人为设置,用以对某一种特定的功能起控制作用(如中断屏蔽等)

,反映了人

们对微机系统工作方式的可控制性。

物理地址: 存储器的实际地址,它是指

CPU 和存储器进行数据交换时所使用的地址。物理地址是由段

地址与偏移地址共同决定的,计算物理地址的表达式为:

物理地址

= 段地址

×16 + 偏移地址

逻辑地址: 是在程序中使用的地址,它由段地址和偏移地

逻辑地址的表示形式为 “段地址:偏移地址 ”。

址两部分组成 。

机器语言: 直接用二进制编码表述的指令系统语言,通常称为机器语言,机器语言指令是计算机惟一能直接识别和执行的指令。

汇编语言: 便于记忆和使用,通常使用汇编语言(符号指令或指令助记符)来描述计算机的指令系统。

指令: 让计算机完成某种操作的命令称为指令。

指令系统: 一台计算机所能识别、执行的指令的集合就是它的指令系统。

总线:连接计算机系统中其他主要功能部件的桥梁,

是计算机系统中信息输送的枢纽,

只有通过总线,

计算机系统的各部件才能实现相互通信。

内部总线: 微处理器内部各个器件之间传送信息的通路。

系统总线: 微处理机机箱内的底板总线。可分为:

ISA 、EISA 、VESA 局部总线、 PCI 局部总线等。

时钟周期: CPU 时钟频率的倒数称为时钟周期,也称

T 状态。

总线周期: BIU 完成一次访问存储器或 I/O 端口操作所需要的时间称为总线周期。一个基本的总线周期是由 4 个(或 4 个以上)时钟周期组成的。

指令周期: 执行一条指令所需要的时间称为指令周期,不同指令的指令周期的长短是不同的。一个指令周期是由几个总线周期组成的。

21. 要完成下列运算和控制,用什么标志判别?其值是什么?

( 1)比较两数是否相等?

( 2)两数运算后结果是正数还是负数?

( 3)两数相加后是否溢出?

( 4)奇偶校验判断。

( 5)两数相减后比较大小。

( 6)中断信号能否允许?

答:

(1)比较两数是否相等:两数相减后用零标志

ZF 判断, ZF=1,则相等。

(2)两数运算后结果是正数还是负数:用符号标志

SF 判断, SF=1,则结果为负数。

(3)两数相加后是否溢出:用溢出标志

OF 判断, OF=1,则有溢出。

(4)奇偶校验判断:采用偶校验方式,判定是否要补

果低

含有偶数个 “1”,则 PF=1;不用补 “1”。

“1”?用奇偶标志

8 位中

PF 判断,若数据结

( 5)两数相减后比较大小: ZF=1,两数相等。对于无符号数, CF=1 ,则被减数小于减数; CF=0 ,则被减数大于减数; ZF=1,则两数相等。对于带符号数, SF⊕OF=1 ,则被减数小于减数; SF⊕OF=0 ,则被

减数大于减数。

(6)中断信号能否允许:用中断允许标志

IF 判断, IF=1 ,则能允许可屏蔽中断。

22. 说明 8086 系统中 “最小模式 ”和“最大模式 ”两种工作方式的主要区别。

最小模式(最小工作方式

):单微处理器系统(系统中只有一个

8086 微处理器),所有的总线控制信

号,都是直接由 8086CPU 产生的,适用于规模较小的微机应用系统。

当把 8086 的 33 脚 MN/MX

接+5V 时, 8086 CPU 就处于最小工作方式。

最大模式 (最大工作方式

):多微处理器系统 (包含有两个或多个微处理器, 一个主处理器

8086CPU,

其他的处理器称为协处理器它们是协助主处理器工作的。

),主要用在中等或大规模的

8086 系统中。

当把 8086 的 33 脚 MN/MX

接地时,

8086 CPU 就处于最大模式。

第3章

作业

1.分别说明下列指令的源操作数和目的操作数各采用什么寻址方式。

立即寻址

立即寻址

寄存器间接寻址

寄存器寻址

目的

寄存器寻址

寄存器寻址

寄存器寻址

寄存器相对寻址

(1)MOV AX, 2048H

(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 V AL[BP+DI], DX

寄存器寻址

立即寻址

基址变址寻址

寄存器寻址

I/O 端口寻址(或直接寻址)

寄存器相对寻址

基址变址寻址

寄存器寻址

相对基址加变址寻址

寄存器寻址

寄存器寻址

(9)

IN AL, 05H

(10) MOV DS, AX

寄存器寻址

2. 已知:DS=1000H, BX=0200H, SI=02H,

59H, 6BH 。下列每条指令执行完后

内存 10200H~10205H 单元的内容分别为 10H, 2AH, 3CH, 46H,

AX 寄存器的内容各是什么?

AX 内容

(AX)=0200H

(AX)=2A10H

(AX)=0200H

(AX)=5946H

(AX)=463CH

(AX)=6B59H

(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)MOV DL, AX

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

错误,源和目的操作数类型不匹配,

寄存器。

(2)MOV 8650H, AX

错误,立即数不能作为目的操作数。

错误,不能用立即数直接给段寄存器赋值。

错误,不能在两个存储单元之间直接传送数据

DL 是 8 位寄存器, AX 是 16 位

(3)MOV DS, 0200H

(4)MOV [BX], [1200H]

(5)MOV IP, 0FFH

(6)MOV [BX+SI+3], IP

错误, IP 不能作目的操作数或不能用立即数直接给

错误, IP 不能作源操作数。

IP 寄存器赋值。

(7) MOV AX, [BX][BP]

错误,基址变址寻址方式必须是一个基址寄存器与一个变址寄存器,

不能两个同时为基址寄存器(

(8 )MOV AL, ES:[BP]

(9)MOV DL, [SI][DI]

BX 、BP 均为基址寄存器) 。

正确。

错误,基址变址寻址方式必须是一个基址寄存器与一个变址寄存器,

不能两个同时为变址寄存器(

SI、 DI 均为变址寄存器) 。

( 10)MOV AX, OFFSET 0A20H错误, OFFSET 后必须是存储单元标号地址,不能是立即数。

(11) MOV AL, OFFSET TABLE

(12)XCHG AL, 50H

(13)IN BL, 05H

(14)OUT AL, 0FFEH

错误,操作数类型不匹配,

AL 为 8 位, TABLE 为 16 位。

错误,交换指令

XCHG 的操作数不能是立即数。

错误, IN 指令的目的操作数必须是累加器

错误, OUT 指令的源操作数必须是累加器,目的操作数为

口地址或用 DX 做桥梁的 16 位 I/O 端口地址。

8 位 I/O 端

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

位 CF 等于什么?

(1) AND

(2) OR

AH ,CL

BL , 30H

( AH ) =04H

(BL ) =36H

CF=0

CF=0

(3) NOT AX

(4) XOR

(5) TEST

(6) CMP

(7) SHR

(8) SAR

(AX )=0DAF7H

( CX ) =0FFF4H

( DH ) =18H

(CX )=0004H

( DX ) =0186H

( AL ) =04H

CF 不变(不影响

CF )

CF=0

CX , 0FFF0H

DH ,0FH

CX , 00H

DX,CL

AL ,1

CF=0

CF=0

CF=0

CF=0

.

.

(9) SHL

(10)SAL

(11)RCL

(12)ROR

BH ,CL

AX ,1

BX,1

DX ,CL

(BH )=0F0H

( AX ) =4A10H

CF=0

CF=0

CF=0, (BX ) =1E6CH CF=0

CF=1, (BX ) =1E6DH,

( DX ) =4186H

CF=0

11. 假设数据定义如下:

DATA SEGMENT

STRING DB ‘The Personal Computer & TV ’

DATA ENDS

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

( 1)把该字符串传送到附加段中偏移地址为 GET_CHAR 开始的内存单元中。解:程序段如下:

LEA

LEA

MOV

CLD

REP

SI,STRING

;置源串偏移地址

;置目的串偏移地址

;置串长度

DI , GET_CHAR

CX ,26

;方向标志复位

MOVSB

;字符串传送

12.编程将 AX 寄存器中的内容以相反的次序传送到

统计 DX 寄存器中 1 的个数是多少。

DX 寄存器中,并要求 AX 中的内容不被破坏,然后

解:将 AX 的内容用 ROR 循环右移, 16 次之后 AX 的内容不变(如果用算术 /逻辑右移 SHL/SAL ,则 AX

的内容破坏, 需要用堆栈 PUSHU AX/POP AX

保护),其最低位移入

CF 中,再使用 RCL 循环左移将

CF 中

的值移入 DX 中。并且,如果

CF 的值为 1,则将 BL 加 1。

MOV CX, 16

XOR BL, BL

LP1:

ROR AX, 1

JNC LP2

INC BL

LP2:

RCL DX,1

LOOP LP1

HLT

调试程序:

STACK SEGMENT

DB 100 DUP(?)

STACK ENDS

DATA

SEGMENT

STACK

BUF DW 12

BUF1 DW

DATA

CODE

ENDS

SEGMENT

100 DUP (?)

ASSUME CS:CODE,DS:DATA,SS:STACK

START: PUSH

MOV

MOV

MOV

DS

AX,DA TA

DS,AX

AX,1234H

.

MOV CX, 16

XOR BL, BL

LP1:

ROR AX, 1

JNC LP2

INC BL

LP2:

RCL DX,1

LOOP LP1

HLT

CODE

ENDS

END START

15. 某班有七个同学的英语成绩低于

80 分,分数存在分,结果存到 NEW 数组中 .

解:

STACK SEGMENT

STACK

DB 100 DUP(?)

STACK ENDS

DATA

SEGMENT

ARRAY

DB 7 DUP(?)

NEW

DB 7 DUP(?)

DATA

ENDS

CODE

SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

START:

MOV CX,

7

MOV BX,

0

LP1:

MOV AL, ARRAY[BX]

ADD AL, 05H

DAA

MOV NEW[BXI], AL

INC BX

LOOP LP1

HLT

CODE

ENDS

END START

调试程序:

STACK

SEGMENT

STACK

DB 100 DUP(?)

STACK

ENDS

DATA

SEGMENT

ARRAY

DB

65H,76H,78H,54H,90H,85H,68H

NEW

DB

7 DUP(?)

BUF1 DW

100 DUP (?)

DATA

ENDS

CODE

SEGMENT

.

ARRAY数组中,试编程完成以下工作:给每人加.

5

ASSUME CS:CODE,DS:DATA,SS:STACK

START: PUSH

DS

MOV AX,DA TA

MOV DS,AX

MOV CX, 7

MOV BX, 0

LP1:

MOV AL, ARRAY[BX]

ADD AL, 05H

DAA

MOV NEW[BXI], AL

INC BX

LOOP LP1

HLT

CODE

ENDS

END START

某班有七个同学的英语成绩低于

80 分,分数存在( 1)给每人加 5 分,结果存到 NEW 数组中

( 2)把总分存到 SUM 单元中

( 3)把平均分存到 AVERAGE 单元中解:

STACK SEGMENT

STACK

DB 100 DUP(?)

STACK ENDS

DATA

SEGMENT

ARRAY

DB 7 DUP(?)

NEW

DB 7 DUP(?)

SUM

DW 0

AVG

DB 0

DATA

ENDS

CODE

SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

START:

MOV CX,

7

MOV SI,

0

MOV SUM, 0

MOV AH,

0

LP1:

MOV AL, ARRAY[SI]

ADD AL, 05H

DAA

MOV NEW[SI], AL

ADD AL ,SUM

DAA

MOV SUM,AL

.

.

ARRAY 数组中,试编程完成以下工作:

.

ADC AH, 0

DAA

MOV SUM+1, AH

INC SI

LOOP LP1

MOV AX, SUM

MOV BL,07H

DIV BL

MOV

HLT

CODE

ENDS

AVG, AL

END START

调试程序:

STACK SEGMENT

DB 100 DUP(?)

STACK ENDS

DATA

SEGMENT

DB

DB

DB

DB 0

100 DUP (?)

STACK

ARRAY

NEW

SUM

AVG

65H,76H,78H,54H,90H,85H,68H

7

DUP(?)

00H,00H

BUF1 DW

DATA

CODE

ENDS

SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

START: PUSH

DS

MOV

MOV

AX,DA TA

DS,AX

7

0

MOV CX,

MOV SI,

MOV SUM, 0

MOV AH,

0

LP1:

MOV AL, ARRAY[SI]

ADD

DAA

AL, 05H

MOV NEW[SI], AL

ADD

DAA

AL , SUM

MOV SUM,AL

ADC AH, 0

MOV SUM+1, AH

INC SI

LOOP

LP1

MOV AL, SUM

.

.

MOV AH,SUM+1

MOV BL,07H

DIV BL

MOV

HLT

CODE

ENDS

AVG, AL

END START

13. 设 CS=1200H, IP=0100H, SS=5000H, SP=0400H, DS=2000H, SI=3000H, BX=0300H, (20300H)=4800H,

(20302H)=00FFH, TABLE=0500H, PROG_N

标 号的 地址为

1200:0278 H , PROG_F

标号的 地址为

3400:0ABCH 。说明下列每条指令执行完后,程序分别转移到何处执行?

JMP 指令

(1)JMP PROG_N

段内直接近转移,目的地址为

(2)JMP BX

段内寄存器间接转移,目的地址为

(3)JMP [BX]

物理地址= DS× 10H+BX=2000H ×10H+0300H=20300H

(20300H)=4800H → IP

段内存储器间接转移,目的地址为

(4)JMP FAR PROG_F

1200H:0278H( 或 12278H)

1200H:0300H( 或 12300H)

1200H:4800H( 或 16800H)

段间直接转移,目的地址为

3400H:0ABCH( 或 34ABCH)

(5)JMP DWORD PTR[BX]

物理地址= DS× 10H+BX=2000H ×10H+0300H=20300H

(20300H)=4800H → IP, (20302H)=00FFH → CS

段间存储器间接转移,目的地址为

00FFH:4800H( 或 057F0H)

JMP 改为 CALL 后,目的地址与

JMP 相同。

(1)CALL PROG_N

段内直接调用, 3 字节指令,目的地址为

(2)CALL BX

段内寄存器间接调用,

2 字节指令,目的地址为 1200H:0300H( 或 12300H) ,0102H 入栈, SP=03FEH

1200H:0278H( 或 12278H), 0103H 入栈, SP=03FEH

(3)CALL [BX]

段内存储器间接调用,

2 字节指令,目的地址为

(4)CALL FAR PROG_F

段间直接调用, 5 字节指令,目的地址为 3400H:0ABCH( 或 34ABCH) , 1200H 和 0105H 分别入栈,

1200H:4800H( 或 16800H),0102H 入栈, SP=03FEH

SP=03FCH

(5)CALL DWORD PTR[BX]

段间间接调用, 2 字节指令,目的地址为

SP=03FCH

00FFH:4800H( 或 057F0H) , 1200H 和 0102H 分别入栈,

部分调试程序:

.

.

STACK

SEGMENT STACK

DB 100 DUP(?)

STACK

DATA

BUF

ENDS

SEGMENT

DW 12

100 DUP (?)

BUF1 DW

ORG 300H

DB

00H,48H,0FFH,00H

DATA

ENDS

SEGMENT

CODE

ASSUME CS:CODE,DS:DATA,SS:STACK

START: PUSH

MOV

MOV

MOV

DS

AX,DA TA

DS,AX

BX,0300H

CALL PROG_N

CALL BX

CALL [BX]

ORG 0278

PROG_N:RET

ORG 0300H

RET

ORG 4800H

RET

HLT

CODE

ENDS

END START

14. 如在下列程序段的括号中分别填入以下指令:( 1)LOOP NEXT

(2) LOOPENEXT

(3) LOOPNENEXT

试说明在这三种情况下,程序段执行完后,

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

(

)

解:

LOOP 过程:

AX

BX

01H

CX

02H

DX

初始值

04H

03 H

.

.

循环 1次 02H

循环 2次 03H

循环 3次

04H

07H

0BH

10H

03H

01H

02H

01H

00H

00H

00H

00H

04H

05H

循环 4次

结果:

AX

(1)

(2)

05H

02H

BX

10H

04H

CX

00H

03H

DX

00H

01H

执行一次, ZF=0,退出循环。

(3)

03H

07H

02H

00H

执行两次, ZF=1,退出循环。

20. 设 8086CPU 的时钟频率为 5MHz ,请编写延时 5ms 的子程序。解:微机的主频率为 5MHz

则:时钟周期 =主频率的倒数 =1/( 5× 10-6)=0.2 μs

延时 5ms 需要的时钟周期数

= 5ms/ 0.2 μs=25000

延时子程序如下:

DELAY5 : MOV

DLY1 :NOP

LOOP

RET

CX ,N

4

3 × N

DLY1

17 ×( N-1)+ 5

16

×( N-1) + 5+16 ,才能实现要求的延时。则:

应该有 25000=4+ 3 ×N+ 17

N=1250=04E2H

延时子程为:

DELAY5 : MOV

DLY1 :NOP

LOOP

CX ,04E2H

DLY1

RET

第 4章作业

P153

5. 阅读下列程序,说明每条指令执行后的结果是什么?

X1

X2

X3

GO: MOV

MOV

MOV

MOV

MOV

MOV

解:

DB

DW

DD

65H, 78H

06FFH, 5200H

?

AL, TYPE X1

BL, TYPE X2

CL, TYPE X3

AH, TYPE GO

BH, SIZE X2

CH, LENGTH X3

(1)前三条语句的功能是设置数据于数据段中,从数据段偏移地址

0000H 开始存放。

.

.

变量

X1

偏移地址

0000H

0001H

数据

65H

78H

FFH

06H

78H

00H

随机数

随机数

随机数

随机数

X2

0002H

0003H

0004H

0005H

X3

0006H

0007H

0008H

0009H

程序汇编后结果如下:

六条程序执行结果如下:

( AL ) =01H ;设置变量类型属性,字节数

( BL )=02H ;设置变量类型属性,字节数

( CL ) =04H ;设置变量类型属性,字节数

( AH ) =0FFH ;设置 GO 显示类型,近标号,为 -1,补码表示

( BH ) =02H ;设置数据类型,无 DUP 时,返回数据类型的字节数

( CH ) =01H ;无 DUP 时,返回 1。

程序执行后结果如下:

调试程序如下:

.

.

STACK SEGMENT STACK

DB 100 DUP(?)

STACK ENDS

DATA SEGMENT

X1 DB 65H, 78H

X2 DW

X3 DD

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

START: PUSH DS

MOV AX,DA TA

MOV DS,AX

GO: MOV

MOV

MOV

MOV

MOV

AL, TYPE X1

BL, TYPE X2

CL, TYPE X3

AH, TYPE GO

BH, SIZE X2

CH, LENGTH X3

06FFH, 5200H

?

MOV

POP DS

HLT

CODE ENDS

END START

6. 画出示意图,说明下列变量在内存中如何让存放?

A1 DB 12H, 34H

A2 DB ‘Right. ’

A3 DW 5678H

A4 DB 3 DUP(?)

(1)设置数据于数据段中,从数据段偏移地址

变量

A1

0000H 开始存放。

数据

12H

34H

52H

69H

67H

68H

74H

2EH

78H

56H

随机数

随机数

偏移地址

0000H

0001H

A2

0002H

0003H

0004H

0005H

0006H

0007H

A3

0008H

0009H

A4

000AH

000BH

.

.

000CH

调试程序如下:

随机数

STACK SEGMENT STACK

DB 100 DUP(?)

STACK ENDS

DATA SEGMENT

A1 DB 12H, 34H

A2 DB 'Right.'

A3 DW

A4 DB

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

START: PUSH DS

MOV AX,DA TA

MOV DS,AX

POP DS

HLT

CODE ENDS

END START

程序汇编后结果如下:

5678H

3 DUP(?)

12. 编程实现, 从键盘输入一个十进制数

0~9,查表求键入数字的七段代码

(共阳极

LED 显示器的段码),

”。

存入 DL 中,并在键入数字之前,显示提示信息“

解:

Please input a number(0~9):

STACK SEGMENT

DB 100 DUP(?)

STACK ENDS

DATA SEGMENT

TABLE DB

STACK

0C0H, 0F9H, 0A4H, 0B0H, 99H, 92H, 82H, 0F8H, 80H, 90H

BUF DB 'Please input one number(0 ~ 9):',0DH,0AH,'$'

.

.

DATA

CODE

ENDS

SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA

START: PUSH

DS

MOV

MOV

MOV

MOV

AX,DA TA

DS,AX

DX,OFFSET BUF

AH,09H

INT 21H

MOV AH,1

INT 21H

AND AL,0FH

MOV

XLA T

MOV DL,AL

BX,OFFSET

TABLE

POP DS

HLT

CODE

ENDS

END START

调试结果:

数字 5 的共阳极 LED 七段码为

92H 。

15. 已知:在内存 BUF 开始的单元中,存在一串数据: 58,75,36, 42,89。编程找出其中的最小值存入

MIN

单元中,并将这个数显示在屏幕上。

解:

STACK SEGMENT

DB 100 DUP(?)

STACK ENDS

DATA SEGMENT

STACK

.

.

BUF DB

MIN DB

58H, 75H, 36H, 42H, 89H

0

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE, DS:DATA, SS:STACK

START: PUSH DS

MOV

MOV

MOV

MOV

MOV

ST1: INC

AX, DA TA

DS, AX

CX, 4

BX, OFFSET BUF

AL, [BX]

BX

CMP AL, [BX]

JBE NEXT

MOV

NEXT:LOOP

AL, [BX]

ST1

MOV MIN, AL

AND AL, 0F0H

MOV CL,4

ROR AL, CL

ADD AL, 30H

MOV DL, AL

MOV AH, 02H

INT 21H

MOV AL, MIN

AND AL, 0FH

ADD AL, 30H

MOV DL, AL

MOV AH, 02H

INT 21H

POP DS

MOV AH, 4CH

INT 21H

HLT

CODE

ENDS

END START

18. 某班有 20 个同学的微机原理成绩存放在LIST 开始的单元中,要求编程先从高到低的次序排列好,

再求出总分和平均值,分别存放在

解:

SUM 和 AVER 开始的单元中。

STACK ENDS

DATA

SEGMENT

LIST DB 65H,76H,78H,54H,90H,85H,68H,66H,77H,88H

.

.

DB

99H, 89H, 79H, 69H,75H,85H,63H,73H,83H,93H

SUM

AVER

BUF

DW

DB

DB

ENDS

0

0

100 DUP (?)

DATA

CODE

SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

START: PUSH

DS

MOV

AX,DA TA

MOV

DS,AX

MOV

DI, OFFSET LIST

MOV

BX, 19

LP0: MOV

SI, DI

MOV

CX, BX

LP1: MOV

INC

AL, [SI]

SI

CMP

AL, [SI]

JNC

LP2

MOV

DL,

[SI]

MOV [SI-1], DL

MOV

[SI],

LP2: LOOP

LP1

DEC

BX

AL

JNZ

LP0

LP3: MOV

CX, 20

MOV

BX, OFFSET LIST

MOV

SUM, 0

XOR

LP4: ADD

AX, AX

AL, [BX]

DAA

ADC

INC

AH, 0

BX

LOOP

LP4

MOV

SUM, AX

MOV

BL, 20H

DIV

BL

ADD

AL,0

DAA

MOV

AVER

POP

DS

HLT

AL

CODE

ENDS

END START

.

.

20. 编程将存放在 AL 中的无符号二进制数,转化成十六进制数,再转换成

解:

程序如下:

ASII 码并显示在屏幕上。

STACK SEGMENT

DB 100 DUP(?)

STACK ENDS

DATA SEGMENT

DB 100 DUP(?)

DATA ENDS

CODE SEGMENT

STACK

ASSUME CS:CODE, DS:DATA, SS:STACK

START: PUSH DS

MOV

MOV

MOV

MOV

MOV

AX, DA TA

DS, AX

DH, AL

CH, 02H

CL, 4

ST1:

ROR

DH, CL

MOV

AND

ADD

AL, DH

AL, 0FH

AL, 30H

CMP

AL, 39H

JBE

DISP

ADD

MOV

MOV

INT

DEC

AL, 07H

DL, AL

AH, 02H

21H

CH

DISP:

JNZ

ST1

POP

DS

MOV

INT

HLT

ENDS

END

START

AH, 4CH

21H

CODE

调试程序如下:

STACK SEGMENT

STACK

BUF DB 01111000B

DB 100 DUP(?)

STACK ENDS

DATA SEGMENT

DB 100 DUP(?)

.

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE, DS:DATA, SS:STACK

START: PUSH DS

MOV

AX, DA TA

MOV

DS, AX

MOV

AL, BUF

MOV

DH, AL

MOV

CH, 02H

ST1:

MOV

CL, 4

ROR

DH, CL

MOV

AL, DH

AND

AL, 0FH

ADD

AL, 30H

CMP

AL, 39H

JBE

DISP

ADD

AL, 07H

DISP:

MOV

DL, AL

MOV

AH, 02H

INT

21H

DEC

CH

JNZ

ST1

POP

DS

MOV

AH, 4CH

INT

21H

HLT

CODE

ENDS

END

START

21. 编写程序,使用三种以上的方法,将存储器中2000H 开始的地址单元中的3000H 开始的存储器地址单元中。

解:

(1)利用通用传送指令 MOV

MOV SI ,2000H

注意这里如果是标号地址

,则必须用

MOV DI ,3000H

MOV CX , 100

LP1: MOV AL , [SI]

MOV [DI] ,AL

INC SI

INC DI

LOOP LP1

HLT

MOV CX , 100

MOV BX ,0

LP0:MOV AL , 2000[BX]

MOV 3000[BX] , AL

INC BX

.

.

字节数据复制到

OFFSET

100

.

LOOP LP0

HLT

(2)利用交换指令 XCHG

MOV SI ,2000H

MOV DI ,3000H

MOV CX , 100

LP2: MOV AL , [SI]

XCHG [DI] ,AL

INC SI

INC DI

LOOP LP2

HLT

(3)利用换码指令 XLAT

MOV BX , 2000H

MOV DI ,3000H

MOV CX , 100

LP3: XOR

AL , AL

XLAT

MOV [DI], AL

INC BX

INC DI

LOOP LP3

HLT

(4)利用堆栈实现数据传送

MOV SI ,2000H

MOV DI ,3000H

MOV CX , 50

LP4: PUSH [SI]

POP

[DI]

INC SI

INC SI

INC DI

INC DI

LOOP LP4

HLT

( 5)利用串操作指令 REP MOVSB

MOV SI ,2000H

MOV DI ,3000H

MOV CX , 100

CLD

;DF=0 ,SI、 DI 自动 +1

REP MOVSB

HLT

调试程序:

STACK SEGMENT STACK

DB 100 DUP(?)

STACK ENDS

DATA SEGMENT

ORG 2000H

DB 11H,22H,33H,44H,55H.66H,77H,88H,99H

DB 100 DUP(?)

ORG 3000H

DB 100 DUP(?)

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

.

START:PUSH DS

MOV AX,DA TA

MOV DS,AX

MOV SI,2000H

MOV DI,3000H

MOV CX,100

LP1: MOV AL,[SI]

MOV [DI],AL

INC SI

INC DI

LOOP LP1

POP DS

HLT

CODE ENDS

END START

22. 在 DATA 开始的 4 个单元中存放着一个 32 位数,求出其中的DATA SEGMENT

DA TA1 DB 0FEH, 86H,7CH ,35H

COUNT

DB 00H

DATA ENDS

STACK SEGMENT

DB 100 DUP(?)

STACK ENDS

CODE

SEGMENT

ASSUME CS:CODE , DS:DATA ,SS:STACK

START: PUSH

DS

MOV AX , DATA

MOV

DS,AX

MOV

AX , STACK

MOV SS,AX

MOV

SI,OFFSET DATA1

MOV

BX , [SI]

MOV

DX , [SI+2]

MOV

CX, 32

XOR AL,AL

LP1 :RCR DX,1

RCR BX,1

JNC LP2

INC AL

LP2 :LOOP

LP1

MOV COUNT , AL

POP

DS

MOV AH , 4CH

INT

21H

HLT

CODE ENDS

END START

1. 下列变量各占多少字节?

A1

DW 23H , 5876H

4 字节.

1的”个数,并存入.

COUNT 单元中。解:

.

A2

A3

A4

DB

DD

DB

3 DUP ( ?), 0AH ,0DH ,‘ $’

5 DUP (1234H , 567890H )

4 DUP ( 3 DUP (1, 2,‘ ABC ’))

6 字节

4× 2×5=40 字节

5×3×4=60 字节

调试程序:

STACK SEGMENT STACK

DB 100 DUP(?)

STACK ENDS

DATA SEGMENT

DA1

DW 23H,5876H

DA2

DA3

DA4

DB

3 DUP(?) ,0AH,0DH,'$'

DD 5 DUP(1234H,567890H)

DB

4 DUP(3 DUP(1,2,'ABC'))

DA5 DB

10 DUP(?)

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

START:PUSH DS

MOV AX,DA TA

MOV DS,AX

MOV AX,OFFSET

MOV BX,OFFSET

MOV CX,OFFSET

DA1

DA2

DA3

MOV

DX,OFFSET

DA4

MOV

DI,OFFSET

DA5

POP

DS

HLT

CODE ENDS

END START

5. 对于下面的数据定义,各条 MOV 指令执行后,有关寄存器的内容是什么?

DA1DB ?

DA2

DA3

DW

DB

MOV

MOV

MOV

10

DUP ( ?)

‘ ABCD ’

AX ,TYPE DA1

BX , SIZE DA2

CX , LENGTH DA3

解:各条 MOV 指令执行后,有关寄存器的内容如下:

MOV AX , TYPE DA1

;(AX )= 1

MOV

BX , SIZE DA2

;( BX )= 20

MOV CX, LENGTH DA3

;(CX ) =1

调试程序

STACK SEGMENT STACK

DB 100 DUP(?)

STACK ENDS

DATA SEGMENT

DA1

DB

?

DA2

DW 10

DUP(?)

DA3

DB 'ABCD'

DATA ENDS

.

.

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

START: PUSH

DS

MOV AX,DA TA

MOV DS,AX

MOV AX,TYPE

DA1

MOV BX,SIZE

DA2

MOV CX,LENGTH

POP DS

HLT

CODE ENDS

END START

DA3

6. 下段程序完成后, AH 等于什么?

IN

AL , 5FH

TEST AL ,80H

JZ L1

AH ,0

MOV

JMP STOP

L1 :MOV

STOP: HLT

解:

=1,则( AH ) = 0 ,否则,( AH )= 0FFH 。

AH ,0FFH

如果地址为 5FH 的外设输入到 AL 中的数据的最高位

10. 编制两个通用过程,完成两位十六进制数转换成

(1)两位十六进制数转换成

设两位十六进制数存放在

CON

ASCII 码,并将 ASCII

码字符显示。

ASCII 码

DL 中,输出的 ASCII 码存放在 BX 中。

PROC

PUSH

PUSH

AX

CX

MOV CL, 4

MOV

AND

AL, DL

AL, 0FH

CMP

AL, 0AH

JNC

LP1

ADD AL, 30H

JMP

LP2

LP1:

ADD AL, 37H

LP2:

MOV BL, AL

MOV

AL, DL

SHR

AL, CL

AND

AL, 0FH

CMP

AL, 0AH

.

JNC

LP3

ADD AL, 30H

JMP

LP4

LP3:

ADD AL, 37H

LP4:

MOV BH, AL

POP CX

POP AX

RET

CON

ENDP

四位十六进制数转换成

ASCII

码,

设四位十六进制数存放在存储器

BUF1 单元中,输出的CON

PROC

PUSH

AX

PUSH

CX

PUSH

DX

MOV DI, OFFSET BUF2

MOV SI, OFFSET BUF1

MOV CL, 4

MOV DH, 4

MOV

DX, [SI]

LP1:

ROL

DX, CL

MOV

AL, DL

AND

AL, 0F

ADD

AL, 30H

CMP

AL, 3AH

JC

LP2

ADD AL, 07H

LP2:

MOV

[DI],

AL

INC

DI

DEC

CH

JNZ LP1

POP DX

POP CX

POP AX

RET

CON

ENDP

( 2) ASCII 码字符显示

设 2 个 ASCII 码字符在 BX 中。

DISP PROC

PUSH AX

.

ASCII 码存放在存储器

.

BUF2 开始的单元中。

.

MOV DL, BL

MOV AH, 2

INT 21H

MOV DL, BH

INT 21H

POP AX

RET

DISP ENDP

调试程序

STACK SEGMENT STACK

DB 100 DUP(?)

STACK ENDS

DATA SEGMENT

DA1

DA2

DB

DB

5FH, 0A4H, 0C7H

100

DUP(?)

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

START: PUSH

DS

MOV AX,DA TA

MOV DS,AX

MOV DL,DA1

CALL

CALL

HLT

CON:

PUSH AX

PUSH CX

MOV CL,4

MOV AL,DL

AND AL,0FH

CMP AL,0AH

JNC LP1

ADD AL,30H

JMP LP2

LP1: ADD AL,37H

LP2: MOV BL,AL

MOV AL,DL

SHR AL,CL

AND AL,0FH

CMP AL,0AH

JNC LP3

ADD AL,30H

JMP LP4

LP3: ADD AL,37H

LP4: MOV BH,AL

POP CX

POP AX

RET

CON

DISP

POP DS

.

.

DISP:

PUSH AX

MOV DL,BL

MOV AH,2

INT 21H

MOV DL,BH

INT 21H

POP AX

RET

CODE ENDS

END START

13. 将键盘上输入的一位为十六进制数转换成十进制数,在屏幕上显示。

DATA SEGMENT

DA TA1 DB

10 DUP (?)

DA TA2 DB

10 DUP (?)

DATA ENDS

STACK SEGMENT

STACK

DB 100 DUP(?)

STACK ENDS

CODE

SEGMENT

ASSUME CS:CODE , DS:DATA ,SS:STACK

START: PUSH

DS

MOV AX ,DATA

MOV DS ,AX

KEY:

MOV AH,1

INT 21H

ZH:

CMP AL,3AH

JAE ZH1

SUB AL,30H

JMP ZH2

ZH1:

SUB AL,37H

ADD AL,0

DAA

ZH2:

MOV BL,AL

AND AL,0F0H

MOV CL,4

SHR AL,CL

ADD AL,30H

MOV BH,AL

MOV AL,BL

AND AL,0FH

ADD AL,30H

MOV BL,AL

DISP:

MOV DL,BH

MOV AH,2

INT 21H

MOV DL,BL

MOV AH,2

INT 21H

POP DS

MOV

INT 21H

HLT

CODE ENDS

END START

AH ,4CH

.

.

调试程序:

STACK

SEGMENTSTACK

DB

100 DUP(?)

STACK

ENDS

DATA

SEGMENT

BUF1 DB

'Please input one hexadecimal(0-9,A-F):',0DH,0AH,'$'

BUF2 DB

20H,20H,'Decimal(0-15):',0DH,0AH,'$'

BUF3 DB

10 DUP(?)

DATA

ENDS

CODE

SEGMENT

ASSUME

CS:CODE,DS:DATA,SS:STACK

START:

PUSH DS

MOV AX,DA TA

MOV DS,AX

MOV DX,OFFSET BUF1

MOV AH,9

INT 21H

KEY:

MOV AH,1

INT

21H

PUSH AX

MOV DX,OFFSET BUF2

MOV AH,9

INT 21H

POP AX

ZH:

CMP

AL,3AH

JAE ZH1

SUB AL,30H

JMP ZH2

ZH1:

SUB AL,37H

ADD AL,0

DAA

ZH2:

MOV BL,AL

AND

AL,0F0H

MOV CL,4

SHR

AL,CL

ADD

AL,30H

MOV

BH,AL

MOV

AL,BL

AND

AL,0FH

ADD

AL,30H

MOV

BL,AL

DISP:

MOV DL,BH

MOV AH,2

INT 21H

MOV DL,BL

MOV AH,2

INT 21H

POP DS

MOV

AH,4CH

INT 21H

HLT

CODE

ENDS

END START

22. 编程序统计学生的数学成绩,分别归类 90~ 99 分,各段的人数送入内存单元中。

解:

STACK SEGMENT

DB 100 DUP(?)

STACK ENDS

DATA SEGMENT

.

~ 89 分,70~79 分,~69 分及 60 分以下,并将

80 60

.

DA TA1 DB

200 DUP (?)

DA TA2 DB

100 DUP (?)

DA TA3 DB

10 DUP (?)

DATA ENDS

CODE

SEGMENT

ASSUME

CS:CODE , DS:DATA ,SS:STACK

START: PUSH

DS

MOV

AX , DATA

MOV

DS,AX

XOR

CX ,CX

KEY :MOV

SI, OFFSET

DATA1

KEY1 :MOV

AH ,1

INT

21H

CMP

JZ

INC

MOV

AL ,‘$’

ZH

CX

[SI] , AL

INC SI

JMP

KEY1

ZH :

MOV

SI,OFFSET

DATA1

MOV DI ,OFFSET DATA2

SHR

CX,1

PUSH

CX

ZH1 :MOV

AL ,[SI]

AND

AL , 0FH

SHL

AL ,1

SHL

AL ,1

SHL

AL ,1

SHL

AL ,1

MOV

BL ,AL

INC SI

MOV

AL , [SI]

AND

AL , 0FH

AL ,BL

OR

MOV

[DI] ,AL

INC SI

INC DI

LOOP

ZH1

POP

CX

TJ:

MOV DI ,OFFSET DATA2

TJ0: MOV

AL , [DI]

CMP

AL ,90H

JNB

TJ1

CMP

AL ,80H

JNB

TJ2

CMP

AL ,70H

JNB

TJ3

CMP

AL ,60H

JNB

TJ4

INC

4[DA TA3]

JMP

TJ5

TJ1: INC

[DA TA3]

JMP

TJ5

TJ2: INC

1[DA TA3]

JMP

TJ5

TJ3: INC

2[DA TA3]

JMP

TJ5

TJ4: INC

3[DA TA3]

.

.

TJ5: INC DI

LOOP TJ0

POP DS

MOV

AH , 4CH

INT

HLT

CODE ENDS

21H

END START

调试程序:

STACK

SEGMENT

STACK

STACK

DATA

DB 100 DUP(?)

ENDS

SEGMENT

DA TA1

DA TA2

DA TA3

DB

DB

DB

80 DUP(?)

80 DUP(?)

10 DUP(?)

DATA

ENDS

CODE

SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

START: PUSH

DS

MOV AX,DA TA

MOV DS,AX

XOR

CX,CX

KEY:

KEY1:

MOV

SI,OFFSET

DATA1

MOV AH,1

INT

21H

CMP

AL,'$'

JZ

ZH

INC

CX

MOV

[SI],AL

INC SI

JMP

KEY1

ZH:

MOV

SI,OFFSET

DA TA1

MOV

DI,OFFSET

DATA2

SHR

CX,1

PUSH

CX

MOV

AL,[SI]

AND

AL,0FH

SHL

AL,1

SHL

AL,1

SHL

AL,1

SHL

AL,1

MOV

BL,AL

INC SI

MOV

AL,[SI]

AND

AL,0FH

OR

AL,BL

MOV

[DI],AL

INC SI

INC DI

LOOP

ZH1

POP

CX

ZH1:

TJ:

TJ0:

MOV

DI,OFFSET

DATA2

MOV

AL,[DI]

CMP

AL,90H

JNB

TJ1

.

.

CMP

AL,80H

JNB

TJ2

CMP

AL,70H

JNB

TJ3

CMP

AL,60H

JNB

TJ4

INC

4[DA TA3]

JMP

TJ5

INC

[DA TA3]

JMP

TJ5

INC

1[DA TA3]

JMP

TJ5

INC

2[DA TA3]

JMP

TJ5

INC

3[DA TA3]

INC

DI

LOOP

TJ0

POP

DS

MOV

AH,4CH

INT21H

TJ1:

TJ2:

TJ3:

TJ4:

TJ5:

HLT

CODE

ENDS

END

START

第 5 章作业 P194

5. PROM 、EPROM 、 E2PROM 的共同特点是什么?它们在功能上主要不同之处在哪里?试举例说明它们的用途。

答:

(1)共同特点:只读存储器,只能读出,在系统运行过程中不能写入。具有非易失性,写入或擦除一般需

用特殊方法。

(2)功能上的不同:

一次可编程的 PROM :用户可根据需要修改存储器中的某些存储单元,只能一次性修改,不能二次编

程,成本高,可靠性差,使用具有一定的局限性。用户可部分写入。

紫外线可擦除 EPROM :显著优点是可多次编程,但不能在线编程,不容易修改局部内容。需要紫外

线擦出。一般用于产品开发,或用于小批量生产。

电擦可编程E2 PROM :可改写任一部分内容,擦写

10000 次,甚至百万次,数据保存

10 年。可在电路

EPROM 好。 EEPROM 擦写速度较

板上在线编程。一般用于产品开发,或用于小批量生产。性能和次数比

慢,不能做大容量内存。

(3)用途

一次可编程的

PROM :用于大批量生产的各种需要存储器的电子设备。

紫外线可擦除

EPROM :一般用于产品开发,或用于小批量生产。广泛用于微机化仪器设计,可用编

程器写入调试好的程序和数据,并能长期保存。一般用于产品开发,或用于小批量生产。主要用于程序存

储器,容量不大。

电擦可编程E

2PROM

:用来存放仪器或接口卡的硬件设置数据或构成防止软件非法拷贝的“硬件锁”。

BIOS ROM 。

擦写速度较慢,容量不大,不能做大容量内存。如计算机主板上的

8. 试说出闪存的 3 项技术特点,并举出至少 5 个采用闪存的计算机设备或电子产品名称。答:

(1)具有非易失性,能不加电而长期保存信息,抗干扰能力强;

能在线进行快速电擦除,类似于

EEPROM ;编程速度可达 10ns/byte,比 EPROM 和 EEP ROM 快;

价格已低于 DRAM ,容量则接近于 DRAM 。

.

.

性能好、功耗低、体积小、重量轻。

( 2)取代 EPROM 和 EEPROM ,固化 BIOS ,并用在打印机、条码阅读器、各种仪器和外设中。制作 U 盘、固态硬盘。

各类小型存储介质: CF 卡(紧凑式闪存 )、SM 卡(固态软盘卡 ) 、SD 卡 (安全数码卡 )、 MMC 卡( 多媒体卡 )、

MS 卡 (记忆棒 )、XD 卡 (尖端数字图像卡 ) 等。

12. 什么是 Cache ?它处在计算机的什么位置上?起作用是什么?

答:

(1)Cache:高速缓冲存储器

(2)Cache 在计算机中位于 CPU 和 DRAM 之间。

(3)在慢速 DRAM 和快速 CPU 之间设置 1 个容量较小的高速缓冲存储器(

Cache)。能不明显增加成本而

提高 CPU 存取数据速度。以解决计算机存储器系统的容量、存取速度及单位成本之间的矛盾。

为了解决存储器系统的容量、存取速度及单位成本之间的矛盾,可以采用

Cache----主存存储结构,即在主

存和 CPU 之间设置高速缓冲存储器

Cache,把正在执行的指令代码单元附近的一部分指令代码或数据从主

存装入 Cache 中,供 CPU 在一段时间内使用,在一定容量

令代码及进行数据读写的操作都只要通过访问

Cache 的条件下,可以做到使

CPU 大部分取指

Cache,而不是访问主存而实现。

18. 用 8K × 8 位的 RAM6264 构成一个 32K ×8 位存储器,存储器的起始地址为

地址连续 ,用 74LS138 做译码器,系统中只用到了地址线

出硬件电路图,并用列表说明每块芯片的地址范围。

18000H ,要求存储芯片的

A18-A0 ,采用部分译码法设计译码电路,试画

(选用 8088CPU )

解:RAM6264 为 8KB ×8 位 SRAM ,有 13 根地址线: A12 A

11A

10A

9A

8 A7A

6A

5 A4 A3 A

2A

1 A0 ,8KB 的地址范围, 13 根地址线从全 0 变成全 1。

8KB × 8 位 RAM6264 构成一个 32K× 8 位存储器,需要字扩展,

题目要求存储器的起始地址为

32KB/8KB=4 ,需要四片 RAM6264 。

18000H ,即: 0001 1000 0000 0000 0000B。

4 片 RAM6264 的地址范围为:

A3A2A1A0

十六进制地址

题目要求存储芯片的地址连续,则

A19A18A17A16

1#:0001

0001

2#: 0001

0001

3#: 0001

0001

4#: 0001

0001

A15A

14A13A12 A

11A10A

9A8 A

7A6A5 A4

0000

1111

0000

1111

0000

1111

0000

1111

0000

1111

0000

1111

0000

1111

0000

1111

0000B

1111B

0000B

1111B

0000B

1111B

0000B

1111B

1000

1001

1010

1011

1100

1101

1110

1111

18000H

19FFFH

1A0000H

1BFFFH

1C000H

1DFFFH

1E000H

1FFFFH

A

12~A

0 为每片存储器自己的

A

14A

13,题目要求

根据 CPU 外扩存储器的原理,从 4 片 RAM6264 的地址范围可以看出:

范围,需要接 CPU 的低位地址线 A12~ A

0;变化的地址为 A

14A13,译码器输入必须包括

用 74LS138 做译码器,因此,74LS138 译码器的输入必须为

译码器的输出

Y

4~ Y

7 上。

A

15A

14A

13, 1#~4#存储器的片选接到

74LS138

结论:要求存储芯片的地址连续,译码器的输入必须是除每片存储器的地址外的连续地址。

除每片存储器的地址外, 所有芯片的相同电平地址通过逻辑门接到译码器的控制端,

所有芯片的不同

电平的地址位必须参与译码。

选择 A

15A

14A

13 作为 74LS138 译码器的输入。 A

16=1 (接 74LS138 译码器的 G), A

18A

17=00。(经或门后接74LS138译码器的接 G

2 A

), M / IO

74LS138

译码器的 G

2 B

.

.

A19 A

18A

17A

16

A

15A

14A

13A

12 A

11A

10A

9A

8

A

7A

6A5 A4 A3A2A1A0

1#:0001

0001

2#: 0001

0001

3#: 0001

0001

4#: 0001

0001

1000

1001

1010

1011

1100

1101

1110

1111

0000

1111

0000

1111

0000

1111

0000

1111

0000

1111

0000

1111

0000

1111

0000

1111

0000B

1111B

0000B

1111B

0000B

1111B

0000B

1111B

18000H

19FFFH

1A000H

1BFFFH

1C000H

1DFFFH

1E000H

1FFFFH

十六进制地址

1#、2#、3#、4# RAM6264 的片选接

74LS138 译码器的输出

Y4

Y5

Y6

Y7

系统硬件电路如下:

每块芯片的地址范围为:

芯片号

1#

2#

3#

起始地址

18000H

1A000H

1C000H

1E000H

结束地址

19FFFH

1BFFFH

1DFFFH

1FFFFH

4#

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

随机存取存储器

RAM 用来存放数据或指令。其特点是:在微机系统的工作过程中,可以随机地对其

中的各个存储单元进行读/写操作,读写方便,使用灵活;缺点是易失性存储器。

( 1)静态 RAM (SRAM )是以双稳态元件作为基本的存储单元来保存信息的,因此,其保存的信息

在不断电的情况下,是不会被破坏的。其特点是速度快、片容量小、功耗大。用于

RAM

容量较小或要求

存取速度较高的系统中。在计算机中常用于超高速缓存。

(2)动态 RAM (DRAM )是靠电容的充、放电原理来存放信息的,必须定时进行刷新。其特点是存

.

.

储元中管子的数目较少( 1 个),有利于集成,速度比 SRAM 慢,片容量大,功耗低,成本比

SRAM 低 。

缺点是每隔一定时间需要刷新一次。适合于构成

RAM

容量较大或要求低功耗的存储器系统。在计算机中

常用于内存。

8. 现有一存储体芯片容量为 512× 4 位,若要用它组成 4KB 的存储器,需要多少这样的芯片?每块芯片需要多

少寻址线?整个存储系统需要多少寻址线?

解:

( 1)组成 4KB 的存储器需要存储体芯片的数量为:

( 8/4)×( 4×1024/512) =16 片

( 2)因为 512=2

9

所以每块芯片需要寻址线数目为:

( 3)因为每块芯片需要寻址线数目为

9 根

9 根,整个存储系统需要 8 组存储体芯片(每组两片)

,用 138

译码器,则至少需要

3 根地址线。因此整个存储系统需要

9+3=12 根地址线。

和译码器

74LS138 构成一个 16K 字 ROM , 16K

8282,数据收发器 8286。画出存储

13. 用 8K ×8 位的 EPROM2764 ,8K × 8 位的 RAM6264

字 RAM 的存储器系统。 8086 工作在最小模式,系统带有地址锁存器

器系统与 CPU 的连接图,写出各芯片的地址分配。

解:

( 1)用 8086CPU 组成 16K 字 ROM ,16K 字 RAM 的存储器系统。

需要 4 片 EPROM2764 , 4 片 RAM6264 。电路原理图如下图所示。

1#、2#2764 的地址范围为: 00000~ 03FFFH

( 1#为偶数地址,

3#、4#2764 的地址范围为: 04000~ 07FFFH

( 3#为偶数地址,

2#为奇数地址),

4#为奇数地址),

1#、2#6264 的地址范围为: 08000~ 0BFFFH

( 5#为偶数地址,

6#为奇数地址),

3#、4#6264 的地址范围为: 0C000 ~0FFFFH

( 7#为偶数地址,

8#为奇数地址) 。

( 2)用 8088CPU 组成 16KB ROM ,16KB RAM 的存储器系统。

需要 2 片 EPROM2764 , 2 片 RAM6264 。电路原理图如下图所示。

1#2764 的地址范围为: 00000~01FFFH

2#2764 的地址范围为: 02000~03FFFH

1#6264 的地址范围为: 04000~05FFFH

2#6264 的地址范围为: 06000~07FFFH

.

.

第 6 章作业P230

2. 什么叫 I/O 端口?一般的接口电路中可以设置哪些端口?计算机对

在 8086/8088CPU 中一般采用那种编制方法?

答:

I/O 端口寻址时可采用哪两种方法?

(1

)端口:在接口电路中,存放数据、状态和控制信息的寄存器及其控制逻辑统称为

(2

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

(3

)计算机对 I/O 端口寻址时可采用 I/O 统一编址(存储器映像寻址)和

(4

)在 8086/8088CPU 中对 I/O 端口寻址采用独立编址方法。

I/O 端口。

I/O 端口独立编址两种方法。

3. CPU 与外设间传送数据主要有哪几种方式?

CPU 与外设之间传输数据的控制方式通常有三种:程序控制方式、中断方式和

DMA 方式。

( 1)程序控制方式: 指用输入 /输出指令来控制信息传输的方式,是一种软件控制方式,根据程序控

制的方法不同,又可以分为无条件传送方式和条件传送方式。

无条件传送方式: CPU 认为接口始终是处于“准备好”状态,能随时接收或发送数据,适用于那些能

随时读写的设备。 特点是接口简单,要求输入有缓冲,输出有锁存。应用的局限性较大,

如开关控制、七段数码管的显示控制等场合。

一般只适用 于诸

条件传送方式: 通过程序查询相应设备的状态,若状态不符合,则

要等待;只有当状态信号符合要求时,

CPU 才能进行相应的输入

CPU 不能进行输入 / 输出操作,需

/输出操作。 特点是接口电路简单, CPU

利用率低(程序循环等待) ,接口需向 CPU 提供查询状态。 适用 于 CPU 不太忙,传送速度要求不高的场合。

要求各种外设不能同时工作,外设处于被动状态。

(2)中断传送方式: 当外设准备好时,由外设通过接口电路向

CPU 发出中断请求信号, CPU 在允许

的情况下,暂停执行当前正在执行的程序,响应外设中断,转入执行相应的中断服务子程序,与外设进行

一次数据传送,数据传送结束后,

CPU 返回继续执行原来被中断的程序。

特点 是 CPU 的利用率高,外设

具有申请 CPU 中断的主动权, CPU 和外设之间处于并行工作状态。

用存储空间,降低速度) , CPU 和外设之间需要中断控制器。

的场合,尤其适合实时控制中的紧急事件处理。

但中断服务需要保护断点和恢复断点 (占

适用于 CPU 的任务较忙、传送速度要求不高

.

.

(3)DMA 方式: 外设利用专用的接口(

DMA

控制器)直接与存储器、外设进行高速数据传送,并

不经过 CPU ( CPU 不参与数据传送工作) ,总线控制权不在

CPU 处,而由 DMA

控制器控制。 特点是接

口电路复杂,硬件开销大。大批量数据传送速度极快。

适用 于存储器与存储器之间、存储器与外设之间的

大批量、高速数据传送的场合。

DMA 传送的基本过程:

外设准备就绪时, 向 DMA 控制器(DMAC )发 DMA 请求, DMAC 接到此信号后, 向 CPU 发 DMA

请求, CPU 的 HOLD 有效

,则发出

HLDA 信号作为响应,同

② CPU 接到 HOLD 请求后,如果条件允许(一个总线操作结束)

时,释放对总线的控制权

③ DMAC 取得总线控制权后, DMAC 成为主设备, DMAC 控制存储器与外设端口之间的数据传送

(往地址总线发送地址信号,每传送1 个字节,就会自动修改地址寄存器的内容,以指向下一个要传送的

字节;每传送一个字节,字节计数器的值减

1,当减到 0 时, DMA 过程结束)

CPU 。

④ 传送结束, DMAC 向 CPU 发结束信号,将总线控制权交回

⑤ DMAC 又回到从设备的状态。

6. 某一个微机系统中,有 8 块 I/O 接口芯片, 每个接口芯片占 8 个端口地址, 若起始地址为 300H,8 块接口芯片

的地址连续分布,用 74LS138 作译码器,试画出端口译码电路,并说明每块芯片的端口地址范围。

( CPU 采用 8088)

解: 8088CPU ,地址连续分布,则 8 片 I/O 接口芯片的地址应为:

300----

307 H 、308----

30FH 、310

----317 H 、318----

31FH 、320----327 H 、328----

32FH 、330----337 H 、

338----33FH 。

A11A

10A

9A

8

A

7A

6A5 A4 A3A2A1A0

1#:

0011

0011

2#:

0011

0011

3#:

0011

0001

4#:

0011

0011

5#:

0011

0011

6#:

0011

0011

7#:

0011

0011

8#:

0011

0011

0000

0000

0000

0000

0001

0001

0001

0001

0010

0010

0010

0010

0011

0011

0011

0011

0000B

0111B

1000B

1111B

0000B

0111B

1000B

1111B

0000B

0111B

1000B

1111B

0000B

0111B

1000B

1111B

300H

307H

308H

30FH

310H

317H

318H

31FH

320H

327H

328H

32FH

330H

337H

338H

33FH

十六进制地址

根据 CPU 外扩 I/O 接口的原理,从

8 片 I/O 接口的地址范围可以看出: A2 ~A

0 为每片 I/O 接口自己的

范围,需要接 CPU 的低位地址线

A

2~ A

0;变化的地址为, 用 74LS138 做译码器, 则译码器输入为 A

5A

4A

3,

A

7A

6=00(经或门后接 74LS138

译码器的 G2A

,本题中把未用的高位地址线或门后接

74LS138 译码器的

74LS138 译码器的 G),

M / IO 接 74LS138 译码器的

G

2B 。1#~7#I/O 接

口的片选接到 74LS138 译码器的输出

Y

0 ~Y

7 上。

电路原理图如下图所示。

G

2 A

),A

9A

8=11(经与门后接

.

.

各芯片地址范围如下:

1#芯片: 300----

307 H

2#芯片: 308----

30FH

3#芯片: 310----

317 H

4#芯片: 318----

31FH

5#芯片: 320----

327 H

6#芯片: 328----

32FH

7#芯片: 330----

337 H

8#芯片: 338----

33FH

注: 8086 系统要指出奇偶口地址(

16 个地址中)

1. CPU 与外设交换数据时,为什么要通过 I/O 接口进行? I/O 接口电路具有哪些主要功能?答:

( 1)由于输入 /输出设备 (外设)比较复杂,性能的离散性比较大,不同的外设,其结构方式、输入

/输出的信号类型、输入 / 输出信息的速率相差很大。而同一个外设与

CPU 之间所要传送的信息类型不同,

方向不同,作用也不一样 。因此, CPU 与外部设备之间的信息交换技术比较复杂。所以需要一个中间处理电路——接口电路来分别协调、处理、传送这些不同的信息。

( 2)I/O 接口电路具有寻址、输入 /输出、数据缓冲、联络、数据转换、中断管理、时序控制、可编程、电器特征匹配、错误检测等主要功能。

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

答:

( 1)总线:总线是一组信号线的集合,是一种在各模块间传送信息的公共通路。

( 2)总线的分类方法:

按相对于 CPU 与其他芯片的位置总线可分为:片内总线和片外总线;

按总线传送信息的类别,可把总线分为:地址总线、数据总线和控制总线;

按照总线传送信息的方向,可把总线分为:单向总线和双向总线;

按总线的层次结构总线可分为:片内总线、片级总线、系统总线和外部总线。

.

.

( 3)在微机系统中,利用总线实现芯片内部、印刷电路板各部件之间、机箱内各插件板之间、主机与外部设备之间或系统与系统之间的连接与通信。总线是构成微型计算机应用系统的重要技术,总线设计好坏会直接影响整个微机系统的性能、可靠性、可扩展性和可升级性。

第7章作业

n=4,它的中断服务子程序的入口地址为

P281

CS:IP=0485 :0016H ,它在中断向量表中如何

6. 如果中断类型号

存放?

解:

中断类型号 n=4 ,中断向量指针 = 中断类型号× 4=n× 4=10H

从内存中断向量指针

00010H 开始的单元开始存放中断向量,

CS 占高 2 个字节, IP 占低 2 个字节。

具体如下:

00010H

16H

00H

85H

04H

00011H

00012H

00013H

11. 8086 中断响应和处理有哪些主要步骤?

答:

(1)CPU 响应中断的条件为:外设提出中断申请,

别最高),当前指令执行完。

CPU 允许中断(本中断位未被屏蔽,本中断位优先级

(2)CPU 在 INTR 引脚上接到一个中断请求信号,如果此时

IF=1,本中断位未被屏蔽,

CPU 就会在当前

指令执行完以后开始响应外部的中断请求,这时,

CPU 在

INTA 引脚连续发两个负脉冲,第一个负脉冲用

来通知外设, CPU 准备响应中断,外设在接到第二个负脉冲以后,在数据线上发送中断类型码,接到这个中断类型码后, CPU 做如下动作:

① 将中断类型码放入暂存器保存;

② 将标志寄存器内容压入堆栈;

③ 将IF和TF标志清 0;

④ 保护断点;

⑤ 根据取到的中断类型码,计算中断向量指针,在中断向量表中找出相应的中断向量,将其装入

和 CS,即自动转向中断服务子程序;

IP

⑥ 中断返回。

第8章

作业

P253

1. 8253 芯片有几个计数通道?每个计数通道可工作于哪几种工作方式?这些操作方式的主要特点是什

么?

答:

(1)8253 芯片有 3 个计数通道。

(2)每个计数通道均可工作于

6 种工作方式。方式 1—可重复触发的单稳态触发器,方式

2—自动重装初

值的 N 分频器,方式

3 — 方波发生器,方式 4—软件触发的选通信号发生器,方式

5—硬件触发的选通信

号发生器。

输出波形: 0、 1 单稳输出, 2、 4、5 为单次负脉冲, 3 为方波。 2、3 为连续波形,其余为不连续波

形; 1、 5 可硬件重复触发。

初始电平: 写入控制字,只有 0 为低电平,其余均为高电平;写入初值,在

数期间),0、 1 为低电平, 2、3、 4、5 均为高电平。

GATE 有效的情况下(计

.

.

触发方式:

0、4 为电平触发, 上升沿继续。 0 是 GATE=0 停止计数, GATE 再次为 1,从中止处继续。 4 是 GATE=0

停止, GATE 再次为 1,从原装初值开始计数。

1、 5 为边沿触发,计数过程中再次出现

GATE 上升沿,计数器按原装初值开始计数。

2、 3 为电平触发,上升沿有效, GATE=0 停止计数,计数过程中再次出现 GATE 上升沿,计数器按原装初值开始计数。

计数过程重新写入初值:

0、 4---- 在 GATE=1 时,立即按新初值开始计数。

1、 5---- 不影响目前的计数,只有在

GATE 再次出现上升沿时,按新初值开始计数。

GATE=1 ,(重装新初值)按新初值开始计数。

2、 3---- 不影响本次输出,本次计数结束后,若

自动重装能力: 2、 3 具有自动重装能力(其余没有)

,可输出连续的波形。

可重复触发能力: 1、5 具有可重复触发能力(其余没有)

2. 8253 的最高工作频率是多少? 8254 与 8253 的主要区别是什么?

解: 8253 的最高工作频率是 2MHz 。8254 是 8253 的增强型产品,引脚兼容,功能几乎完全相同,其主要

区别在于:

(1)8253 的最高工作频率是 2MHz ,而 8254 的最高工作频率是

10MHz ;

(2)8254 具有读回功能,可以同时锁存

1----3 个计数器的计数值及状态值,供

CPU 读取,而 8253

每次只能锁存和读取一个通道的计数器,且不能读取状态值。

4. 设 8253 的通道 0----2 和控制口的地址分别为

要求:

( 1)通道 0 输出 1KHz 的方波;

( 2)通道 1 输出频率为 500Hz 的序列负脉冲;

300H 、302H 、304H 、306H,设系统的时钟脉冲频率为

2MHz 。

(3

)通道 3 输出单脉冲,宽度为 400μs。

试画出硬件电路图,编写各通道的初始化程序。

解: 8253 的口的地址分别为 300H、 302H、 304H、306H,连续的偶地址,说明 CPU 为 8086.

(1

)通道 0

输出 1KHz 的方波,应工作在方式 3。 2MHz/1KHz=2000 ,则可得通道 0 的定时初值为 2000。

(2

)通道 1

输出频率为 500Hz 的序列负脉冲,应工作在方式

=4000

2。 2MHz/500Hz=4000 , 通道 1 的定时初值

(3

)通道 2

输出单脉冲,宽度为 400μs,应工作在方式 0 , 通道 2 的定时初值 =400μs/(1/ 2MHz)-1=799 。

硬件连结图如下图所示。

.

.

8253 的初始化程序:

;通道 0 初始化程序

MOV DX , 306H

MOV AL ,00110111B

OUT DX, AL

MOV DX , 300H

MOV AL, 00H

OUT DX , AL

MOV AL, 20H

OUT DX , AL

;通道 1 初始化程序

;通道 0 控制字,读写两字节,方式

3, BCD 码计数

;写人低字节

;写人高字节

MOV DX , 306H

MOV AL ,01110101B

;通道 1 控制字,读写两字节,方式

OUT DX , AL

;写人方式字

MOV DX , 302H

MOV AL, 00H

;低字节

OUT DX ,AL

;写人低字节

MOV AL, 40H

OUT DX , AL

;写人高字节

;通道 2 初始化程序

MOV DX ,306H

2, BCD 码计数

MOV AL, 10110001B ;通道 2 方式字,读写两字节,方式 0,BCD 码计数 OUT DX ,AL

MOV DX , 304H

MOV AL ,99H

;计数初值字节

OUT DX ,AL

MOV AL, 07H

OUT DX , AL

HLT

5. 设 8254 的端口地址为

;写人低字节

;写人高字节

40----43H ,时钟频率 f=5MHz ,通道 2 接 1 个 LED 指示灯。要求

8254 初始化程序。

LED 指示灯点

亮 4 秒钟后,再熄灭 4 秒钟后。并不断重复该过程。试编写

解:

LED 指示灯点亮 4 秒钟后,再熄灭 4 秒钟后。并不断重复该过程。利用通道

需要产生周期为

8 秒的方波。

将 5MHz 时钟加到 CLK2 端,OUT2 输出的方波脉冲周期最大为

2 输出接 LED 指示灯,

0.2μs× 65536=13107.2μ s=13.1072ms,

达不到 8 秒。此时可以使用 2 个 8254 通道级连方式来实现。

若级连 1、2 通道,设其初值分别为

N1 和 N2,

8s/(1/5MHz) =40000000 ,则级连后作为一个整体的计数值为

通道 1,可选方式 2 或 3,

通道 2,选方式 3,连续波形,实现不断重复。

N=20000000=N1 × N2=5000 × 8000。

N1=5000

N2=8000

;通道 1 初始化程序

MOV AL,

01110101B

OUT 43H, AL

MOV AX, 5000H

OUT 41H, AL

MOV AL, AH

OUT 41H , AL

HLT

;通道 2 初始化程序

;通道 1 方式字,读写两字节,方式

2,BCD 码计数

;写人低字节

;写人高字节

MOV AL ,10110111B

OUT 43H, AL

MOV AX, 8000H

OUT 42H , AL

;通道 2 控制字,读写两字节,方式

3, BCD 码计数

;写人低字节

.

.

MOV AL, AH

OUT 42H , AL

;写人高字节

14. 设 8253 的通道 0----2 和控制口的地址分别为 300H 、 302H、 304H 、306H ,定义通道 0 工作在方式 3,

CLK0=2MHz

,使编写初始化程序,并画出硬件连接图。要求通道

的输出作计数脉冲,输出频率为

解:

0 输出 1.5KHz 的方波,通道 1 用通道 0

300Hz 的序列负脉冲。通道 2 每秒钟向 CPU 发 50 次中断请求。

8253 的口的地址分别为 300H 、302H 、 304H、 306H ,连续的偶地址,说明 CPU 为 8086.

(1)通道 0 输出 1.5KHz 的方波,应工作在方式

1334=536H 。

(2)通道 1 用通道 0 的输出作计数脉冲, 输出频率为 300Hz 的序列负脉冲, 应工作在方式 2, 1.5K Hz /300Hz

3, 2MHz/1.5K Hz=1334 ,则可得通道 0 的定时初值为

=5。通道 1 的定时初值为 5。

(3)通道 2 每秒钟向 CPU 发 50 次中断请求,可工作在方式 (2 或方式 3),以 2MHz 信号作计数脉冲, 2MHz

/50Hz=40000=9C40H 。通道 2 的定时初值 9C40H (也可用通道 1 的输出作计数脉冲)

硬件连结图如下图所示。

8253 的初始化程序:

;通道 0 初始化程序

MOV

MOV

DX , 306H

AL ,00110110B

;通道 0 控制字,读写两字节,方式

3,二进制计数

OUT DX, AL

MOV DX , 300H

MOV AX, 536H

OUT DX , AL

MOV AL, AH

OUT DX , AL

;通道 1 初始化程序

MOV DX , 306H

MOV AL ,01010100B

OUT DX , AL

MOV DX , 302H

;写人低字节

;写人高字节

;通道 1 控制字,只读写低宇节,方式

;写人方式字

2,二进制计数

.

.

MOV

OUT

AL,05H

DX ,AL

;低字节

;写人低字节

;通道 2 初始化程序

DX ,306H

MOV

MOV AL, 10110100B

OUT

DX ,AL

DX , 304H

MOV

MOV AX , 9C40H

OUT

DX ,AL

MOV

AL, AH

OUT

DX, AL

HLT

;通道 2 方式字,读写两字节,方式

2,二进制码计数

;计数初值字节

;写人低字节

;写人高字节

15. 某微机系统中, 8253 的端口地址为 40----43H ,时钟频率为 5MHz ,要求通道 0 输出方波,使计算机每秒钟产生 18.2 次中断;通道 1 每隔 15μs 向 8237 提出一次 DMA1 请求;通道 2 输出频率为 2000Hz 的方波。试编写

8253 的初始化程序,并画出有关的硬件连线图。

解:

8253 的口地址为

40H、 41H 、42H 、 43H 。

(1)通道 0 输出方波,应工作在方式

此,需要两个计数器的级连。若以通道

=2000Hz/18.2Hz-1=110=6EH

(2)通道 1 每隔 15μs 向 8237 提出一次 DMA1 请求,可工作在方式 2(或方式 3),通道 1 的定时初值 =15μs /3,5MHz/18.2Hz=274725.3 > 16 位定时器的最大定时初值

2 的输出作为通道

0 的时钟输入,则可得通道

65536。因

0 的定时初值

( 1/5MHz )=75=4BH 。

( 3)通道 2 输出频率为 2000Hz 的方波,应工作在方式 3,通道 2 的定时初值 =5MHz /2000Hz-1=2500-1=9C4H

硬件连结图如下图所示。

8253 的初始化程序:

;通道 2 初始化程序

MOV

AL ,10110110B

OUT

43H, AL

MOV AX, 9C4H

OUT 42H , AL

MOV

AL, AH

OUT 42H , AL

;通道 0 初始化程序

MOV

OUT

43H, AL

MOV

AL, 6EH

OUT

40H, AL

;通道 1 初始化程序

;通道 2 控制字,读写两字节,方式

3,二进制计数

;写人低字节

;写人高字节

AL , 00010110B

;通道 0 控制字,只读写低宇节,方式

;写人方式字

;低字节

;写人低字节

3,二进制计数

.

.

MOV AL, 01010100B ;通道 1 方式字,只读写低字节,方式 2,二进制码计数 OUT 43H,

AL

MOV AL, 4BH

;低字节

OUT 41H, AL

;写人低字节

HLT

第9章

作业

P231

9. 8255A 的方式选择字和置位复位字都写入什么端口?用什么方式区分它们?答:

8255A 的方式选择字和

为方式选择控制字,

C 口置位复位字都写入控制端口 (写入控制字寄存器中) 。用特征位 D7 区分, D7=1 ,

D7=0 ,为 C 口的按位置位 /复位

84H, 86H ),要求 PC4 输出高电平, PC5 输出低电平, PC6

12. 8255A 的端口地址同第 11 题( 80H, 82H,

输出一个正脉冲,试写出完成这些功能的指令序列。

解:

MOV

OUT

MOV

OUT

MOV

OUT

MOV

OUT

MOV

OUT

MOV

OUT

AL ,10000010B

86H , AL

AL , 00001001B

86H,AL

AL , 00001010B

86H,AL

AL , 00001100B

86H,AL

AL , 00001101B

86H,AL

AL , 00001100B

86H,AL

;设置

8255 的工作方式

HLT

15. 8255A 的口地址为 80H ~ 83H。PA 口接 8 个开关 K7 ~ K0 ,PB 口接 8 个指示灯 LED7 ~ LED0 ,用来显示

开关的状态。当开关合上时相应的指示灯点亮,断开时灯灭。试画出硬件连结电路图(含具体的译码电

路),编写实现这种功能的程序段。

要求每隔 20s 检测一次开关状态, 并随时在发光二极管

20 秒子程序名为 DELAY_20S )

解:

硬件电路如下图所示。

LED7

~LED0 上显示出来。设 CPU 主频为 5MHz ,

.

.

8255A 的 4 个端的地址分别为 80H、81 H 、 82H 和 83 H ,对应于 8255A 的 PA 口、 PB 口、 PC 口和控制字寄存器。

主频率为 5MHz

时钟周期 =主频率的倒数 =1/( 5×10-6) =0.2 μs

延时 20s 需要的时钟周期数

= 20s/ 0.2 s=100000000=Nμ

1× N2

假设 N

1=10000=2710H

[ ((10000-1)× 17+5) +4+3+3+16]

× N

2+2 × 10+2 × 8+20=100000000

N2=588=24CH

程序如下:

MOV AL, 10010000B

;控制字

;写人控制字

;从 A 口读人开关状态

; A 口开关状态取反

OUT 83H, AL

TEST- IT : IN AL, 80H

NOT

AL

OUT 81H , AL

CALL DELAY_20S

;B 口控制 LED ,指示开关状态

JMP TEST_ IT

DELAY_20S: PUSH BX

PUSH CX

MOV

DEL1: MOV

;循环检测

BX ,24CH ;延时 20s,改变 BX 和 CX 中的值,即可改变延时时间。

CX, 2710H ;

DEL2 : LOOP DEL2

NOP

DEC

JNZ

POP

POP

RET

延时子程序的时钟周期数:

((10000-1 )× 17+5)+4+3+3+16]

×588+2 ×10+2 ×8+20 =99968288

延时子程序的延时时间:

99968288× (1/(5 ×106

))=19.9936576s

不加 NOP 指令的计算:

延时子程序的时钟周期数:

(( 10000-1)× 17+5) +4+3+16]

×588+2 ×10+2 ×8+20 =99966524

BX

DEL1

CX

BX

延时子程序的延时时间:

99968288× (1/(5 ×106

))=19.9933048s

P282

21. 某微机系统用 8253 做定时器,其口地址为 40H ~ 43H; 8255A 的 PA 口接 8 个开关 K7 ~ K0 ,PB 口接

20H ~ 21H;每

8 个指示灯 LED7 ~ LED0 ,其口地址为 60H ~ 63H ;用 8259A 做中断控制器,其口地址为

隔 1 秒钟中断一次,读开关状态,并将开关状态显示在

断开时灯灭。要求:

( 1)画出硬件连结电路图

( 2)编写程序。(设 8253 的 CLK 上接 2MHz 的时钟信号)解:

LED 指示灯上。当开关合上时相应的指示灯点亮,

.

.

8253 口地址为

40H~43H ,8255A 口地址为

60H ~63H,

8259A 口地址为

20H~ 21H;从地址连续可

以看出: CPU 是 8088。

A

7A

6A5 A4

A

3A

2A1A0

8259:

0010

0010

8253:

0100

0100

0100

0100

8255:

0110

0110

0110

0110

采用 74LS138 译码器,根据:

0000

0001

0000

0001

0010

0011

0010

0011

0010

0011

十六进制地址

20H

21H

40H

41H

42H

43H

60H

61H

62H

63H

除用于接口芯片的内部端口的寻址的 CPU 低位地址线外, CPU 的高位地址线中, 所有芯片电平相同的地址通过逻辑电路(与、或门)连接到译码器的控制端上,所有芯片电平不同的地址作为译码器的译码输入线,译码器输出连接接口芯片的片选。

G

2A

、A

2

74LS138

则: A

7A

6A

5 用于译码,

A

4A

3A

2=000(A

4A

3 经与或门后接 74LS138

译码器的 G

2 B

),74LS138

译码器的

G

接电源。

8259A

片选接译码器的

Y1

8253

片选接译码器的 Y2

8255A 片选接译码器的

Y3 。

系统硬件电路如下:

译码器的

设 8259 芯片中断类型码为 40~47H 。8253 的 OUT1 接到 8259 的 IR2 上,用于产生中断。

8253 的定时时间为 1s,设 8253 的 CLK 上接 2MHz

216=65536,采用用

时钟信号,则计数初值

N=1/[1/(2 × 10 )]=2× 10

66,

超过了 8253 一个通道的最大计数值

2 个 8253 通道(通道

0 和通道 1)级连方式实现。

N=N0 × N1=2000× 1000。 所以:通道 0 的初值 N0 =2000,通道 1 的初值 N1 =1000。通道 0 工作在方式 2,

通道 1 工作在方式 3。

程序如下:

;设置 8259 的中断向量

MOV

MOV

AX ,SEG IRQ2

DS, AX

MOV

.

DX, OFFSET IRQ2

.

MOV

MOV

INT

;8259 初始化

AL ,42H

AH , 25H

21H

MOV

AL , 13H

OUT

20H,AL

MOV

AL ,40H

OUT

21H, AL

MOV AL , 01H

OUT

21H,AL

MOV AL , 0FDH

OUT 21H , AL

; 8255 初始化

MOV AL , 90H

OUT 63H,AL

;8253 初始化

;通道 0 初始化程序

MOV AL ,00110101B

OUT 43H, AL

MOV AL, 00H

OUT 40H, AL

MOV AL, 20H

OUT 40H, AL

;通道 1 初始化程序

MOV AL ,01110111B

OUT 43H, AL

MOV AL, 00H

OUT 41H, AL

MOV AL, 10H

OUT 41H, AL

;主程序

STI

ZX: NOP

JMP ZX

;中断服务子程序

IRQ2 : PUSH

AX

STI

IN AL, 60H

NOT

AL

OUT 61H ,AL

MOV AL ,20H

OUT 20H, AL

POP

AX

IRET

.

;ICW1 边沿触发,单片 8259,有 ICW4

;ICW2 中断类型号基值为 40H

;ICW4 8088 系统,普通 EOI ,;完全嵌套式

; OCW1 ,设置 IMR ,中断屏蔽

PA 口输入,方式

0;PB 口输出,方式

0

;通道 0 控制字,读写两字节,方式

2,十进制计数

;写人低字节

;写人高字节

;通道 1 控制字,读写两字节,方式

3,十进制计数

;写人低字节

;写人高字节

;从 8255 的 PA 口读人开关状态

;8255 的 PA 口开关状态取反

; 8255 的 PB 口控制 LED ,指示开关状态

;发中断结束普通

EOI 命令

.

19. 8255A 的口地址为 80H ~ 83H,8253 的口地址为 84H~87H 。

(1)若 A 口接 8 个开关 K7 ~K0 , B 口接 8 个指示灯

断开时灯灭。要求每隔

LED7 ~ LED0 ,当开关合上时相应的指示灯点亮,

0.5s 检测一次开关状态,并随时在发光二极管

LED7

~ LED0 上显示出来。试画出

硬件连结电路图,编写实现这种功能的程序。

( 2)若把 A 口接的开关去掉,要求 B 口接的 8 个指示灯轮流熄灭 (轮流点亮为跑马灯) ,每只灯熄灭 1s,编写实

现这种功能的程序。

解:

( 1)

硬件电路如下图所示。

其中:

8255A 的 4 个端的地址分别为: 80H、81 H 、82H 和 83 H ,对应于 8255A 的 A 口、 B 口、 C 口和控制字寄存器。

8253 的 4 个端的地址分别为:

器。

84H、 85 H、 86H 和 87 H ,对应于 8253 的 T0、T1、 T2 和控制字寄存

8259 的 2 个端的地址分别为: 88H、89 H 。设 8259 的中断类型号为

40 ~ 48 H,IRQ2 的中断类型号为

42H。

8253 需要定时 0.5s,通过 T0 ,T1 通道级联实现。 0.5s/(1/ 2MHz)=1000000 ,设 T0 工作于方式 2,初值

为 1000 ;T1 工作于方式 3,初值为 1000(T1 如果工作于方式 0,则在中断服务子程序中需要重新写入初值,实现软件触发) 。

程序如下:

;设置 8259 的中断向量

MOV

MOV

MOV

MOV

MOV

INT

;8259 初始化

MOV AL , 13H

;ICW1 边沿触发,单片

8259,有 ICW4

AX ,SEG IRQ2

DS, AX

DX, OFFSET IRQ2

AL ,42H

AH , 25H

21H

OUT 88H,AL

.

.

MOV

AL ,40H

;ICW2 中断类型号基值为

40H

OUT

89H, AL

MOV AL , 01H

;ICW4 8088 系统,普通

EOI ,;完全嵌套式

OUT 89H,AL

MOV AL , 0FDH

OUT 89H , AL

; OCW1 ,设置 IMR ,中断屏蔽

; 8255 初始化

MOV AL , 90H

;PA 口输入,方式

0;PB 口输出,方式

0

OUT 83H,AL

;8253 初始化

;通道 0 初始化程序

MOV AL ,00110101B

;通道 0 控制字,读写两字节,方式

2,十进制计数

OUT 87H, AL

MOV AL, 00H

OUT 84H, AL

;写人低字节

MOV AL, 10H

OUT 84H, AL

;写人高字节

;通道 1 初始化程序

MOV AL ,01110110B

;通道 1 控制字,读写两字节,方式

3,十进制计数

OUT 87H, AL

MOV AL, 00H

OUT 85H, AL

;写人低字节

MOV AL, 10H

OUT 85H, AL

;写人高字节

;主程序

STI

ZX: HLT

JMP ZX

;中断服务子程序

IRQ2 : PUSH

AX

STI

IN AL, 80H

;从 A 口读人开关状态

NOT

AL

;A 口开关状态取反

OUT 81H ,AL

; B 口控制 LED ,指示开关状态

MOV AL ,20H

OUT 88H, AL

;发中断结束普通

EOI 命令

POP

AX

IRET

(2)

与( 1)类似。但 1s/(1/ 2MHz)=2000000 ,设 T0 工作于方式 2,初值为 2000; T1 工作于方式为 1000 (T1 如果工作于方式 0,则在中断服务子程序中需要重新写入初值,实现软件触发)

程序如下:

;设置 8259 的中断向量

XOR AX ,SEG IRQ2

MOV DS, AX

MOV DX, OFFSET IRQ2

MOV AL ,42H

.

3,初值

.

MOV

INT

;8259 初始化

MOV

OUT

MOV

OUT

AH , 25H

21H

AL , 13H

88H,AL

AL ,40H

89H, AL

;ICW1 边沿触发,单片 8259,有 ICW4

;ICW2 中断类型号基值为 08H

MOV AL , 01H

;ICW4 8088 系统,普通 EOI ,;完全嵌套式

OUT

89H,AL

MOV AL , 0FDH

OUT 89H , AL

; 8255 初始化

MOV AL , 90H

;PA 口输入,方式

0;PB 口输出,方式

0

; OCW1 ,设置 IMR ,中断屏蔽

OUT 83H,AL

; 8253 初始化

;通道 0 初始化程序

MOV AL ,00110101B

OUT 87H, AL

MOV AL, 00H

OUT 84H, AL

MOV AL, 20H

OUT 84H, AL

;通道 1 初始化程序

MOV AL ,01010110B

OUT 87H, AL

MOV AL, 00H

OUT 85H, AL

MOV AL, 10H

OUT 85H, AL

;主程序

MOV AL, 0FEH

;熄灭一个灯,点亮一个灯为:

;写人高字节

;通道 0 控制字,读写两字节,方式

2,十进制计数

;写人低字节

;写人高字节

;通道 1 控制字,读写两字节,方式

3,十进制计数

;写人低字节

;写人高字节

01H

OUT 81H, AL

STI

ZX:

HLT

JMP ZX

;中断服务子程序

IRQ2 : STI

ROL

AL , 1

;熄灭灯左移,

轮流熄灭

OUT 81H ,AL

PUSH AX

MOV AL ,20H

;发中断结束普通

EOI 命令

OUT 88H, AL

POP

IRET

AX

.