Bonjour,

J'ai un petit probleme sur un petit programme:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
unsigned char inp(unsigned short port);
void outp(unsigned short port, unsigned char valeur);
unsigned int inpw(unsigned short port);
 
main()
{
	unsigned char valeur;
	valeur = inp(0x378);
	return( 0 );
}
 
unsigned char inp(unsigned short port)
{
   unsigned char valeur;
   asm {
      mov DX, port
      in AL, DX
      mov valeur,AL
   }
   return( valeur );
}
 
void outp(unsigned short port, unsigned char valeur)
{
   asm {
      mov DX, port
      mov AL, valeur
      out DX, AL
   }
}
 
unsigned int inpw(unsigned short port)
{
   unsigned int valeur;
   asm {
      mov DX, port
      in AX,DX
      mov valeur,AX
   }
   return( valeur );
}
Je compile avec:

BCC32 -c TEST32.C

Et j'ai l'erreur:

Operand types do not match

sur la ligne:

Il traduit la fonction inpw par:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
_inpw	proc	near
?live1@240:
	push      ebp
	mov       ebp,esp
	push      ecx
@9:
	mov	 DX, word ptr [ebp+8]
	in	 AX,DX
	mov	 dword ptr [ebp-4],AX
	mov       eax,dword ptr [ebp-4]
@11:
@10:
	pop       ecx
	pop       ebp
	ret 
_inpw	endp
et l'erreur se situe a la ligne:

mov dword ptr [ebp-4],AX

Je precise que ce bout de code va etre utilisé ensuite dans un kernel "fait maison", donc je doit réécrire les fonctions d'entree / sortie pour gerer le materiel.

D'ou peut venir mon probleme ?

Cordialement.