当前位置: 汇编教程 > 02-寄存器 > 阅读正文

汇编 段寄存器

2021.7.11.   2148 次   897字

段与段寄存器

首先了解什么是段?

内存是连续的, 并不分段,

段的划分来自CPU, 使得我们可以使用分段方式管理内存.

段寄存器有哪些?

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

  1. CS –> 代码段寄存器
  2. DS –> 数据段寄存器
  3. SS –> 堆栈段寄存器
  4. ES –> 附加(辅助)段寄存器

此外, 一个很重要的寄存器是 IP, 它是 指令指针寄存器

8086CPU读取和执行的过程

假设CS段存储的是 mov ax, 0123H

  1. 由CS和IP两个地址送入地址加法器合成一个20位的物理地址
  2. 通过输入输出控制电路, 通过20位的地址总线输出, 索引到内存地址
  3. 这里的内存地址, 是指CS, 即代码段寄存器, 在cs所在内存地址中取到了内存数据
  4. 通过输入输出设备, 把数据输入到指令缓冲器, 最后传到执行控制器
  5. 执行完毕后 ax就是0123, IP也会偏移3存储单元

这里的 mov ax, 0123H 指令, 在内存中的数据为 B8 23 01, 所以IP偏移3个存储单元

当8086CPU加电或复位后, 也就是PC启动时, CS被设置为FFFFH, IP=0000H, 那么它就会从FFFF0H单元中读取指令执行, 现在的PC也是这个原理, 这个位置是BIOS的位置

IP在每次执行完毕后, IP的值 = IP + 执行指令的长度.

指令缓冲器,是一个临时存放指令的元件,保存将要执行(发送)但没指令的指令。

转移指令

在CPU中, 程序员能够用指令读写的部件只有寄存器, 通过改变寄存器的内容实现对CPU的控制, 这里我们通过修改CS, IP的值来控制CPU

修改CS, IP的值, 由8086专门的指令, 也叫转移指令

jmp指令能同时修改CS, IP, 它的语法:

jmp 段地址:偏移地址
jmp 2AE3:3
jmp 3:0B16

仅修改 IP 的值, 使用 jmp 结合某一个合法寄存器

mov ax 200
jmp ax (类似于 mov IP,ax)
jmp bx

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

注意debug中可以直接修改cs和ip,并不是汇编指令,它是debug指令

扩展: 由于在冯诺依曼计算机中, 数据和指令是混合存放于内存中的, 也就是说, 必须通过CS寄存器CPU才认为是指令代码, 而DS则被认为是数据

本篇完,还有疑问?

加入QQ交流群:11500065636 IT 技术交流群