Lehet, hogy ezzel kellett volna kezdeni, de most már mindegy ... Tehát DOS operációs rendszert használva, háromfajta futtatható file létezik :

  • bat
  • com
  • exe
Minket most az utolsó kettő érdekel. A "COM" file maximum 64kb lehet, míg az "EXE" file mérete nincs korlátozva de amit betölt belőle a memóriába, az maximum 1 megabyte (gyakorlatilag 640k :)) lehet..

Az Intel mérnökei megint nem láttak tovább az orruk hegyénél, mivel nem tudjuk egybe kezelni a memóriát, csak védett módban, de arról csak később írok, mivel elég nehezen érthető. Tehát védett mód kilőve. Egy szegmens ugye 64kb lehet maximum. Ez egy "COM" filenál okés is, mivel egy "COM" file maximum ennyi is lehet. Az "EXE" filenál meg lehet szenvedni a sok-sok szegmenssel :) A "COM" file nem tartalmaz fejlécet, a processzor a file elejétől kezdve végrehajtja azt . Az "EXE" filenak van fejléce, ami MZ-vel vagy ZM-mel kezdődik. Ennyi egyelőre elég is lesz. Mellesleg megjegyezném, hogy az MZ állítólag valami fejes monogrammja volt az IBM-nél...
A "hello world!" program com forrása:

  ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=   ;                       .COM.   ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=   org      100h   section  .text   start:   mov          ah,9            mov          dx,szoveg            int          21h            ret                          ; Kilépünk   section  .data   szoveg   db "hello world!$"   section .bss
Fordítása:
  nasm myprog.asm -fbin -o myprog.com
A "hello world!" program exe forrása:
  ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=   ;                       .EXE.   ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=   segment code                          ; Kódszegmens ..start:   mov          ax,data            mov          ds,ax            mov          ax,stack            mov          ss,ax            mov          sp,stacktop            mov          ah,9            mov          dx,szoveg            int          21h            mov          ax,4c00h            int          21h   segment data   szoveg  db    'hello world!$'   segment stack stack   resb 64   stacktop:
Fordítása:
nasm -f obj -w+orphan-labels -omyprog.obj myprog.asm
alink myprog.obj -oEXE