Forum: Mikrocontroller und Digitale Elektronik Assembler Befehlart


von Kunnis (Gast)


Lesenswert?

Hallo,

ich hoffe einer von euch kann bei der Frage nach Assembler Befehlart 
helfen.
Und zwar wenn ich mich noch richtig erinnern kann gibts es bei Assembler 
zwei Befehlarten:

- eine Art ist Motorola
- und die andere ist Intel

ist es so korrekt? wenn nicht kann mir einer vielleicht wieder auf die 
Sprünge helfen und mich korrigieren?

Danke im Voraus!

Gruss Kunnis

von Peter II (Gast)


Lesenswert?

was du meinst mit Intel und Motorola ist die ByteOrder

http://de.wikipedia.org/wiki/Byte-Reihenfolge

das ganze hat aber recht wenig mit den Assembler zu tun.

Assembler befehle gibt es sehr viele unterschiedliche. (ARM, x86, 
Itanium, 8068, C64 usw. )

von mikes (Gast)


Lesenswert?

Richtig, und 1000 andere!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Nein. Mit Assembler hat das direkt nichts zu tun.

Es gibt zwei unterschiedliche Arten, Werte im Speicher abzulegen, die 
mehr als ein Byte Speicherplatz benötigen.

Betrachten wir das am Beispiel des Wertes 0x1234

Die "big-endian"-Variante speichert das höherwertige Byte zuerst, also

Adresse | Wert
--------+----
  0     | 0x12
  1     | 0x34

Die "little-endian"-Variante macht das genau andersherum:

Adresse | Wert
--------+----
  0     | 0x34
  1     | 0x12

Intel verwendet üblicherweise "little-endian", währenddem Motorola 
üblicherweise "big-endian" verwendet.

von spess53 (Gast)


Lesenswert?

Hi

>ich hoffe einer von euch kann bei der Frage nach Assembler Befehlart
>helfen.

Was meinst du mit 'Assembler Befehlart'?

>- eine Art ist Motorola
>- und die andere ist Intel

Wenn ich diese Zusammenstellung lese fällt mir eher das Format von 
Hex-Files ein:

- Intel Hex Format
- Motorola S-records

MfG Spess

von Pako (Gast)


Lesenswert?

Kunnis schrieb:
> Und zwar wenn ich mich noch richtig erinnern kann gibts es bei Assembler
> zwei Befehlarten:
>
> - eine Art ist Motorola
> - und die andere ist Intel

Oder auch

move quelle, ziel
mov  ziel,quelle

???

von Kunnis (Gast)


Lesenswert?

Hallo Pako,


genau das meine ich:

move quelle, ziel
mov  ziel,quelle

ist meine Behauptung korrekt?

Danke!

von Pako (Gast)


Lesenswert?

Kunnis schrieb:
> ist meine Behauptung korrekt?

Es gibt zwei Auto-Arten:
Mercedes (Lenkrad links) und Bentley (Lenkrad rechts).
Ist diese Behauptung korrekt?

von (prx) A. K. (prx)


Lesenswert?

Und dann gibts allerdings noch welche, die ein Lenkrad für Linkskurven 
und ein davon getrenntes Lenkrad für Rechtskurven haben.

von Kunnis (Gast)


Lesenswert?

Hallo,

ja jetzt müsst ihr aber nicht übertreiben.

Um auf die Befehle zurück zu kommen.
Eine von diesem Arten wurde bei Motorolla verwendet und andere bei XXX.
Stimmt es?

von Pako (Gast)


Lesenswert?

A. K. schrieb:
> Und dann gibts allerdings noch welche, die ein Lenkrad für Linkskurven
> und ein davon getrenntes Lenkrad für Rechtskurven haben.

Das waren die mit dem Steuergerät mit Motorintel MC68186 mit 
Medium-Endian, oder?

von Achim M. (minifloat)


Lesenswert?

