微机原理速成
微机原理速成
课时1
基础概念
位:计算机最小表示单位,0,1
字节:一个8位二进制数叫1字节单位B
1B (Byte)=8位,
1KB=2 10B,
1MB= 210KB=210×210B
字:一个16位二进制数
字长“处理器二进制位数
机器数:计算机中数据,分为数值数据和非数值数据
真值:机器数代表真正的数值
数制码制转换

十进制整数——二进制
方法:除2取余
用2不断去除要转换的十进制数,直至商为0。每次的余数即为二进制位数。
先得到的是低位,后得到是高位
十进制小数-二进制
2不断去乘要转换的十进制数。每次得到积的整数部分为二进制位数。 先得到高位,后得到的是低位
例题
把十进制数137.875转化为二进制数
整数部分:除2
小数部分:乘2法

二进制--十六进制
十六进制--二进制
方法--四位一组,不足四位,用0补
将二进制数100000111.1101转换为十六进制数
10000111.1101)2=(1000 0111.1101)2=(87.D)16
同理:3位二进制数对应1位八进制

带符号的机器数表示方法:原码,补码,反码
1.原码
机器数原本是原本的编码,最高是符号位,0是正,1是负,后续是数值位
范围是-127~+127
八位二进制数
1000 0001 :-1
反码:
- 正数:原码=反码=补码
- 负数:符号位不变,数值位求反
- 范围 :-127~127
补码
- 正数:原码=反码=补码
- 负数:反码+1
- 范围 -128~127
补码计算

运算规则
- 符号位与数值位一起运算
- 符号位产生进位可以舍去
设字长是8位,X=+65 Y=+48 计算[ X+Y]补 [ X-Y]补

溢出判别
字长是n位符号数,能表示最大值 2n-1, 超过就是溢出
由于溢出只可能时出现在同号相加或异号相减运算,且采用补码减法可转变为加法,最直观,最易于理解的溢出判定方法,如果整数加正数,结果变为负数或负数加负数,结果是正数,就发生溢出
3)ASCⅡ码(记忆)
数字符0~9的ASCII码为30H~39H;
大写字母A~Z的ASCII码为41H~5AH
BCD码
1位十进制可采用4位二进制编码表示
压缩BCD码,一个字节表示两位十进制数,这是常用的BCD码
非压缩BCD码:一个字节表示一位十进制数,字节高4位总是0000,如16位非压缩BCD码是00000001 00000110
计算机常用的BCD码 是二进制编码的十进制数

微机组成
CPU,存储器,输入输出设备,接口电路和系统总线
总线:总线是CPU向存储器输入和输出接口,传送地址,数据和控制信息共用通路
数据总线:16 传输数据
地址总线 20 传送地址信息
控制总线16 传输控制信号
例:8086的数据线为 16 位,地址线为 20 位,I/O口使用 16 位地址线
课时2
8086:16位微处理器
8086与8088区别
- 8086BIU中的指令队列是6字节,外部数据线总线16位
- 8088BIU中指令队列是4字节,外部数据总线是8位
CPU 内部结构

