Сформировать и вывести на экран таблицу ASCII-символов - Assembler

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

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

Используя вложенные циклы, сформировать и вывести на экран таблицу ASCII-символов с кодами в указанном диапазоне.Формирование всей таблицы вывода в памяти во вложенных циклах, затем ее вывод (используется область памяти для всей таблицы вывода, включая управляющие коды). Диапазон кодов символов 39-147, строки по 16 символов

Решение задачи: «Сформировать и вывести на экран таблицу ASCII-символов»

textual
Листинг программы
LOCALS
 
.model small
 
.stack 100h
 
.data
        CrLf            db      0Dh, 0Ah, '$'
 
        First           db      39      ;код первого символа
        Last            db      147     ;код последнего символа
        CharPerLine     equ     16      ;количество символов таблицы в строке
 
        String          db      (Last-First+1+10) dup(?)
 
 
.code
 
main    proc
        mov     ax,     @data
        mov     ds,     ax
 
        lea     si,     String
        mov     al,     First
        @@ForI:
                mov     cx,     CharPerLine
                @@ForJ:
                        mov     [si],   al
                        inc     si
                        inc     al
                        cmp     al,     Last
                        ja      @@Break
                loop    @@ForJ
        @@Break:
                mov     [si],   word ptr 0A0Dh
                add     si,     2
                cmp     al,     Last
        jbe     @@ForI
        mov     [si],   byte ptr '$'
 
        mov     ah,     09h
        lea     dx,     String
        int     21h
 
        mov     ax,     4C00h
        int     21h
main    endp
 
end     main

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

  1. Объявляются локальные переменные
  2. Задается размер модели памяти как small
  3. Выделяется 100 байт на стеке
  4. Определяются переменные данных:
    • CrLf - символы новой строки и возврата каретки
    • First - код первого символа таблицы ASCII
    • Last - код последнего символа таблицы ASCII
    • CharPerLine - количество символов таблицы в строке
    • String - массив символов, размер которого зависит от разницы между Last и First, плюс 10 символов заполнителя
  5. Начинается секция кода
  6. В процедуре main: a. Загружается сегмент данных в регистр AX и копируется в регистр DS b. Адрес массива String загружается в регистр SI c. Выполняется цикл для заполнения массива String ASCII-символами от First до Last
    • Устанавливается значение AL в First
    • Двойной цикл с использованием регистра CX для заполнения символов ASCII
    • Проверяется, если AL больше чем Last, то выход из цикла d. Добавляется символ новой строки и возврата каретки к массиву String e. Печать массива String с помощью системного вызова прерывания 21h, функции 09h f. Программа завершается системным вызовом прерывания 21h с функцией 4с00h
  7. Конец процедуры main
  8. Конец программы

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

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