A. K. schrieb:
> die ein Lenkrad für Linkskurven
> und ein davon getrenntes Lenkrad für Rechtskurven haben.

Ich hab nen Panzer, der hat zwei Stangen(warum wusste ich nur, dass der 
Thread in diese Richtung geht?). mfg mf

von (prx) A. K. (prx)


Lesenswert?

Mini Float schrieb:
> (warum wusste ich nur, dass der Thread in diese Richtung geht?).

Bei so einer Frage?

von Achim M. (minifloat)


Lesenswert?

Pako schrieb:
> Das waren die mit dem Steuergerät mit Motorintel MC68186 mit
> Medium-Endian,

Neulich im Steakhouse:
Wie hätten sie denn gern ihre Endianness,
blutig, big, medium oder little? x'D

von mar IO (Gast)


Lesenswert?

ZITAT:

Eine Assemblersprache (oft abgekürzt als ASM bzw. asm) ist eine 
spezielle Programmiersprache, welche die Maschinensprache einer 
spezifischen Prozessorarchitektur in einer für den Menschen lesbareren 
Form repräsentiert. Jede Computerarchitektur hat folglich ihre eigene 
Assemblersprache.

Quelle: http://de.wikipedia.org/wiki/Assemblersprache


Assemblersprachen: viele
Byteanordnung: zwei
Application binary interface (ABI): ein paar

von (prx) A. K. (prx)


Lesenswert?

mar IO schrieb:
> Byteanordnung: zwei
eher zwei+

von Karl H. (kbuchegg)


Lesenswert?

Kunnis schrieb:
> Hallo,
>
> ja jetzt müsst ihr aber nicht übertreiben.

Doch. Muss man.
Denn das ist eine Frage der Schreibweise.
Den eigentlichen Prozessor interessiert das nicht die Bohne. Der hat 
seine Hex-Codes, die Befehle codieren. Und in diesen geben bestimmte 
Bits an, was als Quelle und was als Ziel fungieren soll.

Ob du sagst

  Die Fahrzeit von Wien nach Salzburg beträgt 2 Stunden

oder

  Nach Salzburg braucht man von Wien aus 2 Stunden

ist gehupft wie gesprungen. Die Information ist in beiden Fällen 
dieselbe. Egal ob im Satz jetzt Wien oder Salzburg als erstes genannt 
wird.

von Achim M. (minifloat)


Lesenswert?

Los, fangen wir an die 16bit-Häppchen einer 32bit-Zahl wie Intel zu 
speichern, die 8bit-Teile der 16bit-Happen dann wie Motorola.
Der Kreativität und dem Chaos sind keine Grenzen gesetzt. Ich darf doch 
wohl meine Zahl speichern wie ICH will!!!

von Karl H. (kbuchegg)


Lesenswert?

Mini Float schrieb:
> Los, fangen wir an die 16bit-Häppchen einer 32bit-Zahl wie Intel zu
> speichern, die 8bit-Teile der 16bit-Happen dann wie Motorola.
> Der Kreativität und dem Chaos sind keine Grenzen gesetzt. Ich darf doch
> wohl meine Zahl speichern wie ICH will!!!

Du darfst sogar die Bits innerhalb eines Bytes verdrehen wie du willst. 
:-)
Oder nibbelübergreifend durchmischen.

von Sam P. (Gast)


Lesenswert?

Diese Behauptung könnte auch dem Umstand entspringen, dass es für 
x86-Prozessoren zwei populäre Assembler-Syntaxen (Was ist eigentlich die 
korrekte Mehrzahl von "Syntax"? Syntaktae?) gibt, die aufgrund der 
Firma, die zuerst einen Assembler mit der Syntax entwarf, benannt sind: 
Intel und AT&T.

Die unterscheiden sich wie von Pako beschrieben in der Reihenfolge der 
Operanden (und ein paar anderen Details). Intel-Syntax ist in der 
DOS/Windows-Welt populär, während der GCC bei den meisten Prozessoren 
die AT&T-Syntax verwendet.

