数据寻址——堆栈寻址

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

堆栈寻址


堆栈寻址:操作数存放在堆栈中,隐含使用堆栈指针(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


分类


硬堆栈


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



但是这样成本会很高


软堆栈


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



另外


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


小结


相关文章
|
7月前
|
存储 程序员 芯片
虚拟地址和物理地址之间的区别
【4月更文挑战第12天】
619 2
虚拟地址和物理地址之间的区别
|
存储 索引
逻辑地址与物理地址的转换
最近一直在学8086,上课老师突然问了个这。对于问题“8086 CPU 能提供20位的地址信息,可直接对1M个存储单元进行访问,而CPU内部可用来提供地址信息的寄存器都是16位,那怎样用16位寄存器来实现20位地址寻址呢"明白了不少。
173 0
|
存储
逻辑地址和物理地址转换
逻辑地址和物理地址转换
|
7月前
|
存储 Linux 程序员
x86的内存寻址方式
在16位的8086时代,CPU为了能寻址超过16位地址能表示的最大空间(因为 8086 的地址线 20 位而数据线 16 位),引入了段寄存器。通过将内存空间划分为若干个段(段寄存器像 ds、cs、ss 这些寄存器用于存放段基址),然后采用段基地址+段内偏移的方式访问内存,这样能访问1MB的内存空间了。
按字寻址和按字节寻址以及内存编码、地址总线与数据总线的理解
按字寻址和按字节寻址以及内存编码、地址总线与数据总线的理解
202 0
|
程序员 C语言
数据寻址——偏移寻址
数据寻址——偏移寻址
721 0
数据寻址——偏移寻址
|
存储
指令系统——数据寻址
指令系统——数据寻址
205 0
指令系统——数据寻址
|
机器学习/深度学习 存储 Linux
内存为什么要分段? 分成多少种段? 段与段寄存器的区别?
内存为什么要分段? 分成多少种段? 段与段寄存器的区别?
汇编(二) 内存地址空间、寄存器、物理地址以及物理地址的计算
汇编、内存地址空间、寄存器、物理地址、物理地址的计算、汇编指令
4992 1
|
Linux C++ 调度