Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : erreur de compilation [ Divers / Aide et documentation ] (ggmomo)

lundi 8 janvier 2007 à 13:54:04 | erreur de compilation

ggmomo

Bonjour  
 
Voila je débute en asm et j'ai donc esayer de realiser une horloge en m'inspirant d'une deja existante :) mais lors de la compilation j'ai des erreurs que je ne comprend pas :( os : winXP home sp2

l'erreur :
hor.asm(134) : error A2004: symbol type conflict

la ligne 134 :   mov  ax,@code  
la ligne 135 :   mov  ds,ax


.code
IntVectOFF  dw 0  
IntVectSEG dw 0  
intvectdd dd 0  
Ticks  db 0  
Seconds  db 0  
Minutes  db 0  
Hours  db 0 
printed  db 0 

Merci d'avance


lundi 8 janvier 2007 à 14:25:10 | Re : erreur de compilation

_dune2_

Membre Club
Réponse acceptée !
salut,



Ton problème vient du fait que tu veuilles stocker une adresse (@code) qui est une donnée 32bits dans un registre (ax) qui fait 16bits .. ça ne rentre pas et c'est logique. Je pense que l'exemple que tu as récupéré (et dont tu t'es inspiré) est du code 16bits pour processeurs 8086 (avec des adresses en 16bits, ce qui n'est pas le cas des PC) ...

Pour windows XP, il faut te tourner vers du code 32bits.

Chris.

Gentoo... que du bonheur ...

lundi 8 janvier 2007 à 14:46:47 | Re : erreur de compilation

ggmomo

merci de ton aide

je voudrais savoir est-ce qu'en 32bits on peut comme utilisé des registre 16bit et 32 bit a la foi?ou dois-je utilisé que des 32 bits?


lundi 8 janvier 2007 à 15:04:38 | Re : erreur de compilation

ggmomo

edit : est-il possible de mettre le .code en 16bit sinon car je ne connais pas la syntaxe 32bits. la je suis vraiment perdu :)

lundi 8 janvier 2007 à 15:19:22 | Re : erreur de compilation

_dune2_

Membre Club
salut,



Il n'y a aucun soucis pour utiliser des variables 16 bits dans du code 32bits assembleur.
C'est d'ailleur ce que tu fais en utilisant le registre ax :)
à titre d'information :
AH, AL 8bits (AH poids fort AL poids faible)
AX        16bits
EAX      32bits
RAX      64bits (uniquement en mode 64bits appelé em64t chez intel et amd64 chez amd)

tu as donc à dispo (je ne parlerais pas du mode 64bits qui nécéssitent un OS 64bits)

8 "general purpose registers" 32bits :
EAX, EBX, ECX, EDX, ESI, EDI, EBP et ESP (attention toutefois car EBP et ESP sont utilisé pour la sauvegarde et l'utilisation de l'adresse de la pile)

8 registres 16bits :
AX, BX, CX, DX, SI, DI,BP et SP (on remarquera que la version 32bits est une "E"xtension de ces registres 16bits ... et donc toute modif par exemple de AX, modifie la partie basse 16bits de EAX)

8 registres 8bits :
AH, AL, BH, BL, CH, CL, DH et DL (là encore, ce sont des sous ensembles de AX,BX,CX et DX)

Tu as ensuite des registres appelés SIMD (Single Instruction Multiple Data) 64bits :
MM0 -> MM7 qui sont 8 registres 64bits qui peuvent être segmentés en 8bits, 16bits, 32bits ou 64bits lors des opérations dessus. Attention aussi sur le fait que ces registre sont "mappé" sur le pile du coprocesseur arithmétique ... ce qui implique de les nettoyer à la fin de leur utilisation avec l'instruction "emms" pour avoir un environnement FPU sain.

Et si ton CPU prend en charge les extensions SSE, tu as aussi 8 registres 128bits supplémentaires:
XMM0 -> XMM7 qui peuvent être segmentés comme les registres MMX mais avec le double de capacité et indépendant du coprocesseur arithmétique cette fois-ci (donc pas de restauration du FPU à faire).

Donc pour conclure, oui, tu peux mixer l'utilisation de registres 8/16/32bits dans ton code (c'est même recommandé quand par exemple tu manipules une chaine de caractère, tu le fais par octets (8bits) et pas par 32bits ;) sauf pour recopier plus rapidement par paquets de 4 caractères)

Par contre, garde à l'esprit que dans un registre il faut mettre une donnée cohérente (ex: une adresse -> EAX ou autre 32bits en mode 32bits , ainsi que une adresse -> RAX ou autre 64bits en mode 64bits)

Gentoo... que du bonheur ...

lundi 8 janvier 2007 à 15:30:39 | Re : erreur de compilation

_dune2_

Membre Club
re,



