资源描述
资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。
题1.2 参考p.2和p.5
1.9 参考p.13-14
1.11 ( 1) 174.66 D = 10101110.10101000 B
= 0AE.A8 H ( 0AE.A9H / 0AE.A8F5C2H)
( 2) .01011 B = 8EB.58 H
= 2283.34375 D
( 3) F18A6.6 H = 10100110.0110 B
= 989350.375 D
1.12解: 八位机器数原码、 反码、 补码、 移码
+37 00100101 00100101 00100101 10100101
-37 10100101 11011010 11011011 01011011
1.13解: 补码机器数扩充为16位和32位形式
+37 0025 H 00000025 H
-37 FFDB H FFFFFFDB H
1.14 解: 46H作为无符号数 = 70 D
46H作为补码 = +70 D
46H作为BCD码 = 46 D
46H作为ASCII码 = ‘F’
1.19解: 英文字母 D和d的ASCII码为44H和64H;
回车CR为0D H、 换行LF为0A H;
数码0、 空格SP、 空操作NUL的ASCII码分别为30H、 20H、 00H。
题2.5 参考p.32
逻辑地址形式为 段地址: 偏移地址
物理地址 = 段地址*16+段内偏移地址
1MB空间最多能够分成64K个逻辑段, 因为段地址的起始必须是16的倍数, 220/24=216=64K个。
物理地址为: (1) 0FFFF0H( 2) 00417H( 3) 24500H( 4) 0BC777H
2.9 略
2.13解: 运算公式为 [v-(x*y+z-540)]/x
结果商存放在ax中, 余数在dx中。
2.16解: 求有效地址
( 1) EA = 1256H
( 2) EA = 32F7H
2.19解: 求首地址为array的20个字的数组的元素之和, 结果存放于地址为total的字单元中。
---------------------------
题4.1 参见p.14-15
8088具有 20 根地址线。在访问内存时使用地址 A0~A19 , 可直接寻址 1MB 容量的内存范围; 在访问外设时使用地址线 A0~A15 , 共能寻址 64K 个输入输出端口。
实际上PC/XT在寻址外设时, 只使用地址线A9~A0; 若A9=1, 说明它要寻址的IO端口位于IO插卡上。
4.2参见p.106-107
总线操作指的是发生在总线上的某些特定操作, 总线周期指的是完成一次特定总线操作所需的时间。对8088而言其典型的总线周期由 4个T状态组成。PC/XT所采用的时钟频率为4.77MHz, 每个T状态的持续时间为210ns。如果CLK引脚接5MHz的时钟信号, 那么每个T状态的持续时间为200ns。
4.4解答:
当8088进行读写存储器或I/O接口时, 如果存储器或I/O接口无法满足CPU的读写时序( 来不及提供或读取数据时) , 需要CPU插入等待状态TW。( 在T3前沿检测Ready信号, 若无效则插入TW 。)
具体在读写总线周期的T3和T4之间插入TW。
4.6参见p.99, p.110
8088的某些输出线有三种状态: 高电平、 低电平、 悬空(高阻态), 称为三态能力。在高阻状态, CPU放弃其了对该引脚的控制权, 由连接它的设备接管。
具有三态能力的引脚有: AD7~AD0, A15~A8, A19/S6~A16/S3, ALE, IO/M*, WR*, RD*, DEN*, DT/R*。
4.11
总线周期
IO/M*
WR*
RD*
存储器读
低
高
低
存储器写
低
低
高
I/O读
高
高
低
I/O写
高
低
高
IO/M*
WR*
RD*
WR*
RD*
MEMR*
IOW*
4.12 答:
取该指令时引发存储器读总线操作。执行该指令时引发I/O读总线操作。( 时序图略)
4.13 8088系统最小组态下, 对指令ADD [ H], AX ( 长度3B) 。
答: 取该指令时需要3个总线周期, 均为存储器读周期。
执行该指令时需要4个总线周期, 2个为存储器读总线周期( 读出字操作数参与运算) , 2个为存储器写总线周期( 保存16位运算结果) 。
4.15 参见p.106图
74LS373 的G为电平锁存引脚, 控制选通且转为无效时锁存数据。
OE* 输出允许引脚, 信号来自ALE。
4.16 参见p.106图
数据收发器74LS245 是8位双向缓冲器, G*控制端为低电平有效, 可传输数据; DIR控制导通方向: DIR=1, A→B; DIR=0, A←B。
4.17 参见p.111-112
归纳为: 1、 8086数据总线变为16位, 数据地址线复用为AD15~AD0。
2、 8086指令队列程度变为6字节长, 当有2个字节空才取下一指令。
3、 8088引脚IO/M* , 8086变为M/IO*;
4、 引脚SS0* 变为BHE*/S7, BHE* 的作用是使D15~D8有效。
5、 8086存储器组织为奇偶分块, 偶地址取字只要读1次, 奇地址取字需要读两次。
6、 I/O端口大都采用偶地址, 目的是引导8位数据到低8位总线AD7~AD0上, 以提高效率。
=========================
5.1
Cache、 主存和辅存的作用——参见 p.120~121
虚拟存储器——参见p.121
在CPU看来, 访问主存和访问辅存有什么不同?
访问主存: 经过存储器访问机器指令, 按字随机访问。
访问辅存: 经过操作系统, 按块顺序访问。
5.2 在半导体存储器中, RAM指的是 随机存取存储器 , 它可读可写, 但断电后信息一般会 丢失 ; 而ROM指的是 只读存储器 , 正常工作时只能从中 读取 信息, 但断电后信息 不会丢失 。以EPROM芯片2764为例, 其存储容量为8K×8位, 共有 8 条数据线和 13 条地址线。用它组成64KB的ROM存储区共需 8 片2764芯片。
5.4 一个容量为4K×4位的假想RAM存储芯片, 她应该有多少根地址线引脚和多少根数据线引脚? 如果让你来进行设计, 那么它还需要哪些控制引脚? 这些引脚分别起什么样的控制作用?
解答:
4K×4的芯片应该有12根地址线引脚和4根数据线引脚。
控制引脚应该有:
读取信号OE*: 有效时, 表示读取存储单元的数据
写入信号WE*: 有效时, 表示将数据写入存储单元
片选信号CS*: 有效时, 表示选中该芯片, 能够进行读写操作。
5.7 什么是存储芯片的位扩充和地址扩充?采用静态RAM的芯片2114( 1K*4位) 或动态RAM的芯片4116( 16K*1位) 来组成32KB的RAM存储区, 请问各需要多少芯片? 在位方向和地址方向各需要进行什么样的扩充?
解答: ( 参见p.140) 使用多个芯片来扩充存储数据位的宽度, 称为位扩充。
采用多个芯片在地址方向上进行扩充, 称为地址扩充或字扩充。
用SRAM 2114组成32KBRAM存储区: 2片为一组, 得1KB, 因此组成32KB就要32组, 共需要64片SRAM 2114。
用DRAM 4116组成32KBRAM存储区: 8片为一组, 得16KB, 因此组成32KB只要2组, 共需要16片DRAM 4116。
2114
( 1)
A9~A0
I/O4~I/O1
片选1
D3~D0
D7~D4
A9~A0
2114
( 2)
A9~A0
I/O4~I/O1
CE
CE
2114
( 1)
A9~A0
I/O4~I/O1
片选32
D3~D0
D7~D4
A9~A0
2114
( 2)
A9~A0
I/O4~I/O1
CE
CE
5.8 存储芯片为什么要设置片选信号? 它与系统地址总线有哪些连接方式? 采用何种连接方式可避免地址重复? 采用哪些连接方式可节省用于译码的硬件?
解答:
片选信号说明该存储器芯片是否被选中正常工作, 设置它能够比较方便地实现多个存储器芯片组成大容量的存储空间。
存储器片选信号一般与CPU地址总线的高位地址线相关联, 能够采用”全译码”、 ”部分译码”、 ”线选译码”方式。
采用全译码方式能够避免地址重复。
采用部分或线选译码能够节省译码硬件。
5.9 在一个针对存储器的译码系统中, 如果有4个地址线未参与译码, 那么每个存储单元会同时拥有几个地址?
解答: 理论上每个存储单元会同时拥有16个地址。
5.10 解答: p.144图5.33中4个存储芯片的可用地址范围:
6264(1)
6264(2)
2732(1)
2732(2)
00000 ~ 01FFFH
0 ~ 03FFFH
04000 ~ 04FFFH
05000 ~ 05FFFH
40000 ~ 41FFFH
4 ~ 43FFFH
44000 ~ 44FFFH
45000 ~ 45FFFH
80000 ~ 81FFFH
8 ~ 83FFFH
84000 ~ 84FFFH
85000 ~ 85FFFH
C0000~C1FFFH
C ~C3FFFH
C4000 ~C4FFFH
C5000 ~C5FFFH
重复地址由于A19A18的不定性, 每片各有4段范围。
5.11采用全译码方式和6264芯片( SRAM, 容量8K×8位) , 在内存40000H~43FFFH区段扩充RAM, 请画出这些芯片与最大组态的系统总线的连接示意图。
解:
方法为: 容量=末地址-首地址+1=214=16KB, 因此要2片6264芯片。
A12~A0为片内地址, A15~A13作片选译码的输入CBA,
A19~ A16
A15~ A13
A12~A0
地址范围
1
2
0100
0100
000
001
全0~全1
全0~全1
40000H~41FFFH
4 H~43FFFH
A12~A0
138
A18
A15
A14
A13
C
B
A
E3
E2
E1
Y0
A19
A17
A16
D7~D0
(1)
6264
CS1
WE
OE
MEMW
MEMR
(2)
6264
CS1
WE
OE
Y3
Y2
Y1
+5V
CS2
CS2
5.13 采用3:8译码器74LS138和2764芯片( EPROM, 8K×8位) , 经过全译码方式在8088系统的地址最高端组成32KB的ROM区, 请画出各2764芯片与8088最大组态下形成的线条总线的连接示意图。
解答:
注意地址最高端组成32KB的ROM区, 意味着地址范围是 F8000H~FFFFFH, 这样最高五根地址线A19~A15上要全为1。2764芯片的片内地址是13根即A12~A0, 它们是全0到全1变化; 现在需要4片来构成32KB存储区, 采用3:8译码器的话, A15~A13应该取后4种情况, 即取100~111分别产生Y4~Y7。其余地址线能够以多种方式组合产生控制信号。
A19~ A16
A15~ A13
A12~A0
地址范围
1
2
3
4
1111
1111
1111
1111
100
101
110
111
全0~全1
全0~全1
全0~全1
全0~全1
F8000H~F9FFFH
FA000H~FBFFFH
FC000H~FDFFFH
FE000H~FFFFFH
A12~A0
(1)
2764
(2)
2764
CE
CE
A15
A14
A13
A16
C
B
A
E3
138
A17
Y7
E2
E1
A12~A0
(3)
2764
(4)
2764
CE
CE
Y6
Y5
Y4
A19
A18
D7~D0
考虑: 如果要求地址从低端开始的话, 高5位全0, 即00000H~07FFFH, 如何连接?
5.16
访问的局部性原则
——P122 第1行。
高速缓存和虚拟存储的目的
——p121下部。
=======================
6.1 在80x86系统中, I/O端口的地址采用 独立 编码方式, 访问端口时要使用专门的 I/O 指令, 有 2 种寻址方式, 其具体形式是: 直接寻址和DX间接寻址 。
6.2 一般的I/O接口电路安排有哪三类寄存器? 她们各自的作用是什么?
解答: ( 参见p.154)
⑴ 数据寄存器
保存外设给CPU和CPU发往外设的数据。
⑵ 状态寄存器
保存外设或接口电路的状态。
⑶ 控制寄存器
保存CPU给外设或接口电路的命令。
K7
K1
K0
+5V
D0~D7
A0~A15
CLK
LS06
反相
驱动器
LS273
8D
锁存器
LS244
三态
缓冲器
8000H
译码
+5V
LED0
LED7
…
…
G
IOW
IOR
6.4
解:
K0单独按下: 输入0FEH, 控制L0 —〉L7 依次循环亮灯,
K1单独按下: 输入0FDH, 控制L7 —〉L0 反向依次循环亮灯,
程序流程略。
BEG: MOV DX, 8000H
LOP0: IN AL, DX
MOV BL, AL
MOV CX, 8 ; 循环次数
CMP AL, 0FEH ; 测试是否K0单独按下
JZ LOP1
CMP AL, 0FDH ; 测试是否K1单独按下
JZ LOP2
JMP LOP0
;
LOP1: ROL BL, 1 ; 利用AL初值作为开始位置
MOV AL, BL
NOT AL ; 因为有反相器LS06
OUT DX, AL
CALL DELAY
LOOP LOP1
JMP LOP0
;
LOP2: ROR BL, 1 ; 利用AL初值作为开始位置
MOV AL, BL
NOT AL ; 因为有反相器LS06
OUT DX, AL
CALL DELAY
LOOP LOP2
JMP LOP0
6.5 数据口地址为FFE0H, 状态口地址为FFE2H, 当状态标志D0=1时输入数据就绪, 编写查询方式进行数据传送程序, 读入100个字节, 写到 H: H开始的内存中。
解: ( 程序格式参见p.63~64 )
.CODE
MOV AX, H
MOV DS, AX ; 段地址
MOV BX, AX ; 偏移地址
MOV CX, 100
NEXT: MOV DX, 0FFE2H
STATUS: IN AL, DX ; 读入状态
TEST AL, 01H
JZ STATUS
DEC DX
DEC DX ; 数据口地址
IN AL, DX
MOV [BX], AL
INC BX
LOOP NEXT
MOV AX, 4C00H ; 结束
INT 21H
6.6 某字符输出设备, 其数据端口和状态端口的地址均为80H。在读取状态时, 当标志位D7为0时表明该设备闲, 能够接收一个字符。请编写采用查询方式进行数据传送的程序段, 要求将存放于符号地址ADDR处的一串字符( 以$为结束标志) 输出给该设备, 注意在程序中加上注释。
解: 参考答案一:
mov bx, offset addr
again: mov ah, [bx] ; 取一个字节的字符码
cmp ah, ’$’
jz done
status: in al, 80h ; 查询一次
test al, 80h
jnz status
mov al, ah
out 80h, al ; 输出一个字节
inc bx
jmp again ; 循环
done: ……
参考答案二:
.DATA
addr DB ‘xx……xx$’
.CODE
MOV AX, @DATA
MOV DS, AX
LEA BX, addr
Status: IN AL, 80H ; 读入状态, if D7=1, 为负数
CMP AL, 0 ; 或 ROL AL, 1
JS Status ; JC STATUS
MOV AL, [BX]
CMP AL, ‘$’
JZ endof
OUT 80H, AL
INC BX
JMP Status
Endof: MOV AX, 4C00H
INT 21H
6.7 以可屏蔽中断为例, 说明一次完整的中断过程主要包括那些环节?
8088响应可屏蔽中断请求时需要先满足那些前提条件?
答: 中断过程的主要环节: ( 参见p.165 )
中断请求、 中断响应、 关中断、 断点保护、 中断源识别、 现场保护、 中断服务、 恢复现场、 开中断、 中断返回。
8088响应可屏蔽中断请求时需要先满足:
中断允许——IF=1。
当前指令执行完毕。
6.8什么是中断源? 为什么要设立中断优先权? 什么是中断嵌套? 何种情况下程序可能发生中断嵌套?
答:
中断源: 计算机系统中引起中断的事件或原因。
当多个中断源同时请求时, CPU需要利用中断优先权决定首先响应哪一个; 当一个中断正在服务时, 又发生了新的中断请求, CPU需要利用中断优先权确定后者是否优先权更高, 以便实现中断嵌套。
中断嵌套: 当一个中断服务时CPU又响应新的中断请求就形成中断嵌套。
CPU允许中断( 开中断) 、 新的中断请求比正在服务的中断优先权更高, 一般发生中断嵌套。
A0~A15
锁
存
器
INTR
三态
缓冲器
译码
8001H
D0~D7
中断0
中断1
中断2
…
…
IOR
6.9参见P.167流程
MOV DX, 8001H
STATUS: IN AL, DX
TEST AL, 01H
JZ NEXT1 ; D0未置1则转测下一位
CALL PROC0
JMP STATUS
NEXT1: TEST AL, 02H
JZ NEXT2
CALL PROC1
JMP STATUS
NEXT2: TEST AL, 04H
JZ NEXT3
CALL PROC2
JMP STATUS
NEXT3: TEST AL, 08H
JZ STATUS
CALL PROC3
JMP STATUS
6.10 DMA的意思是 直接存储器存取 , 主要用于高速外设和内存间的数据传送。进行DMA传送的一般过程是: 外设先向DMA控制器提出 DMA传送请求 , DMA控制器经过 HOLD 信号有效向CPU提出总线请求, CPU回以 HLDA 信号有效表示响应。此时CPU的三态信号线将输出 高阻 状态, 即将它们交由 DMAC( DMA控制器) 进行控制, 完成外设和内存间的直接数据传送。
==================
7.7 假如某并行总线的数据宽度为32位, 工作频率为100MHz, 若2个时钟周期传送一次数据, 其传输速率是多少? 如果在时钟的前后沿各传送一次数据, 其传输速率是多少? 如果采用2-1-1-1的突发传送模式, 其平均传输速率是多少?
解答:
f =100MHz , 则时钟周期T=1/f =10 ns
1) 2T一次的传输速率, 即频率减半: fd = (32/8) * 100/2 M = 200 MB/s
或 fd = (32/8) / (2*10 ns) = 200 MB/s
2) 前后沿各传送一次, 即频率加倍: fd = (32/8) * 200 M = 800 MB/s
或即1T2次: fd = (32/8) / (10/2 ns) = 800 MB/s
3) 采用2-1-1-1的突发传送模式, 平均为5T4次:
fd = (32/8) /(5*10 ns /4) = 320 MB/s
8.1 8088CPU具有哪些中断类型? 各种中断如何产生, 如何得到中断向量号? 参见p.191、 p.192~193
8.2 8088中断向量表的作用是什么? ( 参见p.194)
答: 它是中断向量号到对应的中断服务程序入口地址的链接表。
经过中断向量号n, 能够读取中断向量表的物理地址为 n*4 开始的单元, 获取中断服务程序的入口地址( 即中断向量) , 长度4个字节。
8.3 说明程序段的功能: (程序略, 见p.212 上)
答: 此段程序将中断服务程序intproc的入口地址写入中断向量表的80h*4开始的单元中。
( stows 是数据串传送指令, 参见p.78。)
( 实际上能够使用指令序列:
mov ax, seg intproc
mov ds, ax
mov dx, offset intproc
mov ax, 2580h
int 21h 来完成相同功能)
8.4 8259A中IRR、 IMR和ISR三个寄存器的作用是什么?
答: ( 参见p.196~197 )
• 中断请求寄存器IRR
– 保存8条外界中断请求信号IR0~IR7的请求状态
– Di位为1表示IRi引脚有中断请求; 为0表示无请求
• 中断服务寄存器ISR
– 保存正在被8259A服务着的中断状态
– Di位为1表示IRi中断正在服务中; 为0表示没有被服务
• 中断屏蔽寄存器IMR
– 保存对中断请求信号IR的屏蔽状态
– Di位为1表示IRi中断被屏蔽( 禁止) ; 为0表示允许
8.5 PC/XT对8259A的初始化程序如下:
mov al,13h ; 0001 0011
out 20h,al ; ICW1
mov al,08h ; 00001000
out 21h,al ; ICW2
mov al,09h ; 00001001
out 21h,al ; ICW4
请说明其设定的工作方式?
解答:
从第一个写指令ICW1, 看出是边沿触发、 单片方式, 有ICW4; 第二个写指令ICW2为中断向量08h; 第三个写指令ICW4中断方式字, 表示普通全嵌套、 数据线缓冲方式, 从片、 非自动中断结束、 16位微处理器。
8.6 某时刻8259A的IRR内容是08h, 说明只有引脚IR3上有中断请求。 某时刻8259A的ISR内容为08h, 说明只有IR3上的请求正在被CPU服务。 在两片8259A级联的中断电路中, 主片的第5级IR5接从片的中断请求输入, 则初始化主、 从片时ICW3的控制字分别是20H和05H。
( 分别是0010 0000 和0000 0101 )
8.7 8259A仅占用两个I/O端口地址, 它是如何区别4条ICW命令和3条OCW命令的?
解:
首先 ICW1、 OCW2和OCW3占用的I/O端口为低位地址, 即A 0 为 0, 其余的初始化命令字和控制命令字的A0 都为 1, 因此把ICW1、 OCW2和OCW3与别的初始化命令字和控制命令字区别开来; 而ICW1的D4 = 1, OCW2的D4 D3 = 00, OCW3的D4 D3 = 01因此能够区分开ICW1、 OCW2和OCW3; 又知道ICW1是初始化时写入的第一个命令字, 紧接着写入的应该是ICW2、 ICW3, 又ICW1的最低位指定了初始化时是否写入ICW4, 因此这些初始化命令字就能够区分开来了。
当初始化完成后工作期间, 3个操作命令字是这样区分的: OCW1占用的I/O端口为高位地址, OCW2和OCW3占用的为低位地址, 因此OCW2和OCW3能够和OCW1区分开; 而 OCW2和OCW3的D3 位不同, 因此二者又被区分开。
8.8 题略p.212。
解: 根据题意: SFNM=0, AEOI=0, LTIM=0, ICW1=00010011, ICW2=90H, ICW4=0000x101, 初始化8086 所接的8259A中断控制器:
MOV DX, 0FFDCH ; 对应20H端口
MOV AL, 13H
OUT DX, AL
MOV DX, 0FFDEH ; 对应21H端口
MOV AL, 90H
OUT DX, AL
MOV AL, 05H
OUT DX, AL
8.10 8259A的中断请求有哪两种触发方式, 它们分别对请求信号有什么要求? PC系列机中采用哪种方式?
答: 上跳沿触发, 要求克服噪音尖峰。
高电平触发, 请求及时撤销请求信号。
PC系列机采用上升沿方式。
8.11 解答:
0bh = 00001011 b, 写OCW3, 接下来要读的是ISR, 中断服务寄存器。
8.12解答:
0bch = 10111100 b, 21H写OCW1即IMR, 结果是只允许IR0、 IR1、 IR6中断, 其它中断被屏蔽。
8.14 中断服务程序的人口处为什么一般要使用开中断指令?
答:
因为8088在进入中断服务程序前的中断响应期内会自动关中断( 令IF=0) , 因此对于不十分重要的中断源, 其中断服务程序的人口处要开中断, 以便能够实现中断嵌套。
--------------------------
题9.3 8253每个通道有 6 种工作方式可供选择。若设定某通道为方式0后, 其输出引脚为 低 电平; 当 写入计数初值( 并进入减1计数器) 后通道开始计数, CLK 信号端每来一个脉冲 减1计数器 就减1; 当 计数器减为0 , 则输出引脚输出 高 电平, 表示计数结束。8253的CLK0接1.5MHz的时钟, 欲使OUT0产生频率为300KHz的方波信号, 则8253的计数值应为 5( =1.5MHz÷300KHz) , 应选用的工作方式是 3 。
9.4 按要求编写8253初始化程序, 对应计数器0~2和控制字的I/O端口地址为204H~207H。
( 1) 使计数器1工作在方式0, 仅用8位二进制计数, 初值为128。
( 2) 使计数器0工作在方式1, 按BCD码计数, 计数值为3000。
( 3) 使计数器2工作在方式2, 计数值为02F0H。
解:
(1) MOV AL, 01010000B ; 即50H
MOV DX, 207H
OUT DX, AL
MOV AL, 128 ; 或80H
MOV DX, 205H
OUT DX, AL
(2)
MOV AL, 00100011B ; 即23H, 或用33H初值3000H
MOV DX, 207H
OUT DX, AL
MOV AL, 30H ; 仅送高8位
MOV DX, 204H
OUT DX, AL
( 3)
MOV AL, 10110100B ; 即0B4H
MOV DX, 207H
OUT DX, AL
MOV DX, 206H
MOV AX, 02F0H
OUT DX, AL
MOV AL, AH
OUT DX, AL
9.5 设8253计数器0~2和控制字的I/O地址依次为F8H~FBH, 说明如下程序的作用。
mov al, 33 ; 0011 0011
out 0fbh, al
mov al, 80h
out 0f8h, al
mov al, 50h
out 0f8h, al
解: 计数器0工作在方式1, BCD码计数, 计数值5080D。
9.7 解:
例题9.2中CLK0实际输入101个下降沿后产生中断, 还能用工作方式1、 4、 5。如果利用外部信号启动计数, 则GATE0应从 +5v → 0v → +5v。
若采用计数器0方式1的控制字为: 00 01 001 0 B= 12H 。
( 初始化程序类似p.226 例9.2。)
MOV AL, 12H ; 计数器0方式1
MOV DX, 203H
OUT DX, AL
MOV DX, 200H
MOV AL, 100
OUT DX, AL
题9.8解: 先计算计数器0的初值, N=输入f /输出f’ =5MHz /1KHz=5000
计数器0的方式控制字: 00 10 010 1 N= 5000 用BCD计数
计数器1的方式控制字: 01 11 100 0 N=1000=3E8H
计数器0初始化程序:
OUT1
OUT0
CLK0
CLK1
8253
5MHz
IRQ4
MOV DX, 0FFF3H
MOV AL, 25H
OUT DX, AL
MOV AL, 50H
MOV DX, 0FFF0H
OUT DX, AL
( 或方式控制字0011 0100, 初值5000)
mov dx, 0fff3h
mov al, 34h
out dx, al
mov dx, 0fff0h
mov ax, 5000
out dx, al
mov al, ah ; 先低后高
out dx, al
计数器1初始化程序:
MOV DX, 0FFF3H
MOV AL, 78H
OUT DX, AL
MOV AX, 3E8H
MOV DX, 0FFF1H
OUT DX, AL
MOV AL, AH ; 先低后高
OUT DX, AL
( 或方式控制字01 10 100 1, 初值1000D, 只送高字节)
mov al, 69h
mov dx, 0fff3h
out dx, al
mov dx, 0fff1h
mov al, 10h
out dx, al
补充: ( 此处题目不需要进行8259A的初始化)
IRQ4的中断向量为0CH, 若需要设置8259A的初始化如下:
MOV AL, 13H ; ICW1
OUT 20H, AL
MOV AL, 08H ; ICW2
OUT 21H, AL
MOV AL, 07H ; ICW4
OUT 21H, AL
对应中断屏蔽字为11101111, 中断屏蔽位设置程序:
IN AL, 21H ; 读出IMR
AND AL, 0EFH ; 设置允许IRQ4 , 其它位不影响
OUT 21H, AL ; 再写入IMR 即OCW1
9.9 扬声器控制发音程序: 子程序speaker、 speakon、 speakoff参见p.223
解: 参考答案一、
.DATA
P1 DW 1193180/524
P2 DW 1193180/588
P3 DW 1193180/660
P4 DW 1193180/698
P5 DW 1193180/784
P6 DW 1193180/880
P7 DW 1193180/998
P8 DW 1193180/1048
.CODE
MOV AX, @DATA
MOV DS, AX
keyin: MOV AH, 1
INT 21H ; 等待按键
CMP AL, 1BH ; 是否ESC
JZ EXIT
CMP AL, 31H
JZ PP1
CMP AL, 32H
JZ PP2
CMP AL, 33H
JZ PP3
CMP AL, 34H
JZ PP4
CMP AL, 35H
JZ PP5
CMP AL, 36H
JZ PP6
CMP AL, 37H
JZ PP7
CMP AL, 38H
JZ PP8
CALL speakoff
JMP keyin
EXIT: MOV AX, 4C00H
INT 21H
PP1: MOV AX, P1
CALL speaker
CALL speakon
JMP keyin
; ……程序段PP2~PP7 略
PP8: MOV AX, P8
CALL speaker
CALL speakon
JMP keyin
参考答案二、
.DATA
addr DW 2277, 2029, 1808, 1709
DW 1522, 1356, 1196, 1139
.CODE
MOV AX, @DATA
MOV DS, AX
keyin: MOV AH, 1
展开阅读全文