include\masm32\include\macro1.inc
.data
t db 6 dup(?)
db 0
MsgBoxCaption db "answer",0
n dd 4
m dd 5
a db -9,21,2,5,-1
db 13,-4,6,14,2
db 22,-15,-6,23,12
db -9,16,62,18,10
.code
start:
lea ebx,a ;начало массива
mov edx,n ;кол-во строк
mov ecx,m ;кол-во элементов в строке
call min ;найти мин а первой строке
mov ah,al ;запомнить его
t1: call min ;найти мин в очередной строке
cmp al,ah ;если этот ми элемент не больше макс мин
jng t2 ;пропустить
mov ah,al ;если больше, запомнить новый макс из мин
t2: add ebx,m ;перейти к следующей строке
dec edx ;уменьшить счетчик строк
jnz t1 ;продолжить пока не 0
mov al,ah ;найденный макс из мин
cbw ;расширить до слова
NSTOC t
invoke MessageBox,NULL,addr t,addr MsgBoxCaption,MB_OK
invoke ExitProcess,NULL
;поиск минимального положит значения в строке массива
;ebx - адрес строки
;ecx - кол-во элементов в строке
;возвращает
;al - найденное мин значение
min proc
push ebx
push ecx
mov al,127 ;взять начальное мин значение
m1: cmp byte ptr [ebx],0 ;если неположительный элемент
jle m2 ;пропустить
cmp [ebx],al ;если текущий элемент не меньше мин
jnl m2 ;пропустить
mov al,[ebx] ;запомнить новый мин
m2: inc ebx ;след элемент
loop m1 ;пройти по всем эл-там
pop ecx
pop ebx
ret
min endp
end start
Формулировка данного примера: из наименьших положительных элементов в каждой строке матрицы следует найти наибольший. Как можно увидеть по примеру, задачи схожи.