pour ce qui est de "@code", c'est une adresse et elle est stocké sur 32bits .... il n'y a donc aucune possibilité de la stocker dans un registre 16bits !!
Il te faudra passer par le registre "eax" et la transférer dans "esi" ou "edi", car "ds" est un selecteur de segment (Data Segment, qui sert à effectuer un adressage de type [SEGMENT]:[OFFSET]). Donc là où tu avais "[ds:di]" et  "[ds:si]", j'utiliserai "[edi]" et "[esi]" directement.... Ceci dit, sans compréhension complète du code, ce ne sera pas aussi simple à traduire, car "di" ou "si" est un offset, et doit donc être ajouté à "edi" ou "esi" pour que ce soit correct.

Pour ce qui est de l'utilisation d'un tel type d'adressage je laisserai la parole à d'autres developpeur asm de ce site qui en savent beaucoup plus que moi sur ce point (je ne manipule pas les adresses en SEGMENT:OFFSET, je reste pour ma part avec des registres 32bits portant des adresses directes bien plus simple).

Gentoo... que du bonheur ...

lundi 8 janvier 2007 à 15:50:21 | Re : erreur de compilation

Nasman

Bonjour ggmomo,

Qu'est ce que tu utilises comme assembleur et quel type de fichier demandes tu en sortie ?

Si tu veux créer un exécutable 16 bits (format passablement obsolète de nos jours) il te faut l'indiquer quelque part.
- dans les déclarations de sections
- lors de la compilation (format objet)
- lors de l'édition des liens

Dans ton cas je pense que la déclaration de la section de code est incomplète.

A+


lundi 8 janvier 2007 à 15:58:47 | Re : erreur de compilation

ggmomo

Ben j'essaye en 32 bits :)

Il me met 2 erreurs 

1°) test32.asm(134) : error A2004: symbol type conflict

  mov  eax, @code  
  mov  esi,eax

2°)test32.asm(178) : error A2022: instruction operands must be the same size

        mov     word ptr es:[IntNumber*4 + 0], offset ClockISR

Code en .asm

En tout cas mercide ton aide, j'aurais appris plein de choses :)

lundi 8 janvier 2007 à 16:19:14 | Re : erreur de compilation

BruNews

Administrateur CodeS-SourceS
_dune2_ > que ESP soit pointeur de pile, c'est clair car "by design" mais de EBP on fait ce que l'on veut. Qu'il puisse avoir un rôle particulier si on fait une stackframe en début de procédure ou alors gestion d'exception etc... ok mais c'est seulement le choix du programmeur car EBP peut s'employer comme nimporte quel autre registre.

ciao...
BruNews, MVP VC++

lundi 8 janvier 2007 à 16:27:46 | Re : erreur de compilation

ggmomo

j'utilise masm comme compilateur et en sortie je lui demande un win32 app.



1 2

Cette discussion est classé dans : ligne, erreur, db, compilation, asm


Répondre à ce message

Sujets en rapport avec ce message

Retour à la ligne en asm [ par 404 ] Je voulais juste savoir comment on programme un retour à la ligne en assembleur (tasm) ca doit surement etre tout simple mais c utile lol erreur d'assemblage ?? [ par Hrusdik ] j'ai MASM 6.15 pour assembler mes codes en asm mais aprés avoir tapé X:\XXXX\XXXX\make32 1 il me dit fichier introuvable !!!Pourtant make32.bat et 1.a Drawline en asm [ par raoulli ] bonsoir.J'ai voulu creer une ligne sur l'ecran en asm, mais Drawline ?, je ne la trouve pas, si elle existe.j'ai trouvé des infos, mais avec les inter Petit problème pour comparer (cmp) [ par smok1360 ] Bonjour à tous,Pour commencer, j'espère de ne pas avoir choisis le mauvais lieu pour poster, j'ai un petit peu hésité Donc, j'ai décidé d'apprendre l' Utilisation d'assembleur dans Visual Studio C++ 2008 [ par epineurien ] Bonjour à tous !Je suis passé il y a quelques jours de Masm32 à Visual Studio 2008 et j'ai (comme d'hab.) quelques problêmes.Tant qu'il s'agit d'affic program asm [ par yazidhy ] j'ai besoin d'un program sur asm d'un afficheur 7 segment connecté en parallèle(port DB25) à l'ordinateurmerci pour votre aide "C urgent" Exe simple codé sans linker [ par Mareck666 ] Bonjour tout le monde, voila mon pb afin de mieu comprendre le format EXE 16 bits (ok sa sert plus a rien de codé des application avec sa, mai bn c'es Mini OS !! debut [ par Hardouz ] salut a tous ! je debut en ASM je vx bosser un px en ASM je connais l'architechture ect !!! j'ai fais un pti programme mais il ya un probléme 1/ lors


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 1,248 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.