Консольные операции ввода - вывода - Assembler
Формулировка задачи:
Доброго времени суток. Нужно написать вот такую программку на ассемблере:
Вывести на экран символ "*" так, что бы в первая строка содержала 25 подряд идущих символов, а каждая последующая строка на один символ меньше.
Спасибо, кто откликнется
Решение задачи: «Консольные операции ввода - вывода»
textual
Листинг программы
.model tiny .code org 100h start: mov cx,25 @L1: push cx mov ah,2 mov dl,'*' @L2: int 21h Loop @L2 mov ah,9h lea dx,crlf int 21h pop cx Loop @L1 int 20h crlf db 0dh,0ah,'$' end start
Объяснение кода листинга программы
В этом коде выполняется следующая последовательность действий:
- Устанавливается модель памяти для сегментного регистра (tiny).
- Код размещается в сегменте 100h.
- Переменная CX инициализируется значением 25.
- CX сохраняется на стеке.
- Сегментный регистр AH устанавливается равным 2.
- Значение в регистре DL устанавливается равным символу '*'.
- Код входит в цикл, который выполняется 25 раз (пока CX больше 0).
- Во время каждого цикла выполняется ввод символа '*' в стандартный вывод.
- После каждой итерации цикла выводится символ новой строки (0Ah).
- После завершения цикла выводится символ доллара ($).
- Последний символ новой строки выводится в стандартный вывод.
- CX восстанавливается со стека.
- Выполняется переход на отсутствующую в коде метку, что приводит к зависанию программы.