我在第一行有文字。我想在第二行写一个文本。但是如何?
这是我的示例代码:
start:
mov ax, 07C0h
add ax, 288
mov ss, ax
mov sp, 4096
mov ax, 07C0h
mov ds, ax
mov ah, 09h
mov cx, 1000h
mov al, 20h
mov bl, 17h
int 10h
mov si, text_string
call print_string
jmp $
text_string db 'This is my Operating System!', 0
print_string:
mov ah, 0Eh
.repeat:
lodsb
cmp al, 0
je .done
int 10h
jmp .repeat
.done:
ret
times 510-($-$$) db 0
dw 0xAA55
现在,如何在第二行上写文字?
答案 0 :(得分:1)
要在下一行上打印,请插入回车和换行代码:
text_string db 'This is my Operating System!', 13, 10
db '----------------------------', 0
代码13(回车)将光标带回到屏幕的左边缘。
代码10(换行符)使光标下降一行。
但是,如果要在整个屏幕的第二行上打印,则可以使用BIOS功能02h在此处设置光标:
mov dx, 0100h ; DH=row 1, DL=column 0
mov bh, 0 ; display page
mov ah, 02h ; SetCursor
int 10h
在标准的80x25屏幕上,列的编号从0到79,行的编号从0到24。
mov ah, 09h mov cx, 1000h mov al, 20h mov bl, 17h int 10h
关于清晰的屏幕代码:
BH
寄存器中指定显示页面。使用mov bh, 0
CX
寄存器中的计数很大。 1000h等于4096,整个屏幕上只有2000个字符单元格(80 * 25)。我建议你写:
mov cx, 2000
mov bx, 0017h
mov ax, 0920h
int 10h