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
.


发布评论