# 微机复习
## 第五、六章
### 系统的三大总线
- 定义: 总线(Bus)是计算机各种功能部件之间传送信息的公共通信干线,是由导线组成的传输线束。
- - 数据总线DB
- 用于传送数据信息。可以是CPU把数据传送到存储器或I/O接口等部件,也可以其它部件的数据传送到CPU。
- - 地址总线AB
- 专门用来传送地址,只能从CPU传向外部存储器或者IO端口
- - 控制总线CB
- 传送控制信号和时序信号。可以是微处理器送往存储器活IO接口电路的。也可以是其他部件反馈给CPU的
- 总线宽度 一次可以同时传输的数据位数
- 总线工作频率 每秒能传输数据次数
- 传输率 每秒传输字节数
### 存储器扩展的基本方法与译码方法
- - 字和位扩展
- 总片数=总容量/容量(片)
- - 位扩展
- 值在位数方向扩展,地址线并联,数据线连接到CPU数据总线的各位。
- - 字扩展
- 仅扩展存储容量,位数不变,同名地址线,数据线,读写线并联。
## 第七章
### 端口的定义,种类,编址方式
- 定义: 端口是接口电路种,能与CPU交换信息的寄存器
- - 分类
- 数据口 存放CPU向外设输出或外设输入的数据
- 控制口 存放控制信息---控制接口电路、外设的工作
- 状态口 存放状态信息---反映外设的状态
- - 编址方式
- - IO端口独立编址
- IO端口不占用存储空间,CPU要有专用的IO指令
- - 存储器映像方式
- 把端口和存储单元等同看待,统一编址
- 凡访问存储单元的指令都可以访问IO端口,端口地址但用存储空间
### 对端口的寻址方法
- - 直接寻址
- IN AL,N;端口N取数->AL
- OUT N,AL;AL内容到端口N
- - DX间址
- IN AL,DX;[DX]端口--->AL
- OUT DX,AL;AL---->[DX]端口
### 微机系统与接口的数据交换方式
- - 无条件传送
- MOV DX,xxH
- IN/OUT AL/DX,DX/AL
- - 查询方式
- MOV DX,状态口
- IN AL,DX
- TEST AL,80H/1 JZ/JNZ(read/write) 之后同1
- - 中断向量表
- 实模式下 中断向量表
- 保护模式下 中断描述符表
- - 中断向量表的存放: 第n个中断向量的服务程序入口的偏移地址存放在4n-4n+3上
- - 设置方法
- - 用户自己编写程序填写中断向量表
- ```asm=
CLI;LET SYSCALL CAN'T DO WORK
PUSH DS;SAVE
MOV AX,0000H
MOV DS,AX;BASE ADDR
MOV BX,4*N;BX IS OFFSET
MOV AX,OFFSET SERVICE;FUNC SERVICE
MOV [BX],AX;PUSH FUNC ADDR
MOV AX,SEG SERVICE
MOV [BX+2],AX;THE TABLE LIKE DWORD OFFSET DWORD BASE ADDR,SO PUSH THE FUNC BASE ADDR
POP DS;RET
STI
```
- DOS提供了两个子程序,用于中断向量的读出写入
- - INT 21H的35H子功能,AL=中断类型码 ES:BX=n型中断向量,独出n型中断向量
- INT 21H的25H子功能,DS=中断服务的代码段基址,DX=中断服务的偏移地址,AL=中断类型码
- - - ```asm=
CLI
PUSH DS
PUSHA
MOV AX,SEG SERVICE
MOV DS,AX
MOV DX,OFFSET SERVICE
MOV AH,25H
MO AL,N
INT 21H
POPA
POP DS
STI
```
- - IRET 弹出IR CS F
- DMA方式
## 8259(中断控制器)
### 定义
中断是指CPU在执行程序的过程中,由于某种外部或内部事件的作用,使CPU停止当前正在执行的程序而转去为该事件服务,待此事件服务结束后,又能自动返回到被中止了的程序中继续执行的过程。
### 中断方式
- - 中断方式
- - 外部中断源 IO设别 数据通道 时钟 故障源
- 内部中断源 执行INT CPU指令异常
### 分类
- 外部 硬件
- 内部 软件
类型码跟向量看上面
### 相应过程&&条件
1.F寄存器到栈内保存
2.断的地址(cs跟ip)入栈
3.根据对应的中断号取出地址
4.执行完毕,中断发挥指令(IRET---->POP IP POP CS POP F)
条件
中断优先级 禁止中断 屏蔽中断 中断嵌套
### 8259处理
- 中断屏蔽寄存器 屏蔽字某位=1则对应中断被屏蔽
- 中断请求 对应位=1发起中断
- 优先权电路 比较优先级,比较cpu正在执行的跟刚进入的哪个优先级高
- 中断服务寄存器 记录cpu蒸菜服务的中断源 对应位=1为这波/正在执行
- - 过程
- 由中断请求寄存器加到引脚IR0-IR7
- 在屏蔽寄存器下,未被屏蔽的中断请求送入优先权电路判断
- 判断后,选中当前最高级别的中断源从INT向CPU发出信号
- 满足条件后,向8259发出两个中断响应信号
- 第一个响应信号后,把对应位flag置1,把请求寄存器=0
- 第二个响应信号后,把选中的类型码n送往cpu
- CPU取出中断向量,完成中断服务
### 日时钟中断
40H:6CH~40H:6FH这4个单元(共32位)为日时钟计数器,每55ms加1次,计数到:001800B0H,为24小时,其计数值供系统软件使用。
系统启动CPU执行BIOS种一段程序,读取CMOS实时时钟电路的时间值-->计数值-->40:6CH~40:6FH作为日时钟计数器的计数初值
- 定时周期==55ms整数倍时候,替换1CH 结束前不需要向8259发结束命令
- !=55ms整数倍时候,取输出周期与55ms的最大公约数,替换08H,结束前需要向8259发结束命令(MOV AL.20H OUT 20H,AL)
### 用户中断
- 替换0AH,结束前只需向主8259发结束
- 替换71H,结束前需向主从8259各发结束
- - 步骤‘
- 保存原来的
- 替换为设计的
- 打开用户中断(从8259开1,主开2的屏蔽置零
- 结束前发送结束命令
- 恢复成原来的
### 软件中断 VS 硬件中断
- - 相同
- 都会引起程序中止
- 获取中断码n后,都回取出中断源的中断向量IP CS,从而去执行
- - 不同
- 引发方式不同
- 获取中断类型码的方式不同
- CPU响应条件不同
- 中断处理程序的结束方式不同
## 8250
### 串行通信的数据传输方式和特点
数据倍逐位顺序传送
- 串行异步通信 指一帧字符用起始位和停止位来完成收发同步
- 串行同步通信 靠同步字符来完成收发双方同步
- - 传输方式
- 单工 数据向一个固定方向传送
- 半双工 都有收发能力,但就一条信道
- 全双工 收发双方可以同时进行数据传输
#### 通信系统需要考虑的
- 信道的贷款和数据的传输速率
- 信号的调制与解调
- 串行通信的信号格式
### RS232C&&TTL
| 25针连接器端子号 | 名称 | 方向(从微机出发) | 功能 |
| ---------------- | ---- | ---------------- | ------------------------------- |
| 2 | TXD | 输出(DTE→DCE) | 发送数据(Transmit Data) |
| 3 | RXD | 输入(DCE→DTE) | 接收数据(Receive Data) |
| 4 | RTS | 输出(DTE→DCE) | 请求发送(Request To Send) |
| 5 | CTS | 输入(DCE→DTE) | 允许发送(Clear To Send) |
| 6 | DSR | 输入(DCE→DTE) | 数据设备准备好(Data Set Ready) |
| 7 | | | 信号地(SignalGround) |
| 8 | DCD | 输入(DCE→DTE) | 载波检测(Carrier DeteCt) |
| 20 | DTR | 输出(DTE→DCE) | 数据终端准备好(Data Term Ready) |
| 22 | RI | 输入(DCE→DTE) | 振铃指示(Ring Indicator) |
RS232C对信号的电平标准和控制信号的定义做了规定
逻辑1 电平在-3~-15v
逻辑0 电平在3~15v
TTL 逻辑1 +5v
逻辑0 0v
### 串行通信数据帧格式
| 起始位 | 数据位 | 奇偶校验位 | 停止位 |
| -------- | ------ | ---------- | -------------- |
| 1位逻辑0 | 5-8位 | 0-1位 | 1 1.5 2位逻辑1 |
### 数据传输速率
每秒传送的0 1 的个数
### 查询接收与查询发送
先拿3FD/2FDH的标记位,查询是否已经接收完毕/是否空着,之后再进行相应操作
#### 寄存器
```CMD
3F8H/2F8H 写入
3F8H/2F8H 读出
3F8H/2F8H 除数
3F9H/2F9H 中断允许
3FDH/2FDH 通信线状态
3FAH/2FAH 中断识别
3FEH/2FEH MODEM状态
3FBH/2FBH 通信线控制
其中3FD
D0位:接收数据准备好(接收缓冲器满)标志位
D1位:溢出错标志位。
D2位:奇偶错标志位。
D3位:帧错(接收格式错)标志位。
D4位:线路间断标志位。
D5位:发送保持寄存器空闲标志位。D5=1
D6位:发送移位寄存器空闲标志位。D6=1时候,一帧已经发送完毕
D7位:恒为0
3FA
D0=1,允许接收到一帧数据后,内部提出“接收中断请求”。
D1=1,允许发送保持寄存器空时,内部提出“发送中断请求”
D2=1,允许接收出错时,内部提出“接收数据错中断请求”。
D3=1,允许MODEM状态改变时,内部提出“MODEM中断请求”
3FC
D0位=1,使引脚DTR=0,从而使RS-232C引脚DTR为0,表示数据终端准备好
D1位=1,使引脚RTS=0,从而使RS-232C引脚RTS为0,表示8250请求发送
D2位=1,使引脚OUT1=0,系统机上没有使用。
D3位=1,使引脚OUT2=0,8250能送出中断请求。
D4位通常置0,设置8250工作在正常收/发方式;
若D4位置1,则8250工作在内部自环方式
3FBH/2FBH
D0D1 数据位选择
D2 停止位
D3-D5 校验位
D6 中止位 1 输出长时间 0 正常通信
D7 1 除数 0 访问何用端口
```
## 8255
### 数据口&&工作方式
- - 数据口
- 端口A 三种工作方式 0 1 2,对外8根引脚PA7~PA0 地址60H
- 端口B 两种工作方式 0 1,对外8根引脚PB7~PB0 地址61H
- 端口C 一中工作方式 0 ,对外PC0~PC7,分成上下两个部分 地址62H,控制口地址63H
- - 工作方式
- 方式0 基本型输入/输出 直接用IN 跟OUT 对各端口进行读写 适用无条件传送的场合,不需要应答式联络信号
- 方式1 选通型输入/输出 进行数据传送时候必须通过联络信号进行协调。在方式1的时候考研用查询方式也可以用中断方式与CPU进行数据交换
- 方式2 双向传输 通过8个位与外设进行双向通信,可用中断方式,也可以用查询方式与CPU联络
#### 方式控制字
| D6-D5 | D4 | D3 | D2 | D1 | D0 |
| ----------- | ------------ | --------------- | ----------- | ------------ | --------------- |
| A的方式选择 | A口输入/输出 | C口7-4输入/输出 | B口方式选择 | B口输入/输出 | C口3-0输入/输出 |
#### 初始化流程
- 方式选择控制字--->控制口,目的选择某一口的工作方式(若端口选择1或者2,需要第二步
- C口置零/置1控制字写入控制口(D3-D1是选择pcn,D0是写入的数据,实现某一口的中断的禁止/允许(1允许
| | A口方式1入 | A口方式1出 | B口方式1入 | B口方式1出 | A口双向 |
| ----- | ---------- | ---------- | ---------- | ---------- | ------- |
| INTEA | PC4 | PC6 | | | |
| INTEB | | | PC2 | PC2 | |
| INTE1 | | | | | PC6 |
| INTE2 | | | | | PC4 |
## 8254
### 计数器
8254内部集成了3个16位计数器,每个计数器有6种工作方式
### 初值的计算方法,设置方法
计数初值**=** fclk / fout
fclk:CLK端输入的初始频率
fout:OUT端输出的生成频率
### 工作方式
- - 方式0:计数结束OUT引脚输出正跃变信号
- 写入后经过N次CLK后OUT 0--->1
- - 方式1:(可重触发的)硬件启动的单脉冲发生器
- WR写入后,GATE经过0--->1时候,OUT 1--->0,经过N次CLK后,OUT 0 ---> 1,但当GATE再次0--->1后,这个N会重置(在下一次CLK开始时候,但第一次的计数是从OUT变化时候的就开始计数成N了)
- - 方式2:分频器(脉冲发生器)
- 周期,到0下个CLK自动重装,到1的时候是负脉冲,其余是正
- - 方式3:方波发生器
- 减2计数,初值自动重装,且OUT翻转
- 偶数是减到0的时候重装,输出1:1
- 奇数重装时候值为写入的初值-1,正脉冲是到-2重装,负脉冲是到0重装
- - 方式4:软件启动,单脉冲发生器
- 无初值重装,减1,减到0输出,不需要GATE变换
- - 方式5:硬件启动,单脉冲发生器
- 类似4,但开始减是在GATE 0 ->1跃变后开始
### 启动方式
- 软件启动:GATA=1,初值写入后,开始计数
- 硬件启动:初值写入后,不计数。当GATE从0--->1后开始计数
### 8254命令字
- 方式选择命令字
| D7-D6 | D5-D4 | D3-D1 | D0 |
| ---------- | -------- | -------- | ---- |
| 计数器选择 | 读写方式 | 工作方式 | 数制 |
```
D7 D6 =00 选择0#计数器, =01 选择1#计数器
=10 选择2#计数器, =11 标志该命令字
是 “读出命令”
D5 D4 =00 标志该命令为 “锁存命令”
=01 初值写入时, 只写低8位, 高8位自动
补0;计数值读出时, 只能读低8位
=10 初值写入时, 只写高8位, 低8位自动
补0;计数值读出时, 只能读高8位。
=11 初值写入 / 计数值读出的顺序为先
低8位,后高8位。
D0=0, 计数初值为二进制数, =1 BCD码数
```
- 锁存命令
```
D7 D6 为锁存对象。
= 0 0,锁存0#当前计数值
= 0 1,锁存1#当前计数值
= 1 0,锁存2#当前计数值
D5 D4 = 00 标志该命令为 “锁存命令”
D7D6D0=110
D1是选择0计数器
D2是选择1计数器
D3是选择2计数器
```
### 初始化
- - 向控制寄存器写入方式选择命令字
- 目的 学则一个计数器并去欸的那个工作方式和计数值的读写顺序
- - 向选择的计数器写入计数初值
### PC中的计数器作用
# 周
第五章:https://app.yinxiang.com/fx/d8ebb76a-3a56-4f70-bf95-a8d7acf0fdb4
第六章:https://app.yinxiang.com/fx/d7c0e3b0-24cf-4981-a874-f04e1eb6a390
第七章:https://app.yinxiang.com/fx/e12ab3d4-0836-45db-83c5-c8ccf91a279d
第八章:https://app.yinxiang.com/fx/b2c2c867-806f-4bff-9aa8-7192c9ece7e5
第九章:https://hackmd.io/@jylsec/BkIAVe56w/edit
第十章:https://hackmd.io/@jylsec/S19Tw69aw
第十一章:https://hackmd.io/@jylsec/rJLTq5K6D
# 安
第五章:https://note.youdao.com/ynoteshare1/index.html?id=ccc3a7ea3b2b290455a22b894da4cdf3&type=note
第六章:https://note.youdao.com/ynoteshare1/index.html?id=dc51d48b63fa076edd068c213e79a5b3&type=note
第七章:https://note.youdao.com/ynoteshare1/index.html?id=474eab46b4b9edf7d332bbe7edb97159&type=note
第八章:https://note.youdao.com/ynoteshare1/index.html?id=d4b97ea2c421c782b049c469a4c86b76&type=note
第九章:https://note.youdao.com/ynoteshare1/index.html?id=9eb6c4667f5ff1d091e45f44d7cdf246&type=note
第十章:https://note.youdao.com/ynoteshare1/index.html?id=9e7879bd6ce90afaab534733c1e2607c&type=note
第十一章:https://note.youdao.com/ynoteshare1/index.html?id=6e8a995d301988f6ca6db3f6f11f444d&type=note