LandTech
Messages postés73Date d'inscriptiondimanche 14 octobre 2007StatutMembreDernière intervention28 février 2011
-
30 déc. 2008 à 19:19
cs_ghuysmans99
Messages postés3983Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 2013
-
1 janv. 2009 à 01:20
Bonjour, comme c'est dit dans le titre je voudrais afficher un caractère passé en paramètre avec l'interruption Bios 10h.
j'ai écris un code mais Nasm me sort une erreur : invalid combination of opcode and operands
voici le code :
[BITS 32] ; indique à NASM que l'on est en 32 bits
segment .text
global _printchar
_printchar:
push ebp
mov ebp, esp
mov eax, [ebp+8] ; 1er argument
mov ebx, eax
mov AH, 0Ah ; Charge la fonction d'affichage
mov AL, ebx ; Charge le caractère a afficher
int 10h ; Active l'interruption video
pop ebp ;
ret ; retour, la somme est dans
; EAX
voila j'espère que vous pourrez résoudre mon problème et bonne prog à tous !
cs_ghuysmans99
Messages postés3983Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 201316 30 déc. 2008 à 21:15
mov al,ebx => Tu voulais mettre 32 bits dans 16 ? Un peu court, non ? Evidemment il fallait mettre les crochets pour dire "la valeur pointée par EBX".
int 10h ;Active l'int. vidéo => On active pas les interruptions, on les appelles. (En fait, l'instruction INT correspond à l'empilation des flags & registres ((je ne me souviens plus de ce qu'elle empile exactement)) et fait un call sur l'adresse se trouvant en segment 0, offset numint*2 ((2 bytes pour le segment et 2 autres pour l'offset)) ).
_printchar:
push ebp ; On sauve EBP
mov ebp, esp
mov eax, [ebp+8] ; 1er argument
mov ebx, eax
mov ah, 0Ah ; Choisis la fonction 0Ah, affichage
mov al, [ebx] ; Charge le caractère a afficher
int 10h ; Appelle l'interruption video
pop ebp
ret ; Retour, la somme est dans EAX