Программа сложения матриц

В следующем примере программы мы выполним сложение двух матриц (3х3) и сохраним результат в третьей матрице. Затем в цикле выведем третью матрицу на устройство вывода.

1; Автор: Довгополов Евгений Сергеевич
2
3matrix1: db 01h, 02h, 03h
4         db 04h, 05h, 06h
5         db 07h, 08h, 09h
6
7matrix2: db 01h, 02h, 03h
8         db 04h, 05h, 06h
9         db 07h, 08h, 09h
10
11matrix3: db 00h, 00h, 00h
12         db 00h, 00h, 00h
13         db 00h, 00h, 00h
14
15main:
16    lxi     sp, 0100h   ; Инициализируем указатель стека по адресу 0100h
17
18    lxi     h, matrix1  ; Загружаем адрес переменной matrix1 в пару регистров HL
19    lxi     d, matrix2  ; Загружаем адрес переменной matrix2 в пару регистров DE
20    lxi     b, matrix3  ; Загружаем адрес переменной matrix3 в пару регистров BC
21    mvi     a, 09h      ; Устанавливаем счётчик цикла A равным 9
22
23AddLoop:
24    push    psw         ; Кладем содержимое состояния программы PSW в стек
25
26    ldax    d           ; Загружаем значение по адресу в памяти (matrix2) в аккумулятор A
27    add     m           ; Выполняем сложение значения в регистре A со значением в ячейке памяти
28    stax    b           ; Сохраняем значение в A по адресу в памяти на которую указывает BC
29
30    inx     h           ; Увеличиваем значение пары регистров HL на 1
31    inx     d           ; Увеличиваем значение пары регистров DE на 1
32    inx     b           ; Увеличиваем значение пары регистров BC на 1
33
34    pop     psw         ; Выталкиваем значение из стека в регистр PSW
35    dcr     a           ; Уменьшаем значение регистра-счётчика A на 1
36    jnz     AddLoop     ; Выполняем переход на метку AddLoop пока регистр A не будет равен 0
37
38    lxi     h, matrix3  ; Загружаем адрес переменной matrix3 в пару регистров HL
39    mvi     c, 09h      ; Устанавливаем счётчик цикла C равным 9
40
41PrintLoop:
42    mov     a, m        ; Копируем значение в памяти на которую указывает пара регистров HL в A
43    out     0Ah         ; Отправляем данные на устройство вывода через порт 10
44
45    inx     h           ; Увеличиваем значение пары регистров HL на 1
46    dcr     c           ; Уменьшаем значение регистра-счётчика C на 1
47    jnz     PrintLoop   ; Выполняем переход на метку PrintLoop пока регистр C не будет равен 0
48
49    hlt                 ; Останавливаем выполнение программы
Made on
Tilda