Johnny

博观而约取
厚积而薄发

【汇编语言】段寄存器

段寄存器

请输入图片描述
前言:8086CPU有20位地址总线,可以传送20位地址,达到1MB的寻址能力。但是8086CPU又是16位结构,在内部一次性处理、传输、暂时存储的地址为16位。从8086CPU的内部结构来看,如果将地址从内部简单的发出,那么它只能发出16位的地址,表现出的寻址能力也只有64KB。

因此,需要用一种特殊的方式将16位的地址合成来形成一个20位的物理地址。

解决方案就是通过一个基础地址(段地址)*16+偏移地址=20位的内存地址

CS(代码段寄存器)

CS为代码段寄存器,IP为指令指针寄存器。CS和IP一起所指向的数据均为指令。8086读取指令的简要过程为:1、从CS:IP指向的内存单元读取指令,读取的指令进行指令缓冲器。2、IP=IP+所读取指令的长度,从而指向下一条指令。3、执行指令,继而继续指向步骤1。

CS:IP的修改方式为jmp。

DS(数据段寄存器)

DS寄存器通常用来存放要访问的数据的段地址。段寄存器不可直接进行赋值,需要通过通过寄存器进行转换。取值格式为mov ax []

ES(附加段寄存器)

SS(堆栈段寄存器)

8086CPU中,有两个寄存器,段寄存器SS和寄存器SP,栈顶的段地址存放在SS中,偏移地址存放在SP中。任意时刻,SS:SP总是指向栈顶元素

当栈为空时,栈中没有元素,也就不存在栈顶元素,所以SS:SP只能指向栈的最底部单位下面的单元,该单元的偏移地址为栈最底部的子单元的偏移地址+2。

tip:pop的数据并未真是消失,只是形象的认为它已经不存在栈中。

栈越界将会影响周边的数据元素,8086CPU不保证我们对栈的操作不会超界。

本原创文章未经允许不得转载 | 当前页面:Johnny-韩源-期待与你分享生活的每一天 » 【汇编语言】段寄存器

评论