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

3 assembly x86-16

我希望能够使用正常的 ASM 功能将一些值推送到堆栈。

例如

push ax
push bx
push cx
push dx
Run Code Online (Sandbox Code Playgroud)

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

假设我想按照 C、B、A、D 的顺序弹出这些,而不仅仅是必须这样做......

pop dx
pop cx
pop bx
pop ax
Run Code Online (Sandbox Code Playgroud)

使用 SP/BP 执行此操作的最佳/最有效方法是什么,以便我可以在需要时抓取东西,而不必在每次使用初始 4 AX 到 DX 值时不断推送和弹出?

rcg*_*ldr 7

在真正的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
Run Code Online (Sandbox Code Playgroud)