在8086汇编中读取堆栈(16位模式)

时间:2018-10-20 13:06:47

标签: assembly x86-16

我希望能够使用正常的ASM功能将某些值压入堆栈。

例如

push ax
push bx
push cx
push dx

我想使用堆栈框架以任何顺序访问它们。

比方说,我想按C,B,A,D的顺序弹出这些框,而不仅仅是要做...

pop dx
pop cx
pop bx
pop ax

使用SP / BP进行此操作的最好/最有效的方法是什么,这样我就可以在需要它们时抓取东西,而不必为每次使用初始4 AX到DX值而不断推动和弹出?

1 个答案:

答案 0 :(得分:4)

如果是8086,则不能将SP用作基址寄存器,只能将BP用作基址寄存器,因此需要将SP复制到BP,然后将BP +/-偏移量用作基于堆栈的变量的地址,例如

        push    bp
        mov     bp,sp
        push    ax          ;[bp-2]
        push    bx          ;[bp-4]
        push    cx          ;[bp-6]
        push    dx          ;[bp-8]
        ...
        mov     ax,[bp-4]   ;ax = pushed value from bx
        ...
        mov     sp,bp       ;restore sp
        pop     bp          ;restore bp