CPU EU(执行部件) BIU(总线接口部件)
EU
- 负责指令的译码和执行
- 负责向总线接口部件BIU提供偏移地址
- 对通用寄存器和标志寄存器进行管理
EU组成
- 算数逻辑部件ALU
- 标志寄存器FR
- 通用寄存器
- 16位数据AX,BX,CX
- 16位指针寄存器 SP,BP
- 16位变址寄存器DI,SI
- 暂存寄存器
- EU控制电路
BIU
- 负责CPU与内存IO端口传送指令或数据
- BIU从内存取指令送到指令队列缓冲器
- EU执行时,BIU配合EU从指令内存单元或IO端口中读取数据
- 或者把EU操作结果送到指定的内存单元或IO端口去
BIU组成
-
段寄存器
-
代码段寄存器CS
-
堆栈段SS
-
数据存储段DS
-
附加段寄存器ES
-
-
指令指针寄存器IP
-
地址加法器
-
指令预期队列
-
总线控制逻辑
-
![image-20220426085404072]()
数据寄存器
AX -AH(高字节) AL(低字节)累加器
BX BH BL 基数寄存器
CX CH CL 计数寄存器
DX DH DL 数据寄存器
地址指针寄存器
- 用来存取于当前的地址段中数据
- SP 堆栈指针寄存器,给出栈顶的偏移地址
- BP 基址指针寄存器:存放于堆栈段中的一个数据区基址偏移地址
变址寄存器
存放当前数据段的偏移地址
SI 源变址寄存器
DI 目的变址寄存器
指令指针寄存器 IP
存放BIU 要取的下一条指令偏移地址
下一条指令的物理地址 CSX16+IP
标志寄存器
状态标志
进位标志CF:最高进位产生进位/借位CF=1
奇偶标志PF:预算结果低8位1的个数是偶数 PF=1
辅助进位标志AF 低4位向高4位有进位 AF=1
零标志ZF 运算结果是0 ZF=1
符号标志SF:最高位式1,表示结果是负数,SF是1
溢出标志OF 运算过程中发生溢出 OF=1
控制标志
中断允许标志IF
IF=1,则CPU 可以接收可以屏蔽的中断请求
方向标志DF:
DF=1 地址自动递减
DF=0 地址自动递增
跟踪陷阱标志TF
为调试程序方便
TF=1则处于单步工作方式
TF=0 为正常执行程序
段寄存器
代码段CS:用来存放当前正在运行的程序,不做目的操作数
数据段DS:存放当前运行程序所用的数据
堆栈段SS:堆栈作用是保护数据
附加数据段ES:辅助的是数据区
为什么要分段
8086/8088有20位地址线,能够寻址1 MB的内存空间,但寄存器是16位,只 能寻址64KB存储空间,所以要分段,把1MB的存储空间分成若干逻辑段,每 个逻辑段最大具有64 KB的存储空间
分段概念:把1MB存储空间分为若干逻辑段,每个逻辑段最大具有64KB存储空间
存储器分段和地址空间
物理地址形成
物理地址:实际地址,一个存储单元物理地址是唯一的,而逻辑地址是不唯一的
段基址:段首址最高16位,段基址存放在段寄存器DS,ES,SS,CS
偏移地址:段内存储单元距离段首地址偏移量,也有有效地址EA,存放在IP
BP,SI,DI,BX,偏移地址范围:0000H~FFFFH
逻辑地址:通常用段基址,偏移地址形式来描述,程序中使用,如0000H:0001H
物理地址 = 段基址x16 +偏移量
常用:CS:IP ,SS:SP

计算物理地址

堆栈
先进后出,后进先出原则管理存储区域,SS给出堆栈段段基址,SP存放栈顶地址,指出从栈顶到段首址的偏移量

