Utilisé les constantes sur des variables.

Résolu
vincent2795 Messages postés 41 Date d'inscription mardi 8 mai 2007 Statut Membre Dernière intervention 4 octobre 2012 - 15 juil. 2012 à 20:10
vincent2795 Messages postés 41 Date d'inscription mardi 8 mai 2007 Statut Membre 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

5 réponses

vincent2795 Messages postés 41 Date d'inscription mardi 8 mai 2007 Statut Membre Dernière intervention 4 octobre 2012
29 juil. 2012 à 14:45
	invoke lstrcmpi,addr szKeyBuffalf, CTEXT("L")
jne @f
invoke lstrcpy,addr szKeyBuffalf,CTEXT("22")
jmp @end
@@:
3
BLUEBIBUBBLE Messages postés 116 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 10 avril 2013 1
19 juil. 2012 à 00:41
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]
0
vincent2795 Messages postés 41 Date d'inscription mardi 8 mai 2007 Statut Membre Dernière intervention 4 octobre 2012
19 juil. 2012 à 11:09
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.]
0
vincent2795 Messages postés 41 Date d'inscription mardi 8 mai 2007 Statut Membre Dernière intervention 4 octobre 2012
19 juil. 2012 à 12:00
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

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vincent2795 Messages postés 41 Date d'inscription mardi 8 mai 2007 Statut Membre Dernière intervention 4 octobre 2012
19 juil. 2012 à 12:09
j'ai essayer
invoke wsprintf,addr szKeyBuffvisuel,CTEXT("%s%s"),addr szKeyBuffalf,ebx

mais cela ne marche pas...
0
Rejoignez-nous