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
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. )
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.
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
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
???
Kunnis schrieb:> ist meine Behauptung korrekt?
Es gibt zwei Auto-Arten:
Mercedes (Lenkrad links) und Bentley (Lenkrad rechts).
Ist diese Behauptung korrekt?
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?
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?
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
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
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
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.
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!!!
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.
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
:)
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.
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
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.
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.
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)...
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.
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.
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.
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.
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 :-)
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).
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???
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]).
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.
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...
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