选择 & 填空
INTR 根据 8253 来得到中断向量.
题目没有给DX, 问的是偏移地址
保护现场: PSW 保护断点: CS:IP 压栈
联想到C语言的负数输出之前, 需要求补一次.
向偶地址单元写了一个字, 所以都是0.
0~65535, 计数范围是 1~65536
答案是B
NMI2号中断
解题思路: 先通过二进制算出X的值, 然后将X乘2, 结果再写成二进制, 但是是负号, 加上负号后并不是真值, 需要对其求出补码.
解题思路: LEA BX,[DI] 可以理解为 LEA BX, [0100H], 最终BX的内容为 0100H.
答案是D, 8259A的特殊全嵌套方式响应同级中断, 而IF=1响应更高级的中断.
正常 REPE 应该 CX≠0且ZF=1时循环
, 取反CX=0或ZF=0时结束循环
方式0: 软件触发定时 方式1: 硬件触发定时
2的4次方, PA PB PC高 PC低
PF的细节问题
PF 只记录低8位的奇偶. 偶数个1则PF=1.
名词背诵
IF: 中断允许标志 TF: 单步标志 DF: 方向标志
IRR: 中断请求寄存器 ISR: 中断服务寄存器 IMR: 中断屏蔽寄存器
8253的六个方式:
1) 方式0: 计数结束产生中断
2) 方式1: 可重复触发的单稳态触发器
3) 方式2: 频率发生器
4) 方式3: 方波发生器.
5) 方式4: 软件触发的选通方式
6) 方式5: 硬件触发的选通方式.
简答
8088和8086区别
8088: 20根地址线, 8根数据线. 寻址1MB, M/IO 中 M 是低电平, 内部指令队列是4位, 无奇偶体. (准16位机)
8086: 20根地址线, 16根数据线. 寻址1MB, M/IO 中 IO 是低电平, 内部指令队列是6位, 有奇偶体(BHE引脚区分)
软件中断和硬件中断的区别.
软中断:
软件中断, 由CPU内部产生, 除法出错, 单步, 溢出等错误产生
硬件中断:
由外部屏蔽引脚 NMI 和 INTR 产生, 是外部设备向CPU发出的中断请求.
硬件中断需要CPU在引脚上(INTA)做出回应, 但软件中断不需要.
硬件中断需要从外部中断控制器获得中断类型号, 软件中断在指令中隐含或直接给出(不需要中断控制器).
硬件中断的外部中断除了NMI以外的中断请求, 可以被屏蔽, 但内部中断CPU必须响应.
中断执行过程
CPU内部:
INTR 中断的条件:
1. 中断控制器中, 没有屏蔽响应的中断源IRR.
2. CPU内部状态寄存器(FR)中, IF=1, 那么CPU将其响应中断请求
CPU 执行中断的过程:
1. 查询INTR引脚是否为高电平, 若为高电平, 则表示中断来了. CPU回应INTA信号给外设. 在本条指令执行结束后来进入到步骤2.
2. CPU进行保护现场, 保护PSW的标志寄存器, 对其进行压栈操作. 并且保护断点, 将CS:IP压栈操作.
3. CPU向中断控制器中获得中断类型号, 通过中断类型号*4, 来找到对应的终端服务子程序的入口地址.
4. CPU 将 IF置为0, TF置为0, 然后转入到对应的中断服务子程序.
5. CPU 执行中断服务子程序, 在此期间, 若有比本次中断更高级别的中断, 在IF=1的情况下, CPU会去响应, 若没有, 进入到步骤六
6. CPU执行完中断服务子程序后, 进行恢复现场操作, 从堆栈中弹出IP, CS, PSW. 回到之前所执行的指令地址继续执行指令.
CPU外部:
完整的中断过程.
中断请求: 外设向中断控制器中的中断请求寄存器发送中断响应.
中断判优: 中断请求控制器会对同时来的中断进行优先级排列, 默认将优先级高的中断进行处理.
中断响应: 中断请求控制器从中断请求寄存器中取出中断类型号, 通过数据线发送给CPU
中断处理: CPU对PSW状态进行压栈保护, 称为保护现场, 并且将CS:IP压栈保护, 成为保护断点, 然后得到中断类型号后, 将中断类型号 * 4, 去存储器前1KB单元中查找中断向量, 以此来找到对应的中断服务子程序, 但此时还没有进行跳转, CPU将TF置0, IF置0后, CPU进行执行中断服务子程序.
中断返回: 中断服务子程序运行结束后, 将堆栈中的 IP CS PSW 依次弹出, 恢复之前所执行指令的断点.
NMI和INTR的区别
INTR: 可屏蔽引脚信号, 当IF=1时有效. CPU会回应两个INTA引脚信号
第一个INTA告诉外设本CPU允许中断, 并要求外设发送中断类型号. (你给我东西)
第二个INTA告诉外设当前CPU已经完成了中断服务. (我处理完了)
NMI: 不可屏蔽引脚信号, 不受IF的控制, CPU必须响应. 区别是中断类型号固定为2, NMI中断优先级较高.
CPU与外设交换数据的方式
程序控制:
无条件传输: CPU无需知道外设状态, 也不需要状态端口, 命令端口, 直接向外设发送数据.
查询方式: CPU一直查询外设状态, 直到外设状态准备好为止.
中断方式: CPU无需查询外设状态, 当外设需要CPU为它服务时, 外设向CPU发送中断请求, 以此请求CPU为他服务, CPU可以选择屏蔽(不服务).
硬件控制:
DMA: 外部与DMA (8237) 之间并行传送数据, 无需CPU进行数据传送. 速度极快.
8086内部的两部分
BIU: BIU中存在 CS, ES, DS, SS段寄存器以及IP, 地址加法器, I/O逻辑电路, 用于从内存中取出指令, 并将其放入指令队列中, 当EU需要内存中的某一代码段时, 会请求BIU通过地址加法器将CS:IP的值转化为逻辑地址, 从内存中取出.
EU: EU中存在通用寄存器, AX,BX,CX,DX,FR,SI,DI,BP,ALU 从指令队列中取出指令, 并对其译码, 然后使用ALU对其算数或逻辑运算, 暂存指令结果.
中断人话背诵
中断: 在CPU正常执行指令时, 由于某事件发生了, 打断CPU正在执行的指令, 请求CPU转去执行另一段程序, 叫做中断.
中断源: 使CPU引起中断的根源叫做中断源.
CPU响应可屏蔽中断的条件是什么:
1. 外设有可屏蔽中断请求
2. 没有其他优先级高的中断请求 (同时也是STI的功能)
3. 外部中断控制器中断允许触发器置1
4. CPU 内部 IF=1
5. CPU 当前指令执行结束
指示性语句和指令性语句的区别
指令性语句: 能被CPU翻译的指令, 由汇编后形成目标代码. 例如: MOV ADD 等指令
指示性语句: 也称伪指令, 不能被CPU直接执行的指令. 在汇编程序过程中由汇编程序执行, 不会产生目标代码. 例如: SEGMENT ASSUME ENDS 等都是指示性语句.
指令周期, 总线周期, 时钟周期
指令周期: CPU 执行一条指令的时间. 包含若干个总线周期.
总线周期: CPU 与外设或存储器之间信息交换所需要的时间. 包含若干个时钟周期.
时钟周期: 脉冲的重复周期, 是CPU主频的倒数.
如果在存储器读周期时, 存储器的速度较慢, 并发送了延长的READY信号, CPU会在时钟周期T3~T4之前插入Tw状态.
RAM 和 ROM 的关系
RAM (随机存储器): 该存储器数据易丢失
SRAM: 静态存储器, 速度相对于DRAM更快, 适合做Cache, 用来协调CPU与存储器之间的速度匹配问题.
DRAM: 动态存储器, 需要定时刷新, 一次刷新一行数据, 适合做内存.
ROM (只读存储器): 该存储器数据不易丢失
阉割ROM: 在生产中, 由厂家写入数据. 写完数据后数据不可更改.
PROM: 一次性编程可写存储器, 可以写入一次数据, 但写完数据后不可更改.
EPROM: 紫外线可擦除存储器, 可以多次写入数据, 数据擦除使用紫外线照射为FF
EEPROM: 电可擦除存储器, 可以多次写入数据, 数据擦除后为FF
IO接口功能, 两大组成部分
I/O功能:
1) 数据缓冲 (例如: 74LS245)
2) 输入输出 (例如: 74LS245)
3) 地址译码/设备选择功能 (例如: 74LS138)
4) 信息转换 (例如: AD变换器)
5) 中断请求与管理功能 (例如: 8259A)
6) 可编程功能 (8259A)
两大组成部分:
1) I/O端口
数据端口: 数据交换使用
控制端口: 写命令字, 告诉外设方式
状态端口: 读取外设状态
2) 控制逻辑
数据总线缓冲器, 地址译码, 内部控制逻辑, 联络控制逻辑
8259A ICW1~ICW4 OCW1~OCW3
ICW1: 触发方式 是否级联
ICW2: 设置中断类型号基址
ICW3: 主片从片设置
ICW4: 设置结束方式, 缓冲方式, 优先级排列
OCW1: 设置IMR
OCW2: 告诉8259A本次中断结束
OCW3: 特殊屏蔽方式
存储器技术指标
存储器字扩展&位扩展的区别
8086总线请求响应
外部总线主控模块, 向8086的HOLD引脚发出请求信号, 8086在每个时钟周期采样HOLD, 若发现HOLD=1, 那么在当前总线周期执行完毕后, 回应HLDA信号.
随后8086的地址, 数据, 状态总线进入高阻态.
最大模式最小模式
8086微处理器工作模式:
最小工作模式: 在最小工作模式中, CPU直接产生全部总线控制信号, 包括(DT/R, DEN, ALE, M/IO, RD, WR, INTA, HOLD, HLDA)
最大工作模式: 必须配置8288总线控制器, 根据8086提供的状态信号S2,S1,S0可知当前CPU的操作以及状态.
最大工作模式和最小工作模式的选择由CPU的MN/MX引脚的高低电平选择.
串行并行概念, 串行接口并行接口概念
大题
编程题除10取余法
CODE SEGMENT
ASSUME CS: CODE
START:
MOV AX, DATA
MOV DS, AX
XOR AX, AX
MOV CX, 3
SCAN:
MOV AH, 01H
INT 21H
SUB AL, 30H
ADD DL, AL
LOOP SCAN
MOV AH, 0H ; 用除10取余法之前, 千万要清空AH的内容
MOV AL, DL
MOV CL, 10
DIV CL
XCHG AH, AL
CODE ENDS
END START
编程题 32 位相加 (一定要画存储器图)
汇编经典例题
IO
; 从键盘输入一系列字符, 以'$'结束, 编程统计其中数字字符字符个数.
CODE SEGMENT
ASSUME CS: CODE
START:
XOR CX, CX
BEGIN: MOV AH, 01H
INT 21H
CMP AL, '$'
JE EXIT
CMP AL, '0'
JL BEGIN
CMP AL, '9'
JG BEGIN
INC CX
JMP BEGIN
EXIT: MOV AH, 4CH
INT 21H
CODE ENDS
END START
存储器扩展
算地址范围几KB
两个地址不同的情况
两个存储器的地址线需求不同的情况
起始地址的地址线和片内寻址的地址线冲突了
画图方法:
经典例题
8255
循环控制灯亮或灭
大题中断
看见PC246, 题目要求玩中断, IR地方咱不管.