Условие правильное.
В строке из 20 элементов
дада сделаю
.MODEL small
.STACK 100h
.DATA
input DB 00h,01h,02h,03h,04h,05h,01h,07h,03h,09h,09h,0Bh,0Ch,0Dh,05h,0Fh,10h,11h,12h,13h
q DB 5 DUP (?)
x DB ?
mess DB 'x = '
x_hex DB 0,0,'h'
DB '$'
;=========================
.CODE
start:
;выбор сегмента данных
mov ax,@data
mov ds,ax
;цикл обработки входных данных
lea bx,input ; DS:BX - указатель входных данных
lea di,q ; DS:DI - указатель данных результатов выборок из четверок
mov cx,5
;два элемента с четными индексами каждой четверки заносятся в DL и DH
next_row:
mov al,ds:[bx]
call is_even
test al,al
jz odd
;четное
mov dl,ds:[bx]
jmp check_2
odd:
;если нечетное, то принять равным 0
xor dl,dl
check_2:
inc bx
inc bx
mov al,ds:[bx]
call is_even
test al,al
jz odd_2
;четное
mov dh,ds:[bx]
jmp get_max
odd_2:
;если нечетное, то принять равным 0
xor dh,dh
get_max:
inc bx
inc bx
;выбор максимального
mov al,dl
mov ah,dh
call max
mov ds:[di],al
inc di
loop next_row
;все четверки обработаны
;находим min элемент с четным индексом
lea di,q
inc di
mov al,ds:[di] ;q[index=2]
inc di
inc di
mov ah,ds:[di] ;q[index=4]
call min
mov x,al
;вывод ответа
;преобразование двоичного значения байта в шестнадцатеричное символьное представление для вывода на экран
call uchar_to_hex
mov x_hex,al
mov x_hex+1,ah
mov ah,09h
lea dx,mess
int 21h
;завершение процесса
mov ax,4C00h
int 21h
;--------------------
;проверка на четность
;INPUT: AL - беззнаковое целое значение, которое проверяется на четность
;RETURN: AL = 1 если аргумент четный, иначе AL = 0
;--------------------
is_even PROC
push dx
xor ah,ah
mov dl,2
div dl
test ah,ah
jz arg_is_even
xor al,al
jmp is_even_exit
arg_is_even:
mov al,1
is_even_exit:
pop dx
ret
is_even ENDP
;----------------------------------------------------
;выбор максимального значения из двух предоставленных
;INPUT: AL, AH - целые беззнаковые
;RETURN: AL - максимальное значение из двух входных аргументов
;----------------------------------------------------
max PROC
cmp al,ah
ja return_max
xchg ah,al
return_max:
ret
max ENDP
;---------------------------------------------------
;выбор минимального значения из двух предоставленных
;INPUT: AL, AH - целые беззнаковые
;RETURN: AL - минимальное значение из двух входных аргументов
;---------------------------------------------------
min PROC
cmp al,ah
jb return_min
xchg ah,al
return_min:
ret
min ENDP
;-----------------------------------------------------------------------------
;получить десятичное представление беззнакового целого с разрядностью в 1 байт
;INPUT: AL
;RETURN: AL,AH,DH - 3-символьное десятичное представление
;(начиная со старшего разряда, т.е. 0F3h = 243 -> AL='2',AH='4',DH='3')
;-----------------------------------------------------------------------------
uchar_to_dec PROC
xor ah,ah
mov dl,0Ah
div dl
mov dh,ah
xor ah,ah
div dl
mov dl,'0'
or al,dl
or ah,dl
or dh,dl
ret
uchar_to_dec ENDP
END start
;вывод ответа
;преобразование двоичного значения байта в шестнадцатеричное символьное представление для вывода на экран
call uchar_to_hex
mov x_hex,al
mov x_hex+1,ah
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.