我正在使用字符串末尾的指令0xa
创建新线
mov bx, MESSAGE
call print_string
mov bx, ANOTHER
call print_string
hlt
print_string:
pusha
string_loop:
mov al, [bx]
cmp al, 0
jne print_char
popa
ret
print_char:
mov ah, 0x0e
int 0x10
add bx, 1
jmp string_loop
;global vars
MESSAGE: db 'Example string',0xa,0
ANOTHER: db 'Another example string',0xa,0
;padding/magic number
times 510-($-$$) db 0
dw 0xaa55
唯一的问题是,虽然字符串确实确实在最后一个线下方打印了一行,但新行不会重置屏幕上的x位置,因此,它不是直接在上一个字符串下方打印,而是在下方和之后打印上一个字符串。
示例输出:
Example string
Another example string
如何编写此代码,以使字符串直接在上一个字符串下打印?
如何处理小丑的评论(与linefeed一起添加马车返回):
MESSAGE: db 'Example string',13,10,0
ANOTHER: db 'Another example string',13,10,0
如何处理PED7G的评论(将BX
更改为SI
并设置BL
和BH
参数):
mov bx, 0007h ;Display page 0, graphics color 7
mov si, MESSAGE
call print_string
...
string_loop:
mov al, [si]
...
add si, 1
jmp string_loop
由于这是bootloader代码(times 510-($-$$) db 0
dw 0xaa55
),并且org 0是默认值,因此最好明确地将DS
段寄存器设置为零。不要相信您的执行环境!
xor ax, ax
mov ds, ax
将其放在其他任何东西之前。