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
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?
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: