Программа возведения в квадрат

В следующем примере программы мы выполним возведение каждого элемента массива в квадрат. Мы будем использовать таблицу квадратов для вычисления эффективного адреса. В данной программе регистр L будет играть как счётчик цикла так и как указатель на элемент в таблице table.

1; Автор: Довгополов Евгений Сергеевич
2
3array: db 3, 8, 4, 7, 5, 9, 2, 1, 6, 10
4table: db 00h, 01h, 04h, 09h, 10h, 19h, 24h, 31h, 40h, 51h, 64h, 79h, 90h, 0A9h, 0C4h, 0E1h
5
6main:
7    lxi     sp, 2000h   ; Инициализируем указатель стека по адресу 2000h
8
9    lxi     b, array    ; Загружаем адрес переменной array в пару регистров BC
10    lxi     d, table    ; Загружаем адрес переменной table в пару регистров DE
11    mvi     l, 0Ah      ; Устанавливаем счётчик цикла L равным 10
12
13SquareLoop:
14    push    h           ; Временно кладем значение пары регистров HL на вершину стека
15
16    ldax    b           ; Загружаем значение по адресу в памяти (array) в аккумулятор A
17    mov     l, a        ; Сохраняем значение регистра A в регистр L
18    mvi     h, 00h      ; Обнуляем регистр H
19    dad     d           ; К содержимому пары регистров HL прибавляем содержимое пары регистров DE
20    mov     a, m        ; Копируем значение в памяти на которую указывает пара регистров HL в A
21    inx     b           ; Увеличиваем значение пары регистров BC на 1
22
23    pop     h           ; Выталкиваем временно сохранённое значение из стека в пару регистров HL
24    dcr     l           ; Уменьшаем значение регистра-счётчика L на 1
25    jnz     SquareLoop  ; Выполняем переход на метку SquareLoop пока L не будет равен 0
26
27    hlt                 ; Останавливаем выполнение программы
Made on
Tilda