Forum: Compiler & IDEs ARM7 Assembler LDRB


von Rob (Gast)


Lesenswert?

Hallo,

ich versuche hier gerade wenige Zeilen Assemblercode zu verstehen.
Dazu habe ich ein paar Fragen.

Kann mir jemand den Unterschied zwischen LDR und LDRB auf deutsch 
erklären?

Und soweit ich weiß, ist das Register IP (Instruction Pointer) 
eigentlich gleich dem PC (Program Counter) oder?

Nun verstehe ich nicht warum in einem Codeblock mal ip und zwei Zeilen 
weiter pc verwendet wird, gibt es da doch einen Unterschied?

Ich habe testhalber mal im Keil-Debugger versucht nachzuvollziehen was 
der folgene Befehl macht:

ldrb ip, [r0, #5]

aber so ganz ist mir das nicht klar geworden, hätte der Prozessor an 
dieser Stelle nicht irgendwohin springen müssen? Immerhin wird doch ein 
Wert im Instruction Pointer verändert??? Im Keil-Debugger springt er 
jedoch nur zum Befehl in der nächsten Zeile.
Kann mir einer erklären was dieser Befehl macht?

besten Dank

von (prx) A. K. (prx)


Lesenswert?

Rob schrieb:

> Kann mir jemand den Unterschied zwischen LDR und LDRB auf deutsch
> erklären?

Noch nicht ins ARM ARM, das ARM Reference Manual reingesehen?

LDR läd ein 32-Bit Wort.
LDRB läd ein 8-Bit Byte, mit 0 auf 32-Bit erweitert,

> Und soweit ich weiß, ist das Register IP (Instruction Pointer)
> eigentlich gleich dem PC (Program Counter) oder?

Böse Falle. Auf manchen Plattformen ja. Nicht bei ARM. Da ist IP ein 
Synonym für R12, vorgesehen für die Rolle "Intra-Procedure-call scratch 
register". Also ein völlig harmloses Register für temporäre Daten aller 
Art.

von Rob (Gast)


Lesenswert?

Ahhh, vielen Dank! So macht das Ganze wieder einen Sinn.

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.