Ассемблер DOS. Не могу разобраться - Assembler
Формулировка задачи:
Всем доброго времени, заранее извините за глупый вопрос.
Вопрос в следующем, не могу понять почему не перемещается "курсор", а точнее почему следующий вывод строки не происходит от позиции курсора.
Вот такой простенький код:
В комментариях расписал свой ход мыслей подробно.
По задумке строка с текстом должна выводиться (0A-1) раз, но каждый раз ее начало должно сдвигаться на 3 столбца вправо и на 1 строку вниз, т.е. какбы выводиться по диагонали.
В итоге же текст идет друг за другом впритык. А, например, в EMU8086 если идти по выполнению программы пошагово, то накладывается друг на друга, т.е. каждый вывод от начала страницы.
Помогите разобраться что я упустил.
org 100h xor dx,dx ;сброс регистров (хз зачем, на всякий случай) xor cx,cx lea bx, msg ;адрес текста mov ax,3 ;(videomode 80*25) int 10h go: mov ah,02 ;Двигаем курсор первый раз в 0000, затем см.ниже int 10h inc dh ;Для изменения позиции курсора на следующем этапе цикла add dl,03 push dx ;Перед выводом на экран значение dx убираем в стек ;т.к. dx будет нужен для int 021h ah=09 mov ah,09 ;Выводим строку mov dx,bx int 021h pop dx ;Возвращаем dx (для счетчика цикла и для последующего изменения) cmp dh,0Ah ;Сравниваем строку jne go ;уходим в начало цикла пока не удовлетворит нашим требованиям xor ah,ah ;ah в 00h для int 16h int 16h int 020h ;в DOS ret msg db 'Kogda zhe ty zarabotaesh?$'
Решение задачи: «Ассемблер DOS. Не могу разобраться»
textual
Листинг программы
go: push bx xor bx,bx mov ah,02 ;Двигаем курсор первый раз в 0000, затем см.ниже int 10h pop bx
Объяснение кода листинга программы
go
- команда перехода, выполняет переходы по программеpush bx
- отправляет в стек значение регистра bxxor bx,bx
- инициализирует регистр bx нулевым значениемmov ah,02
- устанавливает значение регистра ah равным 02 (код функции вывода символа)int 10h
- вызывает интерференцию с функцией 10h, которая выводит символ на экранpop bx
- извлекает из стека значение, которое было отправлено туда командойpush bx
Код выполняет вывод символа на экран с помощью функции 10h, используя регистр bx для передачи адреса символа. В данном случае символ не указывается явно, поэтому скорее всего это некоторый системный символ или символ, определенный в другой части программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д