_GETTING NUMERIC COPROCESSORS UP TO SPEED_ by John H. Letcher Example 1: (a) SUBROUTINE ABC(X,Y,Z) Z=X+Y RETURN END (b) ARGLOC DW OFFSET X ; argument 1 DW SEG X DW OFFSET Y ; argument 2 DW SEG Y DW OFFSET Z ; argument 3 DW SEG Z (c) MOV AX,SEG ARGLOC MOV ES,AX MOV BX,OFFSET ARGLOC CALL ABC Example 2: TITLE ABC CODE SEGMENT 'CODE' ; SUBROUTINE ABC(X,Y,Z) ABC PROC FAR PUBLIC ABC LDS SI,ES:[BX] ; NOW DS:SI POINTS TO X FLD DWORD PTR [SI] ; LOADS THE VALUE OF X LDS SI,ES:4[BX] ; NOW DS:SI POINTS TO Y FADD DWORD PTR [SI] ; ADDS Y TO X LDS SI,ES:8[BX] ; NOW DS:SI POINTS TO Z FSTP DWORD PTR [SI] ; STORES VALUE INTO Z RET ABC ENDP CODE ENDS END Example 3: INCLUDE FCODE.INC TITLE ABC CODE SEGMENT 'CODE' ; SUBROUTINE ABC(X,Y,Z) .386 ABC PROC FAR mov eax,0d000h ; EMC mov fs,eax ; EMC PUBLIC ABC LDS SI,ES:[BX] ; NOW DS:SI POINTS TO X ; FLD DWORD PTR [SI] ; LOADS THE VALUE OF X mov eax,DWORD PTR [SI] ; EMC mov DWORD PTR FS:mflds,eax ; EMC LDS SI,ES:4[BX] ; NOW DS:SI POINTS TO Y ; FADD DWORD PTR [SI] ; ADDS Y TO X mov eax,DWORD PTR [SI] ; EMC mov DWORD PTR FS:mfadds,eax ; EMC LDS SI,ES:8[BX] ; NOW DS:SI POINTS TO Z ; FSTP DWORD PTR [SI] ; STORES VALUE INTO Z mov eax,DWORD PTR FS:mfstps ; EMC mov DWORD PTR [SI],eax ; EMC RET ABC ENDP CODE ENDS END