Forum: Compiler & IDEs ARM thumb2 - add r, pc, #imm


von Vincent H. (vinci)


Angehängte Dateien:

Lesenswert?

Grüß euch

Mir ist nach ziemlich mühseeliger Suche aufgefallen dass im thumb2 
instruction set ein "add immediate" zum Program Pounter vom aktuellen 
Alignment des selbigen abhängig ist.

Konkret geht es um das encoding T4. Ein Bild aus dem Architecture Manual 
hab ich angehängt.
1
    nop
2
    addw r6, pc, #6 @ pc = 0x8001a6e, r6 = 0x8001a76, pc-r6 = 0x8
3
    nop
4
    addw r6, pc, #6 @ pc = 0x8001a74, r6 = 0x8001a7e, pc-r6 = 0xA

Mach ich hier einen Blödsinn und der Befehl ist eigentlich 
"UNPREDICTABLE"? Wenn nein, woher stammt dieses komische Verhalten?

: Bearbeitet durch User
von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

In deinem Screenshot steht doch sogar "if Rn == '1111' then SEE ADR;". 
Da PC=r15 ist, musst du dir also "ADR" ansehen. Und da steht:

result = if add then (Align(PC,4) + imm32) else (Align(PC,4) - imm32);

Man beachte das "Align"! Wenn du es mit "ADR" und einem Label machst 
sollte der Assembler es automatisch richtig machen:
1
adr r6, foo
2
3
4
foo: ...

von Vincent H. (vinci)


Lesenswert?

Kannst du mir bitte sagen wo genau das steht? Im .pdf gibts 
sinnvollerweise keine Links auf diesen Pseudo-Code und nach "ADR" 
suchen...

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Vincent H. schrieb:
> Kannst du mir bitte sagen wo genau das steht?

Auf S. A7-199. Das Kapitel A7.7 hat für jede Instruktion ein 
Unterkapitel, und da gibt es auch eines namens "A7.7.7 ADR", und auf 
dessen zweiter Seite steht der Pseudocode.

von Vincent H. (vinci)


Lesenswert?

Achso damit ist tatsächlich der Befehl gemeint und kein Pseudo-Code...
Danke!

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.