我正在制作一个引导加载程序,但它因 %include 而失败
I'm making a bootloader but it fails with %include
我有一些问题...关于制作引导加载程序。
我有点不确定这是否是 32 位程序集,但如果您看到它是 16 位程序集...
这是我的代码:(fortr_foload.asm)
[ bits 16 ]
[ org 0x7c00 ]
bootstart:
xor ax,ax
mov bx,ax
mov cx,ax
mov dx,ax
mov es,ax
mov ax,0x8000
mov si,fortr_loadbOutp
call fortr_outpf
fortr_loadbOutp db 'booted!!!'
fortr_outpf:
mov ah,0x0E
%include "fortr_kernel.asm"
call fortrk_start
.repboot_fortr:
lodsb
cmp al,0
je .rebboot
int 0x10
jmp .repboot_fortr
.rebboot
ret
times (510 - ($ - $$)) db 0x00
DW 0xAA55
这是第二个:(fortr_kernel.asm)
[ bits 16 ]
fortrk_start:
xor ax,ax
mov bx,ax
mov cx,ax
mov dx,ax
mov bx,0x7000
mov si,fortr_outp
call fortr_printf
fortr_outp db 'Stage 2... Done!'
fortr_printf:
mov ah,0x0E
但是,如果我使用以下代码编译它:
nasm -f bin -o "fortr_foload.asm" "fortrSt.iso"
在 QEMU 中播放它不会启动它只会输出一个白色光标,什么也没有。
但是如果我删除这些行:
%include "fortr_kernel"
call fortrk_start
我什至尝试重新排列线条,但遗憾的是,它甚至都行不通:(
它将成功启动!我怎样才能解决这个问题?提早提提! :D
哦!顺便说一下,我真的是组装新手所以请帮帮我 :D!
当您 %include
一个文件时,它会准确地放置在您包含它的位置。
所以,
[...]
fortr_outpf:
mov ah,0x0E
%include "fortr_kernel.asm"
call fortrk_start
.repboot_fortr:
[...]
变成
[...]
fortr_outpf:
mov ah,0x0E
[ bits 16 ]
fortrk_start:
xor ax,ax
[...]
call fortr_printf
fortr_outp db 'Stage 2... Done!'
fortr_printf:
mov ah,0x0E
call fortrk_start
.repboot_fortr:
[...]
您是在代码路径的中间直接注入包含的文件。如果你想以这种方式做事(你可能想重新考虑,组装和链接单独的源文件),%include
它在处理器将执行的指令之外的某个地方。
我有一些问题...关于制作引导加载程序。 我有点不确定这是否是 32 位程序集,但如果您看到它是 16 位程序集...
这是我的代码:(fortr_foload.asm)
[ bits 16 ]
[ org 0x7c00 ]
bootstart:
xor ax,ax
mov bx,ax
mov cx,ax
mov dx,ax
mov es,ax
mov ax,0x8000
mov si,fortr_loadbOutp
call fortr_outpf
fortr_loadbOutp db 'booted!!!'
fortr_outpf:
mov ah,0x0E
%include "fortr_kernel.asm"
call fortrk_start
.repboot_fortr:
lodsb
cmp al,0
je .rebboot
int 0x10
jmp .repboot_fortr
.rebboot
ret
times (510 - ($ - $$)) db 0x00
DW 0xAA55
这是第二个:(fortr_kernel.asm)
[ bits 16 ]
fortrk_start:
xor ax,ax
mov bx,ax
mov cx,ax
mov dx,ax
mov bx,0x7000
mov si,fortr_outp
call fortr_printf
fortr_outp db 'Stage 2... Done!'
fortr_printf:
mov ah,0x0E
但是,如果我使用以下代码编译它:
nasm -f bin -o "fortr_foload.asm" "fortrSt.iso"
在 QEMU 中播放它不会启动它只会输出一个白色光标,什么也没有。
但是如果我删除这些行:
%include "fortr_kernel"
call fortrk_start
我什至尝试重新排列线条,但遗憾的是,它甚至都行不通:( 它将成功启动!我怎样才能解决这个问题?提早提提! :D 哦!顺便说一下,我真的是组装新手所以请帮帮我 :D!
当您 %include
一个文件时,它会准确地放置在您包含它的位置。
所以,
[...]
fortr_outpf:
mov ah,0x0E
%include "fortr_kernel.asm"
call fortrk_start
.repboot_fortr:
[...]
变成
[...]
fortr_outpf:
mov ah,0x0E
[ bits 16 ]
fortrk_start:
xor ax,ax
[...]
call fortr_printf
fortr_outp db 'Stage 2... Done!'
fortr_printf:
mov ah,0x0E
call fortrk_start
.repboot_fortr:
[...]
您是在代码路径的中间直接注入包含的文件。如果你想以这种方式做事(你可能想重新考虑,组装和链接单独的源文件),%include
它在处理器将执行的指令之外的某个地方。