В следующем примере программы мы выполним сложение двух матриц (3х3) и сохраним результат в третьей матрице. Затем в цикле выведем третью матрицу на устройство вывода.
1; Автор: Довгополов Евгений Сергеевич 2 3matrix1:db01h,02h,03h 4db04h,05h,06h 5db07h,08h,09h 6 7matrix2:db01h,02h,03h 8db04h,05h,06h 9db07h,08h,09h 10 11matrix3:db00h,00h,00h 12db00h,00h,00h 13db00h,00h,00h 14 15main: 16lxisp,0100h; Инициализируем указатель стека по адресу 0100h 17 18lxih,matrix1; Загружаем адрес переменной matrix1 в пару регистров HL 19lxid,matrix2; Загружаем адрес переменной matrix2 в пару регистров DE 20lxib,matrix3; Загружаем адрес переменной matrix3 в пару регистров BC 21mvia,09h; Устанавливаем счётчик цикла A равным 9 22 23AddLoop: 24pushpsw; Кладем содержимое состояния программы PSW в стек 25 26ldaxd; Загружаем значение по адресу в памяти (matrix2) в аккумулятор A 27addm; Выполняем сложение значения в регистре A со значением в ячейке памяти 28staxb; Сохраняем значение в A по адресу в памяти на которую указывает BC 29 30inxh; Увеличиваем значение пары регистров HL на 1 31inxd; Увеличиваем значение пары регистров DE на 1 32inxb; Увеличиваем значение пары регистров BC на 1 33 34poppsw; Выталкиваем значение из стека в регистр PSW 35dcra; Уменьшаем значение регистра-счётчика A на 1 36jnzAddLoop; Выполняем переход на метку AddLoop пока регистр A не будет равен 0 37 38lxih,matrix3; Загружаем адрес переменной matrix3 в пару регистров HL 39mvic,09h; Устанавливаем счётчик цикла C равным 9 40 41PrintLoop: 42mova,m; Копируем значение в памяти на которую указывает пара регистров HL в A 43out0Ah; Отправляем данные на устройство вывода через порт 10 44 45inxh; Увеличиваем значение пары регистров HL на 1 46dcrc; Уменьшаем значение регистра-счётчика C на 1 47jnzPrintLoop; Выполняем переход на метку PrintLoop пока регистр C не будет равен 0 48 49hlt; Останавливаем выполнение программы