显示文字无间断

时间:2018-10-04 09:17:58

标签: assembly x86-16 bootloader

我正在尝试制作自己的引导加载程序。从16位模式更改为32位模式时,由于我不会有任何中断,因此我将无法使用int 10h

这是我到目前为止的代码:

org 0x7c00            ; add to offsets
xor ax, ax            ; make it zero
mov ds, ax            ; ds=0
mov ss, ax            ; stack starts at 0

cld

mov ax, 0xb800        ; Ax = address of video memory
mov es, ax
xor di, di
call print            ; call thr print function

hang:
   jmp hang           ; constanly loop

print:
  mov si, msg         ; load msg into si
  mov cx, 4
  mov ah, 07h

printchar:
  lodsb               ; Hear we load a letter from si
  stosw
  loop printchar      ; if not end of msg, go back to printchar
  ret                 ; return

msg    db    'test'   ; msg = 'test'

times 510-($-$$) db 0 ; make sure file is 510 bytes in size
dw 0xaa55             ; write boot signiture

并使用nasm进行编译:

nasm -f bin bootloader.asm -o myos.hdd

我已经在我理解的行中添加了评论。我不了解视频存储器的使用情况。有人可以向我解释一下,然后告诉我在哪里可以找到文档吗?

我已经搜索了互联网,但是找不到文档。

1 个答案:

答案 0 :(得分:2)

我想我明白了。

mov cx, 4是消息的长度。 “测试”长四个字节。

mov ah, 07h正在设置颜色数据。 0 =黑色,7 =浅灰色。
第一个数字是背景色,第二个数字是文本色。
这意味着要打印的字符在黑色背景上为浅灰色。

感谢所有提供帮助的人。