This is an old revision of the document!
Using the fscale instruction
by Tony Tooth, January 2016
Randall Hyde's book “The Art of Assembly Language” omits to cover or even mention the fscale instruction in the main text or in the index, although it is in his Table B-2: Floating Point Instruction Set.
fscale (I discovered only late in 2015 - after more than 10 years experience programming in assembly language) is a fast and efficient way to implement the exponential function in assembly language. The way I did this hitherto was incredibly cumbersome. I have written a simple sub-routine in assembly language to illustrate the use of fscale. Note that my illustrative routine does not check for out-of-bounds numbers.
Edit by Richard Russell, January 2016:
An alternative way of computing the exponential function in BB4W v6 assembly language is to call the internal EXP routine, which is exposed via the @fn%() jump table, as follows (it uses fscale internally):
@% = &1415 REPEAT INPUT '"Enter a value: " x PRINT "BBC version of EXP(x) = "; EXP(x) PRINT "ASM version of EXP(x) = "; FNexp(x) UNTIL FALSE END
DEF FNexp(x) LOCAL P%, y PRIVATE X% IF X% = 0 THEN DIM P% 50 [OPT 2 .X% mov edx,[^x] mov ecx,[^x+4] mov bx,[^x+8] call @fn%(16) ; xexp mov [^y],edx mov [^y+4],ecx mov [^y+8],bx ret ] ENDIF x *= 1.0 CALL X% = y