Шаг 1, очистка и исправления
Удаление избыточных инструкций, перестановка кода для меньшего количества переходов, удаление потенциального бесконечного цикла, если используются 2 одинаковых числа, и обнуление EDX
перед каждым делением:
mov eax, intArray[0]
mov ebx, intArray[1]
major:
cmp eax, ebx
jg nextstep
xchg eax, ebx
nextstep:
cmp ebx, 0
je zerob
modulus:
xor edx, edx
div ebx
mov eax, ebx
mov ebx, edx
jmp nextstep
zerob:
mov MCD, eax
fine:
Шаг 2, создание цикла
Использование количества элементов в num , выборка чисел с помощью указателя в ESI
и превращение внутреннего цикла в DO-Круглый цикл (условно прыгает на вершину):
mov ecx, num ;Number of elements
lea esi, intArray[0]
lodsd ;First number in array
dec ecx
jz DONE
AGAIN:
mov ebx, [esi] ;Next number in array
add esi, 4
major:
cmp eax, ebx
jg nextstep
xchg eax, ebx
jmp nextstep
modulus: ;Inner loop
xor edx, edx
div ebx
mov eax, ebx
mov ebx, edx
nextstep:
test ebx, ebx
jnz modulus
dec ecx
jnz AGAIN
DONE:
mov MCD, eax
fine: