Встроенный ассемблер. Определить сумму отрицательных чисел - 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
Объяснение кода листинга программы
- lea esi, [A] — в данном случае переменная A содержит адрес начала массива отрицательных чисел, а переменная ESI указывает на первый элемент этого массива.
- mov ecx, [N] — в переменной N содержится количество отрицательных чисел в массиве.
- mov edi, 0 — в переменную EDI записывается значение 0, которое будет использоваться как сумма отрицательных чисел.
- SumNeg: — это метка цикла, который будет выполняться N раз.
- lodsd — это команда загрузки из памяти в регистр EAX двойного слова (DWORD), то есть 4 байта.
- xor ebx, ebx — это команда инициализации регистра EBX значением 0.
- or eax, eax — это команда нахождения значения отрицательного числа, которое будет использоваться в операции сложения.
- cmovs ebx, eax — это команда сравнения двух регистров (EAX и EBX) и если EAX больше или равно EBX, то значение EBX устанавливается равным EAX.
- add edi, ebx — это команда увеличения значения суммы на значение регистра EBX.
- loop SumNeg — это команда перехода к следующей итерации цикла.
- mov [summa], edi — это команда сохранения значения суммы в переменную summa.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д