ARM7: ldrb r5, [r5], #1 unvorhersehbar?

#2018576
Lesenswert?

Ja, klingt logisch

Du willst das Ergebnis des LDRB wieder nach R5 schreiben. Gleichzeitig 
erfolgt ein Post-Increment des Adresspointers (R5) um 1.

Soll nun R5 mit dem Byte geladen werden, oder mit der neuen alten 
Adresse + 1? :-)

Lösung: unterschiedliche Register nutzen, oder das +1 weglassen :)
OP #2019626
Lesenswert?

Hallo Torsten,

Danke für Deine Antwort.

> Du willst das Ergebnis des LDRB wieder nach R5 schreiben. Gleichzeitig
> erfolgt ein Post-Increment des Adresspointers (R5) um 1.

hmm, ja, genau. Post-Increment. Hätte ich jetzt als Increment NACH der 
Aktion gedacht. Hab jetzt sowieso zwangsweise ein anderes Zielregister 
nehmen müssen.

Ist das jetzt nur ne Sache vom Assembler, oder wüsste der AT91SAM7S256 
wirklich nicht, was er da machen soll? Wo kann man das genau lesen, dass 
man das so nicht machen darf?
#2019715
Lesenswert?

Peter Pippinger schrieb:

> Ist das jetzt nur ne Sache vom Assembler, oder wüsste der AT91SAM7S256
> wirklich nicht, was er da machen soll?

Der weiss schon was er tun soll, nämlich das was sich als Nebeneffekt 
der internen Mechanik implizit ergibt. Aber erstens kann sich das von 
einem Core zum nächsten ändern, zweitens können Umstände wie 
irgendwelche Exeptions, Codierungsoptionen im Befehl oder 
Registerverwendung im Folgebefehl darauf Einfluss haben.

Im Klartext: Du darfst das nicht machen. Punkt.

> Wo kann man das genau lesen, dass
> man das so nicht machen darf?

In der offiziellen Befehlssatzbeschreibung, dem ARM Architecture 
Reference Manual. Wahrscheinlich auch in der Online-Doku auf arm.com.
#2026649
Lesenswert?

Nein?

"Rn must not be the same as Rd, if the instruction:
- is pre-indexed with writeback (the ! suffix)
- is post-indexed   [<-- A.K.]
- uses the T suffix."

Die richte Adresse dafür ist übrigens nicht die von dir angegebene 
Seite, sondern das "ARMv5 Architecture Reference Manual" (PDF):

"Operand restrictions
If <addressing_mode> specifies base register write-back, and the same 
register is specified for <Rd> and <Rn>, the results are UNPREDICTABLE."

und

"UNPREDICTABLE: Means the result of an instruction cannot be relied 
upon. UNPREDICTABLE instructions or results must not represent security 
holes. UNPREDICTABLE instructions must not halt or hang the processor, 
or any parts of the system."

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren