В следующем примере программы мы выполним возведение каждого элемента массива в квадрат. Мы будем использовать таблицу квадратов для вычисления эффективного адреса. В данной программе регистр L будет играть как счётчик цикла так и как указатель на элемент в таблице table.
1; Автор: Довгополов Евгений Сергеевич 2 3array:db3,8,4,7,5,9,2,1,6,10 4table:db00h,01h,04h,09h,10h,19h,24h,31h,40h,51h,64h,79h,90h,0A9h,0C4h,0E1h 5 6main: 7lxisp,2000h; Инициализируем указатель стека по адресу 2000h 8 9lxib,array; Загружаем адрес переменной array в пару регистров BC 10lxid,table; Загружаем адрес переменной table в пару регистров DE 11mvil,0Ah; Устанавливаем счётчик цикла L равным 10 12 13SquareLoop: 14pushh; Временно кладем значение пары регистров HL на вершину стека 15 16ldaxb; Загружаем значение по адресу в памяти (array) в аккумулятор A 17movl,a; Сохраняем значение регистра A в регистр L 18mvih,00h; Обнуляем регистр H 19dadd; К содержимому пары регистров HL прибавляем содержимое пары регистров DE 20mova,m; Копируем значение в памяти на которую указывает пара регистров HL в A 21inxb; Увеличиваем значение пары регистров BC на 1 22 23poph; Выталкиваем временно сохранённое значение из стека в пару регистров HL 24dcrl; Уменьшаем значение регистра-счётчика L на 1 25jnzSquareLoop; Выполняем переход на метку SquareLoop пока L не будет равен 0 26 27hlt; Останавливаем выполнение программы