Сборка: максимальное количество: не сравнивается должным образом

.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
Другие вопросы по тегам