我正在用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中断也会被执行,但当我重新添加代码时,什么也没有发生,中断也不工作。
我做错了什么为什么会这样?
1条答案
按热度按时间2ic8powd1#
MBR Boot ss:sp的一个常见设置是将它们设置为00000h:07c00h,这样堆栈就在引导代码开始之前结束。