Считывание из стека в сборке 8086 (16-битный режим) - PullRequest
0 голосов
/ 20 октября 2018

Я хотел бы иметь возможность передавать некоторые значения в стек, используя обычную функциональность ASM.

например,

push ax
push bx
push cx
push dx

Я хотел бы получить к ним доступ в любом порядке, используя стекframe.

Допустим, я хочу вывести их в порядке C, B, A, D, а не просто делать ...

pop dx
pop cx
pop bx
pop ax

Что лучше / наиболее эффективноспособ сделать это с помощью SP / BP, чтобы я мог просто захватывать вещи, когда они мне нужны, без необходимости нажимать и извлекать при каждом использовании начальных значений 4 AX to DX?

1 Ответ

0 голосов
/ 20 октября 2018

В случае истинного 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
...