Page 1 sur 1

Jump & label ( undefined symbol )

Publié : ven. 25/juin/2010 14:09
par G-Rom
j'essaye toujours de comprendre l'asm , mais là , moi pas comprendre l'erreur.
en gros , il ne trouve pas le label...

Code : Tout sélectionner

A=0
B=0


MOV [v_A], $2D
MOV [v_B], $40
MOV EBX,v_A
CMP EBX,v_B
JNZ MyLabel
MOV EBX,v_A
INC EBX
MOV [v_A],ebx
MyLabel:

Debug A
Debug B

Re: Jump & label ( undefined symbol )

Publié : ven. 25/juin/2010 14:36
par djes
Comme ça ça ira mieux

Code : Tout sélectionner

A=0
B=0
calldebugger

MOV [v_A], $0000002D
MOV [v_B], $00000040
MOV EBX,v_A
CMP EBX,v_B
JE MyLabel
MOV EBX,dword[v_A]
INC EBX
MOV dword [v_A],ebx
!MyLabel:

Debug A
Debug B

Re: Jump & label ( undefined symbol )

Publié : ven. 25/juin/2010 14:52
par Backup
j'ai meme pas pu commencer a regarder , chez moi ça refuse de se lancer !!



avec des le depart une erreur "undifined symbole V_A" :roll:

(assembleur activé)

meme ta correction Djes

Re: Jump & label ( undefined symbol )

Publié : ven. 25/juin/2010 15:32
par djes
Tu dois avoir un truc qui change la casse des variables.

Re: Jump & label ( undefined symbol )

Publié : ven. 25/juin/2010 16:42
par Backup
djes a écrit :Tu dois avoir un truc qui change la casse des variables.
arg !! effectivement dans Japbe !! "Autre option" / changement de casse automatique! :roll:

je me demande a quoi peut servir cette option dans notre éditeur , si celle ci limite l'assembleur :roll:

Re: Jump & label ( undefined symbol )

Publié : ven. 25/juin/2010 17:20
par G-Rom
Merci Djes !

Re: Jump & label ( undefined symbol )

Publié : ven. 25/juin/2010 17:29
par G-Rom
Autre question Djes ,
l'instruction PUSH , pousse un registre au sommet d'une pile LIFO , jusque là pas de problème
on récupère le sommet de la pile avec un POP , un coup de MOV est on dégage le resultat dans une variable pb.

Last.i=0

MOV EBX ,1 : PUSH EBX
MOV EBX ,2 : PUSH EBX
MOV EBX ,3 : PUSH EBX
MOV EBX ,4 : PUSH EBX

POP EBX : MOV DWORD[v_Last] , EBX : Debug Last
POP EBX : MOV DWORD[v_Last] , EBX : Debug Last
POP EBX : MOV DWORD[v_Last] , EBX : Debug Last
POP EBX : MOV DWORD[v_Last] , EBX : Debug Last
Ou est physiquement la pile ? la ram ? une unité dans le processeur ?

Re: Jump & label ( undefined symbol )

Publié : ven. 25/juin/2010 18:18
par djes
En RAM.

Re: Jump & label ( undefined symbol )

Publié : dim. 26/sept./2010 21:30
par Ollivier
La pile est pointée par le registre ESP et est "à l'envers" dans la mémoire... C'est le seul moyen de retrouver les infos stockées dedans...

Aussi l'instruction...

Code : Tout sélectionner

PopZob
...s'écrit comme ça:

Code : Tout sélectionner

ADD ESP, 4


Sinon, dans un listing de code, je trouve qu'il s'agit d'une bonne technique de considérer l'analogie entre les manips de la pile (entre autres) et les alinéas (entre autres, aussi). (Pas de manière purement stricte, sinon c'est trop lourd!)

Après... Chacun voit comme il le sent Midi à sa porte ! :D

Code : Tout sélectionner

;{ Une allure plus "chorégraphique" }

      EnableExplicit
      DisableDebugger
      EnableASM
      Define.S Text$

      Macro Qu()
            "
      EndMacro

      Macro Ack(VariableName)
            Text$ + Qu()VariableName = Qu() + Str(VariableName) + Chr(10)
      EndMacro
;}

Define.I V0, V1, V2, V3

; >>>>>> Ceci... <<<<<<


PUSH 1
      PUSH 2
            PUSH 3
                  PUSH 4

                  POP V0
            POP V1
      POP V2
POP V3

Ack(V0)
Ack(V1)
Ack(V2)
Ack(V3)
MessageRequester("Sortie ASM", Text$)      

; >>>>>> ...égale cela (sans EAX) <<<<<<


SUB ESP, 4
MOV EAX, 1
MOV [ESP], EAX
      SUB ESP, 4
      MOV EAX, 2
      MOV [ESP], EAX
            SUB ESP, 4
            MOV EAX, 3
            MOV [ESP], EAX
                  SUB ESP, 4
                  MOV EAX, 4
                  MOV [ESP], EAX
      
      
                  MOV EAX, [ESP]
                  MOV V0, EAX
                  ADD ESP, 4
            MOV EAX, [ESP]
            MOV V1, EAX
            ADD ESP, 4
      MOV EAX, [ESP]
      MOV V2, EAX
      ADD ESP, 4
MOV EAX, [ESP]
MOV V3, EAX
ADD ESP, 4

Ack(V0)
Ack(V1)
Ack(V2)
Ack(V3)
MessageRequester("Sortie ASM", Text$)