标签:代码 pop 编程 解决 情况 bsp 组成 地址 inf
一、字数据在内存中的存放
内存以字节为单位,划分为若干个单元
用16位寄存器来存储一个字的时候,由于内存单元是字节单元,所以一个字要用两个内存单元来存放。因此,产生了怎样存放字节的问题
可以用小端法解决,即:字数据的低位字节存放在低地址内存单元;字数据的高位字节存放在高地址内存单元
并且取低地址内存单元地址作为字数据地址
二、数据的传送
在8086CPU中,内存地址由段地址和偏移地址组成
DS寄存器,通常用来存放要访问数据的段地址
与数据传送有关的mov、add、sub指令
注意:8086CPU不支持将数据直接送入段寄存器的操作
[...]表示一个内存单元,[...]中的数字表示内存单元的偏移地址(默认地址在DS中)
例:mov ax,[1]
表示ax ← ( (ds) × 16 + 1)
三、栈
「栈」是一个逻辑上的概念。可以将一段内存空间当作「栈」来使用
栈的特点是后进先出
栈中有栈顶和栈尾
栈顶: 最后入栈的字数据所对应的地址单元
栈底: 固定的一端,栈区最高地址单元的前一个单元
与栈有关的寄存器:SS和SP
SS: 栈段段寄存器,用于存放栈段的「段地址」
SP: 栈指针寄存器,用于存放栈顶的偏移地址
栈中的操作指令:
push(入栈)和pop(出栈)
push指令的执行步骤:
SP=SP-2 ,SS:SP指向当前栈顶单元
将ax中的内容送入SS:SP指向的内存单元处,SS:SP指向新的栈顶
pop指令的执行步骤:
将SS:SP指向的内存单元处的数据送入ax中
SP=SP+2
栈顶超界问题的可能情况:
当栈满的时候,再使用push指令入栈
当栈空的时候,再使用pop指令出栈
四、段的概念
「段」是一个逻辑上的概念。 编程时,可根据需要指定一段内存区用作数据段、代码段或是栈段
用作数据段时,要把段地址→DS
用作栈段时,要把段地址→SS,栈顶偏移地址 → SP
用作代码段时,段地址→CS,要取的指令偏移地址→IP
标签:代码 pop 编程 解决 情况 bsp 组成 地址 inf
原文地址:https://www.cnblogs.com/baixingyeblog/p/9917822.html