微机原理与接口技术

  • Post author:
  • Post category:其他

原码:二进制数 = 1 101

反码=原码的每一位(除符号位)都取反 = 1 010

补码=反码+1 = 1 011

补码的补码=原码

[x+y]补=[x]补+[y]补

[x-y]补=[x]补+[-y]补

补码运算的符号位进位丢失 ≠ 溢出 (若结果未超出-128~127)

双高位法判断是否溢出

最高位进位 xor 次高位进位 = 1 溢出

​ = 0 无溢出

0110

0110

1100

定点数:

定点纯小数:符号位后面都是小数部分,定点纯整数:符号位后面都是整数部分。

十进制小数转二进制:

乘2取整数部分: : 0.321×2=0.642 – 0

​ 0.642×2=1.284 – 1

​ 0.284×2=0.568 – 0

​ 0.568×2=1.136 – 1

​ …

0.321=0.0101…

二进制小数转十进制

(

0.1001

)

2

=

1

2

1

+

1

2

4

=

0.5

+

0.0625

=

(

0.5625

)

10

(0.1001)_2=1*2^{-1}+1*2^{-4}=0.5+0.0625=(0.5625)_{10}

(0.1001)2=121+124=0.5+0.0625=(0.5625)10

浮点数

N

=

2

p

S

N=2^pS

N=2pS

阶符

P

f

P_f

Pf

阶码

P

P

P

尾符

S

f

S_f

Sf

尾数

S

S

S

S用带符号的定点小数 原码表示

p为带符号整数,用补码表示

0.5<S<1则称为规格化浮点数

例:将-18.75转换成规格化的二进制数(尾数8 位,阶码四位表示):

(

18.75

)

10

=

(

10010.11

)

2

=

(

0.1001011

)

2

101

(-18.75)_{10}=(-10010.11)_2=(-0.1001011)*2^{101}

(18.75)10=(10010.11)2=(0.1001011)2101

先把十进制数转成二进制,再全部移到小数点后,乘上2的 i次方,i为移了的位数

微型计算机基本组成

1.CPU(微处理器) 2.内存储器(RAM,ROM) 3. 总线(地址总线AB,数据总线DB,控制总线CB)

4.接口芯片(I/O接口) 5.输入输出设备(I/O设备)

1.CPU

  • EU:执行部件

    8个通用寄存器

    ALU 算数逻辑运算部件 16位加法器,用于对寄存器和指令操作数进行算数或逻辑运算

    FR 标志寄存器 9个标志位 6个存放指令结果状态

    EU控制系统 接收从BIU的指令队列中取出的指令代码 向EU有关部分发出时序命令

    功能: 指令的执行,向BIU输出数据,管理Reg和PSW

  • BIU:总线接口部件

    4个段寄存器

    指令指针寄存器(IP)

    指令队列

    20位地址加法器

    总线控制逻辑

    功能:完成所有外部总线操作,提供总线控制

    使用指令队列实现流水线操作

    在一条指令的执行过程中可以取出下一条(或多条)指令,指 令在指令队列中排队(预取下一条指令的技术称指令流水线);在 一条指令执行完成后,就可以立即执行下一条指令,减少CPU为取 指令而等待的时间,提高CPU的利用率和整个运行速度。

存储器空间:20根地址线

2

20

=

1

M

B

2^{20}=1MB

220=1MB

将存储器分成4种段,存放三类信息: 代码、数据、中间结果和断点地址。

8086有20根地址线,但其内部可以表示的地址最多只能是16位。 为了能寻址1MB空间,8086对存储器进行逻辑分段,每个段最大 为64KB,最小为16B(此时最多64K个段)。

寄存器

寄存器是CPU内部用来存放数据的小型存储区域,一般用于存放运算的中间值和结果.下面是常用的寄存器

reg8(8位通用寄存器):

​ AH AL BH BL CH CL DH DL

​ 其实就是对应的AX BX等16位寄存器的高8位和低8位。比如AH (A High)和AL (A Low)就是AX的高8位和低8位,其他的同理

reg16(16位通用寄存器)

AX BX CX DX

SI , DI 变址寄存器 默认段:DS

IP 指令指针寄存器(指向下一条要取的指令的偏移量),和CS组合使用可以取下一条要执行的指令

BP 指针寄存器,存储偏移量,默认段:SS,BP和SS组合使用可以访问整个堆栈

