2016-05-12 1 views
-4

J'essayais de comprendre pourquoi mon code ne fonctionne pas.Pourquoi ce code ne saute-t-il jamais sur l'étiquette nommée true?

J'ai besoin de mettre en œuvre cette cmp dans une plus grande version de ce code comme menu principal demandant des options de procéder à certaines actions mais lorsque l'on compare al, '1' ne reconnaît pas je et il saute directement à jne.

Je sais que c'est probablement l'erreur lors de la comparaison, mais quelle est la bonne façon de le faire?

.model small 

.stack 100h 

.data 

wm db 0ah, 0dh, "Welcome! please select one of the following options: $" 

op1 db 0ah, 0dh, "Please submit 1 to true and 2 to false: $" 

op1_1 db 0ah, 0dh, "its true!!! $" 

op1_2 db 0ah, 0dh, "its false!!!! $" 


.code 

main PROC 

    mov ax,@data 

    mov ds, ax 
    mov dx, offset wm 
    mov ah, 09h 
    int 21h 

    mov dx, offset op1 
    mov ah, 09h 
    int 21h 

    mov ah, 0ah 
    int 21h 

    cmp al, '1' 
    je true 
    jne false 


success: 

    mov ah,4ch     ; function: DOS Exit Program 
    mov al, 0     ; specify return code 0 
    int 21h     ; adios amigo! 

true: 

    mov dx, offset op1_1 
    mov ah, 09h 
    int 21h 
    jmp success 

false: 

    mov dx, offset op1_2 
    mov ah, 09h 
    int 21h 
    jmp success 

main ENDP 

END main 
+1

Veuillez préférer mettre vos questions en évidence en leur posant de bonnes questions, plutôt que de les marquer avec des symboles. –

+0

Ajouté en gras à la question afin que vous puissiez séparer la question du code. Je mets le code comme référence de ce que je fais mais j'ai d'abord spécifié ce que j'essayais d'accomplir –

+1

Vous devriez mettre tout votre code dans un bloc de code. Je ne sais pas asm donc je ne peux pas être sûr que je le fais correctement. –

Répondre

5

Vous ne passant pas suffisamment d'informations pour fonctionner avec 0ah

mov ah, 0ah 
int 21h 

qui nécessite des informations de la mémoire tampon en entrée et une séquence de caractères dans un tampon fourni par l'utilisateur. Je vous suggère d'utiliser

mov ah, 08h 
int 21h 

qui retourne un seul caractère al que vous attendez. Il ne fait pas écho au caractère, mais la fonction 01h le fait.