Diskussion:Assemblersprache
Auf dieser Seite werden Abschnitte ab Überschriftenebene 2 automatisch archiviert, die seit 21 Tagen mit dem Baustein {{Erledigt|1=--~~~~}} versehen sind. Das aktuelle Archiv befindet sich unter Diskussion:Assemblersprache/Archiv/1. |
Modernes Code-Beispiel
Willkommen in der Gegenwart
Dieser Artikel beweisst mir, dass in Bezug auf Assembler die meisten (auch die Autoren hier) auf dem Stand von vor 15 Jahren stehen geblieben sind. Es ist schon etwas arm wenn man mit Beispielen hantiert, die man schon vor 20 Jahren unter MS/DOS verwendet hat und mit der heutigen Programmierung in Assembler nichts mehr zu tun hat. Als wichtigste Assembler werden noch immer MASM und TASM bezeichnet - wie vor 15 Jahren auch. Wo bleiben die Verweise auf MASM32 oder andere High-Level-Acssembler? So wie in diesen Beispielen programmiert man schon lange nicht mehr in Assembler.--84.170.109.177 13:06, 2. Mai 2010 (CEST)
- Wie sieht denn der heutige Stand aus? Wie programmiert man den heute, was ist an den Beispielen zu bemängeln? Ich wäre für Hinweise sehr dankbar, da ich mich für das Thema sehr interessiere. 92.231.47.8 08:33, 21. Jul. 2010 (CEST)
- Ich hab gerade mit Assemblerprogrammierung mit dem Handbuch des Turbo-Assemblers von Borland (5. Auflage 1989) angefangen und die Beispieltexte in dem Artikel kommen denen im Handbuch sehr nahe, TASM ≠ MASM ≠ NASM, aber seht selbst:
Hello World in TASM
.MODEL SMALL
.STACK 100h
.DATA
HW DB 'Hello World',13,10,'$'
.CODE
mov ax,@data
mov ds,ax ; DS zeigt auf das Datensegment
mov ah,09h ; DOS-Funktion Stringausgabe
mov dx,OFFSET HW ; Zeiger auf „Hello World“
int 21h ; Ausgabe „Hello World“
mov ah,4Ch ; DOS-Funktion Programmende
int 21h ; Programm beenden
END
- Wenn es jemand für sinnvoll hält, kann er/sie es zum Artikel dazufügen. --79.230.75.46 00:12, 21. Aug. 2010 (CEST)
Zeitgemäßes Hello World
Es wurde ja oben schon einmal angesprochen, dass die bisherigen Beispiele aus Büchern stammen, die mindestens 15-20 Jahre auf dem Buckel haben. Da wird zweimal der gleiche Code - einmal für TASM und einmal für MASM - abgedruckt... beide Produkte sind 20 Jahre alt und das Betriebssystem MS/DOS sogar noch älter.Hier stellt sich für mich die Frage was das soll?
Assembler ist ein schnelle Sprache und dies ist auch der wesentliche Vorteil. Dann aber mit einer Notation aus der EDV-Steinzeit zu aggieren, zeugt dann doch schon ein wenig von Unwissenheit. Wer auf einem modernen Core2Duo mit x86 Assembler angerückt kommt, der rüstet auch einen Supertanker mit einem Außenbordmotor aus.
Es ist leider auch genau dass das Dilemma: Jeder weiß hier was Assembler ist und hat die große Ahnung von der Materie - aber weder im Artikel noch in der Diskussion ist ein aktuelles Beispiel zu finden. Dann kommt naoch dazu, das auch die alten 8-Bit-CPUS sowie eine Vielzahl von anderen Rechenknechten Assemblercode haben - was ist mit denen.
War noch was...achja - so sieht ein Hello World in Assembler heute aus: (Heute bedeutet: iA32_64 unter Linux)
LC0: .string "Hello, World" ; Definition des Ausgabestrings
.globl main ; Definition der main-Funktion
.type main @function ; (wird nur für die "Vergewaltigung" des C-Compilers gebraucht)
main:
pushq %rbp ; Basepointer retten
movq %rsp,%rbp ; Stackpointer als Basepointer setzen
movl $LC0,%edi ; Referenz des Ausgabestrings laden
call puts ; Systemfunktion puts aufrufen
leave ; Systemkontext wieder herstellen für Rücksprung
ret ; und zurück zur aufrufenden Instanz
Hat irgendwie wenig Ähnlichkeit mit dem alten TASM und MASM Code für DOS...
läßt sich auf jedem 64-Bit Linux unter Vergewaltigung des C-Compiler assemblieren:
cc -s test.asm
Dadurch, dass der C-Compiler vergewaltigt wird, entsteht ein mit 5kb recht großes Binary mit gas wird es kürzer - der Aufruf aber auch nicht mehr wikipediatauglich. Thomas Merbold 14:41, 24. Nov. 2010 (CET)
Der Vollständigkeit halber noch eine weitere Version - diesmal für den Amiga auf 68k Prozessor:
SysBase equ 4
OpenLibrary equ -552
CloseLibrary equ -414
Output equ -60
Write equ -40
; --- CODE ---------------------------------------------------------------------
; Schritt 1: DOS Bibliothek öffnen
main: move.l #dosname,a1 ; Name der DOS-Bilbliothek in A1
moveq #0,d0 ; D0 löschen
move.l SysBase,a6 ; Systembasis in A6
jsr OpenLibrary(a6) ; und Library öffnen
tst.l d0 ; hat es geklappt?
beq ende ; Nein --> und Tschüss
move.l d0,DOSBase ; ansonsten Zeiger retten
; Schritt 2: String ausgeben
move.l DOSBase,a6 ; Zeiger aus DOS-Lib in A6 laden
jsr Output(a6) ; Dateiident für Ausgabe holen (aktuelles CLI-Fenster)
move.l d0,d1 ; und in D1 umkopieren
move.l #string,d2 ; Referenz auf den String in D2
moveq #12,d3 ; Länge in D3
move.l DOSBase,a6 ; DOS-Basis in A6
jsr Write(a6) ; und String ausgeben
move.l DOSBase,a1 ; DOS-Basis in A1
move.l SysBase,a6 ; SysBase in A6
jsr CloseLibrary(a6) ; und DOS_Lib schließen
ende: rts ; zurück zum System
; --- DATA --------------------------------------------------------------------
DOSBase: dc.l 0
align 4
dosname: dc.b "dos.library",0
align 4
string: dc.b 'Hello World',10
Thomas Merbold 22:05, 24. Nov. 2010 (CET)
Info zum NASM hello world-Beispiel eines COM-Programms
Für DOS-COM-Programme kann nur ein einziges 64 KB-Segment verwendet werden und beim Starten bekommt DS deswegen schon die selbe Segment-Adresse wie CS zugewiesen. Ein "push cs" und "pop ds" am Anfang des Programm-Codes macht daher bei einem COM-Programm keinen wirklichen Sinn.
Das Beenden eines COM-Programms kann (ab MSDOS 2) auch mit dem ret-Befehl erfolgen, wenn der Stack erhalten bleibt und CS nicht ungünstig manipuliert wurde, sondern ein Rücksprung zum "int 20h" im PSP möglich bleibt. (Im PSP wird von DOS vor dem Starten der Opcode für "int 20h" eingetragen und ein Word mit 0000h auf den Stack gepusht.)
Dirk (nicht signierter Beitrag von 92.231.183.13 (Diskussion) 08:11, 9. Mär. 2013 (CET))
- Für DOS-COM Programme kann auch mehr als ein Segment verwendet werden, allerdings muss dann der Programmierer das Segmenthandling und das Speichermanagement komplett selbst übernehmen. Diese Technik wurde in der Demo-Programmierung sehr gerne verwendet - an dieser Stelle sei das Uneatable-Demo genannt, welches aus einem 2MB großen .COM besteht. .COM-Programme unterscheiden sich von .EXE darin, das es keinen Header gibt, alle Segmentregister auf ein und dasselbe Segment zeigen und die Startadresse der ersten Instruktion auf 100h festgelegt ist. DOS reserviert für eine .COM Programm immer 64kB - unabhängig wie groß das Programm selbst ist. Was danach passiert kann der Programmierer selbst entscheiden. Dieser kann danach die Segmentregister nach Belieben ändern. Thomas Merbold (Diskussion) 01:45, 17. Jun. 2013 (CEST)
MASM
Auf die Frage ob nur DATEN und DATA, oder auch einfach nur (frisches) BLUT verwendet werden darf antwortete Dr. Frankenstein wie folgt:
Als Geburtshelfer dürfen wir ihnen auch selber einen Namen geben.
Defines a program segment called name having segment attributes
name SEGMENT READONLY align combine use characteristics ALIAS(string) 'class'
statements
name ENDS
.MODEL small
assume cs:HERZ,ds:BLUT,ss:NIEREN
HERZ SEGMENT use16 'CODE'
start:
mov ax,BLUT
mov ds,ax
; weitere Befehle HERZ ends
BLUT SEGMENT use32 'DATA'
Transfusion DD ?
BLUT ends
NIEREN SEGMENT use16 STACK 'STACK'
DB 10h dup (0)
NIEREN ends
END start
(...nun müssen wir nur noch den Blitz einschlagen lassen..)
Zombiegeburt mit DATA:
.MODEL small
.CODE
start:
mov ax,@DATA
mov ds,ax
.DATA
WERT DD
.STACK 10h
END start
- ------------------Frankensteins Geburtshelfer Ende-------------------------------------------------------
MS-DOS COM-Programm-Beispiel für MASM (Änderungsvorlage)
(konvertieren mit exe2bin.exe muster.exe muster.com)
.model tiny
.code
mov dx,offset STRING
mov ah,9
int 21h
ret
.data
STRING DB "hello world$"
end
Dirk (nicht signierter Beitrag von 92.231.182.133 (Diskussion) 09:34, 13. Mär. 2013 (CET))
- In welcher Hinsicht soll das 'den Artikel verbessern' (= der Zweck von Diskussionen). Jedenfalls sehe ich (und meine OMA!) hier keinerlei Sinn: Es gibt bereits MASM als Beispiel, und das sollte genügen. --VÖRBY (Diskussion) 10:30, 13. Mär. 2013 (CET)
- Vor allem weil so nicht korrekt ist. Es werden "Tricks" des Assemblers präsentiert, aber zwei wichtige Dinge im letzten Beispiel komplett vergessen: 1. wenn es ein COM-Programm werden soll, fehlt die lebensnotwendige Anweisung "ORG 100h" um die Startadresse festzulegen und 2. ist das Speichermodell TINY die Voraussetzung für ein COM-Program - aber damit ist es noch keines. Zu diesem wird es erst, wenn es mit TASM/TLINK mit der Option -t übersetzt wird oder das entstehende EXE mit EXE2BIN behandelt wird. Über den Nährwert lässt sich streiten, aber im Artikel Beispiele aus dem vorigen Jahrtausend stehen zu lassen ist so, wie wenn man im Artikel Fernseher nur das Bild eines 50Jahre alten Schwarzweißgerätes zeigt und LCD oder Plasmageräte vollständig ignoriert. Die OMA von heute fragt nicht mehr nach dem Weg - dafür hat sie eine App Thomas Merbold (Diskussion) 08:08, 1. Dez. 2016 (CET)
Zum besseren Vergleichen der MS-DOS-Programm-Beispiele von NASM und von MASM wäre es zweckmäßig das selbe Zielformat zu verwenden und nicht einmal eine Vorlage für eine .Exe and beim anderen Beispiel eine Vorlage für eine .Com-Datei zu zeigen, weil das könnte sonst schon etwas verwirrend sein.
Auch könnten diese beiden Beispiele für MS-DOS auch ohne die Hilfe von Betriebssystem-, oder Biosfunktionen einen String auf den Textbildschirm bringen können, wobei diese Methode unter einem anderen Betriebssystem an den fehlenden Zugriffsrechten scheitern könnte. Weil die Verwendung von assembler ist ja nicht zwingend an ein bestimmtes Betriebssystem gebunden, sondern eher von der jeweiligen Architektur der verwendeten Hardware und Umgebung abhängig.
Dirk
- Könnte man die 'hello World' Varianten nicht entsprechend angleichen? Das wäre doch sinnvoller als ein neues, m.E. total 'schräges' Beispiel hier zu posten? Wir bewegen uns hier in einer Enzyklopädie und sollten entsprechend kurze und allgemeinverständliche Texte einstellen. Wer mich fragt: Ein Link auf diesen Artikel wäre die nloch bessere Variante; in der Kürze liegt die Würze. --VÖRBY (Diskussion) 11:10, 13. Mär. 2013 (CET)
- Im Artikel sind reine Demonstrations-Beispiele und keine Programmier-Anleitungen. Anders geht's immer, besser schon schwerer. Man müsste ja sonst auch erklären, was ".EXE" oder ".COM" zu bedeuten hat. Und noch mehr. Assembler hängt eben voll vom Betriebssystem ab. --RobTorgel (Diskussion) 11:22, 13. Mär. 2013 (CET)
- Im Artikel wurde der Begriff MS-DOS-Com-Programm schon ohne eine weitere Erklärung dazu neben dem Beispiel einer Vorlage für eine Exe (ebenfalls ohne eine Erklärung dazu) verwendet. Weil so eine genauere Erklärung dazu dann wohl doch über das Ziel(einfach erkennbare Beispiele zeigen) hinausgehen würde, deswegen sollten beide Beispiele und auch deren Zielformate so weit wie möglich identisch bleiben und nicht so sehr von einander abweichen.
- Dirk
Hallo zusammen, die im Artikel schon vorhandenen Beispiele zum Hallo-Welt-Programm sind redundant zu den Hello-World-Listen, die in jenem Artikel bei 'Siehe auch' verlinkt sind. Ich schlage vor, die Beispielcodes aus dem Artikel zu entfernen und durch allgemeine Aussagen sowie Links zu diesen Artikeln zu ersetzen. Der 'Frankenstein' (desses Sinn ich hier immer noch nicht verstehe) hätte sich damit auch erledigt.
Zu 'DOS ohne weitere Erklärung': Da ist ein Link drin, mehr braucht es nicht.--VÖRBY (Diskussion) 12:05, 13. Mär. 2013 (CET)
"Frankensteins" Antwort bezog sich nur auf die Frage/Aussage(von Rotkaeppchen68 01:44, 30. Sep. 2007 (CEST)), ob DATEN, oder DATA die richtige Bezeichnung für unser Datensegment ist.
(..ich habe unter "Frankenstein" nun eine Trennlinie plaziert..)
...
Ich denke das im Artikel selber auch solche kleinen Code-Beipiele mit hinein gehören und auch dort aufgelistet bleiben sollten.
Dirk (nicht signierter Beitrag von 92.231.182.133 (Diskussion) 12:27, 13. Mär. 2013 (CET))
- Warum sollte man im Artikel weitere Beispielprogramme aufnehmen? Da könntest du Tausende davon (er)finden. Und was soll der ganze Firlefanz mit Herz, Blut und Nieren etc. im Code? Wenn die Beispiele zu Hello-World unpassend sind, kann und sollte man sie korrigieren, braucht aber keine weiteren, schon gar keine derart 'schrägen' Beispiele. Oder bin ich irgendwie blind?
- Das Entfernen der Redundanz (s.oben 12:05) scheint mir nach wie vor die richtige Vorgehensweise zu sein.--VÖRBY (Diskussion) 14:51, 13. Mär. 2013 (CET)
- +1. Wenn es so ausführliche Artikel zu "Hello, world" gibt, dann ist das hier wohl voll redundant. --RobTorgel (Diskussion) 14:57, 13. Mär. 2013 (CET)
Die unter "Frankenstein" gezeigten Beispiele sollten keine Hello-Wold-Beispiele für den Artikel werden, sondern lediglich zeigen wie man eigene Segment-Namen verwenden kann. Die beiden Programm-Beispiele für DOS, MASM und NASM im Artikel sollten möglichst identisch sein und aneinander angeglichen werden. Dafür habe ich ein möglichst kleines Beispiel gewählt, welches als Änderungsvorlage für das NASM-Beispiel dienen könnte. Dirk (nicht signierter Beitrag von 92.231.182.133 (Diskussion) 15:31, 13. Mär. 2013 (CET))
- Genau das ist das Problem: Warum hast du nicht die Hello-Texte benutzt und entsprechend modifiziert, sondern was ganz Neues (und 'Schräges', zumindest Verwirrendes) erfunden? Die von dir beklagte Uneinheitlichkeit hat ihre Ursache auch in redundanten Texten - weshalb ich diese auf das Notwendigste reduzieren, d.h. die Vergleiche durch Links ersetzen möchte. --VÖRBY (Diskussion) 15:43, 13. Mär. 2013 (CET)
- Ich habe doch den Hello-Text aus dem Artikel benutzt und entsprechend modifiziert und auf das nötigste reduziert(siehe Änderungsvorlage). Dirk
- Wozu brauchte es dann die Abschnitte 'cs:HERZ,ds:BLUT,ss:NIEREN' und 'Zombiegeburt mit DATA'? Und welchem Zweck soll eine 'Änderungsvorlage' dienen? Welches Original sollte da geändert werden? Warum gibt es dort keine Kommentare? Wo ist das, was du wirklich damit wolltest, beschrieben? Mindestens habe ich also deine Disk-Beiträge hier gründlich miss- oder besser nicht-verstanden. Sorry. Ansonsten siehe obige Texte. --VÖRBY (Diskussion) 19:17, 13. Mär. 2013 (CET)
- Ich bin für den Vorschlag 12:05, und dann lassen wir es erstmal. Wenn irgendeine geniale (andere) Idee auftaucht, können wir ja nochmal reden. @Dirk: Super, dass du dir Gedanken machst, aber wir können dir da nicht folgen und sehen keine Verbesserung --RobTorgel (Diskussion) 20:10, 13. Mär. 2013 (CET)
- Tolle Idee! Wir beschreiben hier die Assemblersprache, verwenden aber dann dieses Frankensteinbeispiel, das auf ganz spezielle Belange der Intel x86 Architektur eingeht. Ist nicht so zielführend finde ich....Thomas Merbold (Diskussion) 08:12, 1. Dez. 2016 (CET)
Hallo zusammen, ich habe die ASS-Code-Beispiele vorläufig nach Diskussion:Liste von Hallo-Welt-Programmen/Assembler kopiert und dazu Fragestellungen eingestellt. Wer könnte da mal reinschauen? --VÖRBY (Diskussion) 08:52, 14. Mär. 2013 (CET)
Im obigen Beispiel mit "cs:HERZ,ds:BLUT,ss:NIEREN" bekommen die Segmente einen Namen zugewiesen. So wie es hier von MS beschrieben wird:
Defines a program segment called name having segment attributes
name SEGMENT READONLY align combine use characteristics ALIAS(string) 'class'
statements
name ENDS
Im Anschluss daran habe ich es mit einem Beipiel doch auch gezeigt wie man Segmente einen Namen geben kann.
Hierbei geht es nur darum zu zeigen wie man Segmente in unserem Listing einen eigenen Namen geben kann.
Daran ist auch nichts schräg, sondern eigene Segmentnamen können völlig regulär verwendet werden, genauso wie es MS uns zeigt.
Solche eigenen Segmentnamen können wir dann auch in unserem Code verwenden, so wie es in meinem Beispiel mit dem Datensegment mit dem Namen BLUT und den darauf sich beziehenden Mov-Befehl zu sehen ist:
mov ax,BLUT
mov ds,ax
Der Assembler trägt für uns beim Assemblieren die Segmentadresse vom Segment mit dem Namen BLUT für unseren Mov-Befehl im Code als Immediatewert ein.
Ohne so eine Namensgebung von Segmentnamen läßt sich unser Datensegment nur über den Bezeichner "DATA" erreichen, so wie ich es im folgenden Zombiegeburt-Listing zeige.
Hello World in Assemblersprache (MASM für MS-DOS)
(Arbeitschritte: Zuerst wird das Listing mit MASM assembliert = erzeugt ein Objektfile(*.obj) welches wir im Anschluss mit dem 16Bit-Linker zu einer *.exe linken.
Danach Konvertieren wir diese *.exe mit "exe2bin.exe muster.exe muster.com" zu einer *.com-Datei.
Der hier verwendete Namen "muster" kann durch einen anderen Namen mit bis zu 8 Zeichen(gemäß dem 8-Punkt-3-Dateinamen-Format von DOS) ersetzt und ausgetauscht werden.)
.model tiny ; das Tiny memory model für COM-Programme auswählen
.code ; Beginn des Codebereiches deklarieren
mov dx, offset STRING ; Offsetadresse der Zeichenkette in ein Register laden
mov ah, 09h ; die Unterfunktion 9 des Betriebssysteminterrupts 21h auswählen
int 21h ; den Betriebssysteminterrupt 21h (hier erfolgt die Ausgabe der Zeichenkette) aufrufen
ret ; Programmbeendigung und Rücksprung zu DOS
.data ; Beginn des Datenbereiches deklarieren
STRING DB "Hello World$" ; Die Zeichenkette "Hello World mit dem $-Endzeichen"
end
Hello World in Assemblersprache (NASM für MS-DOS)
ORG 100h ; Startoffset auf 100h setzen (Startpunkt für COM-Programme) mov dx, STRING ; Offsetadresse der Zeichenkette in ein Register laden
mov ah, 09h ; die Unterfunktion 9 des Betriebssysteminterrupts 21h auswählen
int 21h ; den Betriebssysteminterrupt 21h (hier erfolgt die Ausgabe der Zeichenkette) aufrufen
ret ; Programmbeendigung und Rücksprung zu DOS
STRING DB "Hello World$" ; Die Zeichenkette "Hello World mit dem $-Endzeichen"
Weitere Diskussion dazu
Die Verbesserung:
Beide Assembler-Listings sind kürzer als die Originale im Artikel und zusätzlich sind auch beide Listings mit der gleichen Befehlsfolge ausgestattet und damit sollte sich auch eine identische COM-Datei erzeugen lassen, womit auch die assembler-spezifischen Unterscheidungsmerkmale der beiden Assembler deutlicher werden, im Gegensatz dazu als wenn unterschiedliche und voneinander abweichende Befehlsfolgen anzutreffen sind.
Mein Vorschlag ist es die beiden Original-Listings im Artikel durch diese beiden Listings zu ersetzen und auszutauschen, oder in beiden Artikel-Listings zumindest die selbe Befehlsfolge zu verwenden und entweder beide als COM-Datei, oder beide als EXE-Datei zu gestalten.
Dirk (nicht signierter Beitrag von 78.54.57.76 (Diskussion) 10:38, 14. Mär. 2013 (CET))
- Hallo Dirk, mit 'Verbesserungen' war gemeint, Inhalte i.S. des Wikipedia-Artikels zu verbessern, nicht den Programmcode - der soll ja nur beispielhaft gezeigt werden. Deshalb möchte ich (s.a. RobTorgel) HIER auch nur ein Beispiel belassen (vielleicht das mit dem detailliertesten Befehlslevel) und den Rest in die Liste übernehmen - die dem Zweck dient, Unterschiede aufzuzeigen. Ob man vorhandene Beispiele durch andere ersetzen soll, ist sekundär; die selbe Funktionalität und gute Kommentierungen wären dabei wichtig. Dabei kann man meinetwegen auch das Benennen von Segmenten zeigen, eigene "Frankenstein-Beispiele" führ(t)en nur zu Missverständnissen.
- Schau vielleicht auch mal in die Diskussion zum Listenartikel, ob du dort mit zur Lösung beitragen kannst (Unterschiede trotz gleicher Überschrift; Quellcode/Maschinencode ...
- Gruß von --VÖRBY (Diskussion) 12:44, 14. Mär. 2013 (CET)
Im Artikel sollte ein Beispiel-Programm sein, das idealerweise
- leicht verständlich ist;
- halbwegs modern ist;
- relativ kurz ist;
- keine Bibliotheken oder C-Funktionen verwendet;
- für halbwegs verbreitete Hardware + Assembler(Dialekt) geschrieben ist.
Es wurden vorgeschlagen
- "Hello World in TASM" .. nicht moderner als aktuelles; aber etwas kürzer, imo besser
- "Zeitgemäßes Hello World" .. 'call puts' ~ Bibliotheksfunktion? .. 'leave' ~ Makro?
- "Amiga auf 68k Prozessor" .. viel zu lang für ein "einfaches Beispiel"
- [Dirk] MASM DOS COM .. auch nicht moderner als aktuelles .. wohl unvollständig
- "Hello World in Assemblersprache (MASM für MS-DOS)" .. identisch mit Vorschlag 4
- "Hello World in Assemblersprache (NASM für MS-DOS)" .. nicht moderner als aktuelles .. aber etwas kürzer, imo besser
--arilou (Diskussion) 09:34, 1. Dez. 2016 (CET)
ASS = textliche Darstellung von Maschinensprache
Hallo, hier [1] liegt wohl ein Missverständnis vor, zumindest eine sehr missverständliche Formulierung. Der Leser könnte daraus schließen, mit dem ASS-Code würde Maschinencode dargestellt, d.h. M-Code existiere früher als ASS-Code. Korrekt ist dagegen, dass ASS-Code (i.d.R. 1:1) in Maschinencode umgesetzt wird. Die bisherige Formulierung ("... Befehle werden mnemotechnisch dargestellt") war korrekt - und ist eine andere Aussage als die jetzige.
Die missverständliche Aussage findet sich dann nochmal weiter unten - das macht sie aber nicht richtiger. --VÖRBY (Diskussion) 14:49, 17. Jun. 2014 (CEST)
- Die Einleitung hat noch mehr Schwächen; diese zu beheben, ist aber nicht einfach. Deine Anmerkung ist mir auch aufgefallen. --arilou (Diskussion) 15:25, 17. Jun. 2014 (CEST)
- Dann möchte ich wenigstens diese seltsame Formulierung revertieren. Ich würde sie sogar als TF betrachten. Oder gibt es Belege für diese Aussage? --VÖRBY (Diskussion) 19:08, 17. Jun. 2014 (CEST)
"zu jedem Computertyp gibt es [...] AssemblerspracheN"
Eigentlich gibt es zu jedem Computertyp immer nur EINE Assemblersprache. Allerdings können verschiedene Hersteller verschiedene "Vokabeln" (Mnemonics) verwenden: Wo MASM "mov" haben will, will Borlands Turbo-Assembler "move" und ein dritter Assembler vielleicht "copy" - aber alle übersetzen in dieselbe Maschinensprache-Bitfolge...
Aber das in der Einleitung klarzustellen, scheint mir schwierig. --arilou (Diskussion) 15:25, 17. Jun. 2014 (CEST)
- Ass-Sprache: es gibt jedenfalls nur eine Maschinensprache. Ob es dann mehrere Assenblersprachen (= ASssembler) gibt, könnte m.E. schon sein. Am Einleitungssatz hätte ich eigentlich nichts auszusetzen, dort heißt es "auf die Maschinensprache zugeschnitten".
- Mnemonics: Könnte man im Abschnitt Beschreibung anfügen. Machst du's? --VÖRBY (Diskussion) 19:08, 17. Jun. 2014 (CEST)
- Einzahl/Mehrzahl: Ich habe das geändert: "Für unterschiedliche Computertypen ... Assemblersprachen." So bleibt bewusst offen, ob es für den einzelnen Typ nur eine oder mehrere Ass-Sprachen (und damit auch Assembler) gibt.--VÖRBY (Diskussion) 11:09, 18. Jun. 2014 (CEST)
- Hab' das 'n' entfernt. Denn pro Plattform/Typ/Gerät gibts eben nur 1 Assemblersprache. (Ok, kommt ein bischen darauf an, wie man "unterschiedlich" bzgl. Assembler definiert, aber für WP:OmA ist's so verständlicher.)
- --arilou (Diskussion) 10:59, 5. Feb. 2015 (CET)
- "Maschinencode" gibts je Typ nur einmal. Aber für verschiedene Sprachen hast du selbst oben Beispiele angeführt. --RobTorgel 11:42, 5. Feb. 2015 (CET)
- Das ist eben die Frage. Machen (geringfügig) verschiedene Mnemonics oder eine Vertauschung der Operanden-Reihenfolge schon eine andere Assemblersprache aus? Früher nannte man das einen "Dialekt" derselben Sprache. Z.B. waren Microsoft Pascal und Turbo Pascal verschiedene Dialekte, aber beide die Sprache "Pascal".
- Wie gesagt, das kommt auf die genaue Definition von "unterschiedlich" an. Ich persönlich denke, dass wenn man Quellcode eines Dialekts 1:1 in Quellcode eines anderen umsetzen kann, (und beide auch noch weitgehend dieselben Mnemonics verwenden) eigentlich beide nur eine Sprache beschreiben.
- (Außerdem ist es so der WP:OmA deutlicher zu erklären, dass Assembler eben genau "die Maschinen-spezifische Sprache" ist. Davon kann's für eine Maschine eigentlich nicht "mehrere verschiedene" geben.
- --arilou (Diskussion) 11:59, 5. Feb. 2015 (CET)
"Assembler" = "Compiler" ?!?
Ich habe gelernt, dass ein Assembler kein Compiler ist, da es ihm am "Com" fehlt. Den Compiler macht aus, dass ein Quellsprachenbefehl in mehrere Maschinencodes übersetzt wird/werden kann. Das kann ein Assembler nicht, und ist somit kein Compiler. Auch keine "spezielle Form".
Ein Motorrad ist auch kein "spezielles Auto". Auch wenn's was ähnliches sein mag.
--arilou (Diskussion) 11:02, 5. Feb. 2015 (CET)
- Steht doch so auch im Artikel (2. Absatz). Oder was meinst du?--Plankton314 (Diskussion) 11:48, 5. Feb. 2015 (CET)
- Zitat Artikel:
- Es wird durch einen speziellen Compiler, ebenfalls Assembler genannt, [...]
- Ein Assembler ist aber kein "spezieller Compiler".
- --arilou (Diskussion) 12:01, 5. Feb. 2015 (CET)
- Zitat Artikel:
- Ach, da eins weiter. Ja, der Satz ist schon komisch, vor allem das "ebenfalls".
- Ich habe den Abschnitt übersicht mal etwas überarbeitet bzw. gekürzt, insbesondere den vorherrschenden POV, Programme in Assembler wären heute noch allgemein effizienter/schneller/usw. als in einer Hochsprache geschriebene. Aber auch ein paar redundante Aussagen, die in den Abschnitten Vor-/Nachteile bereits aufgeführt sind.--Plankton314 (Diskussion) 12:42, 5. Feb. 2015 (CET)
- Das nenn' ich mal überschneidende Bearbeitung ;-)
- --arilou (Diskussion) 13:57, 5. Feb. 2015 (CET)
- Dann hast du in Compilerbau nicht aufgepaßt. Ein Compiler ist ein Stück Software, das Text (Quellcode) in eine ausführbare Form überführt - hierzu gerne mal das Referenzwerk "Compilerbau" von Niklas Wirth zu Rate ziehen. Leider ist die Aussage, das ein Assembler kein Compiler sei, auch in vielen Büchern zu finden - so wie auch viel Eisen im Spinat ist. Der Begriff des Compilers ist losgelöst von der Sprachdefinition. Es gibt eine weitere Definition, die selbst viele ITler nicht gebacken bekommen: Ein Programm, dass eine Text oder Objektrepräsentation in ein anzeigbares Bild verwandelt, nennt man Renderer und Renderer sind eben nicht nur Blender & Co, sondern ein Renderer ist auch Bestandteil eine Browsers. Ein Compiler beherrscht die lexikalische, syntaktische und semantische Analyse und dies ist unter Assembler genauso wichtig wie unter C oder Java. Der Unterschied istt lediglich der Codegenerator. Dieser ist bei einem Assembler deutlich vereinfacht - es verbleibt eigenttlich nur noch das Fixup. Thomas Merbold (Diskussion) 08:22, 1. Dez. 2016 (CET)
- Ich verbitte mir deinen Ton, anderen, z.B. mir, (in dieser Disku mehrfach!) die Kompetenz abzustreiten, vermeintlich "nicht aufgepasst" zu haben und ähnliches.
- Wenn die Mehrzahl reputabler Werke sagt "ein Assembler ist kein Compiler", dann ist das etabliertes Wissen. Das muss weder logisch noch sinnvoll sein.
- Da du ja reputable Quellen hast, die anderes aussagen, schreib' doch in den Artikel einen Zusatz "manchmal wird auch ein Assembler den Compilern zugerechnet"+REF, oder so ähnlich. Das sollte dann aber auch wirklich direkt so in der Quelle geschehen - die eigenen, persönlichen "logischen Folgerungen" eines WP-Autors zählen nicht.
- --arilou (Diskussion) 08:59, 1. Dez. 2016 (CET)
Qualität
- Abgesehen davon, daß "Assembler Programmformular" kein Deutsch ist, kann ich nicht erkennen, welchen Informationsgewinn ein vierzig Jahre altes Formular aus der DDR im Zusammenhang mit Assembler-Sprachen bietet.
- einfache arithmetische Operationen (mit Gleitkommaprozessoren auch anspruchsvolle) Was sind denn "anspruchsvolle" arithmetische Operationen?
- einfache Kontrolle des Programmflusses, einfache logische Operationen. Was heißt "einfach" in dem Zusammenhang?
- höhere Arithmetik wie Sinus-, Kosinus- und Wurzelberechnung Sinus und Cosinus sind transzendente Funktionen und damit keine "höhere Arithmetik", die Wurzelfunktion ist eine algebraische Funktion.
- Dies gilt heute praktisch nur noch, wenn wegen Massenproduktion möglichst günstige und damit minimale Mikrocontroller verwendet werden sollen und das Programm nicht zu komplex ist. Man kann raten, was der Autor damit sagen will.
- Da Assemblerprogramme sehr hardwarenah geschrieben sind, weil die unterschiedlichen Spezifikationen der einzelnen Computerarchitekturen individuell verschiedene Befehlssätze aufweisen, kann ein Assemblerprogramm i. A. nicht auf ein anderes Computersystem übertragen werden, ohne den Quelltext anzupassen. Bitte zwei Sätze daraus machen. So ist es kaum lesbar.
- ... fast immer deutlich länger ... "Fast immer deutlich" besagt gar nicht. Manchmal ja, manchmal nein, manchmal deutlich, manchmal nicht, oder was?
- heruntergebrochen Das ist Jargon.
- ... da Hochsprachencompiler in einigen Situationen ineffizienten Code generieren.[3][4] ... meint jemand. Was heißt hier "ineffizient"?
- Beispielsweise sind im Bereich des wissenschaftlichen Rechnens die schnellsten Varianten mathematischer Bibliotheken wie BLAS[5][6] oder bei architekturabhängigen Funktionen wie der C-Standardfunktion memcpy[7][8] weiterhin die mit Assembler-Code optimierten. Das ist kein Deutsch.
- Eine private Homepage ist keine belastbare Qualle und daher nicht einer Enzyklopädie würdig.
Ein Informatiker möchte den Artikel bitte in Ordnung bringen. (nicht signierter Beitrag von 91.66.63.86 (Diskussion) 16:45, 22. Jun. 2015 (CEST))
- Offenbar weißt du ja Bescheid. Wieso machst du es nicht selbst ? --RobTorgel 16:55, 22. Jun. 2015 (CEST)
- zu 1): Auf das "Formular-Bild" wird im Fließtext nicht eingegangen, und es ist auch eigentlich nicht wirklich Assembler-spezifisch - es gehört eher in einen Artikel Lochkarte o.ä. ~ für's erste hab' ich's mal auskommentiert.
- zu 2): Hm, "höhere Arithmetik" ist eigentlich noch nicht 'Gleitkomma', sondern (Ganzzahl-)Befehle, die durch (mehrere) einfache nachgebaut werden könnten. Im Artikel geändert.
- zu 3): Beispiele für "einfach" hinzugefügt.
- zu 4): Danke, war ein echter Fehler. "Höhere Arithmetik" ist noch nicht "Gleitkomma" - Punkte getrennt und mit Beispiel(en) versehen.
- Zum Rest komme ich später (wenn ich's nicht vergesse...)
- --arilou (Diskussion) 10:08, 23. Jun. 2015 (CEST)
- zu 5): umformuliert, jetzt muss hoffentlich niemand mehr raten.
- zu 6): Jo, langen Satz in zweie geteilt.
- zu 7): Also ich finde die Formulierung "fast immer deutlich länger" gut verständlich. Es gibt Ausnahmen, dass Assembler-Quelltext nur wenig länger oder gar kürzer ist, aber diese Ausnahmen sind selten (eigentlich nur bei einfach(st)en Programmen).
- zu 8): Jargon? Lässt sich umformulieren.
- zu 9): etwas umformuliert, so ist's klarer.
- zu 10): 'das ist kein Deutsch' - imo ein grammatikalisch korrekter Satz:
Beispielsweise sind [...] die schnellsten Varianten [...] weiterhin die mit Assembler-Code optimierten.
(Auch wenn's mit 'nem Relativsatz am Ende einfacher zu lesen und zu verstehen wäre...) - zu 11): Eine belastbare Qualle kenn' ich auch keine ;-) Scherz lass nach - um welche Quelle geht's denn genau?
- --arilou (Diskussion) 15:54, 23. Jun. 2015 (CEST)