Külső assembly függvény illesztése C programhoz

Külső assembly nyelvű függvény illesztése C programhoz a következő képpen zajlik (Windows alatt):

  1. megírjuk a függvényt megvalósító assembly nyelvű forrásfájlt *.asm néven
  2. a nasm nevű fordítóprogrammal előállítjuk az *.asm fájlból a megfelelő *.obj fájlt
  3. megírjuk a C nyelvű főprogramot *.c néven
  4. a gcc nevű fordítóprogrammal előállítjuk az *.obj és a *.c fájlból a futtatható *.exe fájlt.

Az *.asm és a *.c fájl előállítása bármilyen ascii szövegszerkesztővel történhet, például Notepad.exe, PsPad, UltraEdit, EditPlus, stb..

Ha a DJGPP és a NASM a megfelelő módon fel van telepítve, akkor az alábbi fájlokon kirpóbálható a fordítás:

duplaz.asm:
1
2
3
4
5
6
7
8
9
10
11
12
global _Duplaz
section .text

_Duplaz:
    push ebp
    mov  ebp, esp
    mov  eax, [ ebp + 8 ]
    shl  eax, 1
    mov  esp, ebp
    pop  ebp
    ret
	
duplaz.c:
1
2
3
4
5
6
#include "stdio.h"

int main( void ) {
    printf( "a hat duplaja: %d", Duplaz(6) );
}

Tedd a következőket:

  1. Ha még nincs feltelepítve a DJGPP és a NASM, akkor telepítsd fel őket (telepítési leírás itt)
  2. Hozz létre egy könyvtárat a programod számára, például: d:\home\halmai\asmtest
  3. Másold bele a fenti duplaz.asm és duplaz.c fájlokat
  4. DOS parancssorból, a fenti könyvtárban állva, add ki a következő parancsokat:
    nasm -f win32 duplaz.asm
    gcc duplaz.c duplaz.obj -o duplaz.exe
    (Az előbbi parancs létrehozza a duplaz.asm-ből a duplaz.obj-t, az utóbbi pedig a duplaz.c-ből és a duplaz.obj-ből hozza létre a duplaz.exe-t.)
  5. Futtasd le a kapott duplaz.exe-t az alábbi paranccsal:
    duplaz.exe
    A képernyőn ez fog megjelenni:
    A hat duplaja: 12.
    A számolást az assembly nyelven, a kiírást pedig a C nyelven írt kód végezte.

Telepítési leírás a DJGPP-hez és a NASM-hoz, Windows XP-re

A programok telepítéséhez tedd a következőket:

  1. Töltsd le a NASM-ot és a DJGPP-t innen. (Frissebb verzióik a http://nasm.sourceforge.net és a http://www.delorie.com/djgpp címen érhetők el, de onnan nem egyszerű kiválasztani a letöltendő fájlokat.)
  2. A nasm-ot tartalmazó ZIP fájlból a nasm.exe-t másold a c:\Program files\nasm\ alkönyvtárba
  3. A djgpp_installed.zip-ben található összes fájlt másold a c:\Program files\djgpp\ alkönyvtárba. Ügyelj arra, hogy a ZIP-ben lévő könyvtárstruktúra megmaradjon! WinZip-ből "áthúzni" tehát nem lehet a fájlokat, hanem az Extract menüpontot kell használni. TotalCommander-rel egyszerűbb a dolog.
  4. A PATH környezeti változóhoz add hozzá a c:\Program files\djgpp\bin és a c:\Program files\nasm\ alkönyvtárakat. Windows XP alatt ez véglegessé tehető a Start => Beállítások => Vezérlőpult => Rendszer => Speciális => Környezeti változók útvonalon haladva. Itt a Rendszerváltozók közül a Path-t kiválasztva a Szerkesztés gombbal módosíthatod az értékét. A Változó értéké-t módosítsd úgy, hogy pontosvesszővel elválasztva az eddigi érték mögé írod a két alkönyvtár nevét.
  5. Ugyanitt a DJGPP környezeti változó értékét is be kell állítani: az aktuális felhasználó felhasználói változói közé egy Új változót kell felvinni. A Változó neve legyen DJGPP, a értéke pedig c:\Program Files\djgpp\djgpp.env. Ettől kezdve minden MS DOS Parancssor indításakor ezek az értékek helyesen lesznek beállítva. Figyelem! A környezeti változók átállítása a Total Commander-ben és az ő DOS ablakaiban csak a TC újraindítása után jut érvényre, ezért újra kell őket indítani.
  6. A tepelítés sikeréről meggyőződhetsz, ha indítasz egy DOS Parancssort (Start => Programok => Kellékek => Parancssor). A nasm.exe -h és a gcc.exe --help parancsokat kiadva a két programnak el kell indulnia, és a súgót (hosszú szöveg) meg kell jeleníteniük.