Сборка регистров sp и bp

Мне нужна помощь в понимании того, как регистры стека работают в ассемблере x86. Фрагменты кода ниже взяты из загрузчика, который я изучаю.

Функция печати принимает три «аргумента». Поскольку я помещаю все три в стек, я ожидаю, что sp будет равно 0xfff9. bp принимает один и тот же адрес один раз в функции печати.

Почему я должен делать [bp+4] вместо [bp+2]? Поскольку переменные, которые я вставил в местоположения 0xfffd , 0xfffb и 0xfff9 , не являются? Затем, когда я возвращаюсь из функции печати, я добавляю add sp, 6, чтобы восстановить sp в том же месте перед печатью.

; stack initialization
mov ax, 0x0000
mov ss, ax
mov sp, 0xffff
mov bp, 0xffff

EDIT Забыли про адрес возврата функции.


person Quaxton Hale    schedule 19.03.2014    source источник