Печать сообщения в определенном месте на экране с помощью DOS int 21h в графическом режиме - PullRequest
2 голосов
/ 01 июня 2019

Я хочу распечатать строки в сборке, мне удалось распечатать строку, но я не могу понять, как напечатать ее в определенном месте на экране

Это код, который яЯ использую:

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 Ответ

1 голос
/ 01 июня 2019

Вам просто нужно расположить курсор там, где должна появиться строка.
Экран 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

$ - позиция, с которой начинается текущая строка (код).
Здесь размер получит 13 байтов.

Тогда используйте это как:

mov cx, size
...