引脚
MN/MX :最小/大模式设定输入
MN/MX=1 工作方式设置是最小模式。在此方式下,系统全部控制信号由8086本身提供
MNMX=0 工作方式设置为最大模式,会外接其他CPU扩展
ALE地址锁存允许信号,输出,正脉冲。在任何一个总线周期的T1状态
ALE输出有效电平,以表示当前总线上输出的是地址信息,要求进行地址锁存。
RESET复位信号,输入高电平有效
RD:读信号
WR:写信号
NMI非屏蔽中断请求信号:上升沿有效,此请求不受IF影响,只要此信号出现,CPU就在现行指令结束后响应中断
INTR可屏蔽中断请求信号:高电平有效,INTR=1,表示外设提出了中断请求,8086/8088在每个指令周期最后一个T状态去采样此信号
若IF=1,若CPU响应中断,转去执行中断服务程序
INTA中断响应信号:输出,低电平有效。用于对外设中断请求做出响应,连续周期中两个负脉冲,第一个脉冲是通知外设接口,它的中断请求已获取允许,外设接口收到2个负脉冲,往数据总线上放中断类型码。
BHE/S7:高8位数据总线允许/状态复用引脚,在T1状态:输出,若果为0,表示高8位数据线D15~D8上数据有效
DEN:数据允许信号,输出,低电平有效,提供给数据总线收发器8286,表示CPU准备发送或接收一个数据,常作为数据总线驱动器三态控制信号
M/IO:存储器/外设信号,输出1-访问存储器,0-访问外设
DT/R:数据收发控制信号,输出三态,用来控制数据传送方向,1-发送数据,0-接收数据
AD15~AD0:地址/数据复用引脚。在总线周期的T1状态用来输出要访问的 存储器或I/O端口地址,在T2~T4状态,作为数据传输线。
A19/S6~A16/S3:地址/状态复用引脚。在T1状态:输出高4位地址,在T2~ T4状态:输出状态信息。访问存储器时:A19~A16与AD15 ~AD0组成20位地址; 访问I/O端口时:不使用这4条引线
READY:“准备好”信号,由所寻址的存储器或I/O端口发来的响应信号, 表明存储器或I/O端口的状态。CPU在T3采样READY,若READY=0,则在T3后插 入一个或多个TW,直至READY=1,进入T4,完成数据传送,从而结束当前总线 周期。
HOLD:总线保持请求信号,输入,高电平有效
HLDA:总线保持响应信号,输出,高电平高
奇区和偶区
8086和1MB存储空间实际上分为两个512KB的存储体,分别叫奇存储体,和偶存储体
偶存储体育数据总线D7-D0相连,该存储体中每个地址均为偶数地址
奇存储体育数据总线D15-D8,该存储体中每个地址均为奇数地址
时序与总线操作
指令周期:执行一条指令所需要的时间,不同指令的指令周期在时间上是不相等的
总线周期:CPU访问一次存储器或IO接口所需要的时间,一个指令周期由一个或几个总线周期组成,在8086中最基本的总线周期由4个时钟周期组成,分别是T1,T2,T3,T4
时钟周期,执行指令所有操作是在时钟脉冲下控制下一步一步进行的,时钟周期是CPU基本时间计量单位,时钟周期主频决定,计算公式T=1/f
等待状态TW:当被写入数据或读取数据存储器的外设速度跟不上CPU的要求时,就会存储器外设通过REDAY信号线在T3状态启动之前向CPU发一个READY无效信息,表示数据未就绪,于是CPU将T3之后插入一个或多个附加的时钟周期TW,当存储器外设完成数据读/写时,便在READY线上发出有效的信号,CPU接到此信号,会自动脱离Tw进入T4状态
空闲状态T:总线周期只用于CPU和存储器或I/O端口之间传送数据和供填充指令 队列,如果在1个总线周期之后,不立即执行下1个总线周期,那么,系统总线就处 于空闲状态,即执行空闲周期TI。在空闲周期中,可以包含1个时钟周期或多个时 钟周期
复位和启动
RESET引脚至少维持4个时钟周期的高电平信号时,8086/8088复位。如果 是初次加电引起的复位,则要求维持不小于50μs的高电平。
8086/8088复位后将从内存的FFFF0H处开始执行指令。因此,一般在该处 放一条无条件转移指令,转移到系统程序的入口处。这样系统一旦被启动, 便自动进入系统程序
时序和总线操作

M/IO信号有效,指出读
内存还是I/O,信号持续
整个总线周期;
地址输出:分高4位和低
16位,信号只持续一个
T1时间;
ALE输出地址锁存信号,
利用下降沿锁存;
BHE与A0组合决定奇、
偶地址库寻址;
DT/R变低,控制数据收
发器为接收状态

T2状态:
Ø高位地址线输出状态信息
S6~S3,BHE变为状态
信息S7,且一直持续到
T4为止;
Ø低位地址信号消失,
AD15~AD0进入高阻状
态,为读入数据做准备;
ØDEN信号有效,开放数据
总线收发器;
ØRD信号有效,控制选中
的存储器或I/O端口打开
数据缓冲器,以便将数据
送上数据总线。

T3状态:
若存储器或外设速度足
够快则数据出现在数据
总线上,并由CPU进行
读取。
Tw状态:
当存储器或外设速度较
慢时则利用READY信
号与CPU联络;
CPU在T3前沿(下降沿)
采样READY,
若READY信号为低电
平,在T3之后插入一个
或几个Tw,并在每个
Tw的前下降沿采样,
直到READY信号变为
高电平。

T4状态:
Ø在T4状态和前一个状态(T3
或Tw)交界的下降沿处,CPU
读取数据总线上的数据;
Ø读信号RD变为无效;
Ø关闭数据收发器;
Ø撤销其他控制信号 。

