微机原理与接口技术,期末冲刺复习资料(汇总版)
点关注不迷路哟。你的点赞、收藏,一键三连,是我持续更新的动力哟!!!
持续关注我~~~主页,查看更多内容哟(希望你能在这里有所收获🤭)。点关注,不迷路,哈哈哈!~~~
主页:
一位搞嵌入式的 genius-CSDN博客https://blog.csdn.net/m0_73589512?type=lately专栏:
微机原理与接口技术_一位搞嵌入式的 genius的博客-CSDN博客
微机原理与接口技术
1. 微处理器技术
1.1 主要学习内容
8088/8086微处理器:
-
特点
-
主要引线功能和内部结构
-
内部寄存器
-
实地址模式下的存储器寻址
-
总线时序
1.2 微处理器
-
微处理器:运算器、控制器、内部寄存器
-
程序和指令:
-
具有一定功能的指令的有序集合
-
人发给计算机,计算机能够识别的命令
-
-
指令执行过程:
取指→译码→读操作数→执行指令→存放结果
1.3 8088/8086CPU特点
采用并行流水线工作方式;内存空间的分段(4段:实现16bit体系对于1MB空间的寻址)管理;支持多处理器系统
1.3.1 顺序执行和并行流水线
-
顺序执行:部件交替工作,顺序执行指令
-
并行流水线:各个部件并行工作
1.3.2 内存空间分段管理(4段)
-
内存空间分成多个逻辑段,每个逻辑段占64K个单元
-
每个内存单元地址:段地址+偏移地址
1.3.3 支持多处理器
-
8088有两种工作模式:
-
最小模式:单处理器模式→注意:控制信号都是由微处理器产生。
-
最大模式:多处理器模式→注意:部分控制信号由外部总线控制器产生
-
-
两种工作模式的选择方式:
由引线状态决定:MN/MX取反
MN/MX取反 = 0→工作在最大模式
MN/MX取反 = 1→工作在最小模式
记忆口诀:
”模式选择,MNMX,0大1小,数字比较相反大小“
1.4 8088/8086的引线及功能
1.4.1 8088 CPU最小模式下的主要引脚信号
分为4组:
-
主要信号:访问内存或接口
-
控制信号:目的→与外部同步
-
中断请求和响应信号
-
总线保持和响应信号
1.4.2 微处理器读1条指令的过程:
-
PC端将“内存单元地址”发送到地址寄存器
-
通过地址总线将地址发送给存储器
-
通过“读存储器”的命令
-
将对应内存存储单元的内容通过数据总线发送出去
-
最后进行“指令译码”
1.4.3 CPU访问一次内存或接口的主要信号
-
地址信号:内存地址、接口地址
-
数据信号:8位数据线
-
控制信号:读、写、读写允许、收发器方向控制,地址锁存,访存/访接口控制
1.4.4 主要引线
1. 地址线:
-
8086和8088都是20位,也就是说有20根地址线
-
具体引线编号:
-
AD0—AD7:低8位地址和低8位数据信号分时复用。在传送地址信号时为单向,传送数据信号时为双向。先地址后数据。
-
A8—A15 :8位地址信号 独用
-
A16--A19:高4位地址信号,与状态信号分时复用(不同时,但共用)。
值得注意的是:有20位那么相应的就可以产生2的20次方个编码也就是:1M个编码。(2的10次方是1K)
8位数据信号就是可以同时传输8位二进制编码
-
2. 数据线
1.4.5 主要的控制和状态信号——最小模式下的8088引线
WR: 写信号;→Write RD: 读信号;→Read IO/M:为“0”表示访问内存,为“1”表示访问接口; DEN: 低电平有效时,允许进行读/写操作; DT/R:数据收发器的传送方向控制; ALE:地址锁存信号; RESET:复位信号。
例题:
-
WR非=1, RD非=0,IO/ M非 =0表示正在做什么操作?
CPU当前正在进行读存储器操作
-
WR非=1, RD非=1
既不执行写操作,也不执行读操作
与外部同步控制信号------READY信号
几个周期:
-
时钟周期:CPU的晶振频率的倒数的。也是系统主时钟一个周期信号所持续的时间(T);
-
总线周期:通常把CPU通过总线对微处理器外部(存贮器或I/O接口)进行一次访问所需时间称为一个总线周期。
-
8088/8086一个总线周期一般包含4个时钟周期,这4个时钟周期分别称4个状态即T1状态、T2状态、T3状态和 T4状态。
1.4.6 中断请求和响应信号
INTR:可屏蔽中断请求输入端 NMI: 非屏蔽中断请求输入端(比之于INTR优先级更高) INTA:中断响应输出端
1.4.7 总线保持信号
HOLD: 总线保持请求信号输入端。当CPU以外的其他设备要求占用总线时,通过该引脚向CPU发出请求。 HLDA: 总线保持响应信号输出端。CPU对HOLD信号的响应信号。
1.4.8 8088和8086CPU引线功能比较
-
数据总线宽度不同:
8088是8位
8086是16位
记忆:有6是16位,另外一个就是8位
-
访问存储器和输入输出控制信号含义不同
8088——IO/M=0表示访问内存;
8086——IO/M=1表示访问内存。
总结:
8088是8位数据线,IO/M=0(访问内存)
8086是16位数据线,IO/M=1(访问内存)
1.5 8088/8086的内部结构
1.5.1 8088组成:逻辑上功能划分为EU BIU
-
EU(Execution Unit):执行单元
构成:
运算器、8个通用寄存器、1个标志寄存器、EU部分控制电路
功能→指令的执行:
指令译码、指令执行(ALU中完成)、暂存中间计算结果(通用寄存器中完成)、保存运算结果特征(标志寄存器FLAGS中完成)
-
BIU( Bus Interface Unit ):总线接口单元
功能:
-
从内存中取指令到指令预取队列
-
负责与内存或输入/输出接口之间的数据传送
-
在执行转移程序时,BIU使指令预取队列复位,从指定的新地址取指令,并立即传给执行单元执行。
-
1.5.2 结论
指令预取队列的存在使EU和BIU两个部分可同时进行工作,即: 实现指令的并行执行, BIU取指令时EU可以同时指令译码和指令执行。
目的:
-
提高CPU效率
-
降低成本的同时还降低了对存储器存取速度的要求
1.6 内部寄存器
有14个16bit的寄存器,按照功能分类:
-
8个通用寄存器
-
数据寄存器(AX,BX,CX,DX)
-
地址寄存器(SP,BP)
-
变址寄存器(SI,DI)
-
-
4个段寄存器
-
2个控制寄存器
1.6.1 数据寄存器
8088/8086含4个16位数据寄存器,它们又可分为8个8位寄存器,即:
[解释xH和xL] 高八位和低八位
AX:(Add:加) 累加器。所有I/O指令都通过AX与接口传送信息,中间运算结果也多放于AX中; BX:(Base:基址) 基址寄存器。在间接寻址中用于存放基地址; CX:(Count:计数) 计数寄存器。用于在循环或串操作指令中存放计数值; DX:(Data:数据) 数据寄存器。在间接寻址的I/O指令中存放I/O端口地址;在32位乘除法运算时,存放高16位数。
1.6.2 地址指针寄存器
SP:(Stack:堆) 堆栈指针寄存器,其内容为栈顶的偏移地址; BP:(Base:基址) 基址指针寄存器,常用于在访问内存时存放内存单元的偏移地址。
注意:这两个寄存器的共同点是,默认指向堆栈区、多数情况用于存放地址
[解释图片] 绿色部分是SP指向,BP可以指向堆栈的任意位置
BX与BP在应用上的区别:
作为通用寄存器,二者均可用于存放数据; 作为基址寄存器,用BX表示所寻找的数据在数据段;用BP则表示数据在堆栈段。
1.6.3 变址寄存器
SI: 源变址寄存器 DI: 目标变址寄存器 变址寄存器在指令中常用于存放数据在内存中的地址。
1.6.4 通用寄存器小结
1.6.5 控制寄存器
IP 指令指针寄存器,其内容为下一条要取的指令的偏移地址。 FLAGS 标志寄存器,存放运算结果的特征 6个状态标志位(CF,SF,AF,PF,OF,ZF)
-
CF(Carry Flag) 进位标志位。加(减)法运算时,若最高位有进(借)位则CF=1
-
OF(Overflow Flag) 溢出标志位。当算术运算的结果超出了有符号数的可表达范围时,OF=l
-
ZF(Zero Flag) 零标志位。当运算结果为零时ZF=1
-
SF(Sign Flag) 符号标志位。当运算结果的最高位为1时,SF=l
-
PF(Parity Flag) 奇偶标志位。运算结果的低8位中“1”的个数为偶数时PF=l
-
AF(Auxiliary Carry Flag) 辅助进位标志位。加(减)操作中,若Bit3向Bit4有进位(借位),AF=1
注意:PF和AF只针对低8位
3个控制标志位(IF,TF,DF)
-
TF(Trap Flag) 陷井标志位,也叫跟踪标志位。TF=1时,使CPU处于单步执行指令的工作方式。
-
IF(Interrupt Enable Flag) 中断允许标志位。IF=1使CPU可以响应可屏蔽中断请求。
-
DF(Direction Flag) 方向标志位。在数据串操作时确定操作的方向。
1.6.6 段寄存器
作用:用于存放相应逻辑段的段基地址 8086/8088内存中逻辑段的类型:
-
CS(Code Segment) 代码段寄存器,存放代码段的段基地址。
-
DS(Data Segment) 数据段寄存器 ,存放数据段的段基地址。
-
ES(Extra Segment) 附加段寄存器,存放数据段的段基地址。
-
SS(Stack Segment) 堆栈段寄存器, 存放堆栈段的段基地址
段寄存器的值表明相应逻辑段在内存存储中的位置 一个程序模块中每个段最多有一个,最多四个段。
1.6.7 存储器寻址
主要内容:
-
内存分段管理思想
-
实模式下的内存地址变换
-
段寄存器的应用
-
堆栈的概念
1.6.7.1 内存储器管理
8088 CPU是16位体系结构的微处理器 可以同时产生16位二进制码 可以直接产生64K个编码 8088 CPU需要管理1MB内存 需要能够产生1M个地址编码
8088对内存采用分段管理方式
1.6.7.2 内存地址变换
欲实现对1MB内存空间的正确访问,每个内存单元在整个内存空间中必须具备惟一地址→这个地址就是物理地址(物理地址唯一但是逻辑地址可以有多个)
-
内存单元的编址
段(基)地址:表示处于内存空间中的哪个区域
段内地址(偏移地址/相对地址):表示在哪个段中的相对位置
8088是16位,所以他对应的段地址和偏移地址都是16位
-
存储器的编址
段基地址: 决定存储单元在内存中的位置 相对地址(偏移地址) 该存储单元相对段内第一个单元的距离 逻辑段的起始地址称为段首 每个逻辑段内的第一个单元
实地址模式下的存储器地址变换:
计算公式:
物理地址段地址偏移地址
例题:设某操作数存放在数据段,DS=250AH,数据所在单元的偏移地址=0204H。则该操作数所在单元的物理地址为:
逻辑段与逻辑地址:
逻辑段是:大小、位置都可改变的“段”和每个内存单元的段地址和偏移地址都可变
重要:所以可以有多个逻辑地址,但物理地址是唯一的。
-
内存的分段是逻辑分段,不是物理段。各个逻辑段在地址上可以不相连、可以部分重合,也可以完全重合
-
每个内存单元具有惟一物理地址,但可能具有多个逻辑地址。
-
一个逻辑段的默认容量为64KB(16bit 计算机)
例题:
已知: CS=1055H, DS=250AH ES=2EF0H SS=8FF0H 画出各段在内存中的分布。
解答:
CS=1055H 段首地址=10550H 默认段尾地址=2054FH(通过在段首地址基础上+64KB即FFFFH也就相当于是偏移地址得到的) DS=250AH 段首地址=250A0H 默认段尾地址=3509FH ES=2EF0H SS=8FF0H
1.6.7.3 存储器的保护模式
保护模式: 支持多任务的工作模式,提供了多任务保护机制; 内存段的访问受到限制,不能再随意存取数据段。 保护模式下的内存访问 不再直接从段寄存器中获得段基地址,段基地址存放在内存的段描述符表中,由段描述符寄存器给出段描述符表的基地址,段寄存器中仅存放段选择符。
保护模式下的存储器地址变换
堆栈及堆栈段的使用
堆栈:
-
内存中存放临时数据或不需要保护的数据
-
常用于响应中断或子程序调用
例题:
栈底偏移地址 = 栈底物理地址 - 堆栈段首地址 ,本质是偏移地址的基础定义(物理地址 = 段首地址 + 偏移地址 )的逆运算~
1.7 总线时序
1.7.1 时序
时序: CPU各引脚信号在时间上的关系 总线周期: CPU完成一次访问内存(或接口)操作所需要的时间。 一个总线周期至少包括4个时钟周期(T1到T4)。
1.8 8088系统总线
1.8.1 主要内容
-
总线的基本概念和分类;
-
总线的工作方式;
-
常用系统总线标准。
1.8.2 概述
-
总线:是计算机系统各部件之间传输地址、数据和控制信息的通道。{地址总线、数据总线、控制总线}
-
分类:
1.8.3 总线的系统结构
-
单总线结构:
-
多总线结构
1.8.4 总线的基本功能
-
数据传送
-
仲裁控制
-
出错处理
-
总线驱动
1.8.5 总线的主要性能指标
-
总线带宽(B/S): 单位时间内总线上可传送的数据量
-
总线位宽(bit): 能同时传送的数据位数
-
总线的工作频率(MHz) 总线带宽=(位宽/8)(工作频率/每个存取周期的时钟数)
1.8.6 常用系统总线和外设总线
-
ISA(8/16位)
-
PCI(32/64位)
-
AGP(加速图形端口,用于提高图形处理能力)
-
PCI-E(PCI Express )
目前最新的系统总线标准,采用串行方式传输数据,依靠高频率来获得高性能。
-
USB
1.8.7 两种工作模式下的总线连接
8088可工作于两种模式下 最小模式为单处理器模式,控制信号较少,一般可不必接总线控制器。 最大模式为多处理器模式,控制信号较多,须通过总线控制器与总线相连。
1.9 微处理器总结
1.10 重点习题讲解
接续上文:微机原理与接口技术,期末冲刺复习资料(一)-CSDN博客
点关注不迷路哟。你的点赞、收藏,一键三连,是我持续更新的动力哟!!!
关注我~~~主页,查看更多内容哟(希望你能在这里有所收获🤭)。
目录
点关注不迷路哟。你的点赞、收藏,一键三连,是我持续更新的动力哟!!!
2. 指令集
2.1 主要内容
2.2 基本概念
2.2.1 了解
2.2.2 寻址方式
2.2.2.1 立即寻址:适用于源操作数
2.2.2.2 寄存器寻址:操作数放在通用寄存器中
2.2.2.3 存放于存储器中的寻址方式:
2.2.2.3.1 直接寻址
2.2.2.3.2 寄存器间接寻址
2.2.2.3.3 寄存器相对寻址
2.2.2.3.4 基址-变址寻址
2.2.2.3.5 基址-变址-相对寻址
2.2.2.4 隐含给出方式
2.2.2.5 汇总
2.3 8086指令系统
2.3.1 数据传送指令
2.3.1.1 通用数据传送
2.3.2 输入输出指令
2.3.2.1 指令寻址方式
2.3.3 地址传送指令
2.3.4 标志位操作指令
2.3.5 算数运算类指令
2.3.5.1 加法运算指令
2.3.5.2 减法运算指令
2.3.5.3 乘法指令
2.3.5.4 除法指令
2.3.5.5 算数运算指令小结
2.3.6 逻辑运算和移位指令
2.3.7 串操作指令
2.3.8 程序控制指令
2.3.8.1 转移指令
2.3.8.2 条件转移指令
2.3.8.3 循环控制指令
2.3.8.4 过程调用和返回
2.3.9 中断指令
2.3.10 处理器控制指令
2.3.11 重要题型注解
2. 指令集
2.1 主要内容
-
基本概念
-
对操作数的寻址方式
-
六大类指令的操作原理:
操作码的含义 指令对操作数的要求 指令执行的结果
2.2 基本概念
2.2.1 了解
-
指令及指令系统
-
指令:控制计算机完成某操作的命令
-
指令系统(指令集):处理器所能识别的所有指令的集合
-
指令的兼容性(判断题):同一系列机的指令都是兼容的。
-
-
指令的格式
-
包含信息:数据来源+结果去向+执行操作
-
操作码 [操作数1],[操作数2(源操作数)]
{
解释:
操作码就是执行的操作;
操作数1就是目标操作数;
操作数2就是源操作数;
} 记忆:先有“目标”再去追溯“源头”
-
零操作数指令: 操作码 单操作数指令: 操作码 操作数 双操作数指令: 操作码 操作数,操作数 多操作数指令: 三操作数及以上
-
-
指令中的操作数:立即数(操作数据本身)、寄存器和存储器(表征数据存放地址)
-
立即操作数:8位或16位,只能作为’源操作数‘
举例:
MOV AX,1234H MOV BL,22H
-
寄存器操作数:参与运算的数据存放进寄存器中,8位或16位
举例:
MOV AX,BX MOV DL,CH
-
存储器操作数:参加运算的数存放在存储器的某一个或某两个单元中
表现形式:[ ]
[ ]的出现表明:寻址的数在内存中
举例:
疑问:为什么AX=1122H?
回答:
-
执行
MOV AX, [1200H]
后,
AX
寄存器的值为:
1122H
,其中:
-
AL = 22H
-
AH = 11H
-
因此,
AX
的值为1122H
是因为该指令从内存地址1200H
开始读取了一个字(两个字节),按照小端序规则(x86架构),低位字节22H
被加载到AL
,高位字节11H
被加载到AH
。 -
-
三种类型操作数的比较
-
-
指令字长与机器字长
2.2.2 寻址方式
定义:寻找操作数所在地址的方法
寻找操作数所在地址的方法可以有三种大类型
-
指令直接给出的方式
-
存放于寄存器中的寻址方式
-
存放于存储器中的寻址方式
-
隐含给出方式
2.2.2.1 立即寻址:适用于源操作数
例如:MOV AX,1200H
2.2.2.2 寄存器寻址:操作数放在通用寄存器中
例如:MOV AX,BX
2.2.2.3 存放于存储器中的寻址方式:
2.2.2.3.1 直接寻址
直接寻址方式下,操作数默认为在数据段,但允许段重设,即由指令给出所在逻辑段。 例: MOV AX,ES:[1200H]
2.2.2.3.2 寄存器间接寻址
操作数存放在内存中,其偏移地址为方括号中通用寄存器的内容。 [ 间址寄存器 ]→BX,BP,SI,DI
由寄存器间接给出操作数的偏移地址; 存放偏移地址的寄存器称为间址寄存器,它们是:BX,SI,DI,BP(只有BP默认在堆栈段,其它的都在数据段) 操作数的段地址(数据处于哪个段)取决于选择哪一个间址寄存器
例:
MOV BX,1200H MOV AX,[BX]
-
基址寻址:其中的间址寄存器是:BP和BX
-
变址寻址:其中的变址寄存器是:SI和DI
2.2.2.3.3 寄存器相对寻址
操作数的偏移地址为寄存器的内容加上一个位移量
常将位移量作为“表头”地址,间址寄存器的值作为表内相对地址
MOV AX,[BX+DATA]{
注意:DATA是任意8bit或者16bit的常数
}
例: MOV AX,2000H MOV DS,AX MOV BX,1200H MOV AL,[BX]5
[BX]5相当于[BX+5]
2.2.2.3.4 基址-变址寻址
-
操作数的偏移地址为
一个基址寄存器的内容 + 一个变址寄存器的内容;
-
操作数的段地址由选择的基址寄存器决定 基址寄存器为BX,默认在数据段 基址寄存器为BP,默认在堆栈段
-
基址变址寻址方式与相对寻址方式一样,主要用于一维数组操作。
2.2.2.3.5 基址-变址-相对寻址
-
操作数的偏移地址为: 基址寄存器内容+变址寄存器内容+位移量
-
操作数的段地址由选择的基址寄存器决定。
-
基址变址相对寻址方式主要用于二维表格操作。
例如:
MOV DI,1100H MOV BP,DI MOV AL,【BP】【DI】5
【BP】【DI】5→相当于[BP+DI+5]
2.2.2.4 隐含给出方式
指令中隐含了一个或两个操作数的地址,即操作数在默认的地址中
例: MUL BL 指令执行: AL×BL → AX
2.2.2.5 汇总
2.3 8086指令系统
要求掌握:
-
指令码的含义
-
指令对操作数的要求
-
指令的对标志位的影响
-
指令的功能
功能上划分:
-
数据传送
-
算术运算
-
逻辑运算和移位
-
串操作
-
程序控制
-
处理器控制
2.3.1 数据传送指令
1.通用数据传送 2.输入输出 3.地址传送 4.标志位操作
2.3.1.1 通用数据传送
-
一般数据传送指令:MOV
例: MOV AL,BL
注意点:(判断题)
两操作数字长必须相同; 两操作数不允许同时为存储器操作数; 两操作数不允许同时为段寄存器; 在源操作数是立即数时,目标操作数不能是段寄存器; IP和CS不作为目标操作数,FLAGS一般也不作为操作数在指令中出现。
-
堆栈操作指令:
压栈指令 格式: PUSH OPRD 出栈指令 格式: POP OPRD
注意的是:
-
指令的操作数必须是16位;
-
操作数可以是寄存器或存储器两单元,但不能是立即数;
-
不能从栈顶弹出一个字给CS;
-
PUSH和POP指令在程序中一般成对出现;
-
PUSH指令的操作方向是从高地址向低地址,而POP指令的操作正好相反。
-
-
交换与查表指令:
格式: XCHG REG,MEM/REG 注: 两操作数必须有一个是寄存器操作数 不允许使用段寄存器。
例: XCHG AX,BX XCHG [2000],CL
-
字位扩展指令:
将符号数的符号位扩展到高位; 指令为零操作数指令,采用隐含寻址,隐含的操作数为AX及AX,DX 无符号数的扩展规则为在高位补0
-
字节到字的扩展指令
格式: CBW 操作: 将AL内容扩展到AX 规则: 若最高位=1,则执行后AH=FFH 若最高位=0,则执行后AH=00H
-
字到双字的扩展指令
格式: CWD 操作: 将AX内容扩展到DX AX 规则: 若最高位=1,则执行后DX=FFFFH 若最高位=0,则执行后DX=0000H
2.3.2 输入输出指令
-
指令的格式及操作
-
指令的两种寻址方式
-
指令对操作数的要求
专门面向I/O端口操作的指令 指令格式:
-
输入指令: IN acc,PORT
-
输出指令 :OUT PORT,acc
PORT是端口地址
2.3.2.1 指令寻址方式
-
直接寻址:
端口地址为8位时,指令中直接给出8位端口地址; 寻址256个端口(2的8次方计算得来)。
-
间接寻址
端口地址为16位时,指令中的端口地址必须由DX指定; 可寻址64K个端口。
注意点:端口地址越长就越需要注意“风险”,所以采用间接方式最好
2.3.3 地址传送指令
取偏移地址指令LEA *LDS指令 *LES指令
-
LEA:
操作: 将变量的16位偏移地址取出送目标寄存器 当程序中用符号表示内存偏移地址时,须使用该指令。 格式: LEA REG,MEM 指令要求: 源操作数必须是一个存储器操作数,目标操作数通常是间址寄存器。
-
LDS、LES指令
LDS和LES均用于将一个32位的远地址指针写入目标寄存器。 LDS(Load pointer usingDS)的一般格式: LDS 通用寄存器,存储器操作数 //把源操作数的偏移地址送目标寄存器,段地址送DS LES(Load pointer usingES)的一般格式: LES 通用寄存器,存储器操作数 //把源操作数的偏移地址送目标寄存器,段地址送ES
2.3.4 标志位操作指令
2.3.5 算数运算类指令
-
加法运算指令
-
减法运算指令
-
乘法指令
-
除法指令
注意:算术运算指令的执行大多对状态标志位会产生影响
2.3.5.1 加法运算指令
-
普通加法指令ADD
-
格式: ADD OPRD1,OPRD2
-
操作: OPRD1+OPRD2 → OPRD1
-
ADD指令的执行对全部6个状态标志位都产生影响
-
-
带进位位的加法指令ADC
指令格式、对操作数的要求、对标志位的影响与ADD指令完全一样 指令的操作: OPRD1+OPRD2+CF → OPRD1
注意:ADC指令多用于多字节数相加,使用前要先将CF清零。
-
加1指令INC
-
格式:INC OPRD(不能是段寄存器或立即数)
-
操作:OPRD+1 → OPRD
-
注意:
INC指令的执行不影响CF 常用于在程序中修改地址指针
-
2.3.5.2 减法运算指令
-
普通减法指令SUB
-
格式: SUB OPRD1,OPRD2
-
操作: OPRD1- OPRD2 → OPRD1
-
-
考虑借位的减法指令SBB
-
SBB指令多用于两个多字节数的相减运算
-
指令格式、对操作数的要求、对标志位的影响与SUB指令完全一样
-
指令的操作: OPRD1- OPRD2- CF → OPRD1
-
-
减1指令DEC
-
格式: DEC OPRD
-
操作: OPRD - 1 → OPRD
-
-
比较指令CMP
-
格式: CMP OPRD1,OPRD2
-
操作: OPRD1- OPRD2 (目标操作数-源操作数) 指令执行的结果不影响目标操作数,仅影响标志位!
-
用途: 用于比较两个数的大小,可作为条件转移指令转移的条件
-
两个无符号数的比较: CMP AX,BX 若 AX ≥ BX CF = 0 表明没有进位或借位 若 AX < BX CF = 1 若 AX=BX CF = 0,ZF = 1
-
两个带符号数的比较 CMP AX,BX 两个数的大小由OF和SF共同决定 OF和SF状态相同 AX ≥BX OF和SF状态不同 AX < BX
-
-
求补指令NEG
-
格式: NEG OPRD
-
操作: 0 - OPRD → OPRD
-
注意:用0减去操作数,相当于对该操作数求补码
-
2.3.5.3 乘法指令
-
无符号的乘法指令MUL
格式: MUL OPRD OPRD不能是立即数
-
带符号的乘法指令IMUL
-
格式: IMUL OPRD
-
指令格式及对操作数的要求与MUL指令相同。
-
指令执行原理: 将两个操作数取补码(对负数按位取反加1,正数不变); 做乘法运算; 将乘积按位取反加1。
-
-
注意:
乘法指令采用隐含寻址,隐含的是存放被乘数的累加器AL或AX及存放结果的AX,DX;
2.3.5.4 除法指令
-
无符号除法指令
-
格式: DIV OPRD
-
-
有符号除法指令
-
格式: IDIV OPRD
-
-
若OPRD是字节数 执行:AX/OPRD 结果: AL=商 AH=余数
-
若OPRD是双字节数 执行: DXAX/OPRD 结果: AX=商 DX=余数
2.3.5.5 算数运算指令小结
指令执行影响状态标志位
乘法指令执行结果为相乘数的双倍字长;
除法指令要求被除数是除数的双倍字长。
2.3.6 逻辑运算和移位指令
-
逻辑运算 与,或,非,异或
注意:“非”运算指令要求操作数不能是立即数;
除“非”运算指令外: 其余指令的执行都会影响除AF 外的5个状态标志; 无论执行结果任何,都会使标志位OF=CF=0。
-
与指令:
-
格式:
AND OPRD1,OPRD2
-
操作:
两操作数相“与”,结果送目标地址。
-
应用:
-
实现两操作数按位相与的运算 AND BL,[SI]
-
使目标操作数的某些位不变,某些位清零 AND AL,0FH
-
在操作数不变的 情况下使CF和OF清零 AND AX,AX
-
-
-
或指令:
-
格式:
OR OPRD1,OPRD2
-
操作: 两操作数相“或”,结果送目标地址(OPRD1)
-
应用:
-
实现两操作数 相 “或”的 运算 OR AX,[DI]
-
使某些位不变,某些位置“1” OR CL,0FH
-
在不改变操作数的 情况下使OF=CF=0 OR AX,AX
-
-
-
非指令
-
格式: NOT OPRD
-
操作: 操作数按位取反再送回原地址
-
注: 指令的执行对标志位无影响
-
例: NOT BYTE PTR[BX]
-
-
异或指令
-
格式: XOR OPRD1,OPRD2
-
操作: 两操作数相“异或”,结果送目标地址
-
例: XOR BL,80H XOR AX,AX
-
-
测试指令
-
格式: TEST OPRD1,OPRD2
-
操作: 执行“与”运算,但运算的结果不送回目标地址。
-
应用: 常用于测试某些位的状态
-
-
-
移位指令 非循环移位,循环移位
值得注意的是: 移动一位时由指令直接给出; 移动两位及以上,则移位次数由CL指定。
-
非循环移位指令:
-
逻辑左移: 无符号数
SHL OPRD,1 SHL OPRD,CL
-
算术左移: 有符号数
SAL OPRD,1 SAL OPRD,CL
-
逻辑右移: 无符号数
SHR OPRD,1 SHR OPRD,CL
举例:
-
算术右移:有符号数
SAR OPRD,1 SAR OPRD,CL
-
-
非循环移位指令的应用
左移可实现乘法运算 右移可实现除法运算
-
循环移位指令:
应用:
用于对某些位状态的测试; 高位部分和低位部分的交换; 与非循环移位指令一起组成32位或更长字长数的移位。
-
2.3.7 串操作指令
-
实现两个字符串或数据块的操作
-
源操作数称为源串,目标操作数称为目标串
-
串操作指令要求:
-
目标操作数必须在附加段,源操作数默认在数据段(允许段重设)。
-
源串和目标串指针分别为SI和DI
-
串长度值必须由CX给出
-
需要设置数据的操作方向
-
确定DF的状态
-
-
串操作指令前可以加重复前缀。使用时应注意:
-
传送类指令前加无条件重复前缀
-
串比较类指令前加条件重复前缀,但前缀不影响ZF状态
-
-
-
串操作指令流程
-
串传送指令:
-
格式:
MOVS OPRD1,OPRD2 MOVSB MOVSW
-
-
串比较指令:
-
格式: CMPS OPRD1,OPRD2 CMPSB CMPSW
-
-
串扫描指令:
-
格式: SCAS OPRD SCASB SCASW
-
注意:这里的源 操作数是AX或AL
-
应用:用于在指定存储区域中寻找某个关键字。
-
-
串装入指令:
-
格式: LODS OPRD LODSB LODSW
-
操作:
-
对字节:[DS:SI] → AL
-
对 字: [DS:SI] → AX
-
-
-
串存储指令
-
格式: STOS OPRD STOSB STOSW
-
操作: 对字节:AL → [ES:DI] 对 字: AX → [ES:DI]
-
应用:
-
常用于将内存某个区域置同样的值
-
此时: 将待送存的数据放入AL(字节数)或AX(字数据); 确定操作方向(增地址/减地址)和区域大小(串长度值); 使用串存储指令+无条件重复前缀,实现数据传送。
-
-
注意事项:
-
需要定义附加段 目标操作数必须在附加段
-
需要设置数据的操作方向 确定DF的状态
-
源串和目标串指针分别为SI和DI
-
串长度值必须由CX给出
-
注意重复前缀的使用方法
-
传送类指令前加无条件重复前缀
-
串比较类指令前加条件重复前缀,但前缀不影响ZF状态
-
-
-
-
2.3.8 程序控制指令
-
转移指令
-
循环控制
-
过程调用
-
中断控制
程序的执行方向
-
程序控制类指令的本质是: 控制程序的执行方向
-
决定程序执行方向的因素: CS,IP(指令指针寄存器)
-
控制程序执行方向的方法: 3.1 仅修改IP,则程序将改变当前的执行顺序,转向本代码段内其它某处执行; 3.2 修改CS 和IP ,则程序转向另一个代码段执行。
-
2.3.8.1 转移指令
通过修改指令的偏移地址或段地址及偏移地址 实现程序的转移
-
无条件转移指令
-
格式:
-
值得注意的一点是:原则上是可以在内存空间中任意转移到任意位置的
-
-
有条件转移指令
-
转移的目标地址在当前代码段内,段地址不改变。
-
段内直接转移:
格式: JMP Label(近地址标号)
-
段内间接转移 转移的目标地址存放在某个16位寄存器或存储器的某两个单元中
例: MOV BX,1200H JMP BX
-
-
无条件段间转移
转移的目标地址不在当前代码段内。
-
段间直接转移:转移的目标地址由指令直接给出
格式:
JMP FAR Label
-
段间间接寻址 转移的目标地址由指令中的32位操作数给出 32位目标地址须存放于内存中 例: JMP DWORD PTR[BX]
-
2.3.8.2 条件转移指令
在满足一定条件下,程序转移到目标地址继续执行 条件转移指令均为段内短转移,即转移 范围为: -128------+127
2.3.8.3 循环控制指令
-
无条件循环指令
-
格式: LOOP LABEL
-
循环条件: CX ≠ 0
-
2.3.8.4 过程调用和返回
-
过程调用指令 用于调用一个子过程
-
与转移指令的比较 子过程执行结束后要返回原调用处 注意注意注意!!!!一定一定要保护返回地址
-
调用指令的执行过程
-
保护断点
-
获取子程序的入口地址
-
执行子过程,含有相应参数保护及恢复
-
恢复断点,返回原来程序
-
-
过程调用
-
段内调用:CALL NEAR PROCC(近过程名)
实例:
(1)CALL TIMRE ——> 直接调用 (2)CALL WORD PTR[SI] ——> 间接调用
-
段间调用:
注意:在这个过程中,调用前需保护断点的段基地址和偏移地址
CALL FAR PROCC
-
-
返回指令
-
功能: 从堆栈中弹出断点地址,返回原程序
-
格式: RET(子程序的最后一条指令必须是RET)
-
2.3.9 中断指令
-
中断
-
中断源
-
中断的类型
-
中断指令
引起CPU产生一次中断的指令
辨析中断与过程调用:
-
中断是随机事件或异常事件引起,调用则是事先已在程序中安排好 ;
-
响应中断请求不仅要保护断点地址,还要保护FLAGS内容;
-
调用指令在指令中直接给出子程序入口地址,中断指令只给出中断向量码,入口地址则在向量码指向的内存单元中。
-
中断指令
执行过程:
-
将FLAGS压入堆栈;
-
将INT指令的下一条指令的CS、IP压栈;
-
由n×4得到存放中断向量的地址;
-
将中断向量(中断服务程序入口地址)送CS和IP寄存器;
-
转入中断服务程序。
-
-
中断返回指令
格式: IRET
是中断服务程序的最后执行指令,目的是返回原程序
2.3.10 处理器控制指令
1. 对标志位的操作 2. 与外部设备的同步
2.3.11 重要题型注解
1. 指令系统与指令兼容性
**考点**:什么是指令系统,兼容性判别条件
**题1**:
判断题:同一系列的 x86 处理器的指令一定是兼容的。
**答案**:√(因为同一系列的处理器采用相同指令集,可向后兼容)
**题2**:
简答题:为什么说“指令系统”是处理器的基础?
**解析**:指令系统定义了处理器能识别和执行的所有操作,每条程序都由这些指令组成,决定了处理器能力和编程接口。
------
**2. 指令格式(操作码与操作数)**
**考点**:指令组成结构,目标与源操作数
**题1**:
选择题:在 `MOV AX, BX` 中,哪个是源操作数?
A. AX
B. BX
C. MOV
**答案**:B;**解析**:AX 是目标寄存器,BX 是源。
**题2**:
填空题:双操作数指令由**操作码 操作数1, 操作数2**构成,其中操作数1为____,操作数2为____。
**答案**:目标操作数;源操作数
------
**3. 操作数类型:立即数、寄存器、存储器**
**考点**:区别三种操作数,立即数为何仅用作源
**题1**:
判断题:立即数只能作为源操作数。
**答案**:√;解析:立即数无法写回目标位置。
**题2**:
简答题:`MOV AX, [1200H]` 将内存内容加载到 AX,这里的操作数类型分别是什么?
**答案**:目标是寄存器操作数,源是存储器操作数。
------
**4. 寻址方式概念**
**考点**:立即、寄存器、直接、间接、变址等寻址方式
**题1**:
简答题:简述基址+变址+位移寻址的构成。
**答案**:偏移地址 = 基址寄存器 + 变址寄存器 + 固定位移量,数据段由基址寄存器决定。
**题2**:
判断题:`MOV AX, [BX+5]` 是寄存器相对寻址。
**答案**:√;解析:使用寄存器内容加偏移。
------
**5. 隐含寻址(隐式操作数)**
**考点**:乘法除法等使用隐含寄存器
**题1**:
填空题:`MUL BL` 隐含使用 ____ 作为被乘数,结果放在 ____。
**答案**:AL;AX
**题2**:
判断题:IMUL 只能用于无符号乘法。
**答案**:×;IMUL 用于有符号。
------
**6. 堆栈操作:PUSH/POP**
**考点**:堆栈指令使用限制
**题1**:
判断题:PUSH 可以将立即数压入堆栈。
**答案**:×;只能压寄存器或存储器。
**题2**:
简答题:说明 PUSH/POP 操作是怎样改变栈指针 SP 的。
**答案**:PUSH 先减 SP 再写入数据;POP 先读出数据再加 SP。
------
**7. 地址传送指令:LEA、LDS、LES**
**考点**:LEA 与 LDS/LES 的区别
**题1**:
选择题:`LEA BX, VAR` 的用途是:
A. 将数据装入 BX
B. 将 VAR 地址装入 BX
C. 将 VAR 的 DS 段地址装入 DS 寄存器
**答案**:B
**题2**:
判断题:LDS 可以同时加载偏移和段地址。
**答案**:√;解析:将偏移送通用寄存器,段基加载到 DS。
------
**8. 算术指令:加减乘除及标志位**
**考点**:ADD/ADC/SUB/SBB/CMP/INC/DEC,以及 MUL/DIV 影响
**题1**:
简答题:`CMP AX, BX` 执行后 AX 是否改变?标志位?
**答案**:AX 不变,更新 CF、ZF、SF、OF。
**题2**:
判断题:DIV 指令要求被除数为双字长。
**答案**:√;例操作时 AX 为被除数,或 DX:AX 为被除数。
------
**9. 逻辑与移位操作**
**考点**:AND/OR/XOR/NOT/TEST;SHL/SHR/SAL/SAR 和循环移位
**题1**:
判断题:XOR AX, AX 可用于清零 AX 并将 OF、CF 置 0。
**答案**:√;清零并重置标志位。
**题2**:
简答题:SHL 可用于实现什么算术操作?而 SAR 用于何?
**答案**:SHL 是逻辑左移,实现乘以2;SAR 是算术右移,实现带符号除2。
------
**10. 程序控制指令:转移、循环、调用与中断**
**考点**:JMP、条件转移、CALL/RET、INT/IRET 和堆栈保护
**题1**:
简答题:区分 CALL 与 INT 指令的主要差异。
**答案**:CALL 是程序内或段间调用,返回地址压栈;INT 是中断调用,还需压 FLAGS,入口由中断向量表决定。
**题2**:
判断题:LOOP LABEL 指令每次都会更新 CX 并跳转,直到 CX = 0 为止。
**答案**:√;解析:先将 CX 减1,若不为 0 则跳转。
接续上文:微机原理与接口技术,期末冲刺复习资料(二)-CSDN博客
点关注不迷路哟。你的点赞、收藏,一键三连,是我持续更新的动力哟!!!
持续关注我~~~主页,查看更多内容哟(希望你能在这里有所收获🤭)。点关注,不迷路,哈哈哈!~~~
主页:一位搞嵌入式的 genius-CSDN博客
目录
点关注不迷路哟。你的点赞、收藏,一键三连,是我持续更新的动力哟!!!
4. 汇编语言程序设计
4.1 汇编语言源程序
4.1.1 汇编语言源程序的结构
4.1.2 汇编语言语句类型及格式
4.2 伪指令
4.2.1 数据定义伪指令
4.2.2 符号定义伪指令
4.2.3 段定义伪指令
4.2.4 结束伪指令
4.2.5 过程定义伪指令
4.2.6 宏命令伪指令
4.2.7 调整偏移量伪指令
4.2.8 设定段寄存器伪指令
4.2.9 汇编语言源程序结构
4.3 系统功能调用
4.3.1 DOS调用和BIOS调用的基本步骤
4.4 汇编语言程序设计
4.5 重点考点题型
4. 汇编语言程序设计
主要需要掌握内容如下:
-
汇编语言源程序的结构
-
汇编语言语句格式
-
伪指令
-
功能调用
-
汇编语言程序设计
4.1 汇编语言源程序
了解:
-
汇编语言源程序的结构
-
汇编语言语句类型及格式
4.1.1 汇编语言源程序的结构
首先我们需要区分:汇编语言源程序和汇编程序
-
汇编语言源程序:助记符编写
-
汇编程序:源程序的编译程序
汇编语言程序设计与执行过程:
输入汇编源程序 | 产生:ASM文件 |
---|---|
汇编 | 产生:目标文件.OBJ |
链接 | 产生:可执行文件.EXE |
调试 | 最终程序 |
4.1.2 汇编语言语句类型及格式
-
汇编语言语句类型:
-
指令性:CPU执行,生成目标代码
-
指示性:CPU不执行,由汇编程序执行,不生成目标代码
-
-
格式:
-
注意:
-
标号后面有冒号,名字后面没有
-
二者均在指示性语句前
-
-
操作数:
-
寄存器
-
存储器单元
-
常量:数字常量;字符串常量(单引号引起的)
-
变量或标号
-
变量:
代表内存中的数据区,程序中视为存储器操作数。
-
标号:
-
-
表达式:
-
算术运算
-
逻辑运算
-
关系运算
-
取值运算和属性运算:
示例:
MOV AX,SEG DATA MOV DS,AX MOV BX,OFFSET DATA
其中:OFFSET DATA等价于LEA BX,DATA
-
其它运算
方括号: [ ] → 方括号中内容为操作数的偏移地址
段重设符 段寄存器名:[ ] → 用于修改默认的段基地址
-
-
4.2 伪指令
掌握:伪指令的格式、操作及应用
-
由汇编程序执行的“指令系统”
-
作用:
-
定义变量;
-
分配存储区
-
定义逻辑段;
-
指示程序开始和结束;
-
定义过程等。
-
-
常用伪指令:
-
数据定义伪指令
-
符号定义伪指令
-
段定义伪指令
-
结束伪指令
-
过程定义伪指令
-
宏命令伪指令
-
4.2.1 数据定义伪指令
-
用处:定义数据区中的变量大小和类型
-
格式:
注意:变量的类型及其操作数的个数决定了该变量所在内存空间的大小
-
数据定义伪指令助记符
-
DB 定义的变量为字节型
-
DW 定义的变量为字类型(双字节)
-
DD 定义的变量为双字型(4字节)
-
DQ 定义的变量为4字型(8字节)
-
DT 定义的变量为10字节型
举例:
DATA1 DB 11H,22H,33H,44H DATA2 DW 11H,22H,3344H DATA3 DD 11H*2,22H,33445566H
以上事例在内存中的分布:
-
-
说明:
-
伪指令的性质决定了变量的类型
-
定义字符串不需要DB伪指令
-
-
重复操作符:
-
作用: 为一个数据区的各单元设置相同的初值
-
目的: 常用于声明一个数据区
-
格式: [变量名] 伪指令助记符 n DUP(初值,…)
n是重复次数
-
-
?的作用
表示随机值,用于预留存储空间
随机数占1个字节单元
4.2.2 符号定义伪指令
将表达式的值赋给一个名字。当源程序中需多次引用某一表达式时,可以利用EQU伪指令,用一个符号代替表达式,以便于程序维护。
格式: 符号名 EQU 表达式 操作: 用符号名取代后边的表达式,不可重新定义 例: CONSTANT EQU 100 VAR EQU 30H+99H
注意:
EQU说明的表达式不占用内存空间
4.2.3 段定义伪指令
说明逻辑段的起始和结束; 说明不同程序模块中同类逻辑段之间的联系形态
定位类型:
PARA: 段的起点从节边界开始 (16个字节为1节) PAGE: 段的起点从页边界开始 (256个字节为1页) BYTE: 段的起点从存储器任何地址开始 WORD:段的起点从偶地址开始
组合类型:
与其它模块中的同名段在满足定位类型的前提 下具有的组合方式: NONE: 不组合 PUBLIC: 依次连接(顺序由LINK程序确定) COMMON: 覆盖连接 STACK: 堆栈段的依次连接 AT 表达式:段定义在表达式值为段基的节边界 MEMORY: 相应段在同名段的最高地址处。
4.2.4 结束伪指令
表示源程序结束 格式: END [标号]
4.2.5 过程定义伪指令
用于定义一个过程体 格式: 过程名 PROC [ NEAR / FAR ] ┇ RET 过程名 ENDP
过程名:过程入口的符号地址
4.2.6 宏命令伪指令
当 源程序中需要多次使用同一个程序段时,可以将该程序段定义为一个宏 格式: 宏命令名 MACRO <形式参数> ┇ ┇(宏体) ENDM
示例:
4.2.7 调整偏移量伪指令
用处:规定程序或变量在逻辑段中的起始地址
默认情况下:偏移地址为0
利用ORG指令,可以改变起始偏移地址
-
格式: ORG 表达式(非负常数)
-
例:
DATA SEGMENT
ORG 1200H
BUFF DB 1,2 DATA ENDS
以上代码表示的是:变量BUFF的偏 移地址=1200H
4.2.8 设定段寄存器伪指令
说明所定义逻辑段的性质 格式: ASSUME 段寄存器名:段名[,段寄存器名:段名,…]
4.2.9 汇编语言源程序结构
4.3 系统功能调用
DOS中断包括: 设备管理,目录管理,文件管理,其它 在某些情况下,同样的功能既可选择DOS中断,也可选择BIOS中断
4.3.1 DOS调用和BIOS调用的基本步骤
-
将功能号装入AH;
-
将调用参数装入指定的寄存器;
-
按中断类型号调用DOS或BIOS中断(DOS:21H, BIOS:10H/13H/16H) ;
-
检查返回参数是否正确。
一、DOS功能调用
说明:
-
DOS中断是包含多个子功能的功能包;
-
各子功能用功能号区分;
-
用软中断指令调用,中断类型码固定为21H。
调用格式: MOV AH,功能号 <置相应参数> INT 21
-
键盘输入-单字符输入(1号)
通过调用字符输入子功能,可接收从键盘上输入的字符,并以对应的ASCII码形式存放。 调用方法: MOV AH,01 INT 21H 输入的字符存放在AL中
-
键盘输入-字符串输入(10号)
调用格式:
用户自定义缓冲区格式:
-
显示输出-单字符(2号)
-
输出显示-字符串(9号)
注意点:
-
被显示的字符串必须以‘$’结束;
-
所显示的内容不应出现非可见的ASCII码;
-
若考虑输出格式需要,在定义字符串后,加上回车符和换行符。
-
-
返回操作系统(DOS)功能
功能号: 4CH 调用格式: MOV AH,4CH INT 21H 功能: 程序执行完该2条语句后能正常返回OS 常位于程序结尾处。
二、BIOS功能调用
通过中断指令调用相应的BIOS中断服务程序 BIOS中断服务程序实际上是一些对端口的输入输出操作,是微机系统中软件与硬件之间的一个可编程接口。
三、总结
均通过中断指令调用。1个中断类型码对应1个功能程序包; 每个程序包中的子功能通过功能号区分,调用时功能号须送AH; 部分功能既可用DOS中断也可以用BIOS中断; 注意不同子功能的入口/出口参数要求; DOS和BIOS中断均可能影响AX。
4.4 汇编语言程序设计
设计步骤: 根据实际问题抽象出数学模型 确定算法 画程序流程图 分配内存工作单元和寄存器 程序编码 调试
汇编语言程序控制结构的设计
4.5 重点考点题型
一、汇编语言源程序(结构、语句、执行流程)
重点知识:
-
区分汇编语言源程序与汇编程序;
-
熟悉汇编程序从
.ASM
到.EXE
的编译链接调试全过程; -
掌握指令语句格式,如
MOV AX, BX
; -
区分汇编语句类型:指令、伪指令、注释。
常见题型:
-
选择题/判断题:汇编语言源程序经过哪些处理步骤才能执行?
-
填空题:源程序编译后会生成哪个中间文件(答案:
.OBJ
)。 -
简答题:汇编语言的三类语句及其作用是什么?
二、伪指令(重点考点)
伪指令是考试高频点,理解其不生成机器代码但指导编译器工作的本质,是答题关键。
考试高频伪指令及考法:
-
数据定义类(如
DB
,DW
,DD
)-
题型:填空/选择/编程题中使用初始化变量或数组。
-
示例题:
DATA DB 10H, 20H
定义了几个字节?(答案:2)
-
-
符号定义(EQU)
-
题型:填空/选择题;理解
EQU
不占内存。 -
示例题:
VAR EQU 30H+10H
,VAR 值是多少?是否占内存?(答案:40H;不占内存)
-
-
段定义伪指令(SEGMENT/ENDS)
-
题型:解释段的结构或编写段定义。
-
要求明确段的组合方式(PUBLIC、COMMON)及定位方式(PARA、PAGE、BYTE)
-
-
ORG(偏移调整)
-
题型:编程题考你定义特定偏移位置的变量。
-
示例:
ORG 100H
表示从哪儿开始布局变量?
-
-
ASSUME(段寄存器设定)
-
题型:选择/填空题;要求写出正确的段寄存器与段名对应关系。
-
示例题:为何程序执行前要使用
ASSUME CS:CODE, DS:DATA
?
-
-
过程定义与调用(PROC/ENDP)
-
题型:编程题;判断
CALL
使用的是NEAR
还是FAR
调用。 -
示例:写一个带过程调用的完整汇编程序。
-
-
宏定义(MACRO/ENDM)
-
题型:简答题或程序重构题,考查宏命令重复使用逻辑。
-
要求你将一段重复程序段改写成宏。
-
三、系统功能调用(DOS与BIOS中断)
这一部分是汇编与系统编程的交汇点,也是考试中常出简答题、填空题和编程题的核心内容。
考点汇总:
-
DOS中断 INT 21H 调用流程
-
设置功能号到 AH
-
根据功能号设置参数
-
使用
INT 21H
调用
-
-
常见 DOS 功能号
-
AH=01H:输入一个字符
-
AH=02H:输出一个字符(DL 中)
-
AH=09H:显示字符串,以
$
结尾 -
AH=4CH:程序正常返回
-
-
BIOS 中断(如 INT 10H)
-
操作显示器、键盘等硬件。
-
常用于字符/光标控制。
-
常见题型:
-
选择题:
INT 21H
实现哪个功能时需设置AH=4CH
?(答案:程序返回) -
填空题:
AH=09H
功能需要将字符串以哪种符号结尾?(答案:$
) -
编程题:编写程序输出一串字符并等待按键退出。
四、汇编程序设计思路与结构控制
重点内容:
-
设计流程:需求→算法→流程图→内存与寄存器分配→编码调试;
-
程序控制结构:条件判断(
CMP
,JZ
,JNZ
)、循环(LOOP
,DEC/JNZ
)、过程调用; -
数据结构:数组、变量定义;
-
寄存器使用:AX/BX/CX/DX、SP、BP 以及段寄存器。
常见题型:
-
简答题:简述汇编程序的设计流程。
-
程序分析题:给一段含
CMP
,JZ
,LOOP
的程序,问其执行逻辑。 -
程序设计题:如:
-
编写程序比较两个数的大小;
-
输出一个字符串;
-
实现循环累加功能;
-
使用
INT 21H
实现用户交互。
-
五、考题类型分布预测
题型 | 占比 | 典型内容 |
---|---|---|
判断/选择题 | 30% | 概念识别、指令功能、伪指令用途、DOS功能号、指令结构 |
填空题 | 20% | 段定义/偏移、寄存器对应、参数设置 |
简答题 | 20% | 设计流程、伪指令解释、BIOS与DOS中断区别 |
程序阅读题 | 10% | 分析代码逻辑、寄存器变化、内存地址使用情况 |
程序设计/编程题 | 20% | 基于伪指令、调用过程、中断编写简易功能程序(如字符输出、数组求和、条件判断等) |
总结与备考建议
-
牢固理解伪指令的语义和用法,这是填空与编程题的基础;
-
熟记 DOS 常用功能号与中断号调用方式;
-
多做程序设计题,熟悉 AX、BX、CX 等寄存器用途和中断输入输出规则;
-
掌握段与偏移、堆栈、过程调用的配套关系;
-
最后强化调试思维:理解从
.ASM
到.EXE
的全过程,掌握调试思路如单步执行、观察寄存器变化等。
接续上文:微机原理与接口技术,期末冲刺复习资料(三)-CSDN博客
点关注不迷路哟。你的点赞、收藏,一键三连,是我持续更新的动力哟!!!
持续关注我~~~主页,查看更多内容哟(希望你能在这里有所收获🤭)。点关注,不迷路,哈哈哈!~~~
主页:一位搞嵌入式的 genius-CSDN博客https://blog.csdn.net/m0_73589512?spm=1000.2115.3001.5343
目录
接续上文:微机原理与接口技术,期末冲刺复习资料(三)-CSDN博客
点关注不迷路哟。你的点赞、收藏,一键三连,是我持续更新的动力哟!!!
5. 半导体存储器
5.1 概述
5.1.1 存储器系统
5.1.2 半导体存储器
5.1.3 主要技术指标
5.2 随机存取存储器
5.2.1 静态存储器(SRAM)
5.2.2 动态随机存储器DRAM
5.3 只读存储器(ROM)
5.3.1 EPROM
5.3.2 EEPROM
5.3.2.1 闪速存储器Flash
5.4 存储器扩展技术(内存储器设计)
5.5 高速缓存(了解)
5.5.1 Cache 的基本概念
5.5.2 设置 Cache 的理由
5.5. 3 程序的局部性原理
5.5.4 Cache 的工作原理
5.5. 5 Cache 的命中率与平均存取速度
5.5.6 Cache 的读写策略
1. 读操作策略
2. 写操作策略
5.5.7 Cache 的分级体系结构
1. 一级缓存(L1 Cache)
2. 二级缓存(L2 Cache)
3. 三级缓存(L3 Cache)(部分高性能处理器中有)
5.6 主要掌握知识点
5. 半导体存储器
主要内容:
-
存储器系统
-
半导体存储器的分类及其特点
-
半导体存储芯片的外部特性及其与系统的连接
-
存储器接口设计(存储器扩展技术)
-
高速缓存
5.1 概述
主要内容: 存储器系统 半导体存储器的分类及特点 两类半导体存储器的主要区别
5.1.1 存储器系统
微型机中的存储器总体上包括:内存和外存
二者在速度、容量、材料等有所差别
内 存 | 外 存 | |
---|---|---|
速度 | 快 | 慢 |
容量 | 小 | 大 |
单位容量价格 | 高 | 低 |
制造材料 | 半导体 | 磁性材料 |
存储器分类:
-
内存:主存、高速缓冲存储器
-
外存:联机外存、脱机外存
-
虚拟存储器
具体内容:
-
微型计算机中的存储系统主要有:
-
Cache存储器系统
-
虚拟存储器系统
-
-
Cache存储器系统:
由高速缓冲存储器(Cache)和主内存一起构成,来管理硬件系统
设计目标:提高CPU访问内存的存取速度
Cache:
-
虚拟存储系统:
主内存和部分硬磁盘构成,由操作系统管理:
设计目标:扩大存储容量
-
系统存取时间= 命中率Cache存取时间+不命中率主存存取时间
T=HT1+(1-H)T2
-
主要性能指标:
-
存储容量(S)
-
存取时间(T)(与系统命中率有关)
-
命中率(H)
-
T=HT1+(1-H)T2
-
-
单位容量价格(C)
-
访问效率(e)
-
5.1.2 半导体存储器
若干存储元(能存放1位二进制数的半导体器件)构成1个存储单元
-
分类:
内存:
-
随机存储器(RAM):
-
静态存储器(SRAM)
-
动态存储器(DRAM)
-
同步动态随机存取内存器(SDRAM)
-
-
只读存储器(ROM):
-
EPROM
-
EEPROM
-
一次性可写ROM
-
掩模ROM(只有这个是不可以写入的)
-
-
-
8088总线信号
5.1.3 主要技术指标
存储容量 存储单元个数×每单元的二进制数位数 存取时间 实现一次读/写所需要的时间 存取周期 连续启动两次独立的存储器操作所需间隔的最小时间 可靠性 功耗
5.2 随机存取存储器
掌握:
-
SRAM和DRAM的特点
-
集中常用存储芯片与系统的连接
-
存储器扩展技术
特点:
可以随机读或写操作 掉电后存储内容即丢失
类型:
-
静态存储器(SRAM)
-
动态存储器(DRAM)
5.2.1 静态存储器(SRAM)
特点:由双稳电路构成,存储信息稳定
典型SRAM芯片:
-
SRAM6264
容量:8K * 8b = 8K * 1B
主要引线(28根):
-
地址线:A0------A12;
-
数据线:D0------D7;
-
输出允许信号:OE;
-
写允许信号:WE;
-
片选信号:CS1,CS2。同时满足条件,才能让芯片工作。
-
-
工作过程
-
6264芯片与系统连接
存储器芯片与系统的连接分为两部分: 确定要访问的存储芯片 系统中可能存在多片存储器芯片,要访问的单元只能存在于某一片芯片上。 找到芯片后,寻找该芯片上要访问的单元。 6264芯片上有8K个单元,每个单元在该芯片上有惟一的13位地址码。 每片6264芯片上第一个单元在该芯片上的地址:0 每片6264芯片上最后一个单元在该芯片上的地址:8191
用芯片的13位地址码A0-A12寻址片内的每个单元
-
存储器地址
-
6264与系统的连接框架图
-
6264芯片的编址
-
译码电路
将输入的高位地址信号变换成一个有效输出信号,来选择某个存储器芯片,来确定该存储器芯片在内存中的地址范围
译码方式:
-
全地址译码:
用全部的高位地址信号作为译码信号,使得存储器芯片的每一个单元都占据一个唯一的内存地址。
它保证了该芯片在整个空间中具有唯一的地址范围。
好处:任何地址资源
不足:用到的地址“资源”多导致了电路复杂
全地址译码实例:
大于等于1表示的就是或运算
例: 已知某SRAM 6264芯片在内存中的地址为:3E000H~3FFFFH。试画出将该芯片连接到系统的译码电路。 设计步骤: 写出地址范围的二进制表示; 确定各高位地址状态; 设计译码器。
高位地址:0011111
-
部分地址译码
用部分高位地址信号(而不是全部)作为译码 信号,使得被选中存储器芯片占有几组不同 的地址范围。
如下图所示:
[解释上图] 分析图片内容可知:缺少A18线,所以就存在两个地址,分别为0或1的时候对应的段尾地址
-
例题:
用SRAM 6264芯片构成容量为32KB的存储器。要求存储器的地址范围为: 20000H~27FFFH
解答:
因为6264芯片大小为:8K * 1B,又因为存储器容量为32KB,所以需要4片6264芯片。
采用基本逻辑门电路设计:
-
-
74LS138译码器
图中红圈的3个引脚均有效的时候,才能使得74LS138工作
-
译码器主要功能: 根据输入的不同编码组合,确保其控制的各电路(芯片)在任一时刻只有一路(1个芯片)处于工作状态。
输出控制的某个Yx非。
-
例如:
-
小结
当仅需要将一片存储器芯片连接到系统中时,只需要简单的译码电路。 根据设定地址确定电路设计,由基本逻辑门实现 此时高位地址为一个确定值 当系统中的存储器由多片存储器芯片构成时:
此时高位地址为一个地址范围
为简化设计,可借助专用译码器
5.2.2 动态随机存储器DRAM
特点:电容组成存储元,需要定时刷新
典型DRAM芯片:
2164A
大小:64K×1bit
以256×256的矩阵形式排列 采用行地址和列地址来确定一个单元;
行列地址分时传送,共用一组地址信号线; 地址信号线的数量仅为同等容量SRAM芯片的一半。
-
主要引线:
地址总线上:先送行,后送列地址。
-
工作原理:
数据读出 数据写入 刷新:将存放于每位中的信息重新读出来后,又写入原位置中
-
2164A在系统中的连接
DRAM 2164A与系统连接的几点说明: 芯片上的每个单元中只存放1位二进制码,每字节数据分别存放在8片芯片中; 系统的每一次访存操作需同时访问8片2164A芯片,该8片芯片必须具有完全相同的地址; 芯片的地址选择是按行、列分时传送,由系统的低8位送出行地址,高8位送出列地址。 结论: 每8片2164A构成一个存储体(单独一片则无意义); 每个存储体内的所有芯片具有相同的地址(片内地址),应同时被选中,仅有数据信号由各片分别引出。
5.3 只读存储器(ROM)
EPROM(紫外线擦除)、EEPROM(电擦除)、Flash
5.3.1 EPROM
特点:可多次编程写入;掉点后内容不丢失;内容擦除需要“紫外线”
典型芯片:EPROM 2764
8K×8bit芯片 地址信号:A0 —— A12 数据信号:D0 —— D7 输出信号:OE非 片选信号:CE非 编程脉冲输入:PGM非 其引脚与SRAM 6264完全兼容.
2764的工作方式
EPROM 2764的应用
5.3.2 EEPROM
特点:可在线编程写入;掉点后内容不丢失;电擦除
工作方式:
-
数据读出:(#CE=0、#OE=0、#WE=1)
-
编程写入:
-
字节写入:每一次BUSY正脉冲写入1B
-
自动页写入:每一次BUSY正脉冲写入 32B
-
-
擦除:
-
字节擦除:一次擦除一个字节(写入FFH)
-
片擦除:一次擦除整片(保持10ms)
-
典型芯片: EEPROM 98C64
8K×8bit芯片; 13根地址线(A0 —— A12); 8位数据线(D0 —— D7); 输出允许信号(OE); 写允许信号(WE); 选片信号(CE); 状态输出端(READY / BUSY)。
EEPROM 的应用
可通过程序实现对芯片的读写; 仅当READY / BUSY=1时才能进行“写”操作 “写”操作的方法: ① 根据参数定时(延时)写入。100微秒为均值,一般120%。 ② 通过判断(查询)READY / BUSY端的状态进行写入 仅当该端为高电平时才可写入下一个字节。 ③ 中断控制方式 当READY / BUSY端为高电平时,该高电平可作为中断请求信号
例题:
将一片98C64A接到系统总线上,使其地址范围在3E000H~ 3FFFFH之间。并编程序将芯片的所有存储单元写入66H。
硬件设计:
软件设计:
定时方式进行写入:
START:MOV AX,3E00H MOV DS,AX
MOV SI,0000H
MOV CX,8192 AGAIN:MOV AL,66H MOV [SI],AL CALL TDELAY INC SI LOOP AGAIN HLT
5.3.2.1 闪速存储器Flash
特点:属于EEPROM类型芯片
-
通过写入命令的方式来控制芯片的工作方式
-
通过读状态寄存器的值,获取芯片的当前工作状态
-
与SRAM的区别:
-
在进行写入和擦除的时候需要12V编程电压
-
-
与普通的EEPROM相比的区别:
-
通过读状态寄存器的内容确定是否可以继续写入
-
提高命令字的方式控制芯片处于何种工作模式
-
工作方式:
5.4 存储器扩展技术(内存储器设计)
存储器扩展:
-
多片存储芯片拼在一起构成一个我们要求的内存空间。
-
各存储芯片在整个内存中占据不同地址范围。
-
任一时刻仅有1片(或1组)被选中
-
存储器芯片的存储容量等于: 单元数(字节数)×每单元的位数(字长)
存储器扩展方法:
-
位扩展:扩展字长
-
字扩展:扩展单元数
-
字位扩展:既扩展字长又扩展单元数
解释:
-
位扩展:每单元字长的扩展
实例:
DRAM 2164A: 64K×1bit
采用行地址和列地址来确定一 个单元; 行列地址分时传送,共用一组 地址信号线; 地址信号线的数量仅为同等容量 SRAM芯片的一半。
使用:8片2164A构成64KB存储体
这里的8片2164A必须具有完全相同的地址,必须同时被选中或同时不被选中
方法:
位扩展的连线特点: 将每片的地址线、控制线并联,数据线分别引出。 效果: 存储器的单元数不变,位数增加。
注意:确保所有芯片具有完全相同的地址范围。
-
字扩展:
芯片中每个单元的字长满足,但单元数不满足
原则:
-
每个芯片的地址线、数据线、控制线并联
-
片选端分别引出,使得每个芯片有不同的地址范围。
注意:确保所有芯片具有完全不同的地址范围
例题:
用SRAM 6264(8K*8bit)芯片构成容量为32KB的存储器
存储器的地址范围为: 20000H~27FFFH 设计:
由地址范围得: 需4片6264芯片 存储器地址范围: 00100000000000000000~00100111111111111111
-
-
字位扩展:
单元数及每单元字长均不满足要求
设计过程: 根据内存容量及芯片容量确定所需存储芯片数; 进行位扩展以满足字长要求; 进行字扩展以满足容量要求。 若已有存储芯片的容量为L×K,要构成容量为M ×N的存储器,需要的芯片数为: (M / L) ×(N / K)
例题:
首先进行位扩展: 用8片芯片构成32KB存储体 利用A0~A14寻址存储体内32K个单元 所有控制信号线和地址信号线并联引出 再进行字扩展: 用8个32KB存储体构成256KB存储器 寻址8个存储体,至少需要3位高位地址信号
-
5.5 高速缓存(了解)
5.5.1 Cache 的基本概念
Cache(高速缓存)是一种位于 CPU 与主存(RAM)之间的高速存储器,专门用来缓解两者之间访问速度差异的问题。它保存了CPU 最近访问或即将访问的数据块,以减少访问主存的次数,从而提高系统整体性能。
5.5.2 设置 Cache 的理由
-
CPU 与主存速度差距大
-
当前 CPU 的处理速度远高于内存访问速度,若每次都访问主存,将极大浪费 CPU 运算能力。
-
-
高速存储器价格昂贵
-
将高速存储器设置为主存会极大提高成本,因此采用容量小、速度快的 Cache 是权衡成本与性能的优化方案。
-
5.5. 3 程序的局部性原理
Cache 的设置基于程序执行时的局部性原理,分为以下两种类型:
-
时间局部性(Temporal Locality)
-
最近访问的数据项可能在不久的将来被再次访问。
-
如循环体内变量、多次调用的函数等。
-
-
空间局部性(Spatial Locality)
-
被访问的数据项,其邻近地址的数据很可能在短时间内也会被访问。
-
如数组访问、顺序执行指令等。
-
5.5.4 Cache 的工作原理
-
主存与 Cache 区划分
-
主存与 Cache 被划分为固定大小的块(Block),如每块 64 字节;
-
块与块之间存在映射关系。
-
-
访问流程
-
当 CPU 请求某地址的数据时,优先查询 Cache;
-
若 Cache 中命中(Hit),直接返回;
-
若 未命中(Miss),则访问主存并将对应数据块调入 Cache;
-
如果 Cache 满了,则按某种替换策略(如 LRU、FIFO)淘汰某一块,腾出空间。
-
-
地址映射方式
-
直接映射(Direct Mapping)
-
全相联映射(Fully Associative Mapping)
-
组相联映射(Set-Associative Mapping)
-
5.5. 5 Cache 的命中率与平均存取速度
-
命中率(Hit Ratio):CPU 所有访问中,访问命中的 Cache 次数所占比例。
命中率命中次数总访问次数
-
平均存取时间(T_avg):
命中率主存命中率
其中,
-
TCache:Cache 存取时间
-
T主存:主存(RAM)存取时间
-
-
Cache与主存容量比:
-
通常为 1 : 128(即主存是 Cache 的 128 倍)
-
5.5.6 Cache 的读写策略
Cache 的读写策略会直接影响数据一致性和性能,常见策略包括:
1. 读操作策略
-
贯穿读出式(Look-through Read) CPU 读数据时先访问 Cache,若未命中则继续访问主存。
-
旁路读出式(Look-aside Read) CPU 并行查询 Cache 和主存,哪个先返回就使用哪个。
2. 写操作策略
-
写穿式(Write-through) 数据同时写入 Cache 和主存,保持一致性,但写入速度慢。
-
回写式(Write-back) 仅写入 Cache,延迟写入主存,只有当该块被替换时才更新主存,效率高但一致性较难维护。
5.5.7 Cache 的分级体系结构
为了进一步提升访问速度与系统性能,现代计算机通常设置多级 Cache。
1. 一级缓存(L1 Cache)
-
位于 CPU 内部,直接与运算核心相连;
-
访问速度最快,但容量较小(如 32KB~128KB);
-
通常分为指令缓存(L1I)*和*数据缓存(L1D)。
2. 二级缓存(L2 Cache)
-
可位于 CPU 内部或外部,容量较 L1 大(如 256KB~1MB);
-
比 L1 慢但比主存快;
-
作为 L1 的后备缓存。
3. 三级缓存(L3 Cache)(部分高性能处理器中有)
-
共享于多个内核之间;
-
容量较大(数 MB 到几十 MB),速度低于 L2;
-
提高多核协同效率。
5.6 主要掌握知识点
译码电路设计 半导体存储器系统设计 SRAM存储器系统设计 EPROM和EEPROM与系统的连接及其读操作或读、写操作。
注意:
5.7 重点题型
接续上文:微机原理与接口技术,期末冲刺复习资料(五)-CSDN博客
点关注不迷路哟。你的点赞、收藏,一键三连,是我持续更新的动力哟!!!
持续关注我~~~主页,查看更多内容哟(希望你能在这里有所收获🤭)。点关注,不迷路,哈哈哈!~~~
主页:一位搞嵌入式的 genius-CSDN博客https://blog.csdn.net/m0_73589512?spm=1011.2415.3001.5343
目录
7. 串行并行数字接口
7.1 并行通信与串行通信
7.1.1 并行通信
7.1.2 串行通信
7.2 可编程定时器8253
7.3 可编程并行接口8255
7.4 章末小结
8.模拟量的输入输出
8.1 模拟量的输入输出通道
8.1.1 模拟量的输入通道
8.1.2 模拟量的输出通道
8.2 数/模(D/A)变换器
8.2.1 D/A变换器的工作原理
8.2.2 主要技术指标
8.2.3 典型D/A转换器DAC0832
8.2.4 D/A转换器的应用
8.3 模/数(A/D)转换器
8.3.1 A/D转换器类型
8.3.2 典型的A/D转换器芯片:ADC0809
7. 串行并行数字接口
主要内容:
-
了解并行通信和串行通信的一般概念
-
掌握两种可编程并行接口芯片的应用
接口电路的分类:输入、输出;并行、串行;数字、模拟。 接口芯片内部包括:总线的连接、设备的连接。 (数据、控制、地址信号线)
7.1 并行通信与串行通信
7.1.1 并行通信
1. 特点:
-
两设备之间有多个数据位传输(以字节或字)
-
主要适用于近距离通信(计算机内的总线结构)
-
传输速度快,处理简单;适合近距离传送;传送的信息没有固定格式的要求
7.1.2 串行通信
-
串行数据传送方式:1位1位的通过同一条通信线传送
先由发送设备将几位并行数据经并--串转换硬件转换成串行方式,再逐位传输到接收设备,并在接收端将数据从串行方式重新转换成并行方式。
数据传送方式:双工、半双工、单工
通信方式:同步通信和异步通信
数据校验
-
调制与解调
-
同步通信和异步通信
-
串行通信的数据校验
-
串行通信的接口标准
7.2 可编程定时器8253
掌握:
-
引线功能及计数启动方法
-
6种工作方式及其输出波形
-
应用: 芯片与系统的连接 芯片的初始化编程
计数和定时:
时钟脉冲是他的工作基准
计数:加法和减法计数
定时:计数脉冲为周期恒定时;定时的时间长度取决于时钟脉冲的周期及脉冲数
8253芯片特点:
-
可编程的逻辑器件;
-
非通道型的接口,具有特定功能;
-
可实现计数和定时;
-
工作方式:
-
减法计数
-
计数值减为0时输出相应控制信号
-
输出控制信号的形式可通过软件设置
-
1.外部引线及内部设备:
由上图可知:内部样有3个定时器和计数器
内部结构特点
四个端口地址的编码是:
A1 A0 0 0 CNT0 0 1 CNT1 1 0 CNT2 1 1 控制寄存器
结构特点:
内部的3个计数器均为减法计数器。
每个计数器含有:16位的计数寄存器和16位的初值寄存器,这两个寄存器都含有相同的端口地址。
控制寄存器(8位,而且只能写入不能读出):存放控制命令字
2.计数启动方式:
由GATE端口的信号形式决定: 高电平——软件启动方式
上升沿——硬件启动方式
3.工作方式:
8253有6种工作方式:不同方式有不同的计数启动方式和输出波形
-
方式0:
软件启动,不自动重复计数,计数结束后输出高电平
注意:
整个计数过程中, GATE信号保持高电平,若GATE变低,则停止计数直到GATE变高后继续。 若计数过程中修改计数初值,新的初值立即生效。
-
方式1:
硬件启动,不自动重复计数,计数开始输出低电平,结束后又变成高电平。
注意:
① 计数一旦启动,GATE端既使变低也不会影响计数。 ② 可重复触发。当计数到0后,不用再次写入计数初值,只要再次出现GATE上升沿,即可产生一个同样宽度的负脉冲 ③ 写入新的初值,由GATE上升沿触发新的计数
-
方式2(分频器):
软、硬件启动,自动重复计数,计数到最后一个脉冲时输出低电平
注意:
①可输出频率为(1/N)CLK 脉冲频率的连续方波信号 ②每1个OUT端脉冲包含(N-1)*CLK的正脉冲,1CLK的负脉冲 ③计数过程中若GATE变低,则计数停止,持续输出高电平,等到GATE变高后重新触发从初值计数 ④新的初值下一轮有效
-
方式3(方波发生器):
软、硬件启动,自动重复计数。输出对称方波
注意:
① 若N为偶数,输出频率为(1/N)CLK频率的连续对称方波信号。 ② 若N为奇数,输出波形为 (N+l)/2CLK 周期正脉冲,(N-1)/2CLK 负脉冲。
-
方式4(软件触发选通)
软件启动,不自动重复计数。计数结束输出一个CLK宽度的低电平。
-
方式5(硬件触发选通)
硬件启动,不自动重复计数。波形与方式4相同。
8253工作方式小结
(1) 方式2(分频器)、方式4(软件触发选通)和方式5(硬件触发选通),它们的输出波形相同,都是宽度为1个CLK周期的负脉冲。区别是,方式2是自动重复工作的,而方式4需由软件(设置计数值)触发启动,方式5需由门控GATE信号触发启动。 (2) 方式5(硬件触发选通)与方式1(硬件触发单稳),触发信号相同,但输出波形不同——方式1输出为宽度是N个CLK周期的负脉冲(计数过程中输出为低),而方式5输出为宽度是1个CLK周期的负脉冲(计数过程中输出为高)。
(3) 6种工作方式中的任一种方式,只有在写入计数初值后才能开始计数。方式0、2、3、4都是写入计数初值后,计数过程就开始了。而方式1和方式5在写入计数初值后,需由外部GATE信号的触发启动,才能开始计数过程。 (4) 6种工作方式中,只有方式2(分频器)和方式3(方波发生器)为自动重复工作方式,其他4种方式都是一次性计数,要继续工作需要重新启动。 一般来说,方式0、1、4、5选作计数器用(输出1个电平或1个脉冲),方式2、3选作定时器用(输出周期脉冲或周期方波)。
4. 8253初始化
需要两个写脉冲——意味着是两条OUT指令
第一个写脉冲是:写入控制字
第二个写脉冲是:写入计数初值
向可编程芯片内写入控制字和计数初值的工作称为对可编程芯片的初始化
8253 控制字格式
5. 8253的应用
硬件设计: 与系统的连接 软件设计: 初始化程序设计 写入控制字 置计数初值
与系统的连接:
注意点:
每一次启动计数,需有两次写操作: 写控制字 写计数器初值 如果初值为8位字长,则一次写入;若初值为16位字长,则需两次写入,每次都是用AL。 每个计数器的控制命令字均送入控制寄存器。 各计数器的计数初值送到该计数器的计数寄存器及初值寄存器。
初始化程序流程
当有两个以上计数器被应用时的初始化程序设计流程: 方法一:以计数器为单位逐个进行初始化。(单个一起)
方法二:先写所有计数器的方式字,再装计数值。(分开写入)
6. 8253接口小结
可编程8bit并行接口 通过软件初始化控制其工作方式和计数/ 定时时长 实现对外部设备的定时/计数控制 减法计数器
7.3 可编程并行接口8255
特点:
-
通道型接口 主要用于数据的输入或输出
-
含3个独立的8位并行输入/输出端口 2个为8位端口(PA,PB); 1个可拆分为两个4位端口(PC口)
-
各端口均具有数据的控制和锁存能力 既可作为输入端口,也可以作输出端口。
-
可通过编程,设置各端口工作在某一确定状态下。
引线:
连接系统端的主要引线:
连接外设端的引脚:
8255和系统的连接示意图:
工作方式:
-
基本输入、输出方式(方式0)
-
选通方式(方式1)
-
双向传送方式(方式2)
方式0:
相当于三个独立的8位简单接口 各端口既可设置为输入口,也可设置为输出口,但不能同时实现输入及输出 C端口可以是一个8位的简单接口,也可以分为两个独立的4位端口 常用于连接简单外设,适于无条件或查询方式,无需联络信号
应用:
习惯上: A端口和B端口作为8位数据的输入或输出口 C口的某些位作为状态输入 注: 若使C端口低4位中某一位作为输入口,则低4位中其他位都应作为输入口。同时可设高4位作为输出。
方式0与8255的连接示意图
方式1:选通方式
利用一组选通控制信号控制A端口和B端口的数据输入输出 A口、B口作输入或输出口,C口的部分位用作选通控制信号 A口、B口在作为输入和输出时的选通信号不同
-
PA,PB端口工作方式1,做输出口
#OBF、#ACK、INTR、INTE
-
PA,PB端口工作方式1,做输入口
#STB、IBF、INTR、INTE
应用:
方式1主要用于中断控制方式下的输入输出 仅A端口和B端口可工作于方式1 C口的8位除用作选通信号外,其余位可工作于方式0下,作为输入或输出口。
方式2:不需要通过软件命令
-
双向输入输出方式 可以既作为输入口,又作为输出口。
-
只有A端口可工作在方式2下。C端口的5位作为选通端
应用:
可使A端口作为双向端口所有 用于中断控制方式 当A口工作于方式2时: B口可工作于方式1 此时C口的所有位都用作选通控制信号的输入输出 B口也可工作于方式0 此时C口的剩余3位也可工作于方式0
8255三种工作方式小结
A、B、C三个端口都可以工作于方式0,以查询或无条件传送方式实现数据的输入/输出; A、B端口可以工作于方式1,以中断控制方式实现数据的输入/输出; A端口可以工作于方式2,以中断控制方式,并通过时序控制数据的输入/输出。
方式控制字及位控制字
方式控制字: 用于确定3个端口的工作方式及数据传送方向; 位控制字 仅用于C端口 可设置C口某位的初始状态(为高电平或低电平) 当其工作于方式0下且作为输出口时,一般需要对作为输出的位设置初始状态(即初始化)
8255的方式控制字和位控制字
8255芯片的应用
8255应用要求
主要引线功能及结构 3种工作方式及其特点 应用:
-
芯片与系统的连接
-
芯片的初始化编程
-
数据输入/输出控制程序设计
7.4 章末小结
了解什么是可编程? 可编程定时/计数器
-
启动方式
-
不同工作方式下的输出波形特点
-
初始化编程
-
与系统的连接
1到4需要选择相应的工作方式
可编程并行数字接口
-
不同工作方式的适应场合
-
与系统的连接
-
初始化编程
-
相关控制程序
最终要求就是:利用可编程定时计数器8253和可编程并行接口8255设计需要的I/O接口控制系统。
8.模拟量的输入输出
主要内容:
-
模拟量输入输出通道的组成
-
D/A转换器的工作原理、连接及编程
-
A/D转换器的工作原理、连接及编程
8.1 模拟量的输入输出通道
8.1.1 模拟量的输入通道
-
传感器(Transducer) 非电量→电压、电流
现在集成更多器件,可以直接输出数字信号
-
变送器(Transformer) 转换成标准、统一的电信号
-
信号处理(Signal Processing) 放大、整形、滤波
-
多路转换开关(Multiplexer) 多选一,多路模拟开关
-
采样保持电路(Sample Holder,S/H) 保证变换时信号恒定不变
-
A/D变换器(A/D Converter) 模拟量转换为数字量,是模拟量输入通道的中心环节
8.1.2 模拟量的输出通道
-
D/A变换器(D/A Converter) 数字量转换为模拟量,核心部件。 要保证转换过程中数字量保持不变,所以在系统和D/A之间加上锁存器,保持数字量稳定。
-
低通滤波 平滑输出波形
-
放大驱动 提供足够的驱动电压,电流
8.2 数/模(D/A)变换器
掌握:
-
D/A变换器的工作原理
-
D/A变换器的主要技术指标
-
DAC0832的三种工作模式
-
DAC0832的应用
8.2.1 D/A变换器的工作原理
组成:
-
模拟开关
-
电阻网络
-
运算放大器
基本变换原理:
1.当运放的放大倍数足够大时,输出电压VO与输入电压Vin的关系为:
2.若输入端有n个支路, 则输出电压VO与输入电压Vi的关系为:
n=8的权电阻网络:
设:Si=1表示Si合上,Si=0表示Si断开,则:
实际的D/A转换器——R-2R梯形电阻网络
基本变换原理
如果用8位二进制代码来控制图中的S1~S8(Di=1时Si闭合;Di=0时Si断开),则不同的二进制代码就对应不同输出电压VO; 当代码在0~FFH之间变化时,VO相应地: 在0~(255/256)Vref之间变化; 为控制电阻网络各支路电阻值的精度,实际的D/A转换器采用R-2R梯形电阻网络,它只用两种阻值的电阻(R和2R)。
例题:
某8位D/A转换器,输出电压为0V--5V。当输入的数字量为40H时, 其对应的输出电压分别是多少? 解:当输出电压为0V时,对应的数字量输入为00H;输出为5V时,输入为FFH。 所以,当输入的数字量为40H时,其对应的输出电压分别约为2的6次方*(5/255)=1.255V。
注意:为什么是2的6次方?
其实就是单纯用这个表示的40H对应的10进制的数值。
8.2.2 主要技术指标
分辨率(Resolution) 输入的二进制数每±1个最低有效位 (LSB)使输出变化的程度。 分辨率表示方法: 可用输入数字量的位数来表示,如8位、10位等; 也可用一个LSB (Least Significant Bit)使输出变化的程度来表示。
举例:
一个满量程为5V的10位D/A变换器,±1 LSB的变化所引起输出模拟量的变化为: 5/(2的10次方-1) = 5/1023 = 0.004888V = 4.888mV
转换精度(误差)
实际输出值与理论值之间的最大偏差
影响因素:
-
分辩率
-
电源波动
-
温度变化等等。
8.2.3 典型D/A转换器DAC0832
特点:
-
8位电流输出型D/A转换器
-
T型电阻网络
-
差动输出
主要引脚功能
DAC0832的内部结构
工作模式
-
单缓冲模式
-
使输入锁存器或DAC寄存器二者之一处于直通,即芯片只占用一个端口地址。
-
CPU只需一次写入即开始转换。写入数据的程序为:
MOV DX,PORT MOV AL,DATA OUT DX,AL
-
单缓冲模式例
端口地址:0278H 最大输出值5V,对应数字量:FFH 最小输出值0V,对应数字量:00H
-
-
双缓冲模式(标准模式)
-
输入寄存器和DAC寄存器均需控制。 当输入寄存器控制信号有效时,数据写入输入寄存器中,并同时位于DAC寄存器的输入端; 在DAC寄存器控制信号有效时,数据写入DAC寄存器,并启动变换。
-
此时芯片占用两个端口地址。 优点: 数据接收与D/A转换可异步进行; 可实现多个DAC同步转换输出。
分时写入、同步转换
-
双缓冲模式分时输入,同步转换例
双缓冲模式的数据写入程序
-
-
无缓冲模式
使内部的两个寄存器都处于直通状态。模拟输出始终跟随输入变化。 不能直接与数据总线连接,需外加并行接口(如74LS373、8255等)。
8.2.4 D/A转换器的应用
8.3 模/数(A/D)转换器
要点:
A/D转换器的一般工作原理 A/D转换器的主要技术指标 A/D转换器的应用 与系统的连接 数据采集程序的编写
定义:将连续变换的模拟信号转化成数字信号的装置
8.3.1 A/D转换器类型
计数型A/D转换器 ----速度慢、价格低,适用于慢速系统 双积分型A/D转换器 ----分辩率高、抗干扰性好、转换速度慢,适用于中速系统 逐位反馈型A/D转换器 ----转换精度高、速度快、抗干扰性差。应用范围更广。
A/D转换器的工作原理:
逐位反馈型A/D转换器 类似天平称重量时的尝试法,逐步用砝码的累积重量去逼近被称物体
例:
主要技术指标:
-
转换精度 量化误差(分辨率) 非线性误差 其它误差
-
量化间隔
-
量化误差(分辨率)
绝对量化误差 绝对量化误差=1/2 △ 相对量化误差 相对量化误差=(1/2)× △ × 1%
例: 设满量程电压=10V,A/D变换器位数=10位,则: 绝对量化误差 =1/2*10/(2的10次方-1)≈ 10/2的11次方 = 4.88mV 相对量化误差 ≈ 10/2的11次方 *1% = 0.049%
-
其他指标
转换时间 实现一次转换需要的时间。精度越高(字长越长),转换速度越慢。 动态范围(量程) 允许转换的电压范围 如:0V---5V -5V---5V 动态范围:5V 10V
8.3.2 典型的A/D转换器芯片:ADC0809
特点:
-
8通道(8路)输入
-
8位字长
-
逐位逼近型
-
转换时间100μs
-
内置三态输出缓冲器
主要引脚功能:
D7~D0:输出数据线(三态) IN0~IN7:8通道(路)模拟输入 ADDA、ADDB、ADDC:通道地址 ALE:通道地址锁存 START:启动转换 EOC:转换结束状态输出 OE:输出允许(打开输出三态门) CLK:时钟输入(10KHz~1.2MHz)
内部结构:
工作时序:
ADC0809的工作过程:
由时序图知ADC0809的工作过程如下: 送通道地址,以选择要转换的模拟输入; 锁存通道地址到内部地址锁存器; 启动A/D变换; 判断转换是否结束; 读转换结果
判断转换结束的方法:
软件延时等待(比如延时120us) 此时不用EOC信号,CPU效率最低 软件查询EOC状态。 把EOC作为中断申请信号,接到中断控制器的IN端。 在中断服务程序中读入转换结果,效率较高
ADC0809的应用
硬件连接 通常情况下A/D转换器需要经数字接口与系统连接 数据采集程序设计 从数据采集到存储
ADC0809与系统的连接:
一般需通过数字接口与系统连接 获取转换结果及状态信息(EOC)需通过输入接口 选择通道地址、输出地址锁存(ALE)及启动变换(START)信号需通过输出接口 由于ALE和START信号的特点,通常将两者并联后,连接到数字输出接口。
当仅采集单路模拟量时 此时通道可由硬件确定,系统无须输出通道地址,则也无须地址锁存。 当循环采集多路模拟量时 系统须通过软件方式循环输出不同的通道地址,及相应的地址锁存信号。
例:
-
单路模拟量输入:
-
多路模拟量输入: