微机原理速成

微机原理速成

课时1

基础概念

位:计算机最小表示单位,0,1

字节:一个8位二进制数叫1字节单位B

1B (Byte)=8位,

1KB=2 10B,

1MB= 210KB=210×210B

字:一个16位二进制数

字长“处理器二进制位数

机器数:计算机中数据,分为数值数据和非数值数据

真值:机器数代表真正的数值

数制码制转换

image-20220425235509810

十进制整数——二进制
方法:除2取余
用2不断去除要转换的十进制数,直至商为0。每次的余数即为二进制位数。
先得到的是低位,后得到是高位

十进制小数-二进制

2不断去乘要转换的十进制数。每次得到积的整数部分为二进制位数。 先得到高位,后得到的是低位

例题

把十进制数137.875转化为二进制数

整数部分:除2

小数部分:乘2法

image-20220426001137881

二进制--十六进制

十六进制--二进制

方法--四位一组,不足四位,用0补

将二进制数100000111.1101转换为十六进制数

10000111.1101)2=(1000 0111.1101)2=(87.D)16

同理:3位二进制数对应1位八进制

image-20220426001435402

带符号的机器数表示方法:原码,补码,反码

1.原码

机器数原本是原本的编码,最高是符号位,0是正,1是负,后续是数值位
范围是-127~+127

八位二进制数

1000 0001 :-1

反码:

  • 正数:原码=反码=补码
  • 负数:符号位不变,数值位求反
  • 范围 :-127~127

补码

  • 正数:原码=反码=补码
  • 负数:反码+1
  • 范围 -128~127

补码计算

image-20220426001759009

运算规则

  • 符号位与数值位一起运算
  • 符号位产生进位可以舍去

设字长是8位,X=+65 Y=+48 计算[ X+Y]补 [ X-Y]补

image-20220426002144880

溢出判别

字长是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码 是二进制编码的十进制数

image-20220426005403722

微机组成

CPU,存储器,输入输出设备,接口电路和系统总线

总线:总线是CPU向存储器输入和输出接口,传送地址,数据和控制信息共用通路

数据总线:16 传输数据

地址总线 20 传送地址信息

控制总线16 传输控制信号

例:8086的数据线为 16 位,地址线为 20 位,I/O口使用 16 位地址线

课时2

8086:16位微处理器

8086与8088区别

  • 8086BIU中的指令队列是6字节,外部数据线总线16位
  • 8088BIU中指令队列是4字节,外部数据总线是8位

CPU 内部结构

image-20220426082215301

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组成

  1. 段寄存器

    1. 代码段寄存器CS

    2. 堆栈段SS

    3. 数据存储段DS

    4. 附加段寄存器ES

  2. 指令指针寄存器IP

  3. 地址加法器

  4. 指令预期队列

  5. 总线控制逻辑

  6. 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

image-20220426100423987

计算物理地址

image-20220426100449230

堆栈

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

image-20220426100736549

引脚

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处开始执行指令。因此,一般在该处 放一条无条件转移指令,转移到系统程序的入口处。这样系统一旦被启动, 便自动进入系统程序

时序和总线操作

image-20220426153918884

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

image-20220426163018751

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

image-20220426154150860

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

image-20220426163046635

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

image-20220426163128093

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

image-20220426163205582

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

image-20220426163234847

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

image-20220426163300943

T4状态:
Ø撤销数据总线上的
输出数据;
Ø写信号WR变为无
效;
Ø关闭数据收发器;
Ø撤销其他控制信号

课时三

指令格式

操作数/目的操作数,源操作数

寻址方式

立即数寻址-直接给出操作数

MOV CX ,2A50H

image-20220426163814643

寻址方式

寄存器寻址-操作数是内部寄存器

MOV DX,AX

AX内容送到DX中

image-20220426163922492

存储器寻址

直接寻址,操作数给出有效地址(偏移地址)

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

image-20220426164416330

寄存器相对寻址:有效地址是寄存器内容+位移

操作数物理地址 = 16xDS +BX/SI/DI +位移

或 16xSS+BP +位移

image-20220426170455495

基址加变址寻址方式:有效地址是基址寄存器和变址寄存器内容之和

操作数的物理地址=16×DS + BX(基址寄存器) + SI/DI(变址寄存器) 或=16×SS + BP + SI/DI

image-20220426172204491

image-20220426172518726

语法规则

源操作数与目的操作数要一致

且类型要明确

image-20220426172710810image-20220426172735444

image-20220426172807586

数据传送指令

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寄存器

image-20220426174415456

image-20220426175115797

image-20220426175127172

image-20220426175140214

image-20220426175152263

image-20220426175205846

image-20220426175213608

串操作指令

源串存放在数据段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],不回送结果,只根据结果影响标志位,并相应修改地址指针,
使其指向下一个字节(字)。

image-20220426181412514

3)数据字节串/字串检索指令 SCASB/SCASW

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

image-20220426184746250

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

条件转移

image-20220426185923505

无符号数比较大小

image-20220426190243595

有符号数比较大小

image-20220426190249563

循环控制指令

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

posted @ 2022-04-26 19:13  #卧龙先生#  阅读(32)  评论(0)    收藏  举报