SP 指向SS的栈顶 ,SP和SS组合使用可以访问栈顶

Sreg(段寄存器)

将内存(主存储器)分段后,段寄存器保存的是每个段的段基址的高16位

DS(数据段寄存器) CS(代码段寄存器) SS(堆栈段寄存器) ES(附加段寄存器):

存放相应段的基地址

PSW(标志寄存器) 用来存放运算结果的特征

所以注意段寄存器存储的是地址。

操作数寻址方式:

1.立即寻址: 操作数在指令中,操作数部分给出操作数

2**.寄存器(Reg)寻址**:操作数在寄存器Reg中,操作数部分给出对应Reg的编码

3.存储器寻址:操作数在主存储器中,操作数部分给出操作数的存储地址(段内偏移地址

​ 这里的段位偏移地址(仅针对存储器寻址)被称为有效地址EA

​ EA=基址寄存器+(变址寄存器x比例因子)+ 位移量

​ 其中根据EA给出的方式不同,存储器寻址又可以分为

1) 直接寻址:EA直接在指令中给出,EA=位移量数据。默认为数据段DS的位移量。如MOV AL,[2000H] ,EA=2000H ,物理地址=DS*16+2000H

允许段超越(用指定的段Reg替代默认段)如:MOV AX,ES:[2000H]

​ ☠️ 注意和立即寻址区分:立即寻址中后面的数是数据,而存储器寻址的直接寻址中后面的数是一个地址

2) 寄存器Reg间接寻址: EA在指令指定的Reg中 EA = Reg

​ ☠️ 注意和寄存器寻址区分:寄存器寻址中寄存器里存的是操作数,而寄存器间接寻址里寄存器存的是操作数的有效地址EA(偏移量),可以看作指针

​ 若Reg为DI,SI,BX,则默认操作数在数据段中。即操作数物理地址=DS*16+BX (或SI,DI)

若Reg为BP,则默认操作数在堆栈段内.  操作数物理地址=SS*16+BP

​ 如果要取的操作数不在以上默认段,就必须加段超越前缀:

MOV AX, [SI] ; 将DS段[SI] [SI+1]的内容送到AX,因为AX是16位寄存器所以有两字节(1字节=8位)[SI]送到AL,[SI+1]送到AH

MOV BH,[BP] ; 将SS段[BP]的内容送到BH

3) 基址寻址

​ EA为指令中给出的基址寄存器与位移量之和。

MOV AX,[BX+24] 物理地址=DS * 16 + BX + 24

4) 基址加变址寻址

​ EA=(基址Reg)+(变址Reg )

MOV AX,[BX+SI]

MOV AX,[BX][SI]

常用指令

  • MOV

    mov data,25H 立即数->存储器

    mov ds,ax 通用Reg->段Reg

  1. CS(代码段寄存器) 只能读取不能写入和修改. 因此不能向CS传送数据
  2. 内存的两个存储单元不能直接传送,需要用Reg做中介
  3. 段寄存器之间不能直接传送数据,例如MOV DS ,ES是错误的
  4. 立即数不能直接传送到段寄存器,应先传到通用寄存器再传到段寄存器
  5. 将立即数传送到存储单元时,必须显式说明存储器操作数的 宽度类型。
  • PUSH/POP

    push ax 将AX中的内容压入栈,SP=SP-2

    pop bx将栈顶数据弹出到BX中,SP=SP+2

    8086的堆栈从上往下增长,堆栈操作一定是16位操作

  • XCHG

    XCHG AX,BX 将AX和BX内容互换

    不能对段寄存器使用

    不能两个都为存储器操作数

  • LEA

    取存储器操作数在当前段内的有效地址送至通用寄存器

    LEA AX,[BP+SI]

    LEA DI,TABLE 将TABLE的有效地址送入DI

    区别于:MOV DI,TABLE将TABLE的内容送入DI

  • IN/OUT

    用于在AL或AX寄存器与I/O端口之间传送信息

    x86 CPU中的16条I/O地址线,可形成: 64K个传送8位数据的端口地址;

    ①当端口地址<256(使用8根地址线): 采用直接寻址方式,在指令中直接指定端口地址。

    ②当端口地址≥256(使用8~16根地址线): 采用间接寻址方式,端口地址放在DX中。

    IN AX,20H 从端口20H和21H输入16位数据到AX

    OUT 27H,AL 将8位数据从AL输出到端口27H

  • MUL/IMUL

    将8位操作数与AL相乘结果放在AX中,或者将16位操作数与AX相乘结果放在(DX,AX)中。DX为高位,AX为低位

    MUL BL

  • CMP

    比较两个操作数并改变相应标志位,一般后跟条件转移指令,根据比较结果产生不同的转移

    CMP AX,BX

    无符号数比较结果:

    指令 转移条件 含义 英文表述
    JA/JNBE DEST CF=0 AND ZF=0 无符号数A>B JMP above (not below or equal)
    JAE/JNB DEST CF=0 无符号数A≥B JMP above or equal (not below )
    JB/JNAE DEST CF=1 无符号数A JMP blow (not above or equal)
    JBE/JNA DEST CF=1 OR ZF=1 无符号数A≤B JMP blow or equal (not above)

    有符号数比较结果:

    指令 转移条件 含义 英文表述
    JG/JNLE DEST SF=OF AND ZF=0 有符号数A>B JMP greater (not less or equal)
    JGE/JNL DEST SF=OF OR ZF=1 有符号数A≥B JMP greater or equal (not less)
    JL/JNGE DEST SF≠OF AND ZF=0 有符号数A JMP less (not greater or equal)
    JLE/JNG DEST SF≠OF OR ZF=1 有符号数A≤B JMP less or equal (not greater)

