-1

这是我的项目的结构:

  • “boot.asm”:进入 64 位模式,读取 CHS 并将“内核”加载到 0x100000,然后 jmp 到 0x100000
  • “内核.asm”

这是“kernel.asm”:

   [bits 64]
   msg:   db      "K"
   mov al, [msg]
   mov ah, 3 ; cyan
   mov word [0xb8000], ax
   jmp $

此代码在放入“boot.asm”时有效。但是当放入“kernel.asm”时只会打印奇怪的字形或“S”......我不知道为什么。问题似乎与“味精”声明有关。例如,当我将 "msg: db "K" " 替换为 " msg equ "K" " 时,它会打印出好字符,我无法找出问题所在,您有什么建议吗?

干杯,

4

2 回答 2

0

已解决:解决方案只是放入[org 0x100000]kernel.asm 以提及 nasm 将代码放在哪里,以便确保所有内存访问都在绝对寻址中。

于 2014-11-25T21:15:59.683 回答
0

你忘了跳过味精。除非程序跳过 msg,否则 msg 将被解释为命令。试试下面的代码:

[bits 64]
jmp start
msg:   db      "K"
start:
mov al, [msg]
mov ah, 3 ; cyan
mov word [0xb8000], ax
jmp $
于 2014-11-25T20:09:27.247 回答