Если кому-то интересно, вот решение для моего вопроса (я узнал об этом сегодня с помощью моего репетитора):
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
void main() {
int N = 10, i;
clrscr();
int a[] = { 1, 4, -6, 12, -25, 10, 3, -4, 15, 7}, MAX, MIN, RESULT;
__asm{
mov cx, N
lea si, a
lodsw
mov MIN, ax
mov MAX, ax
dec cx
}
m:
__asm{
lodsw
cmp MIN, ax
jle m1
mov MIN, ax
jmp m2
}
m1:
__asm{
cmp MAX, ax
jge m2
mov MAX, ax
}
m2:
__asm{
loop m;
}
cout << "Max = " << MAX << "\n";
cout << "Min = " << MIN;
getch();
}
Алгоритм : если cmp MIN, ax
имеет отрицательный результат, это означает, что ax
больше, чем MIN
. Таким образом, скрипт переходит на метку m1
для сравнения значения ax
с MAX
. Когда cmp MIN, ax
возвращает положительное значение, сценарии присваивают значение регистра ax
переменной MIN
и после этого переходят к метке m2
, чтобы уменьшить счетчик цикла. Алгоритм нахождения максимального значения работает аналогично (метка m1
).