微机原理与接口技术

本文介绍了计算机的基本组成,包括CPU、存储器和总线结构,讲解了补码运算、浮点数表示以及定点数的概念。此外,还详细阐述了8086CPU的内部结构,如EU和BIU的功能、寄存器的作用以及指令系统,如存储器寻址方式、数据传送指令和比较指令。最后,提到了I/O端口的寻址方式和输入输出操作。
摘要由CSDN通过智能技术生成

原码:二进制数 = 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.321x2=0.642 – 0

​ 0.642x2=1.284 – 1

​ 0.284x2=0.568 – 0

​ 0.568x2=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 DESTCF=0 AND ZF=0无符号数A>BJMP above (not below or equal)
    JAE/JNB DESTCF=0无符号数A≥BJMP above or equal (not below )
    JB/JNAE DESTCF=1无符号数AJMP blow (not above or equal)
    JBE/JNA DESTCF=1 OR ZF=1无符号数A≤BJMP blow or equal (not above)

    有符号数比较结果:

    指令转移条件含义英文表述
    JG/JNLE DESTSF=OF AND ZF=0有符号数A>BJMP greater (not less or equal)
    JGE/JNL DESTSF=OF OR ZF=1有符号数A≥BJMP greater or equal (not less)
    JL/JNGE DESTSF≠OF AND ZF=0有符号数AJMP less (not greater or equal)
    JLE/JNG DESTSF≠OF OR ZF=1有符号数A≤BJMP 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进入单步执行方式,每执行一条指令就产生一个单步中断请求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值