《汇编语言》学习笔记——寄存器

0x02 寄存器

  • CPU的组成
    • 运算器:信息处理;
    • 寄存器:信息存储;
    • 控制器:控制各种器件运行;
    • 内部总线:连接各种器件,完成数据传输。

内部总线实现CPU内部器件之间的联系,外部总线完成CPU和主板上其他器件的联系。

  • 对于汇编程序员来说,CPU的主要部件是寄存器,是可以通过指令读写的。

2.1 通用寄存器

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

  • AX、BX、CX、DX通常用来存放一般性的数据,称为通用寄存器
  • 由于上一代CPU的寄存器都是8位的,故通用寄存器都可以分为两个独立使用的8位寄存器。

2.2 字在寄存器中的存储

  • 8086CPU可以一次性处理两种尺寸的数据。
    • 字节:可以存在8位寄存器中。
    • 字:可以存在16位寄存器中。

2.3 几条汇编指令

汇编指令 控制CPU完成的操作
mov ax, 18 将18送入ax
mov ah, 78 将78送入ah
add ax, 8 将ax中的数据加上8
mov ax, bx 将bx中的数据送入ax
add ax, bx 将ax和bx中的数据相加送入ax

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

  • 特殊情况
    • add到16位寄存器溢出时,只保留16位;
    • add到8位寄存器溢出时,只保留8位。
      • 即使是低位也不会将溢出部分保留到高位
      • 此时低位寄存器和高位寄存器是独立的,没有关系。

两个操作对象的位数必须相同。

2.4 物理地址

  • 所有内存单元构成一维线性空间,每个内存单元在其中有唯一的地址,称其为物理地址
  • CPU通过总线发送物理地址之前,需要先在内部形成这个物理地址。
    • 不同的CPU有不同的形成方式。

接下来讨论如何在8086CPU内部形成内存单元的物理地址。

2.5 16位结构的CPU

  • 16位结构表示的特性。
    • 处理:运算器一次最多处理16位的数据;
    • 存储:寄存器最大宽度为16位;
    • 传输:寄存器和运算器之间通路为16位。

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

  • 8086CPU有20位地址总线,但又是16位结构(只能发出16位的地址)。

    • 8086CPU内部使用两个16位地址合成的方法来形成一个20位的物理地址
  • 8086CPU读写内存过程。

    • CPU的部件提供两个16位的地址:段地址和偏移地址
    • 段地址和偏移地址通过内部总线送入地址加法器
    • 地址加法器将两个16位的地址合成为一个20位的物理地址
    • 地址加法器通过内部总线将物理地址送入输入输出控制电路
    • 输入输出控制电路通过地址总线传送到内存。

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

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

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

2.8 段的概念

  • 内存是没有分段的,分段的概念来自CPU

基础地址=段地址*16,故一个段的起始地址(不是段地址)一定是16的倍数

偏移地址只有16位,故一个段最大为64KB

2.9 段寄存器

  • 段地址是放在段寄存器中的。
    • 8086CPU中为CS、DS、SS、ES,访问内存时由这4个段寄存器提供内存单元的段地址

2.10 CS和IP

  • CS和IP指示了当前读取指令的地址
    • CS是代码段寄存器,IP是指令指针寄存器
    • 当前指令的物理地址为CS*16+IP
  • 8086CPU的工作过程可以简要概述如下:
    • 将CS和IP的值送入地址加法器计算出指令的物理地址
    • 根据物理地址从内存中取出指令,经过输入输出控制电路送入指令缓冲器
    • 此时IP+=所读指令的长度,使得CS:IP指向下一条指令;
    • 指令被送入执行控制器执行。

  • 8086CPU刚启动时,CS=FFFFH,IP=0000H,即第一条指令在FFFF0H单元中

内存中的信息是否为指令,取决于其是否被CS:IP指向。

2.11 修改CS、IP的指令

  • 程序员可以改变CS、IP的内容,以控制CPU执行目标指令
  • mov指令被称作传送指令,可以修改大部分寄存器的值
    • 但是不能用于修改CS、IP,因为8086CPU没有提供这样的功能。
  • 能够修改CS、IP内容的指令被统称为转移指令,例如jmp。
    • 若想同时修改CS和IP的内容,可用jmp 段地址:偏移地址
    • 若只想修改IP的内容,可用形如jmp 某一合法寄存器
jmp 2AE3:3;	CS修改为2AE3,IP修改为3
jmp bx;		CS不变,IP修改为BX中的值

2.12 代码段

  • 代码段逻辑意义上用于存放机器码的连续内存单元。
    • 逻辑意义意味着CPU并不关心其是否为指令,它只认CS:IP指向的内容。
posted @ 2022-03-17 08:41  CH3UHX9  阅读(267)  评论(0编辑  收藏  举报