SAL算术左移 最低位用0填充,最高位移入进位标志位CF

SAR算术右移 最低位抛弃,符号位复制到最高位

SHL 循环左移 最低位用0填充,最高位移入进位标志位CF

ROR 循环右移 最低位移入进位标志位和最高位

RCL 带进位循环左移

RCR 带进位循环右移


I/O 端口独立寻址(也称直接I/O映射编址)

存储器地址空间和I/O端口地址空间为两个不同的 独立地址空间(80X86系统该编址方式),即计算机单独 给外设端口编址。计算机要有控制信号区分存储器空间 和I/O口空间。

(a)优点: ◼ 1. I/O空间较存储器空间小,地址线少,译码电路 简单 ◼ 2、不占用存储器空间; (b)缺点: ◼ 要有专门输入输出指令,寻址方式少,不灵活。

I/O 与存储器统一编址(存储器映射的I/O编址)

把一个外设端口看成存储器的一个单元,占用存储器的 地址空间,利用对存储器的读写操作完成数据的输入和输出。 (a)优点: ◼ 1、不需要专门的输入输出指令; ◼ 2、可使用全部对存储器操作指令,指令多,方便; ◼ 3、端口数量多。 (b)缺点: ◼ 1、占用存储器空间;在程序中不易分清存储器外设的 访问 ◼ 2、 寻址地址线数多,译码复杂

8086CPU中I/O译码电路使用A9来区别端口位置

A9=0 寻址主板上的512个I/O端口

A9=1 寻址I/O卡上的512个I/O端口

输入输出方式

1.无条件传送 默认外设已准备就绪,程序不检查外设状态直接执行输入输出指令

2.查询方式(条件传送)

CPU从接口读取状态字,满足条件就从数据口输入输出,不满足则重新读取状态字

3.中断传送

4.直接数据通道传送:

DMA方式 : 直接存储器存取(Direct Memory Access)方式

DMA控制器: 包含:

  • 控制寄存器
  • 状态寄存器 设置控制字,指定数据传输方向

  • 地址寄存器: 要传送的数据块的首地址

  • 字节计数器 要传送的数据长度(字节数)

每个字节传送后地址寄存器+1,字节计数器1

硬件中断:

  • 非屏蔽中断

​ 由NMI引脚产生上升沿触发,中断类型码固定为2

  • 可屏蔽中断

​ 外部设备发出请求,CPU的INTR引脚引入,高电平触发

软件中断

  • 除法出错中断 0型中断

  • 单步中断 1型中断

  • 溢出中断 4型中断

  • 指令中断 n型中断

中断向量表:00000H~003FFH

中断向量:中断服务程序入口地址

IF标志位: IF=1 可响应中断请求,IF=0 不响应中断请求

TF标志位: 追踪标志位 TF=1 CPU进入单步执行方式,每执行一条指令就产生一个单步中断请求


版权声明:本文为qq_42885747原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。