prob tout con (je pense) d'asm en ligne en C - ASM - Programmation
Marsh Posté le 05-05-2004 à 21:28:31
essaie avec ça: __asm (2 underscores au lieu d'un seul).
Marsh Posté le 06-05-2004 à 23:19:38
non _asm ça marche aussi
c'est un pb de taille :
int c'est 4 octets, ax ça en fait deux
essaye :
unsigned short statut;
_asm
{
mov statut, ax
}
return (int)statut;
Marsh Posté le 07-05-2004 à 04:54:58
sinon regarde le genre de synthaxe que tu peux avoir avec le watcom:
char *VLine(void *tgt, long cl, long y, long ax);
#pragma aux VLine = \
"Lp: mov DWORD PTR[edi],eax" \
"add edi,ebx" \
"dec ecx" \
"jnz Lp" \
parm [edi][eax][ecx][ebx] modify [edi ecx] value [edi];
Marsh Posté le 07-05-2004 à 09:27:57
bjone a écrit : mov statut,eax |
oooops
Marsh Posté le 10-05-2004 à 14:30:19
J'avai essayé char int et long, mais short je l'utilise tellement pas souvent que... Bah merci beaucoup c'était exactement ca le problème.
Dri
Marsh Posté le 13-05-2004 à 11:45:11
long et int ont souvent la même capacité... 32 bits.
Souvent, mais pas toujours.
Marsh Posté le 13-05-2004 à 16:22:35
bin ça dépends, si en l'occurence, tu compiles pour une cible 16bits (mode réel), ou 32bits (mode protégé).
il a pas précisé quel était le système ciblé (dos, dos+dos4gw/pmodew,win32....)
mais vu que le mov status,ax échoue, c'est qu'il est soit en dos+dos4gw/pmodew soit en win32.
Marsh Posté le 13-05-2004 à 21:10:20
christophe_d13 a écrit : long et int ont souvent la même capacité... 32 bits. |
la régle C c'est, pour la taille ;
char <= short <= int <= long
sachant que sur certains systèmes "exotiques" avancés (donc ni PC ni Mac) ils peuvent tous êtres égaux à 8 (64-bits) !
même (sizeof(char) == 1) n'est pas toujours vrai en C (mais toujours vrai sur PC)
Marsh Posté le 05-05-2004 à 21:13:57
Salut, je suis nouveau sur le forum
(enfin ca compile mais la ligne est ignorée donc la variable inutilisée)
Je programme en C et depuis pas si longtemps j'ai eu envie d'ajouter de l'assembleur dans mes sources pour répondre à des besoins spécifiques. J'ai donc commencé à me documenter sur l'assembleur en ligne et uniquement ce dont j'avais besoin.
Une des choses dont j'ai eu besoin c'est de récupérer une valeur a partir du registre ax et de le mettre dans une de mes variables déclarée dans la partie C du programme. Et là open watcom m'a tout simplement répondu
Voila le bout de code :
J'espère donc que quelqu'un sera en mesure de me répondre
Dri
PS. j'ai essayé pas mal de trucs, mais j'ai mis en gros ce que je voudrais que ca fasse (statut = ax)