begin process at 2012 02 05 02:33:33
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Assembleur

 > 

Archives

 > 

Aide a la programmation Windows

 > 

delphi vers asm


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

delphi vers asm

mardi 10 janvier 2006 à 03:30:45 | delphi vers asm

cricri_b34

salut , J'ai un code en delphi que j'aimerais traduire en assembleur (masm32) :

var
KeyTable: array [0..255] of boolean

[....]

procedure CheckState;
var
  I: integer;
begin
  for I := 0 to 255 do
  begin
    if KeyTable[I]<>(GetAsyncKeyState(I)<>0) then
    begin
      if (I=1) then
      begin
        // souris gauche
        if not KeyTable[1] then
        begin
          OnMouseDown()
        end;
      end
      else
      begin
        // clavier
        if not KeyTable[I] then
        begin
          OnKeyDown(I);
        end;
      end;
      KeyTable[I] := GetAsyncKeyState(I)<>0;
    end;
  end;
end;

Cette procedure est executé a chaque millièmes de secondes et permet d'intercepter l'appui des touches du clavier et des boutons de la souris.
Donc j'aimerais m'en servir pour un programme en masm32. J'ai commecé a le traduire... voici le résultat :

 .data
 TableState db 255 dup(0)

[...]

CheckState Proc
 mov ecx, 256
 mov esi, offset TableState
Debut:
 invoke GetAsyncKeyState, ecx
 .if (eax!=0)
  cmp BYTE ptr[esi+ecx], 1
  je Suivant
  invoke MessageBox, 0, 0, 0, 0
  mov BYTE ptr[esi+ecx], 1
 .else
  cmp BYTE ptr[esi+ecx], 0
  je Suivant
  invoke MessageBox, 0, 0, 0, 0
  mov BYTE ptr[esi+ecx], 0 
 .endif
Suivant:
 loop Debut
 Ret
CheckState EndP

Un MsgBox devrait apparaitre a chaque appui d'une touche mais, évidemment, ca marche pas...
 Est-ce que quelqu'un pourrait m'aider?
mardi 10 janvier 2006 à 14:07:27 | Re : delphi vers asm

patatalo

Membre Club Administrateur CodeS-SourceS
salut,

un truc dans le genre:

TableState db 256 dup(0) ; 0 a 255 = 256 valeures byte

CheckState PROC USES ESI
mov esi,256
@1:
dec esi ; for esi = 255 to 0
jb @3
invoke GetAsynKeyState,esi ; ecx certainement detruit lors de cet appel.
test ax,ax
setne cl ; GetAsynKeyState <> 0
cmp TableState[esi],cl ;  <> TableState[I]
je @1
not TableState[esi] ; juste inversé la comparaison de I=0 et not TableState[I]
je @1
cmp esi,1
jne @2
invoke OnMouseDown
jmp @1
@2:
invoke OnKeyDown
jmp @1
@3:
ret
CheckState ENDP

@++
mercredi 11 janvier 2006 à 01:17:35 | Re : delphi vers asm

cricri_b34

ca ne marche pas...  :

CheckState Proc USES ESI
mov esi, 256
@1:
dec esi
jb @3
invoke GetAsyncKeyState,esi
test ax,ax
setne cl
cmp TableState[esi],cl
je @1
not TableState[esi]
je @1
cmp esi,1
jne @2
;invoke OnMouseDown
jmp @1
@2:
invoke MessageBox, 0, 0, 0, 0
jmp @1
@3:
ret
CheckState EndP

cette proc me bombarde de MessageBox
mercredi 11 janvier 2006 à 08:33:16 | Re : delphi vers asm

patatalo

Membre Club Administrateur CodeS-SourceS
re,

il te manque le "KeyTable[I] := GetAsyncKeyState(I)<>0" final

@++
mercredi 11 janvier 2006 à 22:17:21 | Re : delphi vers asm

cricri_b34

