【王爽《汇编语言(第4版)》笔记】第2章:寄存器

第2章 寄存器

1、CPU的构成:典型CPU由运算器、控制器、寄存器等器件构成,这些器件靠内部总线相连。

2、内部总线和外部总线的区别:内部总线实现CPU内部各个器件的联系,外部总线实现CPU和主板上其他器件的联系。

3、对于一个汇编程序员来说,CPU中的主要部件是寄存器

4、不同的CPU寄存器个数和结构不同。8086CPU有14个寄存器:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。

2.1 通用寄存器

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

2、通用寄存器:存放一般性的数据,有AX、BX、CX、DX。

3、通用寄存器的逻辑结构及数据在其中的存放方式,以16位通用寄存器AX为例,如图:

在这里插入图片描述
4、一个N位寄存器所能存储的数据的最大值为2N-1

5、AX、BX、CX、DX可分为两个可独立使用的8位寄存器来用:如AX分为AH(高8位)和AL(低8位)。如图:
在这里插入图片描述

2.2 字在寄存器中的存储

1、8086CPU中一个字(Word)由两个字节(高位字节和低位字节)组成

2、一个字可以存储在一个16位寄存器中,其中高位字节存储在高8位寄存器中,低位字节存储在低8位寄存器中。

2.3 几条汇编指令

mov 寄存器, 数据
mov 寄存器, 寄存器
add 寄存器, 数据
add 寄存器, 寄存器

1、汇编指令不区分大小写。

2、注意进位值丢失问题

3、在进行数据传送或运算时,要注意指令的两个操作对象的位数应当一致

2.4 物理地址

1、CPU访问内存单元时,要给出内存单元的地址。

2、所有内存单元构成的存储空间是一个一维的线性空间每一个内存单元在这个空间中都有唯一的地址,这个唯一的地址称为物理地址

2.5 16位结构的CPU

1、16位机、字长为16位与16位结构的含义相同。

2、16位CPU的特征:能一次性处理、传输、暂时存储16位的地址

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

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

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

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

1、8086CPU外部有20位地址总线,可以传送20位地址,达到1MB(220B)寻址能力

2、8086CPU内部为16位结构,它只能传送16位的地址,理论上表现出的寻址能力只有64K

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

4、地址加法器合成物理地址的方法:物理地址=段地址×16(十进制)+偏移地址
在这里插入图片描述

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

8086CPU的寻址功能是“基础地址+偏移地址=物理地址”寻址模式的一种具体实现方案,段地址×16可看作是基础地址

2.8 段的概念

1、内存并没有分段,段的划分来自于CPU,由于8086CPU用“段地址×16+偏移地址=物理地址”的方式给出内存单元的物理地址,使得我们可以用分段的方式来管理内存。

2、以后,在编程时可以根据需要,将若干地址连续的内存单元看作一个段,用段地址×16定位段的起始地址(基础地址),用偏移地址定位段中的内存单元。

3、注意事项:

(1)段地址必然是16的倍数,即一个段的起始地址必然是16的倍数

(2)偏移地址为16位,16位地址的寻址能力为64KB,所以一个段的长度最大为64KB

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

4、数据存在21F60H内存单元中=数据存在内存2000:1F60单元中=数据存在内存的2000H段中的1F60H单元中

2.9 段寄存器

1、段寄存器就是提供段地址的

2、8086CPU有4个段寄存器:CS(code segment)、DS(data segment)、SS(stack segment)、ES(extra segment)。

3、当8086CPU要访问内存时,由这4个段寄存器提供内存单元的段地址。

2.10 CS和IP

1、CS和IP时候8086CPU中最关键的寄存器,它们指示了CPU当前读取指令的地址

2、CS和IP的含义

(1)CS:代码段寄存器;(2)IP:指令指针寄存器

3、CPU从CS、IP中读取指令的方式

设CS中的内容为M,IP中的内容为N,8086CPU将从内存M×16+N的单元开始,读取一条指令并执行。

4、8086CPU工作过程的简要描述

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

(2)IP=IP+所读取指令的长度,从而指向下一条指令;

(3)执行指令,转到步骤(1),重复这个过程。
在这里插入图片描述

5、开机时的CS和IP

(1)在8086CPU加电启动或复位后(即CPU刚开始工作时)CS和IP被设置为CS=FFFFH,IP=0000H;

(2)即在8086PC机刚启动时,CPU从内存FFFF0H单元中读取指令执行;

(3)FFFF0H单元中的指令是8086PC机开机后执行的第一条指令。

6、CPU根据什么将内存中的信息看作指令?

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

(2)在任何时候,CPU将CS、IP中的内容当作指令的段地址和偏移地址,用它们合成指令的物理地址,到内存中读取指令码,执行。

(3)内存中的一段信息曾被CPU执行过,说明它所在内存单元必然被CS:IP指向过。

2.11 修改CS、IP的指令

1、在CPU中,程序员能够用指令读写的部件只有寄存器,程序员可以通过改变寄存器中的内容实现对CPU的控制。

2、CPU从何处执行指令是由CS、IP中的内容决定的,程序员可以通过改变CS、IP中的内容来控制CPU执行目标指令。

3、修改CS和IP的方式:

(1)通过mov可以改变AX等,但不能改变CS和IP

(2)以下指令同时修改CS和IP,其中指令中的段地址修改CS、偏移地址修改IP

jmp 段地址, 偏移地址
例如:
jmp 3:01B6
在含义上好似 mov CS, 3 与 mov IP, 01B6

(3)以下指令用寄存器中的值修改IP,仅修改IP的内容

jmp 某一合法的寄存器
例如:
jmp ax
在含义上好似 mov IP, ax

(4)jmp是只具有一个操作对象的指令。

2.12 代码段

1、可以将长度为N(N<=64KB)的一组代码,存放在一组地址连续、起始地址为16的倍数的内存单元中这段内存是用来存放代码的,从而定义了一个代码段

2、CPU不会自行安排代码段CPU中只认被CS:IP指向的内存单元中的内容为指令

3、要让CPU执行放在代码段中的指令,必须要将CS:IP指向所定义的代码段中的第一条指令的首地址

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值