ХАНДЫФАР

В следующем примере программы мы выполним сравнение двух массивов. Программа вернет в аккумуляторе индекс где элементы были не равны. Если массивы равны, то вернёт в аккумуляторе -1.

  1. ; Автор: Довгополов Евгений Сергеевич
  2. array1:_db 01h, 02h, 03h, 04h, 05h, 06h, ___________07h, 08h, 09h, 0Ah
  3. array2:_db 01h, 02h, 03h, 01h, 05h, 06h, ___________07h, 08h, 09h, 0Ah
  4. result: db 00h
  5. main:
  6. ____lxi ____h, array1
  7. ____lxi ____d, array2
  8. ____mvi ____b, 00h
  9. ____mvi ____c, 0Ah
  10. CompareLoop:
  11. ____ldax ___d
  12. ____cmp ____m
  13. ____jnz ____Unequal
  14. ____inx ____h
  15. ____inx ____d
  16. ____inr ____b
  17. ____dcr ____c
  18. ____jnz ____CompareLoop
  19. ____mvi ____a, 0FFh
  20. ____hlt
  21. Unequal:
  22. ____mov ____a, b
  23. ____sta ____result
  24. ____hlt
В следующем примере программы мы выполним сравнение двух массивов. Программа вернет в аккумуляторе индекс где элементы были не равны. Если массивы равны, то вернёт в аккумуляторе -1.

  1. ; Автор: Довгополов Евгений Сергеевич
  2. array1:_db 01h, 02h, 03h, 04h, 05h, 06h, 07h, 08h, 09h, 0Ah
  3. array2:_db 01h, 02h, 03h, 01h, 05h, 06h, 07h, 08h, 09h, 0Ah
  4. result: db 00h
  5. main:
  6. ____lxi ____h, array1____; Загружаем адрес переменной array1 в пару регистров HL.
  7. ____lxi ____d, array2____; Загружаем адрес переменной array2 в пару регистров DE.
  8. ____mvi ____b, 00h_______; Индекс несовпадения.
  9. ____mvi ____c, 0Ah_______; Устанавливаем счётчик цикла C равным 10.
  10. CompareLoop:
  11. ____ldax ___d____________; Загружаем значение по адресу в памяти (array2) в аккумулятор A.
  12. ____cmp ____m____________; Выполняем сравнение значения в регистре A со значением в ячейке памяти.
  13. ____jnz ____Unequal______; Если Z=0, то переходим на метку Unequal.
  14. ____inx ____h____________; Увеличиваем значение пары регистров HL на 1.
  15. ____inx ____d____________; Увеличиваем значение пары регистров DE на 1.
  16. ____inr ____b____________; Увеличиваем значение в регистре-индексе B на 1.
  17. ____dcr ____c____________; Уменьшаем значение в регистра-счётчика C на 1.
  18. ____jnz ____CompareLoop__; Выполняем переход на метку CompareLoop пока регистр C не будет равен 0.
  19. ____mvi ____a, 0FFh______; Если элементы не равны, то возвращаем в аккумуляторе значение -1.
  20. ____hlt__________________; Завершаем программу.
  21. Unequal:
  22. ____mov ____a, b_________; Если элементы равны, то возвращаем в аккумуляторе его индекс в массиве.
  23. ____sta ____result_______; Сохраняем значение регистра A в памяти (result).
  24. ____hlt__________________; Завершаем программу.
Made on
Tilda