汇编语言第二章:寄存器

2. 寄存器

寄存器进行信息的存储,对于汇编程序员来说,CPU 中的主要部件是 寄存器8086 CPU14 个寄存器,这些寄存器分别是:

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

2.1 通用寄存器

8086所有的寄存器都是 16 位的,可以存放 两个字节。下面所有的描述都是基于 8086,不再赘述。

通用寄存器通常用来存放一般性的数据。下面是四个通用寄存器:

AX、BX、 CX、 DX

16 位寄存器的逻辑结构:

在这里插入图片描述

一个 16 位的存储器可以存储一个 16 位的数据,存储的数据范围为( 2 0 2^0 20 ~ 2 16 2^{16} 216- 1 )

在这里插入图片描述

每个寄存器都可以分为两个独立的 8 位寄存器来使用。AX 可以分为 AHAL

ax八位(0 - 7)构成了 al 寄存器,八位(8 - 15)构成了 ah 寄存器。
在这里插入图片描述

2.2 字的存储

字节:byte ,一个字节由 8 个 bit 组成,可以存在 8 位寄存器中。

字:word 一个字由两个字节组成,可以分为高位字节和低位字节。

一个字可以存在一个 16 位寄存器中。

mov ax, 18   //将18送入寄存器ax
mov ah, 78   //将78送入寄存器ah
add ax,8     //将寄存器ax中的数值加上 8

注意:在写一条汇编指令或者一个寄存器的名称时不区分大小写。

在进行数据传送或者运算的时候,要注意指令的两个操作对象的位数应当是一致的。8 位 和 16 位一定不要混用。

// 以下全是错误指令
mov ax,bl
mov bh,ax
mov al,20000
add al, 100H

2.3 物理地址

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

16 位结构的描述了一个 CPU 具有如下结构特性:

  • 运算器一次最多可以处理 16 位数据
  • 寄存器的最大宽度是 16 位
  • 寄存器和运算器之间的通路为 16 位。

8086 CPU 可以一次性传送 20 位地址,寻址能力为 1 MB 采用一种在内部用两个16位地址合成的方法来形成一个 20 位的物理地址。

8086 CPU 提供两个 16 位的地址,一个是 段地址,一个是 偏移地址

过程:

段地址 + 偏移地址 => 地址加法器 => 输入输出控制电路 => 通过地址总线传送到内存

在这里插入图片描述

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

本质含义:CPU 在访问内存的时候,用一个基础的地址(段地址*16)和一个相对基础地址的偏移地址相加,给出内存单元的物理地址。

更一般的说法 :物理地址 = 基础地址 + 偏移地址

段地址    1230            段地址*16 12300     相加获得物理地址:123C8H
偏移地址   00C8            偏移地址   00C8

小技巧:一个 X 进制的数据左移一位,相当于乘以 X

2.4 段寄存器

段并不是把内存单元划分成了一个一个的段。其实内存并没有划分成段,段的划分来自 CPU ,用上述的方式来给出内存单元的物理地址,使得我们可以用分段的方式来管理内存。

在这里插入图片描述

注意:段地址*16 必然是16的倍数,所以一个段的起始地址一定是16的倍数;偏移地址位16位,16位地址的寻址能力为64KB,所以一个段的长度最大为64KB

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

有四个段寄存器: CS、DS、SS、ES 本节我们重点看一下 CS

CSIP 指示了 CPU 当前要 读取指令 的地址。CS 为代码段寄存器 IP 为指令指针寄存器。

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

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

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

2.4.1 修改 CS 、IP 的指令

如果想同时修改 CS IP 的指令,需要用 jmp 段地址:偏移地址

上述指令的功能位:用指令中给出的段地址修改CS 偏移地址修改 IP

如果仅想修改 IP 的内容,可用形如 jmp 某一寄存器 的指令完成.。

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值