Jump & label ( undefined symbol )

Pour discuter de l'assembleur
G-Rom
Messages : 3627
Inscription : dim. 10/janv./2010 5:29

Jump & label ( undefined symbol )

Message 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
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Jump & label ( undefined symbol )

Message 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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Jump & label ( undefined symbol )

Message 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
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Jump & label ( undefined symbol )

Message par djes »

Tu dois avoir un truc qui change la casse des variables.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Jump & label ( undefined symbol )

Message 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:
G-Rom
Messages : 3627
Inscription : dim. 10/janv./2010 5:29

Re: Jump & label ( undefined symbol )

Message par G-Rom »

Merci Djes !
G-Rom
Messages : 3627
Inscription : dim. 10/janv./2010 5:29

Re: Jump & label ( undefined symbol )

Message 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 ?
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Jump & label ( undefined symbol )

Message par djes »

En RAM.
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Jump & label ( undefined symbol )

Message 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$)  
Répondre