Вычисление количества элементов в массиве. Паскаль + ассемблерная вставка - Assembler

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

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

Необходимо написать программу на языке Pascal, обработку данных (в том числе циклы, если они необходимы) осуществить в ассемблерной вставке. Написать программу, вычисляющую количество элементов в массиве до первого нулевого элемента, в случае если нулевого элемента нет, должно возвращаться количество элементов в массиве. Помогите пожалуйста, очень прошу

Решение задачи: «Вычисление количества элементов в массиве. Паскаль + ассемблерная вставка»

textual
Листинг программы
asm
  cld
  les di, A    {заносим в пару es:di  адрес массива}
  mov dx,N  {помещение в dx значение N}
  mov cx,dx { перемещает  данные из dx  в регистр cx}
  xor ax,ax  {обнуление ax}
  repne scasw   {?}
  jne @@nodec {если нет, прыгаем на @@nodec , если да, идем на следующую команду}
  dec dx           {уменьшаем счетчик циклов}
@@nodec:
  sub dx,cx   {вычесть dx из cx}
  mov ax,dx { перемещает  данные из dx  в регистр ax}
end;

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

  1. asm - начало ассемблерного блока
  2. cld - подготовительные операции для работы с памятью
  3. les di, A - заносим в пару es:di адрес массива
  4. mov dx,N - помещаем в dx значение N
  5. mov cx,dx - перемещает данные из dx в регистр cx
  6. xor ax,ax - обнуление ax
  7. repne scasw - выполняет команду повторения, сравнивая байты в dx и cx, и вычитая счетчик из dx
  8. jne @@nodec - если нет, прыгаем на @@nodec, если да, идем на следующую команду
  9. dec dx - уменьшаем счетчик циклов
  10. @@nodec: - метка для перехода
  11. sub dx,cx - вычитает dx из cx
  12. mov ax,dx - перемещает данные из dx в регистр ax
  13. end - конец ассемблерного блока

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

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