Встроенный ассемблер. Определить сумму отрицательных чисел - Assembler

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

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

Создать массив А[0..N-1]. Определить сумму отрицательных чисел. Из положительных создать массив В и определить в нем максимальное. Вывести сумму и массив В. Массив В рассортировать по возрастанию. Ввод и вывод делать на языке Си.

Решение задачи: «Встроенный ассемблер. Определить сумму отрицательных чисел»

textual
Листинг программы
lea esi, [A]
mov ecx, [N]
mov edi, 0
SumNeg:
  lodsd
  xor ebx, ebx
  or eax, eax
  cmovs ebx, eax
  add edi, ebx
loop SumNeg
mov [summa], edi

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

  1. lea esi, [A] — в данном случае переменная A содержит адрес начала массива отрицательных чисел, а переменная ESI указывает на первый элемент этого массива.
  2. mov ecx, [N] — в переменной N содержится количество отрицательных чисел в массиве.
  3. mov edi, 0 — в переменную EDI записывается значение 0, которое будет использоваться как сумма отрицательных чисел.
  4. SumNeg: — это метка цикла, который будет выполняться N раз.
  5. lodsd — это команда загрузки из памяти в регистр EAX двойного слова (DWORD), то есть 4 байта.
  6. xor ebx, ebx — это команда инициализации регистра EBX значением 0.
  7. or eax, eax — это команда нахождения значения отрицательного числа, которое будет использоваться в операции сложения.
  8. cmovs ebx, eax — это команда сравнения двух регистров (EAX и EBX) и если EAX больше или равно EBX, то значение EBX устанавливается равным EAX.
  9. add edi, ebx — это команда увеличения значения суммы на значение регистра EBX.
  10. loop SumNeg — это команда перехода к следующей итерации цикла.
  11. mov [summa], edi — это команда сохранения значения суммы в переменную summa.

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


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

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

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