Написать программу на языке ассемблера, которая выводит все символы таблицы кодов ASCII на экран в указанную позицию курсора - Assembler

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

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

Народ, пожалуйста помогите. Написать программу на языке ассемблера, которая выводит все символы таблицы кодов ASCII на экран в указанную позицию курсора. Символы выводятся в одну и ту же позицию с заданной задержкой и заданным цветом (каждый символ выводится другим цветом). Перед выводом символов экран необходимо очистить. Позиция на экране, время задержки и варианты распределения цвета символов выбираются самостоятельно. Сам не понимаю ассемблер. Поэтому рассчитываю на вашу помощь. Буду рад любой помощи! Заранее благодарен.

Решение задачи: «Написать программу на языке ассемблера, которая выводит все символы таблицы кодов ASCII на экран в указанную позицию курсора»

textual
Листинг программы
; biosout.asm
; Выводит на экран все ASCII-символы без исключения
        .model   tiny
        .code
        org      100h    ; Начало СОМ-файла
start:
        mov      ax,0003h
        int      10h     ; Видеорежим 3 (очистка экрана
                         ; и установка курсора в 0, 0)
        mov      dx,0    ; DH и DL будут использоваться
                         ; для хранения положения курсора.
                         ; Начальное положение - 0,0
        mov      si,256  ; SI будет счетчиком цикла
        mov      al,0    ; Первый символ - с кодом 00h
        mov      ah,9    ; Номер видеофункции "вывод символа с атрибутом"
        mov      cx,1    ; Выводится один символ за раз
        mov      bl,00011111b
                         ;атрибут символа - белый на синем
cloop:
        int      10h     ; Вывести символ на экран
        push     ax      ; Сохранить текущий символ и номер функции
        mov      ah,2    ; Номер видеофункции 2 -
                         ; изменить положение курсора
        inc      dl      ; Увеличить текущий столбец на 1
        int      10h     ; Переместить курсор
        mov      ax,0920h ; АН = 09, AL = 20h (ASCII-код пробела)
        int      10h     ; Вывести пробел
        mov      ah,2    ; Номер видеофункции 2
        inc      dl      ; Увеличить столбец на 1
        int      10h     ; Переместить курсор
        pop      ax      ; Восстановить номер функции в ah
                         ; и текущий символ в al
        inc      al      ; Увеличить AL на 1 - следующий символ
        test     al,0Fh  ; Если AL не кратен 16,
        jnz      continue_loop
                         ; продолжить цикл,
        push     ax      ; иначе - сохранить номер функции
                         ; и текущий символ
        mov      ah,2    ; Номер видеофункции 2
        inc      dh      ; Увеличить номер строки на 1
        mov      dl,0    ; Столбец = 0
        int      10h     ; Установить курсор на начало следующей строки
        pop      ax      ; Восстановить номер видеофункции
                         ; и текущий символ
continue_loop:
        dec      si      ; Уменьшить SI на 1,
                         ; если он не стал нулем - продолжить
        jnz      cloop   ; CX используется внутри цикла,
                         ; так что нельзя использовать команду LOOP
                         ; для его организации
        ret              ; Завершение СОМ-файла
        end      start

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


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

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

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