T1状态:
ØM/IO信号有效,指出读内存
还是I/O,信号持续整个总线周
期;
Ø地址输出:分高4位和低16位,
信号只持续一个T1时间;
ØALE输出地址锁存信号,利用
下降沿锁存;
ØBHE与A0组合决定奇、偶地
址库寻址;
ØDT/R变高,控制数据收发器
为发送状态。

T2状态:
Ø高位地址线输出状态信息
S6~S3,BHE变为状态
信息S7,且一直持续到
T4为止;
Ø低位地址信号消失,
AD15~AD0进入高阻状
态,立即将数据输出到
AD15-AD0 ;
ØDEN信号有效,开放数据
总线收发器;
ØWR信号有效,控制选中
的存储器或I/O端口打开
数据缓冲器

T3状态:
Ø若存储器或外设速度足
够快则数据存入存储器
或I/O端口的制定单元,
直接进入T4。
Tw状态:
Ø当存储器或外设速度较
慢时则利用READY信
号与CPU联络;
ØCPU在T3前沿(下降沿)
采样READY,
Ø若READY信号为低电
平,在T3之后插入一个
或几个Tw,并在每个
Tw的前下降沿采样,
直到READY信号变为
高电平

T4状态:
Ø撤销数据总线上的
输出数据;
Ø写信号WR变为无
效;
Ø关闭数据收发器;
Ø撤销其他控制信号
课时三
指令格式
操作数/目的操作数,源操作数
寻址方式
立即数寻址-直接给出操作数
MOV CX ,2A50H

寻址方式
寄存器寻址-操作数是内部寄存器
MOV DX,AX
AX内容送到DX中

存储器寻址
直接寻址,操作数给出有效地址(偏移地址)
MOV AL,[2000H]
设DS=3000H;[32000H] = 1234H
由指令得 EA=2000H
物理地址=16x3000H+2000H = 32000H
指令执行后AL=34H
如AX替代AL,则AX=1234H
AH替代AL,AH=12H
寄存器间接寻址:有效地址=DS*16+BX/SI/DI
例如MOV AX,BX=1064H
[21064H] = 2010H
物理地址=DS*16+BX = 21064H

寄存器相对寻址:有效地址是寄存器内容+位移
操作数物理地址 = 16xDS +BX/SI/DI +位移
或 16xSS+BP +位移

基址加变址寻址方式:有效地址是基址寄存器和变址寄存器内容之和
操作数的物理地址=16×DS + BX(基址寄存器) + SI/DI(变址寄存器) 或=16×SS + BP + SI/DI


语法规则
源操作数与目的操作数要一致
且类型要明确



数据传送指令
MOV 目的,源 功能:将源操作数的内容传送到目的操作数
• PUSH 源
功能:将源操作数压入堆栈
过程: SP新←SP原-2,再入栈
• POP 目的
功能:将堆栈中数据弹出至目的操作数
过程:出栈, SP新←SP原+ 2;
• XCHG 目的, 源
功能:源操作数、目的操作数交换数据
XLAT 转换表 或:XLAT
功能:使累加器(AL)中的一个值变换为内存表格中的一个值,一般用来实现代码转换,即查表功能
IN AX/AL IO地址
IO端口数据传输到AX,AL
OUT IO地址 AX/AL
AX AL数据传输到IO端口
LEA 目的操作数。源操作数
功能:取源操作数地址偏移量,送到目的操作数
LDS 目的操作数。源操作数
功能:从源操作数指定的存储单元中取出地址指针。低地址两个字节送入目的操作数。高地址两个字节送入DS寄存器







