Протабулировать функцию - Assembler

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

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

Отображение таблицы значений выражения x div 3 + x mod 3. Заполнять массив результатами вычислегий. Х от 0 до 20 шаг 5

Решение задачи: «Протабулировать функцию»

textual
Листинг программы
  1. LOCALS
  2.  
  3. .model small
  4.  
  5. .stack 100h
  6.  
  7. .data
  8.         T       db      5 dup(0)
  9. .code
  10.  
  11. main    proc
  12.         mov     ax,     @data
  13.         mov     ds,     ax
  14.  
  15.         lea     si,     T
  16.         mov     di,     0       ;di = x
  17. @@For:
  18.         mov     ax,     di
  19.         call    OutInt
  20.         mov     bl,     3
  21.         div     bl
  22.         add     al,     ah
  23.         mov     [si],   al
  24.  
  25.         push    ax
  26.         mov     ah,     02
  27.         mov     dl,     ' '
  28.         int     21h
  29.         pop     ax
  30.  
  31.         call    OutInt
  32.         push    ax
  33.         mov     ah,     02
  34.         mov     dl,     0Dh
  35.         int     21h
  36.         mov     dl,     0Ah
  37.         int     21h
  38.         pop     ax
  39.  
  40.         add     si,     1
  41.         add     di,     5
  42.         cmp     di,     20
  43.         ja      @@Break
  44.         jmp     @@For
  45. @@Break:
  46.  
  47.         mov     ax,     4C00h
  48.         int     21h
  49. main    endp
  50.  
  51. OutInt  proc
  52.         push    ax
  53.         aam
  54.         add     ax,     '00'
  55.         mov     dl,     ah
  56.         mov     dh,     al
  57.         mov     ah,     02
  58.         int     21h
  59.         mov     dl,     dh
  60.         int     21h
  61.         pop     ax
  62.         ret
  63. OutInt  endp
  64.  
  65. end     main

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

  1. Создание секции LOCALS для локальных переменных
  2. Определение модели памяти 'small'
  3. Резервирование стека размером 100h
  4. Определение секции данных:
    • Создание переменной 'T' как массив с пятью элементами, инициализированных нулями
  5. Начало процедуры 'main'
    • Загрузка базового адреса данных в регистр 'ax'
    • Перемещение адреса данных из 'ax' в регистр 'ds'
  6. Инициализация указателя 'si' на массив 'T' и установка значения регистра 'di' в 0 (di = x)
  7. Метка '@@For': в цикле вычисляется значение для элементов массива 'T':
    • Разделение значения из регистра 'di' на 3
    • Вычисление остатка от деления и его прибавление к частному
    • Запись вычисленного значения в текущий элемент массива 'T' ('[si]')
    • Вывод вычисленного значения посредством вызова процедуры 'OutInt'
    • Вывод пробела и перевод строки
    • Увеличение указателя 'si' на 1 и увеличение значения регистра 'di' на 5
    • Сравнение значения регистра 'di' с 20 для выхода из цикла при достижении этого значения
  8. Метка '@@Break': выход из цикла и завершение процедуры 'main'
  9. Создание процедуры 'OutInt' для вывода чисел
  10. Завершение программы 'end main' Указанный код на ассемблере выполняет простую операцию табулирования функции и вывода результатов.

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


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

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

12   голосов , оценка 3.75 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут