Сформировать и вывести на экран таблицу 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
Объяснение кода листинга программы
- Объявляются локальные переменные
- Задается размер модели памяти как small
- Выделяется 100 байт на стеке
- Определяются переменные данных:
CrLf
- символы новой строки и возврата кареткиFirst
- код первого символа таблицы ASCIILast
- код последнего символа таблицы ASCIICharPerLine
- количество символов таблицы в строкеString
- массив символов, размер которого зависит от разницы междуLast
иFirst
, плюс 10 символов заполнителя
- Начинается секция кода
- В процедуре
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
- Устанавливается значение AL в
- Конец процедуры main
- Конец программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д