Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly ├Γ;加载程序集内核时出现的符号_Assembly_X86 16_Bootloader - Fatal编程技术网

Assembly ├Γ;加载程序集内核时出现的符号

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

当我运行我的操作系统时,它显示的不是字符串“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

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有一个内置调试器,它可以让您单步执行代码,查看代码是否正确运行,这样您就可以查看寄存器中的值。