Dass es "nur" zwei gibt, liegt allerdings daran, dass jeder, der einen 
Assembler schreibt, sich an etwas orientiert, was es schon gibt. Es 
hindert dich niemand daran, einen Assembler zu schreiben, bei denen

MOV EAX, EBX

zu folgendem wird:

SCHWEINESCHNITZEL! LESNIEREN? GRÜNKOHL.

(Wobei "schweineschnitzel" und "grünkohl" Registernamen sind, und 
"lesnieren" der Opcode. Lesnieren ist übrigens gefährlich, macht das nie 
:)

von Pako (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Doch. Muss man.
> Denn das ist eine Frage der Schreibweise.
> Den eigentlichen Prozessor interessiert das nicht die Bohne. Der hat
> seine Hex-Codes, die Befehle codieren. Und in diesen geben bestimmte
> Bits an, was als Quelle und was als Ziel fungieren soll.

Ein Prozessor-Hersteller gibt umfangreiche Manuals heraus, in denen die 
Assembler-Syntax beschrieben ist, z.b. beim AVR die "Instruction Set 
Nomenclature" (doc0856.pdf).
Allerdings kann natürlich jeder Schelm einen Compiler programmieren, der 
sich nicht daran hält (was natürlich recht sinnlos wäre).

Allerdings kann man das wohl kaum an Motorola und Intel festzurren.

von Pako (Gast)


Lesenswert?

Sam P. schrieb:
> Dass es "nur" zwei gibt, liegt allerdings daran, dass jeder, der einen
> Assembler schreibt, sich an etwas orientiert, was es schon gibt. Es
> hindert dich niemand daran, einen Assembler zu schreiben, bei denen
>
> MOV EAX, EBX

Guter Einwand!
Es gibt ja auch noch die invers-polnische Notation:

R0 R1 MOV

von Karl H. (kbuchegg)


Lesenswert?

Pako schrieb:
> Karl Heinz Buchegger schrieb:
>> Doch. Muss man.
>> Denn das ist eine Frage der Schreibweise.
>> Den eigentlichen Prozessor interessiert das nicht die Bohne. Der hat
>> seine Hex-Codes, die Befehle codieren. Und in diesen geben bestimmte
>> Bits an, was als Quelle und was als Ziel fungieren soll.
>
> Ein Prozessor-Hersteller gibt umfangreiche Manuals heraus, in denen die
> Assembler-Syntax beschrieben ist, z.b. beim AVR die "Instruction Set
> Nomenclature" (doc0856.pdf).

Die sind aber nicht Gesetz.

 Ob die eine Firma jetzt

  LD  A, B

und die andere

  MOV  A, B

und eine weitere

  MOV  B, A

für ihren Assembler benutzen will oder nicht, kann jeder für sich 
entscheiden wie er will. Die nächsten schreiben

  A <- B
oder
  B -> A

Genauso: BRANCH und JUMP bzw. noch viele weitere Dinge, die immer wieder 
unterschiedlich heißen aber im Grunde das gleiche mit andern Worten 
sind.

von (prx) A. K. (prx)


Lesenswert?

Mini Float schrieb:
> Der Kreativität und dem Chaos sind keine Grenzen gesetzt. Ich darf doch
> wohl meine Zahl speichern wie ICH will!!!

Fand DEC auch. Die PDP-11 hat es exakt umgekehrt gemacht. Bytes 
little-endian, Worte big-endian.

von Peter II (Gast)


Lesenswert?

A. K. schrieb:
> Bytes  little-endian
wie kann ein byte eine byteorder haben?

von Pako (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
>> Ein Prozessor-Hersteller gibt umfangreiche Manuals heraus, in denen die
>> Assembler-Syntax beschrieben ist, z.b. beim AVR die "Instruction Set
>> Nomenclature" (doc0856.pdf).
>
> Die sind aber nicht Gesetz.

Das ist natürlich richtig.
Ich hätte nur vermutet, daß sich keiner traut, es anders zu machen, als 
von einem Motorola oder Intel vorgegeben.


> Genauso: BRANCH und JUMP bzw. noch viele weitere Dinge, die immer wieder
> unterschiedlich heißen aber im Grunde das gleiche sind.

Also ich hatte vom 68000er noch drinn, daß "bra" schneller geht als 
"jump", weil es ein relativer Sprung ist (kürzerer Befehl, kürzere 
Reichweite)...

von (prx) A. K. (prx)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Du darfst sogar die Bits innerhalb eines Bytes verdrehen wie du willst.

Und das auch noch unabhängig von der Byteorder, obwohl da bei genauerem 
Nachdenken eigentlich logischer Zusammenhang besteht. Und wenn du das 
mal falsch gemacht hast, dann reparierst du das eben bei nächsten Update 
und bringst ein Kiste, die bei den alten Bitbefehlen die Bits von rechts 
nach links und bei neuen Bitbefehlen von links nach rechts nummieriert.

von (prx) A. K. (prx)


Lesenswert?

Peter II schrieb:
> A. K. schrieb:
>> Bytes  little-endian
> wie kann ein byte eine byteorder haben?

Also gut: Bytes in 16-Bit Worten little-endian, Worte in 32-Bit 
Langworten big-endian.

von Karl H. (kbuchegg)


Lesenswert?

Pako schrieb:
> Karl Heinz Buchegger schrieb:
>>> Ein Prozessor-Hersteller gibt umfangreiche Manuals heraus, in denen die
>>> Assembler-Syntax beschrieben ist, z.b. beim AVR die "Instruction Set
>>> Nomenclature" (doc0856.pdf).
>>
>> Die sind aber nicht Gesetz.
>
> Das ist natürlich richtig.
> Ich hätte nur vermutet, daß sich keiner traut, es anders zu machen, als
> von einem Motorola oder Intel vorgegeben.

Mir fällt jetzt der Name nicht mehr ein.
Für den Z80 gab es einen Assembler, bei dem alles (und ich meine alles) 
komplett anders aussah als bei Zilog.

Der Z80 hat eine Befehlsobermenge der 8080 Befehle. Brauchst aber nicht 
glauben, dass Zilog dieselben Mnemonics benutzt hat, wie Intel.

>> Genauso: BRANCH und JUMP bzw. noch viele weitere Dinge, die immer wieder
>> unterschiedlich heißen aber im Grunde das gleiche sind.
>
> Also ich hatte vom 68000er noch drinn, daß "bra" schneller geht als
> "jump", weil es ein relativer Sprung ist (kürzerer Befehl, kürzere
> Reichweite)...

Kann mich nicht erinnern, ich denke aber das ist falsch. Branch und Jump 
waren exakt identisch. Motorola hat halt die Bezeichnung Branch 
bevorzugt, während Intel das Ganze Jump genannt hat.

von (prx) A. K. (prx)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Der Z80 hat eine Befehlsobermenge der 8080 Befehle. Brauchst aber nicht
> glauben, dass Zilog dieselben Mnemonics benutzt hat, wie Intel.

War bei NEC V20/30 auch so. Exakte Obermenge von 8088/86, aber kein 
Befehl hiess so wie bei Intel. Der Grund dürften Befürchtungen wegen 
Copyright oder sowas sein.

> Kann mich nicht erinnern, ich denke aber das ist falsch. Branch und Jump
> waren exakt identisch. Motorola hat halt die Bezeichnung Branch
> bevorzugt, während Intel das Ganze Jump genannt hat.

Nope. Motorola hatte beides. Branches PC-relativ, Jumps nicht.

Das Mnemonic "S" für "Springe" gabs aber auch schon, und zwar ganz 
offiziell.

von Karl H. (kbuchegg)


Lesenswert?

Karl Heinz Buchegger schrieb:

> Mir fällt jetzt der Name nicht mehr ein.
> Für den Z80 gab es einen Assembler, bei dem alles (und ich meine alles)
> komplett anders aussah als bei Zilog.

Hach ich komm nicht mehr auf den Namen. Er liegt mit auf der Zunge aber 
will nicht raus.

Das sah dann so aus

   A := B
oder
   A := [HL]

(Das ist jetzt wieder was, an dem ich die halbe Nacht grübeln werde :-)

von (prx) A. K. (prx)


Lesenswert?

Sowas in der Art hatte ich mir mal gestrickt. Eine Art Minimal-Compiler, 
der praktisch nur aus lex/yacc bestand. Im Lowlevel konnte man dann
  B = *HL;
  HL := DE;
  if (A == 2) {
     ....
  }
schreiben, Bisschen höher gings aber auch noch (Variablen, Ausdrücke, 
Switch-Statement).

von Pako (Gast)


Lesenswert?

A. K. schrieb:
>> Kann mich nicht erinnern, ich denke aber das ist falsch. Branch und Jump
>> waren exakt identisch. Motorola hat halt die Bezeichnung Branch
>> bevorzugt, während Intel das Ganze Jump genannt hat.
>
> Nope. Motorola hatte beides. Branches PC-relativ, Jumps nicht.

Ich hab viele Jahre nur 68000 gekannt. Als ich dann zum ersten mal mit 
anderem in Berühung kam, war das ein ziemlicher Kulturschock:
- "MOV Ziel,Quelle" anstatt dem korrekten "move Quelle,Ziel"
- Little Endian anstatt dem korrekten Big-Endian
- keine Differenzierung von Branch und Jump
- und was ist ein Accu???

von (prx) A. K. (prx)


Lesenswert?

Pako schrieb:
> - Little Endian anstatt dem korrekten Big-Endian

Wobei eben bei Motorola die vorhin erwähnten Esel sassen, die anfangs 
zwar die Bytes von links nach rechts aber die Bits von rechts nach links 
nummerierten. Und bei den später hinzu kommenden Bitfeldern prompt in 
der Tinte sassen.

Andere waren konsequenter und nummerierten auch die Bits von links nach 
rechts. Das kann freilich auch für einen Kulturschock gut sein 
(IBM-360/370/..., Power[PC], TI 990[0]).

von (prx) A. K. (prx)


Lesenswert?

Pako schrieb:
> Es gibt ja auch noch die invers-polnische Notation:
> R0 R1 MOV

Klar. So sieht das aus, wenn man in FORTH auf Assembler runter geht.

von Almöhi (Gast)


Lesenswert?

Peter II schrieb:
> Autor: Peter II (Gast)
>
> Datum: 05.07.2012 16:28
>
>
>
>
>
>
>
> A. K. schrieb:
>
>> Bytes  little-endian
>
> wie kann ein byte eine byteorder haben?

Gut Aufgepasst Digger, darfst dir ne Schokolinse nehmen.

von Bernd (Gast)


Lesenswert?

Aber nur Eine!
Und keine rosane, die will ich!

von Achim M. (minifloat)


Lesenswert?


von Pako (Gast)


Lesenswert?

A. K. schrieb:
> Wobei eben bei Motorola die vorhin erwähnten Esel sassen, die anfangs
> zwar die Bytes von links nach rechts aber die Bits von rechts nach links
> nummerierten. Und bei den später hinzu kommenden Bitfeldern prompt in
> der Tinte sassen.

Und ich hatte immer gedacht, daß der 68000er viel besser wäre als der 
x86.
Aber nach der 80186-Diskussion und diesem Thread muß ich das wohl 
nochmal überdenken...

von Reinhard Kern (Gast)


Lesenswert?

Pako schrieb:
> Aber nach der 80186-Diskussion und diesem Thread muß ich das wohl
> nochmal überdenken...

Bist du damit nicht ein paar Jahrzehnte zu spät dran?

Gruss Reinhard

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.