WinFuture-Forum.de: Kleinstes Programm - WinFuture-Forum.de

Zum Inhalt wechseln

Beiträge in diesem Forum erhöhen euren Beitragszähler nicht.
Seite 1 von 1

Kleinstes Programm


#1 Mitglied ist offline   webbi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 23
  • Beigetreten: 02. November 03
  • Reputation: 0

geschrieben 23. März 2004 - 16:44

Hi

erst mal sorry für den Titel, aber mir fällt gerade nichts anders ein!

Und zwar geht es um folgendes: Ich hab hier auf WF vor einiger Zeit mal bei ner News in den Kommentaren gelesen, dass Rika nen Code gepostet hat und gemeint hat dass das der kleinst mögliche Code wäre den ein Proramm haben kann!

Jetzt würde ich den Code oder etwas ähnliches brauchen, für nen Lehrer von mir :band:


wär super wenn mir da jemand weiterhelfen könnte, ich find die News nicht mehr und weiß au nicht mehr um was es ging! Rika hat noch irgendwas geschrieben von bildschrimausgabe und beenden des programms ... aber so genau weiß ichs au nicht mehr, ich kann leider auch keine programmiersprache außer php ;)

gruß webbi

Anzeige



#2 Mitglied ist offline   Rika 

  • Gruppe: aktive Mitglieder
  • Beiträge: 11.533
  • Beigetreten: 11. Juni 03
  • Reputation: 2
  • Geschlecht:Männlich

geschrieben 23. März 2004 - 17:16

Der kürzestmögliche Code wäre ein einziges Byte, nämlich 0xC3, was ein Programm wieder beendet - aber selbst für DOS ist das zu wenig und führt zu 'nem Speicherleck. Aber wir wollten ja ein Programm, daß einen Text ausgibt und sich dann sauber beendet.

code segment
assume cs:code,ds:code
org 100h
start:
mov dx,offset message
mov ah,09h
int 21h
mov ax,4C00h
int 21h
message db 'Hello World!$'
code ends
end start

Der Platzersparnis halber packen wir Code und Daten in ein einziges Segment, model small, mit 100h Orga-Platz für die DOS-Speicherverwaltung (allesamt Standardeinstellungen bei .com-Programmdateien). Man nehme INT 21h als DOS-Standardroutine für die Ausgabe und vermeidet damit Inkonsistenzen bei der Ausgabe, man könnte auch alles direkt in den Bildschirmtextpuffer nach B000h:0000h kopieren. Die Rüchgabe erfolgt mit dem fest definierten Exit-Code 00h = kein Fehler, sauberer als ein undefintiertes RET (=0xC3). Statt "mov ax,4C00h" könnte man auch "mov ah,4Ch; xor al,al" schreiben, was aber keinen Platzgewinn bringt und etwas unübersichtlicher wird.

Assembliert und gelinkt (=kompiliert, für alle die, die nicht mehr wissen, was Compiler und Linker sind...) ergibt das dann 0xBA 0x0C 0x01 0xB4 0x09 0xCD 0x21 0xB8 0x00 0x4C 0xCD 0x21 0x48 0x65 0x6C 0x6C 0x6F 0x20 0x57 0x6F 0x72 0x6C 0x64 0x21 0x24 = 25 Bytes, davon sind 13 Bytes Programmcode und 12 Bytes für den Ausgabetext verwendet.

Das Kompilat habe ich dir mal angehängt, und ausgeführt in der Eingabeaufforderung (mach sie die vorher auf, sonst schließt Windows sie am Programmende wieder) macht das Programm genau das, was ich spezifiziert habe: Gibt den Text "Hello World!" aus und beendet sich sauber.

Dieser Beitrag wurde von Rika bearbeitet: 23. März 2004 - 17:18

Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Eingefügtes Bild
Ja, mata ne!

(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0