微机原理课程笔记

记录一下微机原理的重点和学习体会。

CPU原理

BIU:总线控制单元
EU:指令执行单元

寄存器

AX,BX,CX,DX是与数据有关的,SP,BP,SI,DI是与地址相关的,SS,DS,ES,CS是与段有关的。
为什么BX也是和数据相关的呢?因为BX中存储的内容可以是数据,也可以是指针。这时候指针就可以被认为是数据的一部分。即,我的数据是一段地址而已。
所有X寄存器(AX,BX,CX,DX)都可以被拆成高低两个小寄存器。例如AX可以拆分出AH和AL。

FLAGS中的9个标志位

  1. CF只和溢出位有关。只要溢出就是1
  2. AF只和第四位有关。第四位溢出就为1
  3. SF只和最高位有关。最高位为1就为1
  4. PF只和1的数量有关。偶数个1就为1
  5. ZF只和0的数量有关。全是0就为1。
    以上说的,都是根据二进制运算结果的状态判断的。
    唯一一个例外是OF。OF是操作数和结果状态共同决定的。11->0和00->1会产生OF。
    寄存器是属于EU的

三个地址

物理地址=段地址×16+偏移地址
指令:CS:IP
堆栈:SS:SP

存储器

20位地址,1MB寻址空间(220=1024768=1024×10242^{20}=1024768=1024×1024)。
AD19-0

读写周期

首先明确几个标志位。

  1. BHE选择奇地址
  2. ALE使能地址锁存器
  3. DT/R给出数据锁存器方向
  4. M/IO选择目标设备
  5. RD/WR使能目标设备
  6. DEN使能数据输出
    所有读写周期的各种时序,都是由BIU控制的。

指令系统

寻址方式

比较重要的是:直接寻址,寄存器间接寻址,寄存器间接相对寻址,隐含寻址。实际编程中很少用到变址寻址。

指令

需要记住的:

  1. MOV A,B。这个记不住就不用学了
  2. MOVX A,B。
  3. JMP A。包括:JMP,JC/JNC,JZ/JNZ。十分重要!
  4. LOOP A。每次LOOP CX-1
  5. IN A,B
  6. OUT A,B

8255接口

8255是一个IO扩展芯片。
8255有四个寄存器,A口,B口,C口,控制口。对应00,01,10,11四个地址。这四个地址在8255上,表示为A1和A0。8255还有一个CS片选端。这样组成了一个相对复杂的系统。
D0~D7的数据,可以被送到四个地方,也可以从四个地方读取。送到哪里取决于地址线设定哪里。要想使用控制字,必须将数据送到控制口,这样数据才能作为控制字。要想读取A口状态,地址线必须设置到A口。
控制字决定的是工作模式,实际的IO高低电平状态、选通输入状态等,不是控制字给的。
8255的控制字如下。

图中展示的,最高位必须是1,即方式选择控制字。最高位为0的时候是另外一套控制字。
方式0:基本输入输出方式
方式1:选通输入输出方式
方式2:双向传输方式

以这个系统为例。8255的A1,A0接到了8086的A2,A1。假设我想把数据送到控制口。即8255的A1A0需要为11。那么,8086的A2A1需要为11。8255的CS接入了74LS138的Y4,为了使Y4拉低,使能8255,需要先把G1G2G3置为100,即A7,M/IO,A6,A5分别为1011。Y4对应到CBA分别为100,即A4,A3,A0分别为100。
总结:
A7~A0分别为11110110,即F6H。M/IO为0,即处于读写IO状态。
同理,A口地址为F0H,B口地址为F2H,C口地址为F4H。因为M/IO必须是0,即读写IO状态,那么必须用IN或者OUT指令,不能用MOVX。
要想实现题目中的功能,只需要读取A口状态,将A口状态原封不动写入B口即可。控制字应当把A口和B口都设为方式0:基本输入输出方式。
转换成代码,就是:

1
2
3
4
5
6
7
8
MOV DX,0F6H    #控制口地址
MOV AL,90H
OUT DX,AL #控制口写入90H,A口方式0,输入,B口方式0,输出

MOV DX,0F0H #A口地址
IN DX,AL #读取A口数据
MOV DX 0F2H #B口地址
OUT DX,AL #数据输出给B口

DAC和ADC

作者

Zhu Wenguan

发布于

2025-10-27

更新于

2026-03-25

许可协议