Envoie d'un caractère par liaison série en asm/C

Signaler
Messages postés
1
Date d'inscription
mercredi 28 mai 2003
Statut
Membre
Dernière intervention
28 mai 2003
-
Messages postés
540
Date d'inscription
dimanche 23 mars 2003
Statut
Membre
Dernière intervention
5 octobre 2007
-
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 ?

1 réponse

Messages postés
540
Date d'inscription
dimanche 23 mars 2003
Statut
Membre
Dernière intervention
5 octobre 2007
1
Essaie:
recoct PROC near
PUSH DX
MOV DX,3FDh
BOUCLE_recoct:
IN AL,DX 
TEST AL, 1
JZ BOUCLE_recoct
MOV DX,3F8h
in AL,DX
POP DX
ret

recoct ENDP



Core Breaker :)