[FASM] Сумма первой строки квадратной матрицы - Assembler

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

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

Всем доброго времени суток. Нужна любая помощь в написании программе в FASM. Объявить квадратную матрицу 8-битную целую без знака и посчитать сумму элементов первой строки этой матрицы.

Решение задачи: «[FASM] Сумма первой строки квадратной матрицы»

textual
Листинг программы
format MZ                       ;Исполняемый файл DOS EXE (MZ EXE)
entry @code:start            ;Точка входа в программу
stack 200h                      ;Размер стека
;--------------------------------------------------------------------
segment @data                   ;Cегмент данных
        N       dw      4
        Matrix  db      11, 12, 13, 14
                db      21, 22, 23, 24
                db      31, 32, 33, 34
                db      41, 42, 43, 44
 
;--------------------------------------------------------------------
segment @code                   ;Сегмент кода
start:                          ;Точка входа в программу
        mov     ax,     @data   ;Инициализация регистра DS
        mov     ds,     ax
 
        mov     cx,     [N]
        lea     bx,     [Matrix]
        mov     si,     0
        mov     ax,     0
        .for:
                add     al,     [bx+si]
                adc     ah,     0
                add     si,     1
        loop    .for
 
        mov     bx,     10      ; Делитель
        mov     cx,     0       ;счётчих разрядов
        ;в цикле получаются остатки от деления на 10, которые сохраняются в стеке
        ;а также в регистре cx подсчитывается количество цифр.
        .DivLoop:
                mov     dx,     0
                inc     cx
                div     bx
                push    dx
                cmp     ax,     0
        jnz     .DivLoop
        ;цифры (остатки от деления на 10) извлекаются из стека и, после
        ;преобразования в символ, выводятся на экран
        mov     ah,     02h
        .ToStrLoop:
                pop     dx
                add     dl,     '0'
                int     21h
        loop    .ToStrLoop
 
        mov     ax,     4C00h
        int     21h             ;Завершение программы

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

  1. Формат исполняемого файла DOS EXE (MZ EXE) - исполнительный файл DOS EXE, который содержит в себе машинный код и данные. Данный формат используется для создания исполняемых файлов для операционной системы DOS.
  2. Точка входа в программу - место, с которого начинается выполнение программы. В данном случае, точка входа установлена на сегмент кода @code:start.
  3. Размер стека - определяет количество ячеек памяти, которые могут быть использованы для хранения локальных переменных и параметров функций. В данном случае, размер стека составляет 200h (или 8192 байта).
  4. Сегмент данных - сегмент памяти, в котором хранятся данные программы. В данном случае, сегмент данных установлен на @data.
  5. Переменная N - содержит значение количества элементов в квадратной матрице. Значение переменной N равно 4.
  6. Матрица - двумерный массив, представленный в коде как последовательность байтов. Каждый элемент матрицы имеет индекс [row*4 + col], где row - номер строки, а col - номер столбца. В данном случае, матрица состоит из 4 строк и 4 столбцов, и ее элементы равны 11, 12, 13, 14, 21, 22, 23, 24, 31, 32, 33, 34, 41, 42, 43, 44.
  7. Регистр DS - сегмент данных, который используется для доступа к переменным в сегменте данных. В данном случае, регистр DS инициализируется значением сегмента данных @data.
  8. Цикл получения суммы первой строки квадратной матрицы - цикл, который проходит по каждому элементу первой строки матрицы и суммирует их значения.
  9. Делитель - переменная, которая содержит значение 10 (для деления на 10).
  10. Переменная cx - используется в цикле деления для подсчета количества цифр, полученных в результате деления.
  11. Регистр dx - используется в цикле деления для хранения остатка от деления.
  12. Регистр ax - используется в цикле деления для хранения результата деления.
  13. Степ - используется для хранения остатков от деления на 10.
  14. Переменная si - используется в цикле получения суммы первой строки матрицы для хранения номера элемента.
  15. Переменная bx - используется в цикле получения суммы первой строки матрицы для хранения номера столбца.
  16. Регистр ah - используется в цикле вывода остатков от деления на 10 в виде символов.
  17. Переменная dl - используется в цикле вывода остатков от деления на 10 для хранения младшего бита числа.
  18. Функция int 21h - используется для вывода символов на экран.
  19. Конец программы - завершение работы программы, установлен на значение 4C00h.
  20. Функция int 21h - используется для завершения программы.

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

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