dsl, mais chui tout mêler dans ton code
jcomprend pas:
<<
   test ax,ax
   setne cl
   cmp TableState[esi],cl
>>

et pour remplacer : KeyTable[I] := GetAsyncKeyState(I)<>0

est cque jpeux faire :

GetAsyncKeyState, esi
cmp eax, 0
je Relache
mov TableState[esi], 1
jmp FinEnregistrementEtat
Relache:
mov TableState[esi], 0
FinEnregistrementEtat :
...



mercredi 11 janvier 2006 à 23:59:30 | Re : delphi vers asm

patatalo

Membre Club Administrateur CodeS-SourceS





CheckState PROC USES ESI
mov esi,256
@1:
dec esi ; for esi = 255 to 0
jb @3
invoke GetAsynKeyState,esi ; ecx certainement detruit lors de cet appel.
test ax,ax
setne cl ; GetAsynKeyState <> 0
cmp TableState[esi],cl ;  <> TableState[I]
je @1
not TableState[esi] ; juste inversé la comparaison de I=0 et not TableState[I]
je @1
mov TableState[esi],cl ; voila le KeyTable[I] := GetAsyncKeyState(I)<>0 manquant
cmp esi,1
je @2  ; on inverse le test: sautera 1 fois au lieu de 255 ;-)
invoke OnKeyDown
jmp @1
@2:
invoke OnMouseDown
jmp @1
@3:
ret
CheckState ENDP

@++
jeudi 12 janvier 2006 à 00:31:23 | Re : delphi vers asm

patatalo

Membre Club Administrateur CodeS-SourceS





je l'ai mal placé dans la boucle:
TableState db 257 dup(0) ; 0 a 255 = 256 valeures byte
CheckState PROC USES ESI
mov esi,256
@0:
mov TableState[esi],cl ; la premiere entrée ne compte pas d'ou TableState db 257
c'est juste pour eviter un "jmp @1" avant @0
@1:
dec esi ; for esi = 255 to 0
jb @3
invoke GetAsynKeyState,esi ; ecx certainement detruit lors de cet appel.
test ax,ax
setne cl ; GetAsynKeyState <> 0
cmp TableState[esi],cl ;  <> TableState[I]
je @1
not TableState[esi] ; juste inversé la comparaison de I=0 et not TableState[I]
je @0
cmp esi,1
je @2  ; on inverse le test: sautera 1 fois au lieu de 255 ;-)
invoke OnKeyDown
jmp @0
@2:
invoke OnMouseDown
jmp @0
@3:
ret
CheckState ENDP

là je pense que ça devrait etre pas mal ...

@++
jeudi 12 janvier 2006 à 00:36:27 | Re : delphi vers asm

patatalo

Membre Club Administrateur CodeS-SourceS
faudrait reflechir avant de poster mais bon ...




TableState db 256 dup(0) ; 0 a 255 = 256 valeures byte

CheckState PROC USES ESI
mov esi,256
@1:
dec esi ; for esi = 255 to 0
jb @3
invoke GetAsynKeyState,esi ; ecx certainement detruit lors de cet appel.
test ax,ax
setne cl ; GetAsynKeyState <> 0
cmp TableState[esi],cl ;  <> TableState[I]
je @1
not TableState[esi] ; juste inversé la comparaison de I=1 et not TableState[I]
mov TableState[esi],cl ; il a mieux sa place là tout simplement
je @1
cmp esi,1
je @2  ; on inverse le test: sautera 1 fois au lieu de 255 ;-)
invoke OnKeyDown
jmp @1
@2:
invoke OnMouseDown
jmp @1
@3:
ret
CheckState ENDP

il me semble que c'est ça mais je peux me gourrer avec tout ces begin / end.
vendredi 13 janvier 2006 à 19:16:10 | Re : delphi vers asm

cricri_b34

non... ca marche toujours pas :

