Взять модуль элементов массива из 3 элементов - Assembler

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

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

mov cx, 3
        lea esi, a
 
        cicl1 :
 
        mov eax, [esi]
        test eax, eax
        jns m1
        neg eax
        mov[esi], eax
        m1 :
        cmp esi, 11
        jg metka1
        add esi, 4
        metka1 :
        loop cicl1
Массив задаётся в C++ (int a[3]), это вставка ассемблерная. Тут только у первого элемента берется модуль, у двух последующих остаётся минус. Подскажите что тут не так.

Решение задачи: «Взять модуль элементов массива из 3 элементов»

textual
Листинг программы
        mov ebx,0
        mov cx,3
        lea edi, a
 
        cicl1:
        mov eax, [edi+ebx]
        test    eax, eax
        jns m1
        neg eax
        m1:
        mov [edi+ebx],eax
        add ebx,4
        loop cicl1

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

  1. Инициализируем регистр ebx нулём.
  2. Инициализируем регистр cx числом 3.
  3. Инициализируем регистр edi с адресом первой ячейки массива a.
  4. Запускаем цикл cicl1.
  5. Перемещаем значение из ячейки [edi+ebx] в регистр eax.
  6. Проверяем, что значение в регистре eax не равно нулю.
  7. Если это так, то инвертируем значение в регистре eax.
  8. Сохраняем инвертированное значение в ячейку [edi+ebx].
  9. Увеличиваем значение в регистре ebx на 4.
  10. Проверяем, что значение в регистре ebx меньше 3.
  11. Если это так, то повторяем шаги с 5 по 10.
  12. Если это не так, то завершаем цикл cicl1.

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


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

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

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