我希望能够使用正常的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值而不断推动和弹出?
答案 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