www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Vergleich auf ARM7 (ASM)


Autor: Peter Pippinger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo NG,

Gibts irgendwo eine tolle Beschreibung von ARM7 Assemblerbefehlen 
(AT91SAM256S). Habe vor zig Jahren mal den TASM von Borland benützt. Da 
war ein super Handbuch dabei. Ist aber leider i386. Ich kann mir 
folgendes nicht erklären:

geht:
ldr     r3, =1111111110111111111b
cmp     r2, r3

geht nicht:
cmp     r2, #1111111110111111111b

Danke!
Peter

Autor: Thomas Pototschnig (pototschnig)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"immediate values are signified by a leading # symbol."

Was macht dann =?

Mfg
Thomas Pototschnig

Autor: Peter Pippinger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, weiß nicht, was = dann macht. Auf jeden Fall stehts so bei mir im 
Quelltext und funktioniert.

Das andere Beispiel funktioniert nicht... Ich nehme die IAR Workbench 4

MfG
Peter

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
= ist immediate für ldr und co. Sonst wäre die Adresse gemeint.

Beim cmp gibt es m.W. einen Shifter-Operand (ich meine, das wären 8-bit 
+ 4-bit Rotate / Shift). Simpel gesagt kannst Du damit Deine Konstante 
nicht darstellen.

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, ich glaube, das war doch anders mit dem =. Der Assembler legt den 
Wert wohl als Konstante an und substituiert den Operanden dann durch die 
Adresse. Vielleicht kannst Du das ja im Output bzw. Disassemblat 
nachvollziehen.

Autor: Thomas Pototschnig (pototschnig)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aus dem Instructionset:
Syntax:
LDR{cond} <Rd>, =<expression>
LDR{cond} <Rd>, =<label-expression>

Description:
The LDR pseudo-instruction will generate an instruction to load the destination register
with the desired value.
The <expression> field must evaluate to a numeric constant. If the constant is an
allowable immediate expression (or the complement of one), a MOV or MVN instruction
will be generated. If it is not, the assembler will place the value in a memory location,
and generate a PC-relative load instruction to load it from that memory location.
If a label is specified, the assembler will generate a local memory location to store the
label address, and include the appropriate linker directives so that the correct address
will be in that location after linking.

Den Unterschied im Ergebnis versteh ich dann aber auch nicht ...

Mfg
Thomas Pototschnig

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Thomas:

Das Problem ist, wie beschrieben, dass der CMP die Konstante nicht als 
immediate nehmen kann (Shifter Operand). Dummerweise habe ich die Doku 
gerade nicht parat und kann den Teil dort nicht rauskopieren.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn dich der Befehlssatz genau interessiert, dann suche auf der ARM 
Seite nach dem ARM architecture reference manual. Breite Konstanten 
innerhalb des Befehls werden von keinen ARM Befehlen unterstützt, dafür 
sind die festen 32Bit Befehlsbreite eben zu kurz.

Autor: Thomas Pototschnig (pototschnig)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Matthias wrote:
> Wenn dich der Befehlssatz genau interessiert, dann suche auf der ARM
> Seite nach dem ARM architecture reference manual. Breite Konstanten
> innerhalb des Befehls werden von keinen ARM Befehlen unterstützt, dafür
> sind die festen 32Bit Befehlsbreite eben zu kurz.

Deshalb gibts dann den LDR-Pseudo-Opcode, der vorgaukelt man könnte 
32Bit Immediates verwenden?

Tricky :-)

Mfg
Thomas Pototschnig

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Deshalb gibts dann den LDR-Pseudo-Opcode, der vorgaukelt man könnte
> 32Bit Immediates verwenden?

genau so ist das.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.