Сборка: максимальное количество: не сравнивается должным образом
.MODEL SMALL
.STACK 100h
.data
bigger db 0
mensaje db 0AH,0DH,'Finding the biggest number','$'
mensaje1 db 0AH,0DH,'Write 5 numbers to compare','$'
mensaje2 db 0AH,0DH,'Number: ','$'
resultadomayor db 10,13,'the biggest number is: ','$'
.code
start proc far
MOV AX,@DATA
MOV DS,AX
mov cx,5
MOV DX,OFFSET MENSAJE
MOV AH,09
INT 21H
MOV DX,OFFSET MENSAJE1
MOV AH,09
INT 21H
ciclo: call iniciociclo
dec cx
jne ciclo
call imprimirmayor
MOV AH,4CH
INT 21H
start endp
;
bucle proc near
MOV DX,OFFSET MENSAJE2
MOV AH,09
INT 21H
MOV AH,01
INT 21H
cmp bigger,al
jnb masgrande
masgrande:
mov bigger,al
ret
bucle endp
;
printbiggest proc near
MOV DX,OFFSET resultadomayor
MOV AH,09
INT 21H
mov dx,offset bigger
mov ah,09
int 21h
printbiggest endp
end start
Когда я запускаю свою программу, в качестве последнего введенного числа отображается только самый большой. Он не сравнивает и не сохраняет другие числа, записанные до последнего. Я исследую, чтобы сделать это как массив, но мой учитель просит меня вставить числа, чтобы не дать уже число. Пользователь должен давать цифры, а не программист. Поэтому я не нашел, как вставить числа в массив. Вот почему я сделал это, сравнивая число с номером. Кстати это сборка 8086.
2 ответа
Ваша проблема здесь:
cmp bigger,al
jnb masgrande
masgrande:
mov bigger,al
Этот код всегда будет копировать значение в переменную bigger
, поскольку jnb
инструкция не вызывает пропуска кода. Переставьте инструкции так:
cmp bigger,al
jnb masgrande
mov bigger,al
masgrande:
Как уже упоминалось, вы должны поместить строки в правильное положение, ваш код просто "перелетел" через условие (старайтесь избегать бессмысленных меток). Также попробуйте использовать JB вместо JNA.
cmp bigger,al
jnb masgrande
;missing
masgrande:
mov bigger,al
CMP al, biggest
JB NOT_BIGGEST
MOV biggest, al
NOT BIGGEST:
;keep your program here