Utilisé les constantes sur des variables. [Résolu]

Messages postés
41
Date d'inscription
mardi 8 mai 2007
Dernière intervention
4 octobre 2012
- - Dernière réponse : vincent2795
Messages postés
41
Date d'inscription
mardi 8 mai 2007
Dernière intervention
4 octobre 2012
- 29 juil. 2012 à 14:45
bonjour,
J' ai attribuer des constantes,
.const
X equ 21

Si je fait:
mov eax,X ; eax=21. ok

Maintenant plus compliqué,
J'ai un alphabet avec des constantes unique.
je génère un lettre et la met dans un variable. Mais la EQU ne marche pas...
si je fait:
.data
Lettre_unique_gen db 128 dup (?)
.const
X EQU 21
.code
 invoke alphabet,addr Lettre_unique_gen
mov eax, addr Lettre_unique_gen ; = X
mov eax,Lettre_unique_gen ; : error A2070: invalid instruction operands

Mon but est de générer une lettre et lui attribuée une constante.
dans le but, plus tard de l'utilisé dans des arithmétiques.
Si quelqu'un pourrait m' éclaircir dans mon problème...
Merci
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
41
Date d'inscription
mardi 8 mai 2007
Dernière intervention
4 octobre 2012
3
Merci
	invoke lstrcmpi,addr szKeyBuffalf, CTEXT("L")
jne @f
invoke lstrcpy,addr szKeyBuffalf,CTEXT("22")
jmp @end
@@:

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 121 internautes nous ont dit merci ce mois-ci

Commenter la réponse de vincent2795
Messages postés
116
Date d'inscription
samedi 4 juin 2005
Dernière intervention
10 avril 2013
1
0
Merci
Le tableau Lettre_unique_gen db 128 dup est définit de type BYTE ( 1 octets soit 8 bits) alors que l'instruction mov eax,Lettre_unique_gen lit un DWORD (4 octets soit 32 bits)

Lire un octet:
movzx eax, Lettre_unique_gen[0] ou bien:
mov al, Lettre_unique_gen[0]

Lire 4 octets:
mov eax,DWORD PTR Lettre_unique_gen[0]
Commenter la réponse de BLUEBIBUBBLE
Messages postés
41
Date d'inscription
mardi 8 mai 2007
Dernière intervention
4 octobre 2012
0
Merci
cela ne fonctionne pas. on retrouve la lettre.. et par conséquent le calcul n'est pas bon.

[bh5ol1k2wt8kvikf55xj.olympe.in/gen.rar la source.]
Commenter la réponse de vincent2795
Messages postés
41
Date d'inscription
mardi 8 mai 2007
Dernière intervention
4 octobre 2012
0
Merci
j'ai la solution, mais un autre probleme arrive...
je ne peut pas mettre le resultat apres ma variable.. je ne sais pas pourquoi.

	mov eax,offset szKeyBuffalf ; <= normalement met EQU dans eax et non la lettre.
push 9h                             ; met 9h sur la pile
cdq                                ; met edx à zero
pop ebx                             ; met 9h dans ebx
idiv ebx                            ; on divise eax par ebx, on place le resultat de la division dans eax et le reste dans edx

sub ebx,edx ;soustrait 9-reste

invoke lstrcat,addr szKeyBuffalf,ebx ;met resultat apres szKeyBuffalf

et au dbg:

004010E2    .  6A 09                   push    9
004010E4    .  99                      cdq
004010E5    .  5B                      pop     ebx                                     ;  kernel32.759C339A
004010E6    .  F7FB                    idiv    ebx
004010E8    .  2BDA                    sub     ebx, edx
004010EA    .  53                      push    ebx                                     ; /StringToAdd = 00000005 ???
004010EB    .  68 30304000             push    gen.00403030                            ; |ConcatString = "X0734692135"
004010F0    .  E8 39000000             call    <jmp.&kernel32.lstrcatA>                ; \lstrcatA
004010F5    .  6A 00                   push    0                                       ; /Style = MB_OK|MB_APPLMODAL
004010F7    .  68 21304000             push    gen.00403021                            ; |Title = "resultat"
004010FC    .  68 30304000             push    gen.00403030                            ; |Text = "X0734692135"
00401101    .  6A 00                   push    0                                       ; |hOwner = NULL
00401103    .  E8 32000000             call    <jmp.&user32.MessageBoxA>               ; \MessageBoxA

Commenter la réponse de vincent2795
Messages postés
41
Date d'inscription
mardi 8 mai 2007
Dernière intervention
4 octobre 2012
0
Merci
j'ai essayer
invoke wsprintf,addr szKeyBuffvisuel,CTEXT("%s%s"),addr szKeyBuffalf,ebx

mais cela ne marche pas...
Commenter la réponse de vincent2795

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.