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):
- megírjuk a függvényt megvalósító assembly nyelvű forrásfájlt
*.asm néven
- a nasm nevű fordítóprogrammal előállítjuk
az *.asm fájlból a megfelelő
*.obj fájlt
- megírjuk a C nyelvű főprogramot *.c néven
- 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:
- Ha még nincs feltelepítve a DJGPP és a
NASM, akkor telepítsd fel őket
(telepítési leírás itt)
- Hozz létre egy könyvtárat a programod számára, például:
d:\home\halmai\asmtest
- Másold bele a fenti duplaz.asm és
duplaz.c fájlokat
- 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.)
- 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:
- 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.)
- A nasm-ot tartalmazó ZIP fájlból a nasm.exe-t másold a
c:\Program files\nasm\ alkönyvtárba
- 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.
- 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
=>
=>
=>
=>
=>
útvonalon haladva. Itt a közül a
-t kiválasztva a
gombbal módosíthatod az értékét. A -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.
- Ugyanitt a DJGPP környezeti változó értékét is be kell állítani: az aktuális felhasználó
közé egy
változót kell felvinni. A legyen
DJGPP, a 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.
- A tepelítés sikeréről meggyőződhetsz, ha indítasz egy DOS Parancssort
( =>
=>
=>
). 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.