请举个例子,我需要使用Push和Pop for 8085

时间:2014-12-08 16:55:14

标签: assembly 8085

我知道push意味着在堆栈上放置一个值,pop意味着从堆栈中检索值(如果我错了,请纠正我),但这是什么目的?我什么时候需要使用Push and Pop和现实生活?请举例说明我能理解。

3 个答案:

答案 0 :(得分:1)

Push和Pop用于在堆栈上存储数据并分别从堆栈中获取数据。

堆栈基本上像一堆卡片一样工作。您使用Push指令将卡放在顶部,然后使用Pop指令将卡从顶部取出。

例如,如果一个函数可以接受100个参数(有时是“printf”函数),则没有足够的寄存器来存储每个参数,因此您可以将信息压入堆栈,调用函数,然后将其弹出到注册使用它。您有时也需要使用堆栈来存储函数调用的返回地址。

答案 1 :(得分:0)

我们的数据段中的每个已知内存位置都可以非常容易地一次又一次地读取和写入,并且不受堆栈机制的紧密联盟和堆栈指针的位置的限制,并且无需在返回地址和调用深度。所以我的感觉是推送和弹出指令可以用写入和读取指令替换,因此它们不是绝对需要的,但有时也很有帮助。

答案 2 :(得分:0)

在中断的情况下 - 中断处理器的异步事件 - 中断例程必须保存寄存器的状态。通常,通过将它们推入堆栈来完成。然后他们会在返回之前从堆栈中弹出。

push a  ; save registers
push b
push d
push h
;
; now do whatever the interrupt routine does
;
; and then restore the registers
pop h
pop d
pop b
pop a
ei      ; re-enable interrupts
ret

如果中断处理程序没有这样做,寄存器在返回时将处于某种未知状态。正如他们所说,那将是不好的。