如何解决我正在做一个引导程序,但是
我在制作引导加载程序时遇到一些问题。 我有点不确定这是否是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,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
我什至试图重新排列行,但可悲的是,它甚至无法工作:( 它将成功启动!我怎样才能解决这个问题?提前TYSM! :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
将其置于处理器将不执行的指令之外。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。