8086微处理器

微处理器概述

  微处理器(cpu):它包括运算器、控制器、寄存器阵列和内部总线等部分。用于实现微型计算机的运算和控制,是微型计算机的核心。

      8086cpu是Intel系列的16位微处理器,有20位地址总线和16位数据总线,所以其可寻地址的地址空间是2^20个字节=1MB。

利用第16位的地址总线来进行I/O端口寻址,可寻址64K个I/O端口。其中断功能强,可处理内部软件中断和外部中断,中断源可达256个。

CPU的内部逻辑结构

8086微处理器_第1张图片

8086cpu的编程结构

 从程序员的角度看,8086cpu分为两部分:执行部件(EU)和总线接口部件(BIU)。

  1. 执行部件(EU)

功能:执行命令

组成:1.8个通用寄存器:4个数据寄存器(AX、BX、CX 、DX)和4个指针和变址寄存器(BP、SP、SI、DI)。

     2.标志寄存器FR:用来保存ALU运算结果的一些特征信息

     3.算术逻辑单元ALU(arithmetic logic unit)。

     4.内部控制逻辑。

  1. 总线接口部件(BIU)

   功能:负责cpu与内存或输入输出接口之间的信息传送(根据EU的请求,执行8086 CPU 对存储器或 I/O 接口的总线操作,完成数据传送

   组成:  1 指令队列缓冲器

216指令指针寄存器IP,段寄存器CS、DS、SS和ES。

3地址加法器

4总线控制逻辑等部件

寄存器详解

8086微处理器_第2张图片

通用寄存器可用于传送和暂存数据,也可参与算术逻辑运算,并保存运算结果。除此之外,它们还各自具有一些特殊功能。汇编语言程序员必须熟悉每个寄存器的一般用途和特殊用途。

1.数据寄存器:可以存放16位的数据或地址。又可分为8个8位寄存器,即:

  AX→AH(高八位)、AL(第八位)

  BX→BH(高八位)、BL(第八位)

CX→CH(高八位)、CL(第八位)

DX→DH(高八位)、DL(第八位)

注:8位寄存器只能存放数据而不能存放地址(偏移地址16位)。

下面给出一幅 16 位数据寄存器的结构图:

表示 16 位 寄存器 AX 可以表示成两个 8 位寄存器,

其中 AH 表示高位的 8 位寄存器,AL 表示低位的 8 位寄存器 。

8086微处理器_第3张图片

AX  (Accumulator):累加器。用于计算,所有I/O指令都通过AX或AL与接口传送信息,中间运算结果也存放AX中。

BX  (Base):基址寄存器。在间接寻址中用于存放基地址。

CX (Count):计数寄存器。可以用作数据寄存器,在字符串操作、循环操作、和移位操作时用作计数器,存放计数值。

DX (Data):数据寄存器。在间接寻址的I/O指令中存放I/O端口地址;在32位乘除法运算时,存放高16位数。

2.SP和BP又称为指针寄存器

  SP (Stack Pointer):堆栈指针寄存器。在堆栈操作中存放栈顶的偏移位置。(不能寻址)

BP  (Base Pointer):基指针寄存器。常用于访问内存时存放单元的偏移地址。还用作堆栈区的基地址寄存器。(可以寻址)

  1. SI和DI又称作变址寄存器

SI  (Source Index)源变址寄存器。主要用于存放地址,在字符串操作中存放源操作数的偏移地址。

DI (Destination Index):目的变址寄存器。同样主要用于存放地址,字符串操作中存放目的操作数的偏移地址。

  1. 段地址寄存器(CS、DS、SS、ES)

CS:代码段寄存器。存放当前执行的程序的段地址

DS:数据段寄存器。存放当前执行的程序所用操作数段地址

SS:堆栈段寄存器。存放当前执行的程序所用堆栈的段地址

ES:附加段寄存器。存放当前执行程序中一个辅助数据段的段地址

  1. 控制寄存器

IP:指令指针寄存器。指示存储器指令的位置。随着指令的执行,IP将自动修改以指示下一跳指令所在的存储器位置,IP寄存器是一个专用寄存器,IP寄存器是CS段寄存器联合使用以确定下一条指令的存储单元地址。

FLAGS(PSW):标志寄存器或称为程序状态寄存器。虽然有16位,但是只使用其中9位,其中包括6个状态标志位和3个控制标志,也就是说,FLAG  中的每一个位都表示不同的状态,由于一个位也就能表示  0    1 ,自然,FLAG  中的每一个位就是用来描述状态的,

而且  FLAG  寄存器中存储的信息通常又被称作程序状态字(PSW) 。

8086微处理器_第4张图片

 

状态标记位

下面我们就按不同的位来分别介绍这些位所描述的状态,以及它们代表的意义:

 1.CF(Carry  FLag) - 进位标志(第 0 位):  进位标志是用来反映计算时是否产生了由低位向高位的进位,或者产生了从高位到低位的借位

2.PF(Parity  FLag) - 奇偶标志(第 2 位):奇偶标志是用来记录相关指令执行后,其结果的所有的  Bit  位中  1  的个数是否为偶数 。

3.AF(Auxiliary  Carry  FLag) - 辅助进位标志(第 4 位):   用来辅助进位标志 。

4.ZF(Zero  FLag) – 零标志(第 6 位)运算结果为0时ZF=1,否则为 0。

5.SFSign  FLag - 符号标志(第 7 位):  符号标志,其记录相关指令执行完以后,其结果是否为负数 。

6.IF(Trap  FLag) - 中断允许标志位(第 8 位):  中断允许标志,其决定  CPU  是否能够响应外部可屏蔽中断请求

7.DF(Direction  FLag) - 方向标志(第 10 位):方向标志,其用于在串处理指令中,用来控制每次操作后  SI    DI  是自增还是自减 。

8.OFOverFlow  FLag - 溢出标志(第 11 位)  溢出标志,其通常记录了有符号数运算的结果是否发生了溢出 。

9.TF-调试标志位(第8位):当TF值为1时,CPU每执行一条指令就会触发1号中断,典型案例就是MASM的Debug程序。

存储器

存储器分段的原因

8086有20根地址总线,这样可以直接寻址的物理地址空间为2^20=1M字节(存储单元以字节为单位),范围是00000H至FFFFFH。但是8086CPU的寄存器都是16位,那么在传输地址时显然一次只能传输16位有效地址,也就是只足够访问2^16=64K字节地址空间。为了实现寻址1M字节物理空间,8086/8088引入了分段的概念。

存储地址的形成

   将1M存储空间分为若干块,称为“逻辑段”。每个逻辑段的容量≤64KB,存放一种类型的数据或者程序。因此1M的存储空间可分成16个逻辑段(0——15)。在段内寻址仍采用传统的16位地址寻址方法。

   要访问某个内存单元,根据我们划分的逻辑段,计算存储单元的地址的差值,称段内偏移(简称偏移)。

   在整个1M地址空间中,存储单元的物理地址等于段起始地址加上段内偏移。

  物理地址计算公式:

        物理地址 = 段值*10H  +  段内偏移

Eg. 用16进制表示的逻辑地址1234:3456H所对应的存储单元的物理地址为12340H+3456H=15796H

(段值由段寄存器给出,段内偏移可由指令指针IP、堆栈指针SP和其他可作为存储器指针使用的存储器(SI、DI、BX和BP)给出,段内偏移还可以直接用16位数给出。)

段寄存器的使用

   8086cpu段寄存器有4个,可以保存四个段值,四个段的分工各不相同。

8086微处理器_第5张图片

在取指令时,cpu引用代码段寄存器CS,再加上由IP所给出的16位段内偏移,从而得出实际物理地址。

当涉及堆栈操作时,CPU会自动引用堆栈段寄存器SS,再加上由SP所给出的16位段内偏移,得到堆栈操作所需的物理地址。

 若段内偏移涉及BP寄存器时,缺省引用的段寄存器也为堆栈段寄存器SS。

在一般数据存取的情况下,则自动选择数据段寄存器DS或附加段寄存器ES,再加上16位偏移,得到存储器操作数的物理地址。

若是整个程序不超过64K字节,那么使用1个64K字节的段就可以了

你可能感兴趣的:(缓存,其他,经验分享)