寄存器和内存的访问笔记

1.寄存器

1.1cpu的组成

cpu由运算器、控制器、寄存器等器件依靠内部总线连接组成
内部实现实现cpu内部各个器件之间的联系
外部总线实现cpu和主板上其他器件的联系

cpu中器件和功能

器件功能
运算器信息处理
寄存器信息存储
控制总线控制各种器件进行工作
内部总线连接各种器件,在器件之间进行数据的传送

8086cpu中有14个寄存器
在这里插入图片描述

1.2通用寄存器

8086cpu的所有寄存器都是16位的重点),因此可以存放两个字节。
AX,BX,CX,DX这4个寄存器被称为通用寄存器,用来存放一般性的数据。
逻辑结构如图所示
在这里插入图片描述
所以能存储的最大数据为
无符号16位整数的范围是从0到 216−1
有符号整数为2-15 到 215-1(第一位做符号位,所有只有15个数据位)

8086cpu的AX、BX、CX、DX也可以分为两个独立的8位寄存器来用
AX可分为AH、AL
BX可分为BH、BL
CX可分为CH、CL
DX可分为DH、DL
在这里插入图片描述
低8位(0 - 7位)构成了AL寄存器,高8位(8 - 15位)构成了AH寄存器
AH和AL都是可以独立使用的(如下图)
在这里插入图片描述

2.字在寄存器中的存储

字节:记为byte,由8个bit构成,可以存在8位寄存器中。
字:记为word,一个字由两个字节组成,这两个字节分别称为这个字的高位字节和低位字节。
在这里插入图片描述
高位字节在高8位寄存器中
地位字节在低8位寄存器中

3.汇编指令

在这里插入图片描述
注意:
1.汇编指令不区分大小写。
2.高8位和低8位分别运算都可以进行独立运算,运算结果只保留高(低)8位置。
3.运算也会存在溢出问题超出16位的运算结果溢出超过16位的部分。
4.指令的两个操作对象的位数应当是一致的。
在这里插入图片描述

4.物理地址

4.1物理地址的概念

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

4.2 16位结构的cpu

特性:
在这里插入图片描述

4.3物理地址在8086cpu中的表示

由于8086cpu是16位结构,所有能处理的地址信息只能达到16位,但是实际上8086cpu有20根地址总线,可以传输20位地址,所以用两个16位地址合成的方法来形成一个20位的物理地址。
在这里插入图片描述
因此

物理地址 = 段地址*16 + 偏移地址

段地址*16可以看作是基础地址

4.4段的概念

内存是连续的,并没有分段,只是在编程需要时,可以把若干地址连续的内存单元看成是一个段。
注:

1.段地址必然是16的倍数,因为段地址开始会*16
2.偏移地址为16位,所以16位的寻址能力为64KB,所以一个段的长度最大为64KB

在这里插入图片描述

关于物理地址的描述
如"数据在21F60H内存单元中"
有两种描述方法
1.段地址:偏移地址 如:2000:1F60
2.数据存在内存的2000H段中的1F60H的单元中。

5.CS和IP

CS和IP是8086cpu中两个最关键的寄存器
CS为代码段寄存器
IP为指令指针寄存器
具体作用如:
设CS中的内容为M,IP中的内容为N,8086cpu将从内存M * 16 + N的单元开始,读取一条指令并且执行。
格式也可以为段地址表示法 CS:N

CS和IP修改方法:不能直接使用mov指令修改CS,IP的值,因为8086cpu设计时没有提供这样的功能
两种方法修改
1.使用jmp指令

jmp 段地址:偏移地址    这种方法会同时修改CS和IP
jmp 某一合法的寄存器   这种方法只会修改IP的值

2.使用mov指令先赋值给中间寄存器

mov ax,1000H
mov cs(ip),ax
这样即可实现间接的修改cs(ip)的值

6.指令的读取执行原理

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
因此8086的工作过程可以简要描述如下:
在这里插入图片描述
由执行过程可知:

1.读取一条指令后,IP中的值自动增加,以使cpu可以读取下一条指令
2.之前读入的指令长度为多少,IP中的值加多少。
3.内存中一段信息被cpu执行过的话,那么他所在的内存单元必然被CS:IP指向过。

7.段寄存器

7.1代码段寄存器

段寄存器也就是CS:IP ,CS存的是段地址,IP存的是偏移地址,cpu只会认为CS:IP所指的内存单元中的内容为指令

8086cpu的工作过程

1.从CS:IP指向内存单元读取指令,读取的指令进入指令缓冲区。
2.IP指向下一条指令。
3.执行指令(转到步骤1,重复这个过程)。

7.2数据段寄存器

7.2.1内存中字的存储

cpu中,用16位的寄存器存储一个字,一个字为两个字节,将数据的高8位放在高字节,低8位放在低字节。
例如
存储4E20H和0012H
在这里插入图片描述
由此产生字单元的概念
字单元:存放一个字型数据(16位)的内存单元,由两个地址连续的内存单元组成。

我们常称起始地址为N的字单元简称为N地址单元,比如一个字单元由1,2两个内存单元组成,我们就说是1地址字单元。

7.2.2数据段寄存器的使用

前面我们说过cpu将CS:IP所指的内容认为是指令,那么肯定也有一个东西将内存单元中的东西看成是数据这个东西就是数据段寄存器。
数据段寄存器DS常常和偏移地址一起使用
[偏移地址]就代表内存地址为DS:偏移地址 这样的一个内存地址
例如:

mov ax,[0]
代表将内存地址为DS:0的数据赋值给ax。

注意数据段寄存器的使用的时候赋值
一定是同字节数赋值
1.

mov ax,[0]
因为运算要保证是同字节运算,所以ax为两个字节数据,那么赋值数据段寄存器也是两个字节数据,即把ds:0,ds:1的数据赋给ax。
假设ds:0数据为01H,ds:1的数据为12H,那么ax结果就为1201H.

mov al,[0]
那么只会将ds:0的内存单元数据赋值给al。

7.3栈段寄存器

顾名思义就是像内存单元像栈一样访问
我们使用SS,SP来标记一段内存单元是栈空间
SS:段地址
SP:偏移地址寄存器
两种操作
push和pop
在这里插入图片描述
push执行过程
在这里插入图片描述
在这里插入图片描述
pop执行过程
在这里插入图片描述
在这里插入图片描述

注意:
内存单元作为栈空间只是我们认为设定的,是会存在栈顶超界问题的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值