mov si, message ;The message location *you can change this*
call print ;CALL tells the pc to jump back here when done
print:
mov ah, 0Eh ;Set function
.run:
lodsb ;Get the char
; cmp al, 0x00 ;I would use this but ya know u dont so use:
cmp al, 0 ;0 has a HEX code of 0x48 so its not 0x00
je .done ;Jump to done if ending code is found
int 10h ;Else print
jmp .run ; and jump back to .run
.done:
ret ;Return
message db 'Hello, world', 0 ;IF you use 0x00
;message db 'Hello, world', 0x00
2条答案
按热度按时间tuwxkamq1#
好吧,这是你问题的一个小问题
为了加载字符串,必须将其移动到si中(我不想深入,但还是要做)。接下来为了加载一个字符到寄存器AL使用lodsb。接下来,我们必须打印它,所以使用int 10h mov ah,0Eh。Int 10h处理视频,ah告诉BIOS打印我们在al中的任何内容(aka lodsb)。接下来,我们必须有一个结束加载字符,这样我们就不会永远循环。我个人使用0x00,但是你使用0。0x00在我的情况下要好得多,因为你不仅可以使用0,0x00不打印任何东西,所以你为什么需要它呢?
好了,我们把所有的事情都做好了,下面是代码:
ckx4rj1h2#
我从here找到了这段代码,它对我很有效。使用nasm并编译为bin,然后使用.flp文件作为 Boot 信息并引导它。希望它对你也有效。