Сравнение двух массивов - Assembler (247771)

Узнай цену своей работы

Формулировка задачи:

Надо сравнить два массива вроде написал но не компилируется помогите!
use16
org 100h
 
  S DB 200 DUP(?)
  T DB 200 DUP(?)
  int 21h
 
  cmp S,T
  jz equal
  cmp S,T
  jnz not_equal
  end_if:
  int 21h                     
                                       
  equal:
  mov AL,1
  jmp end_if:
  not_equal:
  mov AL,0
  jmp end_if
  int 21h

Решение задачи: «Сравнение двух массивов»

textual
Листинг программы
use16
org 100h
 
  S DB 200 DUP(?)
  T DB 200 DUP(?)
 
  cld 
  mov cx,200
  mov si,S
  mov di, T
repe cmpsb
   jnz notequal
   
   equal:
      mov AL,1
      int 21h
      
   notequal:
      mov AL,0
      int 21h

Объяснение кода листинга программы

В коде сравниваются два массива, S и T, по 200 элементов каждый. Поскольку язык ассемблера не поддерживает встроенные функции для сравнения массивов, код делает это вручную с использованием цикла и команды сравнения регистров.

  1. use16 - указывает на то, что код использует 16-битный режим
  2. org 100h - устанавливает базовый адрес в 100h, что может быть использовано для определения относительных адресов переменных
  3. S DB 200 DUP(?) - объявляет переменную S как массив байтов, содержащий 200 повторяющихся символов ?
  4. T DB 200 DUP(?) - объявляет переменную T как массив байтов, содержащий 200 повторяющихся символов ?
  5. cld - устанавливает направление переходов вперед (от старшего к младшему) для операций сравнения
  6. mov cx,200 - устанавливает счетчик CX на 200
  7. mov si,S - устанавливает указатель SI на начало массива S
  8. mov di, T - устанавливает указатель DI на начало массива T
  9. repe cmpsb - выполняет цикл сравнения по элементам массивов, начиная с SI и DI, до тех пор, пока CX не станет равным нулю. Команда cmpsb сравнивает два байта (по одному из каждого массива) и возвращает 0, если они равны, и 1, если не равны.
  10. jnz notequal - если CX не равен нулю (то есть, было найдено хотя бы одно различие), перейти к метке notequal
  11. equal - если CX равен нулю (то есть, все элементы массивов равны), перейти к этой метке
  12. mov AL,1 - установить регистр AX в 1, что может быть использовано для выхода из программы с кодом завершения 1
  13. int 21h - выполнить интеррутацию с номером 21h, что обычно приводит к выходу из программы
  14. mov AL,0 - установить регистр AX в 0, что может быть использовано для выхода из программы с кодом завершения 0
  15. int 21h - выполнить интеррутацию с номером 21h, что обычно приводит к выходу из программы
  16. notequal - если CX не равен нулю (то есть, было найдено хотя бы одно различие), перейти к этой метке
  17. jnz notequal - если CX не равен нулю (то есть, было найдено хотя бы одно различие), перейти к этой метке
  18. mov AL,0 - установить регистр AX в 0, что может быть использовано для выхода из программы с кодом завершения 0
  19. int 21h - выполнить интеррутацию с номером 21h, что обычно приводит к выходу из программы
  20. END Код не содержит инструкций для выхода из программы или обработки ошибок, поэтому он может работать бесконечно, ожидая ввода данных.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.182 из 5
Похожие ответы