Консольные операции ввода - вывода - 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

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

В этом коде выполняется следующая последовательность действий:

  1. Устанавливается модель памяти для сегментного регистра (tiny).
  2. Код размещается в сегменте 100h.
  3. Переменная CX инициализируется значением 25.
  4. CX сохраняется на стеке.
  5. Сегментный регистр AH устанавливается равным 2.
  6. Значение в регистре DL устанавливается равным символу '*'.
  7. Код входит в цикл, который выполняется 25 раз (пока CX больше 0).
  8. Во время каждого цикла выполняется ввод символа '*' в стандартный вывод.
  9. После каждой итерации цикла выводится символ новой строки (0Ah).
  10. После завершения цикла выводится символ доллара ($).
  11. Последний символ новой строки выводится в стандартный вывод.
  12. CX восстанавливается со стека.
  13. Выполняется переход на отсутствующую в коде метку, что приводит к зависанию программы.

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

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