Почему я не могу получить доступ к середине стека? - PullRequest
0 голосов
/ 21 сентября 2018

Я работаю с в этом уроке - в разделе, в котором я нахожусь, есть загрузчик, который получает доступ к стеку.Я пытаюсь понять этот код:

mov ah, 0x0e     ; int 0x10 writes to tty
mov bp, 0x8000   ; set the base of our stack
mov sp, bp       ; there's nothing in the stack, so the base pointer
                 ; and the stack pointer are the same. 

push 'A'        
push 'B'
push 'C'         ; bp at 0x8000, sp at 0x7ffe. 

mov al, [0x7ffe]
int 0x10         ; this prints what's at the top of the stack, 'A'

mov al, [0x7fff]
int 0x10         ; this prints garbage or nothing, for some reason, but
                 ; I would expect it to print 'B'

`` `

Я знаю, что должен взаимодействовать со стеком через push и pop.Но если я могу получить доступ к вершине стека напрямую, почему я не могу получить доступ к середине или дну?Применяет ли процессор или MMU ограничения доступа на ранней стадии процесса загрузки?

Если это поможет, я проверяю этот код по:

nasm -f bin 'this_code.asm' -o boot.bin
qemu-system-x86_64 --nographic boot.bin
...