在图形模式下使用DOS int 21h在屏幕上的特定位置打印消息

时间:2019-05-31 22:11:35

标签: assembly text printing dos x86-16

我想在汇编中打印出字符串,我设法打印出一个字符串,但是我不知道如何在屏幕上的特定位置打印它

这是我正在使用的代码:

IDEAL
MODEL small
STACK 100h
DATASEG

message db 'Hello World',10,13,'$'

CODESEG
start:
    mov ax, @data
    mov ds, ax

       ;graphic mode:;
    mov ax, 13h
    int 10h

    pop ds
    mov dx, offset message
    mov ah, 9h
    int 21h

exit:
    mov ax, 4c00h
    int 21h
END start

图形模式是因为这是我正在做的一个较大项目的一部分,但据我了解,这应该不是问题。

该程序确实打印出消息,只是将其打印在屏幕的右上角。 我非常想知道如何在特定位置打印消息,并在可能的情况下确定其大小。

1 个答案:

答案 0 :(得分:0)

您只需要将光标置于需要显示字符串的位置即可。
屏幕13h有40列25行。
使用BIOS功能02h:

mov dl, 20    ;Center column
mov dh, 12    ;Center row
mov bh, 0     ;Display page 0
mov ah, 02h   ;SetCursor
int 10h
mov dx, offset message
mov ah, 09h   ;DispayString
int 21h

pop ds

您的代码在做什么?


  

...还应确定其大小。

写下以下内容:

message db 'Hello World',10,13,'$'
size    equ ($-1)-message

$ 是当前行(代码)的开始位置。
在这里 size 将获得13个字节。

然后像这样使用它:

mov cx, size