Протабулировать функцию - Assembler
Формулировка задачи:
Отображение таблицы значений выражения x div 3 + x mod 3. Заполнять массив результатами вычислегий. Х от 0 до 20 шаг 5
Решение задачи: «Протабулировать функцию»
textual
Листинг программы
LOCALS .model small .stack 100h .data T db 5 dup(0) .code main proc mov ax, @data mov ds, ax lea si, T mov di, 0 ;di = x @@For: mov ax, di call OutInt mov bl, 3 div bl add al, ah mov [si], al push ax mov ah, 02 mov dl, ' ' int 21h pop ax call OutInt push ax mov ah, 02 mov dl, 0Dh int 21h mov dl, 0Ah int 21h pop ax add si, 1 add di, 5 cmp di, 20 ja @@Break jmp @@For @@Break: mov ax, 4C00h int 21h main endp OutInt proc push ax aam add ax, '00' mov dl, ah mov dh, al mov ah, 02 int 21h mov dl, dh int 21h pop ax ret OutInt endp end main
Объяснение кода листинга программы
- Создание секции LOCALS для локальных переменных
- Определение модели памяти 'small'
- Резервирование стека размером 100h
- Определение секции данных:
- Создание переменной 'T' как массив с пятью элементами, инициализированных нулями
- Начало процедуры 'main'
- Загрузка базового адреса данных в регистр 'ax'
- Перемещение адреса данных из 'ax' в регистр 'ds'
- Инициализация указателя 'si' на массив 'T' и установка значения регистра 'di' в 0 (di = x)
- Метка '@@For': в цикле вычисляется значение для элементов массива 'T':
- Разделение значения из регистра 'di' на 3
- Вычисление остатка от деления и его прибавление к частному
- Запись вычисленного значения в текущий элемент массива 'T' ('[si]')
- Вывод вычисленного значения посредством вызова процедуры 'OutInt'
- Вывод пробела и перевод строки
- Увеличение указателя 'si' на 1 и увеличение значения регистра 'di' на 5
- Сравнение значения регистра 'di' с 20 для выхода из цикла при достижении этого значения
- Метка '@@Break': выход из цикла и завершение процедуры 'main'
- Создание процедуры 'OutInt' для вывода чисел
- Завершение программы 'end main' Указанный код на ассемблере выполняет простую операцию табулирования функции и вывода результатов.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д