Global i.l ; Index du Tableau
Global i1.b ; Multiplicateur
Global i2.w ; Resultat
Dim n64.b(10) ; Tableau de 10 variables de type bytes
; ASM SOURCE
!PUSH dword Ebx ; Sauvegarde ce Registre Important Pour PB
;
!MOV dword Ebx,[a_n64] ; Charge Address Initial du Tableau
!ADD dword Ebx,[v_i ] ; Additionne la valeur l'index du tableau
;
!MOVSX byte Eax,[Ebx ] ; Charge une valeur bits dans eax
!MOVSX byte Ebx,[v_i1 ] ; Charge la valeur i1 dans ebx
;
!IMUL dword Eax,Ebx ; Effectue la multiplication
;
!MOV word [v_i2 ],Ax ; Sauvegarde le resultat
!XOR dword Eax,Eax ; Efface le registre (Mettre a 0)
!POP dword Ebx ; Replace le registre
Donne-moi des nouvelles...
Roger
La seule limite de PureBasic... c'est notre imagination!
A la place d'augmenter I, comment dire directement a la ligne "! MOV edx, dword [v_Address] " que "[v_Address]" doit etre a +1 ?
Ca s'ecrit avec une ligne de code comme "! add v_Address, 1" ??
Pour incrémenter de 1, on peut utiliser l'instruction INC :
! INC edx
après le premier MOV placera la valeur + 1 dans edx.
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
Non, tu fais erreur. Car je pense que ca augmente de 1 la valeur qui etait dans EAX. Mais ca ne permet pas de regarder la valeur suivante dans un Dim !!
Est-ce que as essayer le code que je t'avais suggerer? Si oui alors pour augmenter la lecture du prochain n64(i), tu n'as qu'a augmenter sa valeur de 1 comme suit...
Global i.l ; Index du Tableau
Global i1.b ; Multiplicateur
Global i2.w ; Resultat
Dim n64.b(10) ; Tableau de 10 variables de type bytes
; ASM SOURCE
!PUSH dword Ebx ; Sauvegarde ce Registre Important Pour PB
;
!MOV dword Ebx,[a_n64] ; Charge Address Initial du Tableau
!ADD dword Ebx,[v_i ] ; Additionne la valeur l'index du tableau
;
!MOVSX byte Eax,[Ebx ] ; Charge une valeur bits dans eax
!MOVSX byte Ebx,[v_i1 ] ; Charge la valeur i1 dans ebx
;
!IMUL dword Eax,Ebx ; Effectue la multiplication
;
!MOV word [v_i2 ],Ax ; Sauvegarde le resultat
; Ajoute Ceci
!MOV dword Eax,[v_i] ; Copier la valeur de l'index
!INC dword Eax ; Augmente de 1
!CMP dword Eax,10 ; Compare avec limite du DIM
!JNE near Suite_Du_Code ; Si Eax <> Maximum
!MOV dword [v_i],0 ; Remet index a 0
!Suite_Du_Code:
!XOR dword Eax,Eax ; Efface le registre (Mettre a 0)
!POP dword Ebx ; Replace le registre
Roger
La seule limite de PureBasic,... c'est notre imagination!
Non, je n'ai pas utilisé ton code car j'avais en fait 3 blocs asm a "souder" et j'y suis arrivée avant de te lire.
Bon, apparement, EBX est important pour PB. Donc, un push semble essenciel avant d'utiliser EBX. Alors, il n'y a plus qu'a.
Je vais tester ca....
C'est poussé mais ca ne marche pas.
comme ma valeur "Addi" est un .l en PB, je dois bien mettre dword ptr, non ?
ca devrait augmenter de 1 cette valeur, mais ca marche pô