汇编语言基础-寄存器(内存访问)
在上一章中了解了CS,IP,[AX,BX,CX,DX]等寄存器的工作流程,直到现在还未与计算机CPU以外的器件产生通信,在这一章中我们通过了解DS,SS,SP等寄存器,将CPU与内存连接起来建立通讯
内存中字的存储
在CPU中用16位寄存器来存储一个字,高八位存放高位字节,低八位则用来存放低位字节,下图则是对于一块内存其内部详细结构,除了图中所示的排序外任意两个相邻的八位字节存储空间均可以作为一个字的存储空间。
DS和[address]
CPU在读写一个内存单元的过程中首先要想读取指令或者代码段一样,通过段地址+偏移地址的方式获取内存数据的物理地址,对于数据的存储来说DS则充当数据段地址的作用,并且数据段地址存储器DS只能通过【AX,BX,CX,DX】等寄存器进行赋值。对于内存数据读取汇编语言代码一般如下
MOV BX,内存数据段地址
MOV DS,BX
MOV 偏移地址,值
MOV、ADD、SUB指令
数据段
对于8086CPU我们可以将一组长度位N(N<=64KB)的地址连续,起始地址位16倍数的内存单元作为数据段,访问数据段中的数据通常采用 DS[数据段地址]:[数据偏移地址] 来访问。
SS,SP寄存器
对于8086CPU其通过SS,SP两个寄存器实现了对于栈的访问,栈是一种先进后出的数据结构,只在栈顶端存在入栈以及出栈的操作,因此对于SS,SP寄存器,SS负责存放栈顶的段地址,而SP则存放当前栈顶的偏移地址,对于任意时刻SS:SP指向栈顶元素地址,同样的对于栈段寄存器SS来说,其赋值手段也仅仅通过其他寄存器给他赋值。
PUSH,POP指令
对于PUSH入栈操作CPU的执行流程如下,概括来说也就是偏移地址减二之后在写入数据
PUSH AX
{
SP=SP-2
MOV SS:SP,AX
}
对于POP出栈操作CPU的执行流程如下,概括来说也就是将数据赋值给指定地址之后在将偏移地址加二
POP
{
MOV AX,SS:SP
SP=SP+2
}
总结
对于以上的寄存器我们可以通过一张图来描述CPU与各部分寄存器的交互方式。
课后题3.1
课后题3.2
|