您的位置:首页 > 其它

《汇编语言》王爽版重点摘要-----第二章

2014-01-10 10:40 183 查看

第二章 寄存器(CPU工作原理)

不同的CPU,寄存器的个数、结构是不相同的。

8086有14个寄存器:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW

2.1 通用寄存器

8086CPU的所有寄存器都是16位的,可以存放两个字节。

AX、BX、CX、DX四个寄存器通常用来存放一般性数据,被称为通用寄存器。

寄存器的逻辑结构从左到右位数逐渐降低,左为高位,右为低位。

为了兼容上一代CPU的寄存器使原来基于上代CPU编写的程序稍加修改就可以运行在8086上,8086的CPU的AX、BX、CX、DX四个寄存器都可以分为两个可独立使用的8位寄存器来用:

AX:AH和AL

BX:BH和BL

CX:CH和CL

DX:DH和DL

低8位构成*L寄存器

高8位构成*H寄存器

2.2 字在寄存器中的存储

出于对兼容性的考虑,8086CPU可以一次性处理两种尺寸的数据:

字节:可以存在8位寄存器中。

字:一个字由两个字节组成,分别称为高位字节和低位字节。

一个字存在一个16位寄存器中,高位字节和低位字节分别存在H和L寄存器中。

在数据后加H表示16进制,加B表示2进制,十进制什么也不加。

2.3 几条汇编指令

mov          add

汇编指令和寄存器名称不区分大小写

指令计算中注意16位寄存器的存放范围,超出FFFFH的要舍去最高位

L寄存器为8位寄存器,超出的值不会进到H寄存器中,所以超出部分会舍去

在进行数据传递或运算中,要注意指令的两个操作对象的位数应当是一致的,位数不一致或超出最大存放值或高于原位数都是错误的。

2.4 物理地址

每一个内存单元在内存地址空间中都有唯一的地址,称为物理地址。

CPU通过地址总线送入存储器的必须是一个内存单元的物理地址。

在CPU向地址总线上发出物理地址之前必须在内部先形成这个物理地址。

不同的CPU可以有不同的形成物理地址的方式。

2.5 16位结构的CPU

8080、8085是8位机,8086是16位机

16位结构CPU=16位机=字长为16位:(=表示“可描述为”)

(1)运算器一次可以最多处理16位的数据

(2)寄存器的最大宽度为16位

(3)寄存器和运算器之间的通路为16位

在16位机内部,能够一次性处理、传输、暂时存储的信息的最大长度是16位。

内存单元的地址在送上地址总线之前,必须在CPU中处理、传输、暂时存放。

16位CPU能一次性处理、传输、暂时存储16位的地址。

2.6 8086CPU给出物理地址的方法

8086CPU有20位地址总线(但是从内部看,8086是16位机,只能送出16位地址)

8086CPU采用一种在内部用两个16位地址合成的方法来形成一个20位的物理地址。

合成过程:

(1)CPU中的相关部件提供了两个16位的地址:段地址和偏移地址

(2)段地址和偏移地址通过内部总线送入地址加法器

(3)地址加法器将两个16位地址合成一个20位的物理地址

(4)地址加法器通过内部总线将20位物理地址送入输入输出控制电路

(5)输入输出控制电路将20位物理地址送上地址总线

(6)20位地址被地址总线传送到存储器

地址加法器采用“物理地址=段地址*16+偏移地址”的方法合成物理地址。

“*16”的含义:段地址*16(十进制)相当于左移4位(2进制)把十六进制的结果左移一位,一个数据的二进制形式左移N位相当于该数据乘以2的N次方,一个X进制的数据左移一位,相当于乘以X。

2.7 “段地址*16+偏移地址=物理地址”的本质含义

本质含义为:CPU在访问内存的时候,用一个基础地址(段地址*16)和一个相对于基础地址的偏移地址相加,给出内存单元的物理地址。这种寻址功能是“基础地址+偏移地址=物理地址”寻址模式的一种具体实现方案。

2.8 段的概念

由于8086CPU用“基础地址+偏移地址=物理地址”的方式给出内存单元的物理地址,所以可以采用分段的方式来管理内存。

段的起始地址(基础地址):段地址*16

偏移地址:段中的内存单元

一个段的起始地址一定是16的倍数

16位地址的寻址能力为64KB,所以一个段的长度最大为64KB。

CPU可以用不同的段地址和偏移地址形成同一个物理地址。

可以根据需要,将地址连续、起始地址为16倍数的一组内存单元定义为一个段。

2.9 段寄存器

段地址在8086CPU的段寄存器中存放。

8086CPU的4个段寄存器:CS、DS、ES、SS

2.10 CS和IP

CS是代码段寄存器,IP是指令指针寄存器,他们指示了CPU当前要读取指令的地址。

在8086机中,任意时刻,设CS中的内容为M,IP中的内容为N,8086CPU将从内存M*16+N单元开始,读取一条指令执行。

8086CPU的工作过程:

(1)从CS:IP指向内存单元读取指令,读取的指令进入指令缓冲器

(2)IP自增所读取的指令长度,从而指向下一条指令

(3)执行指令,转到步骤1,重复这个过程

CPU刚开始工作的时候CS和IP被设置为CS=F000H,IP=FFFFH。

CPU将CS:IP指向的内存单元中的内容看作指令。

如果内存中的一段信息曾被CPU执行过,那么它所在的内存单元必然被CS:IP指向过。

2.11 修改CS、IP的指令

在CPU中能够用指令读写的部件只有寄存器。

通过改变寄存器中的内容可以实现对CPU的控制。

可以修改CS、IP的指令:jmp

jmp 段地址:偏移地址  :用指令中给出的段地址修改CS,偏移地址修改IP

jmp 寄存器:用寄存器的值修改IP

2.12 代码段

将一组内存单元定义为一个段,将长度不大于64KB的一组代码存在一组地址连续、起始地址为16倍数的内存单元中,这段内存存放了一段代码,从而定义了一个代码段。

如果要执行一个代码段,必须要将CS:IP指向所定义的代码段中的第一条指令的首地址,CPU只认被CS:IP指向的内存单元中的内容为指令,自动的将定义的代码段中的指令当作指令来执行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  汇编 汇编语言