Перевод курсора на следующую строку (текстовый режим) - 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...$"
Объяснение кода листинга программы
- В первой строке кода
Message db 13,10,
Press any key to continue...$`` указывается сообщение, которое будет выводиться на экран при завершении работы программы. 13
- код символа возврата каретки, который указывает на перевод курсора на следующую строку.10
- код символа перевода строки, который указывает на переход на новую строку.Press any key to continue...$
- строка сообщения, которая будет выводиться на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д