1.9 参考p.13-14
1.11 (1)174.66 D = 10101110.10101000 B = 0AE.A8 H (0AE.A9H / 0AE.A8F5C2H) (2)100011101011.01011 B = 8EB.58 H = 2283.34375 D (3)F18A6.6 H = 11110001100010100110.0110 B = 989350.375 D
1.12解:八位机器数原码、反码、 补码、 移码 +37 00100101 00100101 00100101 10100101 25H 25H 25H 0A5H -37 10100101 11011010 11011011 01011011 0A5H 0DAH 0DBH 5BH
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.8 已知DS=2000H,BX=0100H,SI=0002H,存储单元[20100H]~[20103H]依次存放12H、34H、56H、78H,[21200H]~[21203H]依次存放2AH、4CH、B7H、65H,说明下列指令执行完后AX寄存器的内容以及源操作数的寻址方式。
(1)mov ax, 1200h 答:ax=1200h 立即寻址方式 (2)mov ax, bx
答:ax=0100h
寄存器寻址方式
(3)mov ax, [1200h] 答:ax=[21200h]=4C2AH 直接寻址方式 (4)mov ax, [bx]
答:ax=[20100h]=3412H
寄存器间接寻址方式
(5)mov ax, [bx+1100h] (6)mov ax, [bx+si]
答:ax=[21200h]=4C2AH 相对寻址方式
基址变址寻址方式
答:ax=[20102h]=7856H
(7)mov ax, [bx][si+1100h]
答:ax=[21202h]=65B7H
相对基址变址寻址方式
2.9 指出下列指令的错误原因: mov cx, dl ;源操作数长度与目的操作数不一致 mov ip, ax ;ip指令指针不能人为改变,由转移指令或子程 序调用来改变 mov es, 1234h ;立即数不能直接送段寄存器 mov es, ds ;段寄存器之间不能直接传递 mov al, 300 ;源操作数长度超过al寄存器 mov [sp], ax ;间接寻址可使用bx或bp,堆栈操作应使用专用 指令, mov ax, bx+di ;源操作数格式错,应该是 [bx+di] mov 20h, ah ;目的操作数不可以是立即数
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写(输出操作) WR* 1 RD* 0 IO/M* 0 1 高 高 高 低 低 高 MEMR*
WR* 0 RD* 1 IOW*
4.12 答:
取该指令时引发存储器读总线操作。执行该指令时引发I/O读总线操作。(时序图略)
4.13 8088系统最小组态下,对指令ADD [2000H],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。
A9~A0 片选1 CE A9~A0 A9~A0 2114 片选32 CE A9~A0 2114 A9~A0 I/O()1 I/OCE 4~22114 (11)I/O4~I/O D7~D4 D3~D0 D7~D4 A9~A0 I/O()1 I/OCE 4~22114 (11)I/O4~I/O D3~D0
5.8 存储芯片为什么要设置片选信号?它与系统地址总线有哪些连接方式?采用何种连接方式可避免地址重复?采用哪些连接方式可节省用于译码的硬件? 解答:
片选信号说明该存储器芯片是否被选中正常工作,设置它可以比较方便地实现多个存储器芯片组成大容量的存储空间。
存储器片选信号通常与CPU地址总线的高位地址线相关联,可以采用―全译码‖、―部分译码‖、―线选译码‖方式。
采用全译码方式可以避免地址重复。 采用部分或线选译码可以节省译码硬件。
5.9 在一个针对存储器的译码系统中,如果有4个地址线未参与译码,那
么每个存储单元会同时拥有几个地址?
解答: 理论上每个存储单元会同时拥有16个地址。
5.10 解答:p.144图5.33中4个存储芯片的可用地址范围: 6264(1) 6264(2) 2732(1) 2732(2) 00000 ~ 01FFFH 02000 ~ 03FFFH 04000 ~ 04FFFH 05000 ~ 05FFFH 40000 ~ 41FFFH 42000 ~ 43FFFH 44000 ~ 44FFFH 45000 ~ 45FFFH 80000 ~ 81FFFH 82000 ~ 83FFFH 84000 ~ 84FFFH 85000 ~ 85FFFH C0000~C1FFFH C2000~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 0100 0100 000 001 A12~A0 全0~全1 全0~全1 地址范围 40000H~41FFFH 42000H~43FFFH 1 2 A19 A17 A16 A18 E3 Y0 E2 Y1 E1 Y2 Y3 A15 C A14 B 138 A13 A CS1 CS2 6264 (1) +5V CS2 CS1 6264 (2) WE OE D7~D0 A12~A0 MEMW MEMR WE OE
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。其余地址线可以以多种方式组合产生控制信号。 1 2 A19~ A16 1111 1111 A15~ A13 100 101 A12~A0 全0~全1 全0~全1 地址范围 F8000H~F9FFFH FA000H~FBFFFH 3 4 A19 A18 A17 A16 A15 A14 A13 1111 1111 110 111 全0~全1 全0~全1 FC000H~FDFFFH FE000H~FFFFFH E3 E2 E1 C B A 138 Y7 Y6 Y5 Y4 D7~D0 CE* 2764 (1) CE* OE* 2764 (3) CE* OE* 2764 (2) CE* OE* 2764 (4) OE* A12~A0 MEMR*
考虑:如果要求地址从低端开始的话,高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给外设或接口电路的命令。 6.4
A0~A15 译码 8000H IOR IOW G LS244 三态 缓冲器 … LED0 LS06 反相 驱动器 LED7 K0 K1 K7 +5V CLK D0~D7 LS273 8D 锁存器 +5V
解: 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 MOV AL, 0 OUT DX, AL JMP LOP0 ; ;利用状态值0FEH作为开始位置,指向L0 LOP1: MOV AL,BL NOT AL ;因为有反相器LS06 OUT DX,AL CALL DELAY ROL BL,1 ;准备下个灯亮位置 LOOP LOP1 JMP LOP0 ; LOP2: MOV BL,80H ;首次亮L7, LPO3:MOV AL,BL ;为1的灯亮,因为有反相器LS06 OUT DX,AL CALL DELAY ROR BL,1 ;准备下个灯亮位置 LOOP LOP3 JMP LOP0
6.5 数据口地址为FFE0H,状态口地址为FFE2H,当状态标志D0=1时输入数据就绪,编写查询方式进行数据传送程序,读入100个字节,写到2000H:2000H开始的内存中。 解: (程序格式参见p.63~64 ) .CODE MOV AX, 2000H 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允许中断(开中断)、新的中断请求比正在服务的中断优先权更高,通常发生中断嵌套。
6.9参见P.171
读入中断状态 INTR 中断0
三态 D0~D7 缓冲器 … 锁 存 器 … 中断1 中断2
IOR 8001H A0~A15 译码 设备0中断? N 设备1中断? N 设备2中断? N 设备3中断? N … 中断返回 Y 调用PROC0 Y Y 调用PROC1 调用PROC2 Y 调用PROC3
STI PUSH DX PUSH AX MOV DX,8001H STATUS:IN AL,DX TEST AL,01H JZ NEXT1 CALL PROC0 JMP DONES NEXT1: TEST AL,02H JZ NEXT2 CALL PROC1 JMP DONES NEXT2: TEST AL,04H JZ NEXT3 CALL PROC2 JMP DONES NEXT3: TEST AL,08H JZ DONES CALL PROC3 DONES: POP AX POP DX IRET
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
或即1T2次:fd = (32/8) / (10/2 ns) = 800 MB/s
fd = (32/8) * 100*4/5 M = 320 MB/s
2) 前后沿各传送一次,即频率加倍:fd = (32/8) * 100*2 M = 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 解: 初始化时写的是ICW命令,A0=0为ICW1,A0=1时按照顺序决定是写哪个初始化命令字。
当8259处于工作状态时,写的是OCW,由地址A0和D4D3特征位共同决定是写哪个操作命令字(A0=1时,写OCW1;A0=0且D4D3=00时,写OCW2,D4D3=01,写OCW3)。 在A0=1时读出的是IMR寄存器的内容。
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 设8255计数器0~2和控制字的I/O地址依次为F8H~FBH,说明如下程序的作用。
mov al, 33h out 0fbh, al mov al, 80h out 0f8h, al mov al, 50h out 0f8h, al
;0011 0011
解:计数器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初始化程序:
MOV DX,0FFF3H
OUT1 IRQ4 MOV AL,25H;
OUT DX,AL
CLK1 MOV AL,50H MOV DX,0FFF0H
1KHz OUT DX,AL OUT0 (或方式控制字0011 0100,初值5000)
CLK0 5MHz mov dx,0fff3h
mov al,34h
8253 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 ;01 11 100 0 OUT DX,AL MOV AX,3E8H MOV DX,0FFF1H OUT DX,AL
MOV AL,AH ;先低后高 OUT DX,AL
(或方式控制字01 10 100 1,初值1000D,用BCD计算只送高字节) 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 addr DW 2277,2029,1808,1709 DW 1522,1356,1196,1139 .CODE MOV AX, @DATA MOV DS, AX keyin: MOV AH,1 INT 21H ;等待按键 CMP AL,1BH ;是否ESC JZ exit CMP AL,31H JL stop ;< ’1’ CMP AL,38H JG stop ;> ’8’ AND AL,0FH ;截取数1~8 DEC AL ;成为0~7 SHL AL ;因为DW,*2 LEA BX,addr ;数据表起始地址 MOV AH,0 ADD BX,AX MOV AX,[BX] CALL speaker CALL speakon JMP keyin stop: CALL speakoff JMP keyin exit: MOV AX,4C00H INT 21H
9.10计数器的定时长度和精度受脉冲输入信号频率和计数值影响。对于频率为f的脉冲输入,计数器输出的最小定时时间为 2/f ;此时计数初值应为 1 。16位计数器输出的最大定时时间是 65537/f ;当需要加大定时时间时,或者利用硬件方法进行多个计数器的级联;或者用软件辅助方法,使计数单元扩大计数值。
====================
10.2 什么是8237的单字节传送方式和数据块传送方式,两者的根本区别是什么?数据块传送方式和请求传送方式对DREQ信号有效有什么要求?
答:单字节传送方式:以DMA方式每传送完一个字节,8237使HRQ(总线请求)信号无效,将系统总线交还CPU,若所有数据未传完,则DREQ(外设的DMA传送请求)保持有效,所以,8237立刻向CPU申请总线,使HRQ再次有效,若CPU应答了这次请求(HLDA有效),8237就传送下一个字节,这个过程重复到所有数据传送完毕。 块传送:一旦传送开始,8237就不放弃总线,直到所有数据传送完毕。 二者的区别:前者在每传送一个字节后,CPU都有一次获得总线的机会,以感知其他事件。后者不行,但速度较快。 数据块传送对DREQ信号有效的要求是:传送期间始终保持。 请求传送对DREQ信号有效的要求是:可以随时失效来暂停传送。
10.4 8237有几种对其DMA通道屏蔽位操作的方法?
答:p238。三个:单通道屏蔽字、主屏蔽字、清屏蔽寄存器命令。
10.5 PC机为什么设置DMA传送的页面寄存器?
答:因为PC机的内存空间大于8237的地址控制范围(64K),要在高于64K的空间进行DMA传送就必须用辅助器件产生高位(A16以上)地址,这个辅助器件就是页面寄存器。
10.6 设置PC机8237通道2传送1KB数据,请给出其字节数寄存器编程。 解: MOV AX,1023 ;N-1 OUT 05H,AL MOV AL,AH OUT 05H,AL
10.8 PC机8237A通道2传送的内存起始地址为C8020H,请给出地址寄
存器编程。 解: MOV AL,20H OUT 04H,AL MOV AL,80H
OUT 04H,AL MOV AL,0CH OUT 81H,AL ;参见p.239表
10.9 XT机执行了下面两条指令后,会产生什么作用? mov al, 47h ;01 0 0 01 11 out 0bh, al 解: 从端口地址0BH可知,这是方式寄存器;这两条指令执行后对通道3进行了方式设置,具体为:以单字节模式、地址递增、禁止自动初始化、在通道3上进行DMA写。
10.10 题略,参见p.242;寄存器地址参见p.234表10-2 解: MOV DX, 0CH ;指向 高/地触发器 MOV AL, 0 OUT DX, AL ;清除高/地触发器 MOV DX, 09H ;指向 请求寄存器 OUT DX, AL ; MOV AX, 01 OR AX, SI MOV DX, 0BH ;指向 方式寄存器 OUT DX, AL ;设置工作方式 MOV AX, ES ;取段地址 MOV CL, 04 ROL AX, CL ;左移4位 MOV CH, AL ;暂存高位地址 AND AL, 0F0H ;屏蔽掉高位,取有效的低位 ADD AX, BX ;加上偏移地址 JNC NET1 ;有进位则 INC CH ;高位加1 NET1: MOV DX, 02 ;指向通道1的地址寄存器 OUT DX, AL MOV AL, AH OUT DX, AL MOV AL, CH
AND AL, 0FH MOV DX, 83H ;指向 通道1的页面寄存器 OUT DX, AL MOV AX, DI ;N DEC AX ;N-1 MOV DX, 03 ;指向 通道1的字节数寄存器 OUT DX, AL ;写入计数值低8位 MOV AL, AH OUT DX, AL ;写入计数值高8位 MOV DX, 0AH ;指向 单通道屏蔽字 MOV AL,1 OUT DX, AL MOV DX,8 ;指向 命令寄存器 MOV AL,60H ;01100000 OUT DX, AL MOV DX,08H ;指向 状态寄存器 NET2:IN AL,DX ;读入状态字 AND AL,02H ;判通道1传送结束否,D1=1? JZ NET2 ;没有结束继续读入状态 答: 若主机通过通道1发送数据,相当于进行DMA读,若采用请求模式,此时SI可以为09h;若采用单字节模式,SI为49h。 若主机通过它接收数据,相当于进行DMA写,若采用请求模式,此时SI可以为05h;若采用单字节模式,SI为45h。
=================
题11.2 8255两组都定义为方式1输入,则方式控制字是什么?方式控制字中的另外两位确定什么功能? 解: 方式控制字为1 01 1 X 1 1 Y,其中X、Y可取0或1,因为这两位分别确定C端口的上部和下部的工作方式;本题中X位决定PC6和PC7的输入输出功能,Y位已无意义。
11.3 总结8255A端口C的使用特点。 答: 1、8位并行输入输出。 2、高4位、低4位可分别输入输出。 3、按规定与端口A和端口B配合,完成相应的握手信号。
11.4 设定8255A的端口A为方式1输入,端口B为方式1输出,则读取口C的数据的各位是什么含义? 解答: 读取口C的数据各位的含义是:
PC7~6为输入信息或输出锁存信息(根据端口C上部的输入/出定义);
PC5~3为端口A的输入缓冲器满否、内部触发器状态、有否中断请求信息。 PC2~0为端口B的内部触发器状态、输出缓冲器满否、有否中断请求信息。 (参见下图)
D7
OBFA D6
INTEAO D5
IBFA D4
INTEAI D3
INTRA D2
INTEB D1
IOBFB D0
INTRB I/O I/O IBFA INTEAI INTRA INTEB OBFB INTRB 输入缓冲器满 外设送入数据时的锁存信号STBA(PC4脚的输入)使其有效, CPU读走数据时(RD的上升沿)使其失效。 口A中断请求输出(PC4)允许 口A中断请求输出脚(PC3)状态 口B中断请求输出(PC2)允许 口B中断请求输出脚(PC0)状态 输出缓冲器满 CPU写入数据时(WR=0)使其有效, 外设取走数据时应答信号ACKb(PC2脚的输入)使其失效
11.5 对8255A的控制寄存器写入B0H,则其端口C的PC5引脚是什么作用的信号线?
解: B0H = 10110000 B,可知8255A端口A工作于方式1输入,所以PC5引脚的作用是IBFA,为1表示输入缓冲器满。
11.6 11.2.2节用8255A端口A方式0与打印机连接,如果采用端口B,其他不变,请说明应该如何修改接口电路和程序。(参见p.253) 解: 连接图中只要把端口A改成端口B即可。程序中控制方式字可作必要的修改,“mov al,10000001B”可以修改为“mov al,1×××0001B”,只要保持C端口上部输出、下部输入即可,因为PC7、PC2的连接没有变;端口A任意、端口B为方式0输出,程序涉及端口A的地方改为端口B的地址:“mov dx,0fff8h”必须修改数据口地址“mov dx,0fffAh”。
11.7 11.2.3节用8255A端口A方式1与打印机连接,如果采用端口B,其他不变,请说明应该如何修改接口电路和程序。(参见p.254) 解提示: 连接图中除了把端口A改成端口B,还要用PC0、PC1、PC2分别取代PC3、PC7、PC6。程序中也要作相应的替换。控制方式字要改为端口B选通输出,即“mov al,0a0h”可以为mov al,84H,端口A任意、端口B为方式1输出;设置PC6的地方改为设置PC2:“mov al,0ch”改为04h;测试PC7的地方改为测试PC1:“test al, 80H”改为02h;程序涉及端口A的地方改为端口B的地址:“mov dx,0fff8h”必须修改数据口地址“mov dx,0fffAh”。
11.8 题略,参见p.275图11-22。
解: 端口C低端输入、高端输出,由于反相器的存在,输出1时灯亮。 假设端口C和控制端口地址为 0FFFCH和0FFFEH, ;8255A初始化程序 MOV AL,81H MOV DX,0FFFEH OUT DX,AL ; MOV DX,0FFFCH IN AL,DX ;开关闭合时,输入0 MOV CL,4 ROL AL,CL ;低4位移至高4位
NOT AL ;取反,变0为1 OUT DX,AL
11.9 设8255A的端口B以方式1连接某输入设备,其中断请求信号引入
中断控制器的IRQ3。要使CPU响应外设的中断请求,初始化时应开放3级中断,请编程说明。
提示:本题包含8255A和8259A的初始化,中断服务程序中读取端口B的输入。8255A 控制字:1xxxx11x
部分解:
;8255A的初始化 MOV AL,86H MOV DX,0FFFEH OUT DX,AL
; 8259A的初始化:(IRQ3的中断向量为0BH,对应的ICW2为08H) 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,0F7H ;设置允许IRQ 3,其它位不影响 OUT 21H,AL ;再写入IMR 即OCW1
11.12 提示:书上已有程序段,只需将端口号218H~21BH对应到行列port,再将程序连接完整,注意在最初,colport 是PA为输入,rowport是PB为输出,得到列值;反转设置为PA为输出, PB为输入,然后得到行值;最后组合在AX中。
11.16 题略,参见p.275 mov dx, 0fffbh ;初始化8255A mov al, 89h ;1000 1001b out dx, al ;显示子程序
disp proc push ax push bx push dx mov bx, offset LEDtb DJ: mov cl, 0ffh ;cl记录开关位置0~7,此处为初值-1 mov dx, 0fffah ;PC为输入开关口 in al, dx DJ1: inc cl ;逐位判是否按开关,每次只按一个 shr al ;al高位补0 jc DJ1 cmp cl, 08 ;cl=8表示没有按开关, jz XEDN ;此时al=0 ,结束 mov al, cl xlat cs:LEDtb ;得到显示代码 mov dx, 0fff8h ;PA为段控制端口 out dx, al ;送出段码 mov ah,0feh ;指向最左边数码管 mov dx, 0fff9h ; Pb为位控制端口 LED1: mov al, ah ;取出位显示代码 out dx, al ;送出位码 call delay ;实现数码管延时显示 rol ah,1 ;指向下一个数码管 cmp ah,0feh ;最右边的数码管? jnz LED1 ;下一个位显示数字 jmp DJ XEDN:pop dx pop bx pop ax ret
LEDtb db 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h, 7fh disp endp
------------------------------------------------------------------------------
12.1 题省略,p.292 解:
串行异步通信发送01010101,起止式,奇校验,两个停止位
启动
1 0 1 0 1 0 1 0
校验 停止
N=1200bps/12 =100 字符ps
12.3 题省略,见p.292 。 解提示: 参见P283第一段,1、16倍频接收。2、连续8个有效接收才认可。 参见P283下部,采用多及缓冲器是为了防止(减少)溢出错误。
12.5 欲使通信字符为8个数据位、偶校验、2个停止位,则应向8250 通信线路控制 寄存器写入控制字00 011 1 11 ,其在PC机上的I/O地址(COM2)是 2FBH 。
12.7 题略,参见p.293
解: 程序头部读入COM1的IIR内容,判断高5位是否有内容,有则是FIFO条件转移;不是则将COM1的地址保存至RS232-BASE字单元中;程序后半读入COM2的IIR内容,判断高5位是否有内容,有则是FIFO条件转移;不是则将COM2的地址保存至相应字单元中。 若没有发生条件转移,RS232-BASE字单元中存放的是3F8H。
12.8 设定某次串行异步通信的数据为8位、无校验、1个停止位,传输速率为4800bps,采用中断工作方式。按此要求写出PC系列机中对第2个串行通信口的初始化程序。 解:初始化程序包括4个部分,先计算分频值N=1.8432M/(4800*16)=24, ⑴ 写入除数寄存器,设置传输率 ⑵ 写入通信线路控制寄存器,设置字符格式 ⑶ 写入调制解调器控制寄存器,设置工作方式 ⑷ 写入中断允许寄存器,设置中断允许或屏蔽位 ; MOV AL, 80H MOV DX, 2FBH OUT DX, AL ;写入通信线路控制寄存器,使DLAB=1
MOV AX, 24 ;分频系数 MOV DX, 2F8H OUT DX, AL ;写入除数寄存器低8位 MOV AL, AH INC DX OUT DX, AL ;写入除数寄存器高8位 ; MOV AL, 03H ;00 000 0 11B MOV DX, 2FBH
OUT DX, AL ;写入通信线路控制寄存器 ; MOV AL,0BH ;控制为OUT2*低,允许INTRPT产生请求 MOV DX, 2FCH OUT DX,AL ; MOV AL, 0FH ;开放中断 MOV DX, 2F9H OUT DX, AL ;写入中断允许寄存器
----------------------------------------------------------------
13.3题省略p.308,参见p.301 图13-9 a)2及锁存电路 解: mov dx, prot1 mov al, bl out dx, al mov dx, port2
+5V mov al, bh ALE DB PA out dx, al IN0 mov dx, port3 OE EOC PC0 out dx, al A B STARPC7 C
ADC 0809 8255A 13.7题省略p.308
解: 设8255A的端口地址为0FFF8H~0FFFBH,
端口A输入、PC0输入、PC7输出,所以方式字为1001 0001=91H。 Buff DB 10 DUP(0) Count EQU 10 MOV DX, 0FFFBH ;控制口 MOV AL, 91H OUT DX, AL ;初始化8255A MOV AL, 0000 1111B ;PC7置1 OUT DX, AL ;启动ADC MOV BX,OFFSET BUFF MOV CX,COUNT
REP: MOV DX, 0FFFAH ;查询等待8255-C IN AL, DX ;读入PC0 TEST AL, 01H JZ REP MOV DX, 0FFF8H ;输入 IN AL, DX ;读PA MOV [BX], AL INC BX LOOP REP . exit
13.4 假定8位ADC输入电压范围是-5V~+5V,求出如下输入电压Vin的数字量编码(偏移码):⑴1.5V,⑵2V,⑶3.75V,⑷-2.5V,⑸-4.75V 解: 采用公式 N=(Vin -(-5))/(5-(-5))*28 = (Vin+5)/10*256 ⑴ N =(1.5+5)/10*256 = 166.4 ≈ 0A6H ⑵ N =(2+5)/10*256 = 179.2 ≈ 0B3H ⑶ N =(3.75+5)/10*256 = 224 = 0E0H ⑷ N =(-2.5+5)/10*256 = 64 = 40H ⑸ N =(-4.75+5)/10*256 = 6.4 ≈ 06H
13.6 题略,参见P.308
解: 程序包括:8255初始化,产生启动脉冲,读入转换数据,输出处理结果。
The End
;8255初始化:A方式1输入,B方式0输出 10110000 MOV DX,0FFFBH ;查询状态,读入转换数据 MOV AL,0B0H OUT DX,AL
;产生启动脉冲在PC7 MOV AL,0EH OUT DX,AL MOV AL,0FH OUT DX,AL CALL delay200 MOV AL,0EH OUT DX,AL
DEC DX AND AL,10H JZ DUZT MOV DX,0FFF8H IN AL,DX CALL
ADPRCS
DUZT: IN AL,DX
;输出处理结果
MOV DX,0FFF9H OUT DX,AL
因篇幅问题不能全部显示,请点此查看更多更全内容