CheckState PROC USES ESI
mov esi,256
@1:
dec esi ; for esi = 255 to 0
jb @3
invoke GetAsyncKeyState,esi ; ecx certainement detruit lors de cet appel.
test ax,ax
setne cl ; GetAsynKeyState <> 0
cmp TableState[esi],cl ;  <> TableState[I]
je @1
not TableState[esi] ; juste inversé la comparaison de I=1 et not TableState[I]
mov TableState[esi],cl ; il a mieux sa place là tout simplement
je @1
cmp esi,1
je @2  ; on inverse le test: sautera 1 fois au lieu de 255 ;-)
;invoke OnKeyDown
invoke MessageBox, 0, 0, 0, 0
jmp @1
@2:
;invoke OnMouseDown
jmp @1
@3:
ret
CheckState ENDP

si tu veux, j'ai le code aussi en vb :

(oups, je l'ai pas avec moi....)

vendredi 13 janvier 2006 à 19:34:02 | Re : delphi vers asm

cricri_b34

bon le voici :

Dim TableState(255) As Boolean

[...]

Private Sub Timer1_Timer()
Dim I As Integer
    For I = 0 To 255
        If (TableState(I) <> (GetAsyncKeyState(I) <> 0)) Then
            If (GetAsyncKeyState(I) <> 0) Then
                If (I <> 1) Then
                    MsgBox ("Une touche vient d'être appuyé!")
                End If
                TableState(I) = True
            Else
                TableState(I) = False
            End If
        End If
    Next I
End Sub

1 2

Cette discussion est classée dans : end, begin, esi, ecx, keytable


Répondre à ce message

Sujets en rapport avec ce message

[ASM] Strcmp, prob evec la valeur de retour. [ par Ilsundal ] Bonjour a tous, j'ai réaliser la fonction strlen en ASM x86. tout fonctionne parfaitement sauf pour la valeur de retour, je souhaiterait qu'elle corre mon code ne marche pas [ par mohoguess ] Bonjour a tous,je suis débutant en asembleur, et j'ai écrit un code qui sert a additionner le chiffre 1 jusqu'à 999999 fois (mon code ne sert à rien j Erreur assembleur [ par electro2444 ] Bonsoir à tous je débute sur ce langage et je suis actuellement un tutorial dans lequel je dois compiler un exemple donnant une petite boite de dialo aide pour code [ par marooh ] Bonjour, j'ai un code assembleur qui permet de trouver le maximum d'un tableau.En le compilant, la premiere phase passe avec succès mais en créant l Program received signal SIGFPE,Arithmetic exception. [ par petitete ] Bonjour!! J'aimerais solliciter votre aide pour me débloquer. Je dois écrire un programme en nasm pour connaître le nombre d'éléments pairs et impairs # Export Table - Kernel32.dll - GetProcessAddress # [ par joanna ] Voici le code qui devrait récupérer l'adresse de la fonction "GetProcessAddress" connaissant l'ImageBase du module "kernel32.dll".Malheureusement à la # Export Table --- Kernell32.dll --- GetProcAddress # [ par joanna ] Voici le code qui devrait récupérer l'adresse de la fonction "GetProcessAddress" connaissant l'ImageBase du module "kernel32.dll".Malheureusement à la Différences ??? [ par Arecibo ] Voila je debute en assembleur et j'aimerais savoir quelles sont les différences entre :-> mov eax, ebx et mov eax, [ebx]-> mov esi, eax et mov [esi], Delphi (6) + ASM en ligne ... Problème !!! [ par Robbby ] Voici un problème concernant un programme tres simple utilisant l'Assembleur en ligne sousDelphi 6.Dans l'exemple n°1, "gogo" et "toto" sont incrément Parcours tableau de HWND [ par AlexMAN ] Bonjour, Voila mon pb : Je declare un tableau de HWND comme suit :hwndCmd HWND 10 dup (?)Ensuite, je veux créer 10 boutons et stocker leur handle ds c


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,011 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales