===============================================================================
Date: 08-14-95 Time: 08:31p Number: 1949
From: Harald Landro Refer: 1943
To: Bjørn Stærk Board ID: INFOLINK Reply:
Subject: ASM vs BC++ 32: Programming/ Status: Public
-------------------------------------------------------------------------------
BS>OK, men hvis jeg da skal bruke disse rutinene i ett C-program,
>hva gjør jeg da?
Da må du bare skrive ASM-funksjonen i TASM. Funksjonen skal ha akkurat
samme navn som den har i C-programmet ditt, med ett unntak: det skal
ha en underscore (_) foran (streken heter underscore på engelsk, jeg
vet ikke hva den heter på norsk). Hvis du vil kalle på en C-rutine, så
setter du (som du sikkert vet) argumentene på stack'en i omvendt
rekkefølge, og call'er rutinen med underscore (_) foran. Ellers må du
hele tiden huske på at C setter argumentene på stack'en i *omvendt*
rekkefølge, og dermed får du argumentene i *riktig* rekkefølge når de
når rutinen din. Hvis du vil returnere noe, skal returen stå i AX hvis
det er WORD (int eller near *), eller DX:AX hvis det er DWORD (long
eller far *). Håper du forstår, jeg er ikke så flink til å forklare...
Her er i allefall et lite eksempel:
/* I asmprove.c */
extern int _AsmRutine( int );
void SkrivTall( int a, int b )
{
printf( "%d %d", a, b );
}
void Main( void )
{
printf( "AsmProve returnerer: %d", _AsmRutine( 4 ) );
}
/* Slutt asmprove.c */
;Start asmprove.asm
PROC NEAR _AsmProve
push bp
mov bp, sp ; Sett opp standard stack frame
mov ax, 3
push ax ; *Andre* argument
mov ax, 7
push ax ; *Første* argument
call _SkrivTall ; Kall på SkrivTall
add sp, 4 ; I C har rutinen som kaller ansvaret
; for å rydde opp i stacken etter
; funksjons-tall
mov ax, [bp+2] ; AsmProve returnerer første argument
; (som ligger ved BP+2 (tror jeg...))
pop bp ; Rydd opp og
ret ; Returner...
ENDP
;Slutt på asmprove.asm
Det er noe mer du må gjøre, som å deklarere _SkrivTall i asmprove.asm.
Jeg er ganske sikker på at dette virker (så snart de syntaktiske
feilene er borte... ;-)), men jeg har ikke testet det... Spør meg hvis
det er noe du ikke forstår, så skal jeg *prøve* å forklare det ;-)
Harald Landro
---
■ 1st 1.11 #3164 ■ Bedre med en pc på pulten enn ti i butikken
===============================================================================