devcpp - hello world 70kb



  • ASM?? 😕



  • Original erstellt von Sili:
    ASM?? 😕

    Er meint, in purem Assembler geschrieben...

    z.B. so:

    [ORG 100h]                          ;declaration section
           jmp    start                 ;begin with start
           msg    db "Hello World!",0h  ;output message
           len    equ $ - msg           ;Length of message
           msdos  equ 21h               ;MSDOS irq
           fwrite equ 40h               ;write to file with handle
           exit   equ 4c00h             ;msdos exit
    
    start: nop                          ;herewego
    
           mov    dx,msg                ;get the output
           mov    cx,len                ;len chars
           mov    bx,1                  ;filehandle 1=CON:
           mov    ah,fwrite             ;get function
           int    msdos                 ;write it out
    
           xor    eax,eax               ;clean out eax
           mov    ax,exit               ;MS-DOS successful exit
           int    msdos                 ;back to the operating system
    

    Das daraus resulteierende DOS-Programm "hello.exe" ist nur 38 Bytes groß.



  • a so 🙂
    hmm, der code is länger als in cpp, aber die exe ist trotzdem kleiner 😞 ??? naja



  • Assembler ist fast Maschinencode.

    Ein Prozessor hat für jede Operation die er ausführen kann eine Zahl reserviert.
    Assembler tut nichts anderes, als die Worte durch die jeweiligen Zahlen zu ersetzen

    Um einen wert in ein Rechenregister zu schieben braucht man 4 Byte, ein nop (tu' nichts) hat sogar nur eins.
    Das macht den ganzen assemblierten Code sehr klein.

    allerdings ist das Ergebnis keine exe, sondern eine .com - datei. Der Dateiheader von .exe ist nämlich selber schon 28 Byte (?) groß. Hinzu kommen bei VC++ noch 'nützliche' Informationen wie
    'Erstellt mir Visual Studio' und Debug - Info's zum Fehlerfinden...

    cYa
    DjR



  • mach ma "strip test.exe" damit machste die exe nackig 😉



  • hä?? 😕



  • Das Programm "strip" entfernt die Debug-Informationen aus der Exe. Es kann aber schon sein, das garkeine mehr in der EXE vorhanden sind. 🙂



  • Wenn du die Exe in VC++ im Releasemodus kompilierst, hat sie nur 24 KB. Du kompilierst im Debug, das ist klar, daß die Exe größa is



  • Ich komme mit g++ aus MinGW nichtmal auf 70 kB. Wenn ich ohne irgendwelche Optionen kompiliere, dann lande ich bei 448.537 Byte. Wenn ich mit

    g++ -O3 -s -o Hello.exe Hello.cpp

    kompiliere, dann lande ich immernoch bei 210.944 Byte.

    Wie kriegt man das kleiner?

    ...ein Java-Hello-World braucht übrigens 336 Byte. ...auch noch ziemlich viel, wenn man es mit dem Assembler-Programm vergleicht. 🙄



  • mit der version 3.2 kriegste die exe natürlich nicht mehr so klein



  • moin meister...

    und genau das ist mein Problem auch ...

    gcc 3.2 ist aus dieser Sicht her völliger mist ...

    ich verwende wieder 2.9.x und benüge mich mit 4 Kb 🙂

    mfg
    RB



  • lol sehr sinnvoll. ist ja unheimlich schlimm wenn das programm soooooooo groß ist 😉


Anmelden zum Antworten