Assembly ├Γ;加载程序集内核时出现的符号
当我运行我的操作系统时,它显示的不是字符串“Kernel Loaded.”,而是一个神秘的符号,├Γ. 其他字符串也会出现这种情况,所有字符串都显示├Γ. 引导加载程序是1个扇区,内核是相同的。我使用dd创建一个.img文件,并使用nasm编译操作系统 这是运行操作系统时显示的内容:Assembly ├Γ;加载程序集内核时出现的符号,assembly,x86-16,bootloader,Assembly,X86 16,Bootloader,当我运行我的操作系统时,它显示的不是字符串“Kernel Loaded.”,而是一个神秘的符号,├Γ. 其他字符串也会出现这种情况,所有字符串都显示├Γ. 引导加载程序是1个扇区,内核是相同的。我使用dd创建一个.img文件,并使用nasm编译操作系统 这是运行操作系统时显示的内容: Socktt OS bootloader 1.0 Reading Sectors on disk... Done. ├Γ Kernel.asm: mov si, STR_K_LOAD call k_printf
Socktt OS bootloader 1.0
Reading Sectors on disk...
Done.
├Γ
Kernel.asm:
mov si, STR_K_LOAD
call k_printf
jmp $
STR_K_LOAD: db 'Kernel Loaded.', 0
k_printf:
pusha
k_printloop:
mov al, [si]
cmp al, 0
jne k_dispchar
popa
ret
k_dispchar:
mov ah, 0x0E
int 0x10
add si, 1
jmp k_printloop
times 510-($-$$) db 0
dw 0xAA55
boot.asm:
mov si, STR_K_LOAD
call k_printf
jmp $
STR_K_LOAD: db 'Kernel Loaded.', 0
k_printf:
pusha
k_printloop:
mov al, [si]
cmp al, 0
jne k_dispchar
popa
ret
k_dispchar:
mov ah, 0x0E
int 0x10
add si, 1
jmp k_printloop
times 510-($-$$) db 0
dw 0xAA55
内核中缺少一个
org 0x7e00
。PS:只有引导扇区需要引导签名,但这是无害的。您应该真正地将ds设置为零,否则它可能无法在不同的环境下工作;如果您想借用ISO C中的名称,put
会更好,尽管这意味着终止换行符,但您也不会这样做。因此,也许只是print
会是一个更好的名字。顺便说一句,使用调试器查看代码中发生了什么,例如,BOCHS有一个内置调试器,它可以让您单步执行代码,查看代码是否正确运行,这样您就可以查看寄存器中的值。