Перевод курсора на следующую строку (текстовый режим) - Assembler

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, недавно начал изучать Assembler (MASM), тренируюсь пока что на DOS, возникла необходимость перевести курсор на следующую строку, попытался использовать видео сервис BIOS, но при переводе курсора затирается видеобуфер, вместе с предыдущим выводом. Подскажите, как установить курсор на следующую строку и при этом не потерять предыдущий вывод? Скорее всего, я где-то ошибся в коде, см. процедуру endline. Заранее спасибо
;Начало сегмента
CSEG segment
 
;Смещение по которому необходимо загрузить программу
;В DOS программы загружаются по смещению 100h
org 100h
 
Start: 
 
;Загружаем адрес строки ASCIIZ, содержащую путь к файлу в регистр DX
mov dx, offset File
;Вызов процедуры получения описателя файла
call fopen
;Перевод курсора на следующую строку
;call endline - НЕ РАБОТАЕТ, ЗАТИРАЕТ ВИДЕОБУФЕР
;Ожидание ввода одного символа
call wait_key
;Передача управления в DOS
mov ah, 4ch
int 21h
 
;Подпрограммы
;================================================================
;Получение описателя файла с помощью сервиса DOS
;[Выход] BX - описатель файла
;[Вход] DX - ссылка на строку ASCIIZ содержащую путь к файлу
;ВНИМАНИЕ! Затрагиваются регистры: AX, DX
fopen PROC
mov ah, 3Dh
;Открываем файл для чтения (режим 0)
mov al, 0
int 21h
;Переходим на метку в соответствии с флагом переноса (при ошибке CF = 1)
jc ifcarry
jnc nocarry
;Описатель файла успешно получен
nocarry: mov dx, offset Success
mov bx, ax
jmp exit
;Произошла ошибка при попытке получить описатель
ifcarry: mov dx, offset Failure
jmp exit
exit:
mov ah, 09h
int 21h
ret
fopen ENDP
;================================================================
;Ожидание ввода одного символа с выводом сообщения
;[Выход] AX - код нажатой клавиши
wait_key PROC
push dx
mov dx, offset Message
mov ah, 09h
int 21h
mov ah, 10h
int 16h
pop dx
ret
Message db "Press any key to continue...$"
wait_key ENDP
;================================================================
;Перевод курсора на следующую строку с помощью видео сервиса BIOS
endline PROC
;Используется нулевая видеостраница
mov bh, 0
;Используем сервис для чтения позиции курсора
mov ah, 03h
int 10h
;Прибавляем к текущей строке 1, для перехода на следующую
inc dh
;На следующей строке курсор будет находиться в первой колонке
mov dl, 0
;Используем сервис для установки позиции курсора
mov ah, 02h
int 10h
ret
endline ENDP
 
File db "textfile.txt", 0
Failure db "Failure!$"
Success db "Success!$"
 
;Конец сегмента
CSEG ends
;Конец программы
END start

Решение задачи: «Перевод курсора на следующую строку (текстовый режим)»

textual
Листинг программы
Message  db  13,10,"Press any key to continue...$"

Объяснение кода листинга программы

  1. В первой строке кода Message db 13,10,Press any key to continue...$`` указывается сообщение, которое будет выводиться на экран при завершении работы программы.
  2. 13 - код символа возврата каретки, который указывает на перевод курсора на следующую строку.
  3. 10 - код символа перевода строки, который указывает на переход на новую строку.
  4. Press any key to continue...$ - строка сообщения, которая будет выводиться на экран.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.286 из 5
Похожие ответы