On Friday, July 1, 2016 at 12:35:24 PM UTC-7,
hughag...@gmail.com wrote:
> : csqr ( -- ) \ float: a ai -- product producti
> fover fdup f* fover fdup f* f- \ float: -- a ai a*a-ai*ai
> frot frot \ float: -- a*a-ai*ai a ai
> f* fdup f+ ; \ float: -- a*a-ai*ai a*ai+a*ai
> ...
> fvariable cc
> fvariable cci
> : <mandelbrot-iteration> ( -- count ) \ float: c cci -- z zi
> fover cc f! fdup cci f! \ float: -- z zi \ Z starts as C not as origin
> 1 begin
> csqr
> fswap cc f@ f+ fswap cci f@ f+
> 1+
> dup 1000 >= if exit then
> \ fover fover cabs 100.0e f> if exit then
> fover fdup f* fover fdup f* f+ 10000.0e f> if exit then \ replaces last line
> again ;
I did a disassembly of these two words in VFX. The disassembly of FLIT seems to be incorrect. Why does it say 989.68? The number is supposed to be 10000.
see csqr
CSQR
( 004DFBB0 D9C1 ) FLD ST(1)
( 004DFBB2 D9C0 ) FLD ST
( 004DFBB4 DEC9 ) FMULP ST(1), ST
( 004DFBB6 D9C1 ) FLD ST(1)
( 004DFBB8 D9C0 ) FLD ST
( 004DFBBA DEC9 ) FMULP ST(1), ST
( 004DFBBC DEE9 ) FSUBP ST(1), ST
( 004DFBBE D9C9 ) FXCH ST(1)
( 004DFBC0 D9CA ) FXCH ST(2)
( 004DFBC2 D9C9 ) FXCH ST(1)
( 004DFBC4 D9CA ) FXCH ST(2)
( 004DFBC6 DEC9 ) FMULP ST(1), ST
( 004DFBC8 D9C0 ) FLD ST
( 004DFBCA DEC1 ) FADDP ST(1), ST
( 004DFBCC C3 ) NEXT,
( 29 bytes, 15 instructions )
ok
see <mandelbrot-iteration>
<MANDELBROT-ITERATION>
( 004DFCD0 D9C1 ) FLD ST(1)
( 004DFCD2 DB3D200C4600 ) FSTP TBYTE [00460C20]
( 004DFCD8 D9C0 ) FLD ST
( 004DFCDA DB3D300C4600 ) FSTP TBYTE [00460C30]
( 004DFCE0 8D6DFC ) LEA EBP, [EBP+-04]
( 004DFCE3 895D00 ) MOV [EBP], EBX
( 004DFCE6 BB01000000 ) MOV EBX, 00000001
( 004DFCEB 90 ) NOP
( 004DFCEC 90 ) NOP
( 004DFCED 90 ) NOP
( 004DFCEE 90 ) NOP
( 004DFCEF 90 ) NOP
( 004DFCF0 E8BBFEFFFF ) CALL 004DFBB0 CSQR
( 004DFCF5 D9C9 ) FXCH ST(1)
( 004DFCF7 DB2D200C4600 ) FLD TBYTE [00460C20]
( 004DFCFD DEC1 ) FADDP ST(1), ST
( 004DFCFF D9C9 ) FXCH ST(1)
( 004DFD01 DB2D300C4600 ) FLD TBYTE [00460C30]
( 004DFD07 DEC1 ) FADDP ST(1), ST
( 004DFD09 43 ) INC EBX
( 004DFD0A 81FBE8030000 ) CMP EBX, 000003E8
( 004DFD10 0F8C01000000 ) JL/NGE 004DFD17
( 004DFD16 C3 ) NEXT,
( 004DFD17 D9C1 ) FLD ST(1)
( 004DFD19 D9C0 ) FLD ST
( 004DFD1B DEC9 ) FMULP ST(1), ST
( 004DFD1D D9C1 ) FLD ST(1)
( 004DFD1F D9C0 ) FLD ST
( 004DFD21 DEC9 ) FMULP ST(1), ST
( 004DFD23 DEC1 ) FADDP ST(1), ST
( FPlit: 989.68 )
( 004DFD25 E8D6B5FEFF ) CALL 004CB300 FLIT
( 004DFD34 E877ACFEFF ) CALL 004CA9B0 FCMP2
( 004DFD39 85DB ) TEST EBX, EBX
( 004DFD3B 8B5D00 ) MOV EBX, [EBP]
( 004DFD3E 8D6D04 ) LEA EBP, [EBP+04]
( 004DFD41 0F8501000000 ) JNZ/NE 004DFD48
( 004DFD47 C3 ) NEXT,
( 004DFD48 EBA6 ) JMP 004DFCF0
( 004DFD4A C3 ) NEXT,
( 123 bytes, 39 instructions )
ok
see flit
FLIT
( 004CB300 5A ) POP EDX
( 004CB301 DB2A ) FLD TBYTE 0 [EDX]
( 004CB303 83C20A ) ADD EDX, 0A
( 004CB306 FFE2 ) JMP EDX
...
ok
see fcmp2
FCMP2
( 004CA9B0 83ED04 ) SUB EBP, 04
( 004CA9B3 895D00 ) MOV [EBP], EBX
( 004CA9B6 D9C9 ) FXCH ST(1)
( 004CA9B8 DED9 ) FCOMPP
( 004CA9BA 9B ) FWAIT
( 004CA9BB DFE0 ) FSTSW AX
( 004CA9BD 66250041 ) AND AX, 4100
( 004CA9C1 0FB7D8 ) MOVZX EBX, AX
( 004CA9C4 C3 ) NEXT,
( 21 bytes, 9 instructions )
ok