我编写了一个简单的程序,将扇区(第 2 扇区)加载到 RAM
但什么也不打印。
首先,我为引导扇区尝试了这段代码:
org 0x7c00
mov ax, 0x1000 ; ES:BX = 1000:0000
mov es, ax
mov bx, 0x00
LoadSectortoMemory:
mov al, 0x01 ; Load 1 sectors
mov ah, 0x02 ; Load disk data to ES:BX
mov cl, 0x02 ; Sector = 2
mov ch, 0x00 ; Cylinder = 0
mov dl, 0x00 ; Drive = 0
mov dh, 0x00 ; Head = 0
int 13h ; Read
jc LoadSectortoMemory ; ERROR => Try again
jmp 0x1000:0x0000
times 510-($-$$) db 0
dw 0xaa55
内核从用户那里获取用户名和密码,然后终止程序:
mov si,Username
call Write
call Read
call Next_Line
call Pass
call Read
call Next_Line
call Kernel_Exit
Write:
mov al,[si]
mov ah,0x0e
mov bl,0x07
mov bh,0x00
int 0x10
inc si
mov dl,[si]
cmp dl,0x00
jne Write
ret
Read:
mov ah,0x00
int 0x16
mov ah,0x0e
mov bl,0x07
mov bh,0x00
int 0x10
cmp al,0x0d
jne Read
ret
Pass:
mov si,Password
call Write
ret
Next_Line:
mov al,0x0a
mov ah,0x0e
mov bl,0x07
mov bh,0x00
int 0x10
ret
Kernel_Exit:
mov si,Done
call Write
mov ah,0x4c
int 0x21
Username db 'Username: ',0
Password db 'Password: ',0
Done db 'Done',0
times 510-($-$$) db 0
并没有工作
搜索后我尝试了这段代码(只是在末尾添加了寄存器:/):
bits 16
org 0x7c00
mov ax, 0x1000 ; ES:BX = 1000:0000
mov es, ax
mov bx, 0x00
LoadSectortoMemory:
mov al, 0x01 ; Load 1 sectors
mov ah, 0x02 ; Load disk data to ES:BX
mov cl, 0x02 ; Sector = 2
mov ch, 0x00 ; Cylinder = 0
mov dl, 0x00 ; Drive = 0
mov dh, 0x00 ; Head = 0
int 0x13 ; Read!
jc LoadSectortoMemory ; ERROR => Try again
mov ax, 0x1000
mov ds, ax
mov es, ax
mov fs, ax
mov gs, ax
mov ss, ax
jmp 0x1000:0x0
times 510-($-$$) db 0
dw 0xaa55
再次没有工作
我使用的命令行:
nasm -fbin BootSector.asm -o Bootsector.bin
nasm -fbin Kernel.asm -o Kernel.bin
cat BootSector.bin Kernel.bin > Code.bin
qemu-system-x86_64 Code.bin
qemu有问题吗?
谁能帮我解决我的问题?
提前致谢