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