begin process at 2010 03 14 17:19:15
  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 # 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 Besion info importante assembleur/desassembleur [ par PatSW ] Bonjour,je suis présentement en train de modifier un fichier execute que jai décompiler avec W32Dasm et toute mes modifications jusqu'a présent sont p Pb registre DL [ par AlexMAN ] Bonjour, J'ai un ptit pb avec le code qui suit, au nivo du mov dl, [ecx] ://Renvoie pointeur sur fin de chaine (permet d'eviter l'utilisation de strca mon programme bloque [ par rhumsek ] slt j'ai améliore mon programme mais il provoque une erreure lorsdu calcul de la somme des entiers saisi (sommeentier)POURTANT il exécute bien les de


Nos sponsors


Appels d'offres

Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
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 : 0,671 sec (4)

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