Forum: Mikrocontroller und Digitale Elektronik Assembly Instruction


von Mueller B. (frankyfarell)


Lesenswert?

Hello,

I have some problem in a assembly language program. May some one help me 
with some direction how jump to somewhere inside the block assembly 
code?
I just want to JUMP somewher inside Code using Instruction "JMPI". 
syntax: JMPI cc, segment_Adresse (where to go). I use to get the current 
address and add the number of Instruction after jump instruction to 
Reach There (request Position) but how I don't know. I'm Using 
XC164-16for Infineon

Thanks!

Bitte ich brauche hilfe in diesem Bereich ziel ist die aktuelle position 
addresse zu ermitteln und daher die gewünschte position rechnen. aber 
wie? keine idée
Danke!
von Gunnar (Gast)


Lesenswert?

Bei x86 lässt sich die "aktuelle position adresse" ermitteln, indem man 
einen call durchführt und an der Zieladresse des calls die 
Rücksprungadresse vom Stack holt.
von Mueller B. (frankyfarell)


Lesenswert?

Vielen dank Gunnar,

hast du vielleicht konkrete bsp dafür z.b meine code sieht ungefähr so 
aus:

       mov     r2,#xxxxH    ; mit  aktuelle adresse laden ( wo er hin 
soll)
start:
       jmpi   cc_uc, [r2]   ; cc_uc: unconditional ([r2] ist die 
addresse)
       jmpr   cc_uc  start
Passed:
       bset  r1.1     ; der programm soll hier hin (aber wie erkennt er 
das?)
       RET
von Günnar (Gast)


Lesenswert?

für x86:

call Delta:
Delta:
pop eax

Nun enthält eax die Adresse der Sprungmarke Delta.

Gehe ich richtig in der Annahme dass du Assembler-Code suchst, um die 
aktuelle Adresse (IP, Instruction Pointer) zu erhalten? Oder habe ich 
dich falsch verstanden? ...theoretisch kann ich auch englisch ;)
von Mueller B. (frankyfarell)


Lesenswert?

Vielen Dank Günnar, du hast es richtig verstanden, ein label setzen und 
die adresse der laben in ein bestimmte register reinladen(fertig).
 label:
 mov r1, #label  ; gesucht adresse
....
....
von Gunnel (Gast)


Lesenswert?

Achtung, da gibt es einen Unterschied:
Deine Version wird vom Linker statisch übersetzt, d.h. die Adresse des 
Labels "Label" wird fest einprogrammiert. Nach dem Compilen entsteht bei 
dir eine einzelne Instruktion "mov r1, IMMEDIATE32". Damit ist die 
compilte Version von dir adress-gebunden.
Mein Beispiel ergibt nach dem Compilen zwei von der Adresse unabhängige 
Instruktionen, die überall funktionieren.
Abgesehen davon dass wir über Äpfel (x86) und Birnen (Infineon) reden...

Grüße
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.