assembly 真实的模式中的堆栈初始化问题:如何正确地初始化堆栈?

bvjveswy  于 2023-06-23  发布在  其他
关注(0)|答案(1)|浏览(111)

我正在用x86汇编语言编写一个简单的 Boot 加载程序,下面是它的代码:

org 0x7C00
section boot start=0x7C00

; initializing the stack 
mov ax,0xF000
mov ss,ax 

mov sp,0xFFFF
mov bp,0xFFFF



; loading the additional sectors 
mov ah,0x02
mov al,0x02    ; number of sectors
mov ch,0x00    ; cylinder 
mov cl,0x02    ; sector 2
mov dh,0x00    ; head 

; address = es*0x10 + bx
xor bx,bx  ; moving 0 to es 
mov ds,bx
mov es,bx    
mov bx,0x8000

int 0x13

jmp 0x8000

times 510-($-$$) db 0 

db 0x55, 0xaa     ; Ending the boot sector

问题是,每当我删除堆栈初始化代码时, Boot 加载程序都能正常工作,BIOS中断也会被执行,但当我重新添加代码时,什么也没有发生,中断也不工作。
我做错了什么为什么会这样?

2ic8powd

2ic8powd1#

MBR Boot ss:sp的一个常见设置是将它们设置为00000h:07c00h,这样堆栈就在引导代码开始之前结束。

相关问题