2009-10-19 4 views
2

J'appelle un PROC pour tester deux valeurs dans l'assemblage x86 16bits et sauter si la valeur est supérieure à zéro, alors je fais quelque chose comme ceci:retour d'un JMP dans l'assembly x86?

TESTIT PROC 
    CMP AX,1 
    JG FOO 
    RET 
TESTIT ENDP 

FOO: 
    ;do something 
END FOO 

MAIN: 
    CALL TESTIT 
    .EXIT 
END MAIN 

END 

Ma question est simple, comment puis-je retourner retour de FOO au point MAIN appelé TESTIT. Je ne veux pas effectuer un JMP de FOO à MAIN, car cela appellera encore TESTIT. Lorsque j'essaie de mettre RET à la fin de FOO, la fenêtre de commande reste bloquée avec un curseur clignotant. Note: Je sais que cela peut être réalisé en utilisant le pseudo op .IF ... .ENDIF au lieu de JG mais je veux essayer d'atteindre le même résultat sans le pseudo op, qui fait un peu de magie en arrière plan je ne sais pas comment l'atteindre manuellement .

Répondre

8

FOO doit être appelé en tant que sous-programme. Pour ce faire, inversez la logique de votre saut et utilisez l'instruction CALL pour appeler FOO. Mettez une instruction RET à la fin de la routine FOO.

TESTIT PROC 
    CMP AX,1 
    JLE BAR 
    CALL FOO 
BAR: 
    RET 
TESTIT ENDP 

FOO: 
    ;do something 
    RET 
END FOO 

MAIN: 
    CALL TESTIT 
    .EXIT 
END MAIN 

END 
Questions connexes