problème de passage de paramètre en ASM

problème de passage de paramètre en ASM - ASM - Programmation

Marsh Posté le 28-05-2003 à 14:12:44    

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 :
  1. DOSSEG
  2. .MODEL small
  3. .DATA
  4. .CODE
  5. PUBLIC C recchaine ; procedure recchaine visible en C
  6. PUBLIC C recbloc ; procedure recbloc visible en C
  7. PUBLIC C reccar ; procedure reccar visible en C
  8. ; ------------
  9. ; -- recoct --
  10. ; ------------
  11. recoct PROC
  12. PUSH DX
  13. ; registre concern‚ RBR
  14. ; bit 0 de LSR a 1 si il y a eu quelque chose de re‡u
  15. ; on boucle tant que le bit 0 de LSR est different de 1
  16. MOV DX,3FDh  ; acces au registre LSR
  17. IN AL,DX 
  18. AND AL,01h   ; et 00000001b donc comparaison avec le bit 0 (data ready à 1 si l'octet est recu)
  19. BOUCLE_recoct :  CMP AL,1
  20.                  JE sortir_recoct ; si egalite alors bit 0 … 1
  21.                  JMP BOUCLE_recoct ; sinon on continuer a boucler
  22. sortir_recoct : MOV DX,3F8h  ; Registre de RBR pour récupérer l'octet
  23.                 in AL,DX ; octet qu'on met dans AX
  24.  POP DX
  25.         ret
  26. recoct ENDP
  27. ; ------------
  28. ; -- reccar --
  29. ; ------------
  30. reccar PROC
  31. ; elle consiste juste … appeler recoct
  32. ; on retourne le char dans AX ou AL selon la taille de la bestiole (ici AL)
  33. CALL recoct
  34. ret
  35. 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 ?


---------------

Reply

Marsh Posté le 28-05-2003 à 14:12:44   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed