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 ???
Hallo Pako, genau das meine ich: move quelle, ziel mov ziel,quelle ist meine Behauptung korrekt? Danke!
Kunnis schrieb: > ist meine Behauptung korrekt? Es gibt zwei Auto-Arten: Mercedes (Lenkrad links) und Bentley (Lenkrad rechts). Ist diese Behauptung korrekt?
Und dann gibts allerdings noch welche, die ein Lenkrad für Linkskurven und ein davon getrenntes Lenkrad für Rechtskurven haben.
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
Mini Float schrieb: > (warum wusste ich nur, dass der Thread in diese Richtung geht?). Bei so einer Frage?
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]).
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.