Hoe functie prototype opstellen voor Visual C++

Status
Niet open voor verdere reacties.

Stephane

Gebruiker
Lid geworden
21 apr 2007
Berichten
10
Hallo iedereen

Ik heb een eerste subroutine geschreven in assembler en bedoeling is dat deze assembler routine wordt geimplementeerd in een Visual C++ project. Vooralleer ik een DLL kan schrijven om dan te gebruiken in mijn MFC Windows project zou ik graag weten hoe ik hier uit mijn assembler code het prototype kan vinden

Dit is mijn voluitgeschreven assembler subroutine

Code:
;=====================================================================
; PAGE .132
; TITLE : Sinus, Cosinus tabel
; Bepaal de sinus en cosinus van een hoek door een lookup table
; Invoer : AX = Hoek (O tot 360)
; Uitvoer: BX = Sinus en Cosinus van een hoek (magnitude en sign form
;=====================================================================


;=====================================================================
;=====================================================================

DATA SEGMENT
	SINUS_TABLE	DW	0, 175, 349, 523, 698, 872			; 0-5°
				DW	1045, 1219, 1392, 1564, 1736		; 6-10°
				DW	2908, 2079, 2250, 2419, 2588		; 11-15°
				DW	2756, 2924, 3090, 3256, 3420		; 16-20°
				DW	3584, 3746, 3907, 4067, 4226		; 21-25°
				DW	4384, 4550, 4695, 4848, 5000		; 26-30°
				DW	5150, 5299, 5446, 5592, 5736		; 31-35°
				DW	5878, 6018, 6157, 6293, 6428		; 36-40°
				DW	6561, 6691, 6820, 6947, 7071		; 41-45°
				DW	7193, 7313, 7431, 7547, 7660		; 46-50°
				DW	7771, 7880, 7986, 8090, 8191		; 51-55°
				DW	8290, 8387, 8480, 8572, 8660		; 56-60°
				DW	8746, 8829, 8910, 8988, 9063		; 61-65°
				DW	9135, 9205, 9272, 9336, 9397		; 66-70°
				DW	9455, 9511, 9563, 9613, 9659		; 71-75°
				DW	9703, 9744, 9781, 9816, 9848		; 76-80°
				DW	9877, 9903, 9926, 9945, 9962		; 80-85°
				DW	9976, 9986, 9994, 9998, 10000		; 86-90°

COSIN_TABLE		DW	10000, 9998, 9994, 9986, 9976, 9962	; 
				DW		
    ; add your data here!
    pkey db "press any key...$"
ENDS

STACK SEGMENT
    DW   128  dup(0)
ENDS

CODE SEGMENT

	ZOEK_SINUS	PROC	FAR
				
				;===============================================
				; Veiligstellen van de registers van oproepende
				; programma
				;===============================================
				push	ds
				push	ax
				push	cx
				
				;===============================================
				; Initialisatie van data segment
				;===============================================
				mov 	ds, DATA
				mov		ds, bx
				
				;===============================================
				; Initialisatie van de tekenbit
				;===============================================
				sub		cx, cx				; tekenbit := 0
				
				;===============================================
				; Is de hoek kleiner dan 180° ?
				; True  : tekenbit op 0 zetten
				; False : zet tekenbit op 1
				;===============================================
				cmp		ax, 181				; hoek < 180° ?
				jb		SIN_POSITIEF		; Ja : tekenbit := 0
				mov		cx, 8000h			; Neen : tekenbit := 1
				sub		ax, 180				; maak verschil van 180 van de hoek
				
				;===============================================
				; De Sinus is positief
				; Is de hoek kleiner dan 90° ?
				; True  : Haal de sinuswaarde op
				; False : Trek de hoek af van 180°
				;===============================================
SIN_POSITIEF:	cmp		ax, 91				; hoek < 90°
				jb		GET_SINUS			; haal de sinuswaarde op
				neg		ax					; neen trek hoek af van 180
				add		ax, 180				; eerst 2c nemen en dan +180
				
				;===============================================
				; Ophalen van de sinuswaarde van de lookup table
				;===============================================
GET_SINUS:		mov		bx, ax				; maak van hoek wordindex
				shl		bx, 1				; vermenigvuldig met 2^1
				mov		bx, SINUS_TABLE[bx]	; ophalen uit lookup table
				or		bx, cx				; zet sinus met tb
				
				;===============================================
				; Alles terugzetten in de oorspronkelijke staat
				; Alle registers van de stack afhalen
				;===============================================
				
				pop		cx
				pop		ax
				pop		ds
				
				ret
				
	ZOEK_SINUS	ENDP			
ENDS
END

Kan iemand mij helpen hoe ik dat prototype opstel?
Welke zijn de invoer argumenten en welke is de terugkeerwaarde en waar wijzig ik dat in mijn inline assembly?
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan