Diskussion:Liste von Hallo-Welt-Programmen/Assembler
Ausgelagert aus Assemblersprache
[Quelltext bearbeiten]Hallo zusammen, die folgenden Beispieltexte habe ich aus dem Artikel Assemblersprache ausgelagert, zunächst mal hierher in die Diskussion. Ich möchte dort (siehe auch Diskussion) nur das erste Beispiel und den Jasmin-Vergleich ganz unten stehen lassen und anstelle der anderen Codes zusätzlich HIER auf diese Liste verlinken.
Unterschiede trotz identischer Überschrift: Die jeweiligen Systemumgebungen lt. Überschrift sind z.T. bereits hier in der Liste enthalten, der Code weist aber trotzdem Unterschiede auf - eine typische Folge von Redundanz. Ich schlage vor, dass das jemand mit 'einschlägigen' Kenntnissen vereinheitlicht.
Quelltext oder Maschinencode? Darüber hinaus habe ich Zweifel daran, ob alle Aussagen HIER (in der Liste) richtig sind. Zum Beispiel werden Texte als .EXE-Dateien bezeichnet, die Beispieltexte sehen aber aus wie ASS-Quelltext. 'Ass-Code' und 'Maschinencode' sollte aber schon unterschieden werden.
Wer kann/will das prüfen und bereinigen? Grüße von --VÖRBY (Diskussion) 08:47, 14. Mär. 2013 (CET)
- Oje, schon so lange her und in den letzten Jahren nurmehr RISC-Microcontroller in Assembler programmiert. Die Mischung find' ich nicht störend, ich versteh das ja nicht als Programmierkurs, aber insgesamt würde ich aber alles besser kommentieren.
- Vorsichtige Frage (s.o): heißt das nicht ".ASCIZ" (steht überall ".ASCIIZ") ? Da gab's doch ".ascii", ".asciz" und ".ascic" ? --RobTorgel (Diskussion) 09:17, 14. Mär. 2013 (CET)
- Mir gehts i.W. darum, die nachstehenden Varianten hier im Artikeltext einzufügen. Wenn es aber dieselben Überschriften schon gibt, müsste zumindest entschieden werden, welche davon besser ist; + ggf. Modifikationen. Ob asciiZ oder irgendwie anders, erscheint mir dabei von untergeordneter Bedeutung. --VÖRBY (Diskussion) 09:50, 14. Mär. 2013 (CET)
- nicht ganz. Die Schnipsel vermitteln den Eindruck, als könne man sie übersetzen und laufen lassen. Und du weißt ja: Offensichtlich ungetestete Programmbeispiele aus dem Internet, die nix als Comp-Error produzieren, sind keine Empfehlung --RobTorgel (Diskussion) 10:36, 14. Mär. 2013 (CET)
- Mit diesem Risiko könnte man wohl leben, denn niemand kann ersthaft diesen Anspruch erheben. Man könnte dazu aber auch einen kleinen Hinweis platzeren. Wirklich offen bleiben mE die oben hervorgehobenen Themenbereiche.--VÖRBY (Diskussion) 13:11, 14. Mär. 2013 (CET)
- nicht ganz. Die Schnipsel vermitteln den Eindruck, als könne man sie übersetzen und laufen lassen. Und du weißt ja: Offensichtlich ungetestete Programmbeispiele aus dem Internet, die nix als Comp-Error produzieren, sind keine Empfehlung --RobTorgel (Diskussion) 10:36, 14. Mär. 2013 (CET)
- Mir gehts i.W. darum, die nachstehenden Varianten hier im Artikeltext einzufügen. Wenn es aber dieselben Überschriften schon gibt, müsste zumindest entschieden werden, welche davon besser ist; + ggf. Modifikationen. Ob asciiZ oder irgendwie anders, erscheint mir dabei von untergeordneter Bedeutung. --VÖRBY (Diskussion) 09:50, 14. Mär. 2013 (CET)
Hello World in Assemblersprache (MASM für MS-DOS)
[Quelltext bearbeiten]DATA SEGMENT ;- Beginn des Datensegments
Meldung db "Hello World" ;- Die Zeichenkette "Hello World"
db "$" ;- Endzeichen der Zeichenkette
DATA ENDS ;- Ende des Datensegments
CODE SEGMENT ;- Beginn des Codesegments
ASSUME CS:CODE,DS:DATA ;- dem Assembler die Segmente mitteilen
Anfang: ;- Label für den Anfang des Programms
mov ax, DATA ;- das Daten...
mov ds, ax ; ...segment festlegen
mov dx, offset Meldung ;- den Text in das auf DS bezogene Datenregister laden
mov ah, 09h ;- die Unterfunktion 9 des Betriebssysteminterrupts 21h auswählen
int 21h ;- den Betriebssysteminterrupt 21h (hier erfolgt Ausgabe des Texts) aufrufen
mov ax, 4C00h ;- die Unterfunktion 4Ch (Programmbeendigung) des Betriebssysteminterrupts 21h festlegen
int 21h ;- diesen Befehl wiederum ausführen
CODE ENDS ;- Ende des Codesegments
END Anfang ;- dem Assembler das Ende des Labels Anfang mitteilen
Hello World in Assemblersprache (NASM für MS-DOS)
[Quelltext bearbeiten]ORG 100h ; Startoffset auf 100h setzen (Startpunkt für COM-Programme)
push cs ; Wert des Codesegmentregisters auf Stack übertragen
pop ds ; Datensegment auf Wert vom Stack setzen
mov ah, 09h ; DOS-Funktion zum Schreiben von Text
mov dx, Meldung ; Adresse des Textes
int 21h ; DOS-Funktion ausführen
int 20h ; DOS-Funktion um das Programm zu beenden
Meldung: db "Hello World" ; unser Text
db "$" ; markiert das Ende der Zeichenkette
Hello World in Assemblersprache (MIPS-Architektur)
[Quelltext bearbeiten].data
out: .asciiz "Hello World!" # die Zeichenkette zum Ausgeben (als Label)
.text
main: li $v0, 4 # Befehl 4 ('print_string') in Register schreiben
la $a0, out # Argument für den Systemaufruf in das Argumentregister schreiben
syscall # Ausführung der Systemfunktion (Ausgabe)
li $v0, 10 # Befehl 10 ('exit') in Register schreiben
syscall # Ausführung der Systemfunktion (Programmende)
Hello World in Assemblersprache (Jasmin)
[Quelltext bearbeiten]; HelloWorld.j
.source HelloWorld.java
.class public HelloWorld
.super java/lang/Object
.method public <init>()V
.limit stack 1
.limit locals 1
aload_0
invokespecial java/lang/Object/<init>()V
return
.end method
.method public static main([Ljava/lang/String;)V
.limit stack 2
.limit locals 1
getstatic java/lang/System/out Ljava/io/PrintStream;
ldc "Hello World!"
invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
return
.end method
Der zum Assembler-Quelltext HelloWorld.j zugehörige Java-Quelltext HelloWorld.java lautet:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
ASSEMBLER Beispiel für IBM Mainframe
[Quelltext bearbeiten]Ich musste hier ein paar Änderungen vornehmen. Zum einen waren die Kommentare unter dem Source Code bezüglich der Spaltenbegenzungen nicht ganz korrekt; ich weiß das, weil ich quasi täglich mit diesem ASSEMBLER arbeite. Meine Änderungen machen den Sachverhalt klarer und verbessern den Artikel. Zum anderen war der Sourcecode falsch; das ist seit 2015 (als ich ihn das erste mal eingestellt habe) niemandem aufgefallen. Es gab aber in den letzten Tagen eine Diskussion in der IBM-MAIN-Mailingliste über ASSEMBLER und die Fähigkeiten von ChatGPT, vernünftigen ASSEMBLER Code (als Beispiel) zu generieren, und da war auch diese Seite hier Thema. In diesem Zug hat ein Kollege versucht, das Beispiel laufen zu lassen und den bzw. die Fehler entdeckt; deshalb sollten die Korrekturen hier nachgezogen werden (damit ChatGPT beim nächsten Mal evtl. ein gescheites CodeBeispiel findet; was diesmal gefunden wurde, kam nicht von hier und war RICHTIG SCHLECHT). --Oppolzer (Diskussion) 10:01, 6. Sep. 2023 (CEST)