数据寻址——堆栈寻址

简介: 数据寻址——堆栈寻址

堆栈寻址


堆栈寻址:操作数存放在堆栈中,隐含使用堆栈指针(SP)作为操作数地址。


堆栈是存储器(或专用寄存器组)中一块特定的按“后进先出(LIFO)”原则管理的存储区,该存储区中被读/写单元的地址是用一个特定的寄存器给出的,该寄存器称为堆栈指针(SP)。


如下图所示:



采用堆栈寻址完成一次加法的过程


记栈顶单元为Msp,


POP ACC   (Msp) → ACC
      (SP)+1 → SP
POP X   (Msp) → X
      (SP)+1 → SP
ADD Y   (ACC)+(X) → Y
PUSH Y    (SP)-1 → SP  (Y) → Msp



两种堆栈方式


栈顶在小地址方向(例如上面例子)


出栈: (Msp) → ACC
    (SP)+1 → SP
入栈: (SP)-1 → SP
    (Y) → Msp


栈顶在大地址方向


出栈: (Msp) → ACC
    (SP)-1 → SP
入栈: (SP)+1 → SP
    (Y) → Msp


分类


硬堆栈


用特定的寄存器来存储数据,在其中进行入栈,出栈操作



但是这样成本会很高


软堆栈


在主存中找一段地址来存储数据,在其中进行入栈,出栈操作



另外


堆栈还可用于函数调用时保存当前函数的相关信息


小结


相关文章
|
4月前
|
存储 Linux 程序员
x86的内存寻址方式
在16位的8086时代,CPU为了能寻址超过16位地址能表示的最大空间(因为 8086 的地址线 20 位而数据线 16 位),引入了段寄存器。通过将内存空间划分为若干个段(段寄存器像 ds、cs、ss 这些寄存器用于存放段基址),然后采用段基地址+段内偏移的方式访问内存,这样能访问1MB的内存空间了。
|
6月前
|
存储
寄存器寻址和寄存器间接寻址的区别
寄存器寻址和寄存器间接寻址的区别
164 0
|
9月前
按字寻址和按字节寻址以及内存编码、地址总线与数据总线的理解
按字寻址和按字节寻址以及内存编码、地址总线与数据总线的理解
78 0
|
10月前
|
存储 程序员
存储器-分段存储管理方式
存储器-分段存储管理方式
351 0
|
程序员 C语言
数据寻址——偏移寻址
数据寻址——偏移寻址
493 0
数据寻址——偏移寻址
|
存储
指令系统——数据寻址
指令系统——数据寻址
151 0
指令系统——数据寻址
|
存储
指令系统——指令寻址
指令系统——指令寻址
133 0
指令系统——指令寻址
|
存储 安全 内存技术
【计算机系统】寻址模式详解与总结
【计算机系统】寻址模式详解与总结
256 0
【计算机系统】寻址模式详解与总结
|
小程序 Windows
【Windows 逆向】内存地址分析 ( 内存条 | 虚拟内存 | 内存地址及寻址范围 | 内存地址与数据的关系 )
【Windows 逆向】内存地址分析 ( 内存条 | 虚拟内存 | 内存地址及寻址范围 | 内存地址与数据的关系 )
172 0
【Windows 逆向】内存地址分析 ( 内存条 | 虚拟内存 | 内存地址及寻址范围 | 内存地址与数据的关系 )
|
机器学习/深度学习 存储 Linux
内存为什么要分段? 分成多少种段? 段与段寄存器的区别?
内存为什么要分段? 分成多少种段? 段与段寄存器的区别?