bon voila j'ai un programme en C qui appelle une procédure en assembleur et cette dernière doit retourner un caractère.
j'ai donc écrit le programme suivant en assembleur (mon programme marche puisque je l'ai testé avec des fichiers objets valides, alors que mon programme en assembleur ne marche pas).
Code :
- DOSSEG
- .MODEL small
- .DATA
- .CODE
- PUBLIC C recchaine ; procedure recchaine visible en C
- PUBLIC C recbloc ; procedure recbloc visible en C
- PUBLIC C reccar ; procedure reccar visible en C
- ; ------------
- ; -- recoct --
- ; ------------
- recoct PROC
- PUSH DX
- ; registre concern‚ RBR
- ; bit 0 de LSR a 1 si il y a eu quelque chose de re‡u
- ; on boucle tant que le bit 0 de LSR est different de 1
- MOV DX,3FDh ; acces au registre LSR
- IN AL,DX
- AND AL,01h ; et 00000001b donc comparaison avec le bit 0 (data ready à 1 si l'octet est recu)
- BOUCLE_recoct : CMP AL,1
- JE sortir_recoct ; si egalite alors bit 0 … 1
- JMP BOUCLE_recoct ; sinon on continuer a boucler
- sortir_recoct : MOV DX,3F8h ; Registre de RBR pour récupérer l'octet
- in AL,DX ; octet qu'on met dans AX
- POP DX
- ret
- recoct ENDP
- ; ------------
- ; -- reccar --
- ; ------------
- reccar PROC
- ; elle consiste juste … appeler recoct
- ; on retourne le char dans AX ou AL selon la taille de la bestiole (ici AL)
- CALL recoct
- ret
- reccar ENDP
|
j'utilise recoct car dans ce fichier j'ai plusieurs fonctions asm qui l'utilise.
bon bref quand je lance mon programme C il ne reçoit pas le caractère attendu alors qu'il est envoyé (ça c sur).
Pourtant je fais attention au registre je passe bien mon caractère dans AL pour l'utiliser.
Si quelqu'un avait une idée ?
---------------