寄存器

  寄存器可以分为:通用寄存器、指令指针IP、段寄存器等等。其主要功能是在计算时存储数据、代码。寄存器是在CPU内部,靠内部总线相连。前一篇文章中CPU和内存相连的地址线、数据线、控制线相对寄存器来说是在CPU的外部,靠外部总线相连。

 

一、通用寄存器

  8086CPU的所有寄存器都是16位的,可以放两个字节。AX、BX、CX、DX这4个寄存器通常用来存放一般性数据,被称为通用寄存器。每个寄存器的大小都是16位,由于以前的寄存器是8位的,为了兼容,将寄存器拆分为两个可以独立使用的8位寄存器使用。AX可分为AH(高八位)和AL(低八位),同样BS分为BH和BL。

在介绍其他寄存器之前先看几条汇编指令: ax原值:0000H   bx原值:0000H

mov ax,4E20H  将4E20H送入寄存器ax中。       AX:4E20H  BX:0000H

add ax,1406H   将1406H和AX的值相加放到ax中。   AX:6226H  BX:0000H

mov bx,2000H  将2000H送入bx中。          AX:6226H  BX:2000H

add ax,bx     将bx的值和ax的值相加,结果放到ax中    AX:8226H  BX:2000H

mov bx,ax          将寄存器ax中的数据送入寄存器b。    AX:8226H  BX:8226H

add ax,bx      将bx的值和ax的值相加,结果放到ax中   AX:044CH  BX:8226H

在最后一步,ax和bx的值都为8226H,相加结果为1044CH,但ax为16位寄存器,最大值为FFFFH,已经超出范围。所以最高位的1不能保存在ax中,导致ax的数据位044CH。

 二、8086CPU给出物理地址的方法。

  8086CPU有20位地址总线,一次可以传送20位地址,达到1MB寻址能力。但是8086CPU的寄存器只有16位,在内部一次性处理、传输的地址为16位。如果加大内部的传输能力就会导致CPU外部地址线的浪费。

  因此8086采用内部两个16位地址合成的方法形成一个20位的物理地址。如第一个图。物理地址=段地址x16+偏移地址。这样CPU内部的寻址能力最大为FFFFH x 16 + FFFFH(1114095)大于1048576(2^20)。

三、段寄存器

  8086CPU在方位内存时要由相关部件提供内存单元的段地址和偏移地址,送入地址加法器合成物理地址。提供段地址的部件就是段地址寄存器。8086CPU中有4个段地址寄存器:CS(代码寄存器)、DS(数据寄存器)、SS(堆栈段寄存器)、ES(扩展段寄存器)。

  下图为CPU执行过程的流程图。

  

 

mov指令不能用于设置CS、IP的值,原因很简单,因为8086CPU没有提供这样功能。但是提供了jmp指令。jmp 段地址:偏移地址。

 

posted @ 2018-05-07 10:51  MicroHeart!  阅读(944)  评论(0编辑  收藏  举报