汇编语言第二章知识梳理及思考

蓝咒 提交于 2020-01-02 06:18:22

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

CPU概述

     CPU由运算器、控制器、寄存器等器件组成,这些器件靠内部总线相连。

     内部总线实现CPU内部各个器件之间的联系。

     外部总线实现CPU和主板上其他器件的联系。

 

寄存器概述

     8086CPU有14个寄存器:

AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。

 

2.1通用寄存器

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

     通用寄存器:AX、BX、CX、DX通常用来存放一般性数据。

    

以AX为例,寄存器的逻辑结构:

         15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

         16位数据在寄存器中的存放情况

              数据:18

              二进制表示:10010

              在寄存器AX中的存储:

              15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0(AX)

0       0  0  0  0  0 0 0 0 0 0 1 0 0 1 0

一个16位的寄存器所能存储的数据的最大值为2^16-1

一个8位的寄存器所能存储的数据的最大值为2^8-1

 

为了保证兼容性,四个通用寄存器都可以分为两个独立的8位寄存器使用。

     AX=AH(高8位(8~15位))+AL(低8位(0~7位));

     BX=BH+BL;

     CX=CH+CL;

     DX=DH+DL;

    

2.2字在寄存器中的存储

一个字可存放在一个十六位的寄存器中,这个寄存器的高位字节和低位字节就存在这个寄存器的高八位寄存器和第八位寄存器中。

 

【关于数制的讨论】P16

2.3几条汇编指令(汇编指令不区分大小写)

123456789ABCDEFG

MOV AX,BX

add ax,bx

 

2.4物理地址

物理地址:CPU访问内存单元时要给出内存单元的地址。所有的内存单元构成的存储空间是一个一维的线性空间。

 

2.5 16位结构的CPU

16位结构描述了一个CPU具有以下几个方面的特征:

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

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

3,      寄存器和运算器之间的通路是16位的;

 

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

8086内部有20位地址总线,可传送20位地址,寻址能力为1M(2^20=1MB)。8086内部为16位结构,他只能传送16位的地址,表现出的寻址能力为64K。8086CPU采用一种在内部用两个16位地址合成的方法来形成一个20位的物理地址。

 

8086CPU读写内存:

1,      CPU中的相关部件提供两个十六位地址,一个称为段地址,另一个称为偏移地址;

2,      段地址和偏移地址通过内部总线送入一个称为地址加法器的部件;

3,      地址加法器将两个16位地址合并成一个20 位的地址;

4,      再通过20位地址总线传送到存储器中。

 

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

地址加法器合成物理地址的方法:物理地址=段地址*16+偏移地址;

段地址*16——》左移四位(二进制)

一个数据的X进制形式左移一位,相当于乘以X

 

2.8 段的概念

段的划分来自于CPU,由于8086CPU采用(物理地址=段地址*16+偏移地址)的方式给出内存单元的物理地址,使得我们可以用分段的方式来管理内存。在编程时可以根据需要,将若干地址连续的内存单元看作一个段,用段地址*16定位段的起始地址(基础地址),用偏移地址定位段中的内存单元。

注意:1,段地址*16必然是16的倍数,所以一个段的起始地址也一定是16的倍数;

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

 

小结:

CPU访问内存单元时,必须向内存提供内存单元的物理地址。

8086CPU在内部用段地址和偏移地址移位相加的方法形成最终的物理地址。

 

思考:

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

偏移地址16位,变化范围为0~FFFFH,仅用偏移地址来寻址最多可以寻64K个内存单元。

 

“数据在21F60H内存单元中”8086CPU机的两种描述:

1. 数据存在内存2000:1F60单元中;

2. 数据存在内存的2000段中的1F60H单元中;

 

2.9段寄存器

段寄存器就是提供段地址的,8086CPU有4个段寄存器:

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

2.10CS和IP

CS和IP是8086CPU中最关键的寄存器,它们指示了CPU当前要读取指令的地址。CS为代码段寄存器IP为指令指针寄存器。

 

2.11修改CS,IP的指令

转移指令:

     同时修改CS,IP的内容:

     Jmp 段地址:偏移地址

         Jmp 2AE3:3

         Jmp 3:0B16

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

     修改IP的内容:

     Jmp 某一合法寄存器

         Jmp ax (类似于mov IP,ax)

         Jmp bx

功能:用寄存器中的值修改IP。

 

2.12代码段

    

2.9-2.12小结:
1.段地址在8086CPU的寄存器中存放。当8086CPU要访问内存时,由段寄存器提供内存单元的段地址。8686CPU有4个段寄存器,其中CS用来存放指令的段地址。

2.CS存放指令的段地址,IP存放指令的偏移地址。

8086机中。任意时刻,CPU将CS:IP指向的内容当作指令执行。

3.8086 CPU在工作的过程中:

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

(2)IP指向下一条指令;

(3)执行指令(跳转到(1),重复这一过程。)

4.8086 CPU提供转移指令修改CS,IP的内容。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!