串操作指令
源串存放在数据段DS,用SI提供源串的偏移地址,DS:SI 是寻址源串
目的串存放在附加段ES:用DI提供目的偏移地址ES:DI是寻址目的串
当方向标志DF=0,地址提供SI,DI自动加1或2
当方向标志是DF=1,地址指针SI,DI自动减1或2
重复前缀
串操作指令前不加重复前缀,串操作只执行一次
重复执行串操作,可用CX存放重复次数,每重复执行一次,CX内容减1,当CX内容减为0时,串操作
REP-无条件重复前缀
执行步骤如下
先判断CX内容,CX=0,串操作停止,否则执行第2步
(CX)-1---CX
执行其后串操作指令,转到第一步
REPE/REPZ——相等/为零重复前缀
执行步骤如下:
①先判断 (CX)=0或ZF=0,则串操作停止,否则执行第②步;
②(CX)-1→CX ;
④执行其后的串操作指令,转第①步。
REPNE/REPNZ——不相等/不为零重复前缀
执行步骤如下:
①先判断CX的内容,如(CX)=0或ZF=1,则串操作停止,否则执行第②步;
②(CX)-1→CX ;
③执行其后的串操作指令,转第①步。
1)数据字节串/字串传送指令
MOVSB/MOVSW
功能:[DS:SI]→[ES:DI],且相应修改地址指针,使其指向下一个字节(字)
2)数据字节串/字串比较指令
CMPSB/CMPSW
功能:[DS:SI]—[ES:DI],不回送结果,只根据结果影响标志位,并相应修改地址指针,
使其指向下一个字节(字)。

3)数据字节串/字串检索指令 SCASB/SCASW
功能:将[AL]/[AX]—[ES:DI],不回送结果,只根据结果影响标志位,并相应修改地 址指针,使其指向下一个字节(字)。

4)数据字节串/字串读出指令
格式:LODSB/LODSW
功能:[DS:SI]→[AL]/[AX]中,并相应修改地址指针,使其指向下一个字节(字)。
3.8 串操作指令
5)数据字节串/字串写入指令
格式:STOSB/STOSW
功能:[AL]/[AX]→[ES:DI],并相应修改地址指针,使其指向下一个字节(字)
控制转移指令
修改IP,CS
无条件转移JMP
段内直接转移JMP 目标标号
段内直接短转移JMP SHORT 目标标号
段内间接转移 JMP WORD PTR OPD
段间直接转移 JMP FAR PTR 目标标号
段间间接转移 JMP DWORD PTR OPD
条件转移

无符号数比较大小

有符号数比较大小

循环控制指令
LOOP标号
功能:每执行一次LOOP指令,CX的内容减1,若(CX)≠0,则循环转移到标号所 指定的目标地址去重复执行程序,直到(CX)=0,退出循环,接着执行LOOP指令 的下一条指令
MOV CX,0100H;设置循环次数
DELAY:LOOP DELAY
控制转移指令
相等/为零计数循环指令
格式:LOOPE/LOOPZ
功能:每执行一次循环指令,CX内容减1,若若(CX)≠0且ZF=1,则循环转移到标号所指定的目标地址去重复执行程序,否则执行循环指令的下一条指令
不相等/不为零计数循环指令
格式:LOOPNE/LOOPNZ 标号
功能:每执行一次循环指令,CX的内容减1,若(CX)≠0且ZF=0,则循环转移到标号 所指定的目标地址去重复执行程序,否则执行循环指令的下一条指令
调用指令 CALL标号
返回指令RET
软中断指令
格式:INT n
功能:n为中断类型码,可以取0~0FFH之间的256个值。每个中断类型码在中断矢 量表中占4个字节,前两个字节用来存放中断服务程序入口地址的偏移地址,后 两个字节用来存放段基址。
CPU执行INT指令时,首先将标志寄存器FR 入栈,接着清除IF、TF,然后将当前 程序断点的段基址和偏移地址入栈保护,最后将中断矢量表中与中断类型码对应 的4个字节内容先后送入IP、CS,这样CPU转去执行中断服务程序
中断返回指令
IRET
功能放在中断服务程序的出口,由它从堆栈中弹出程序断点分别送IP、CS, 并弹出一个字送标志寄存器FR,以退出中断,返回到断点处执行后续程序。 中断服务程序的最后一条指令必须是IRET。
标志位操作指令
进位位清0指令:CLC
进位位求反指令:CMC
进位位置1指令:STC
关中断指令:CLI;置IF=0,禁止外部可屏蔽中断。
开中断指令:STI;置IF=1,允许外部可屏蔽中断。
方向标志清0指令:CLD
方向标志置1指令:STD


浙公网安备 33010602011771号