Assembler

погода в Горловке | Спутниковые снимки, донецк днепропетровск запорожья. |





8087
. - ,
.
, ;
,
X.
. 7.24.
8087 10
, .

 
10**X = 2**(X*Log2(10))
 
.
Log210,
X, 2, E.

8087. "?" ,
Microsoft (R) Macro Assembler Version 5.00 1/1/80 04:04:40
. 7.24 10**ST Page 1-1
 
PAGE ,132
TITLE . 7.24 10**ST
0000 CODE SEGMENT PUBLIC
ASSUME CS:CODE,DS:CODE
PUBLIC TEN_TO_X
0000 ???? OLD_CW DW ?
0002 ???? NEW_CW DW ?
;--------------------------------------------
;
; 8087 10 .
; : X ST(0)
; : 10**X ST(0)
; 8087
; - .
;--------------------------------------------
0004 TEN_TO_X PROC NEAR
;----ST(0)------;-----ST(1)-----;--ST(2)--
; X ; ? ; ?
0004 9B D9 E9 FLDL2T ; LOG2(10) ; X ; ?
0007 9B DE C9 FMULP ST(1),ST(0) ; X*LOG2(10)=E ; ? ; ?
000A D9 3E 0000 R FNSTCW OLD_CW ;---------------;---------------;--------
000E 9B FWAIT ;
000F A1 0000 R MOV AX,OLD_CW ;
0012 25 F3FF AND AX,NOT 0C00H ;
0015 0D 0400 OR AX,0400H ;
0018 A3 0002 R MOV NEW_CW,AX
001B 9B D9 2E 0002 R FLDCW NEW_CW ;---------------;---------------;--------
0020 9B D9 E8 FLD1 ; 1 ; E ; ?
0023 9B D9 E0 FCHS ; -1 ; E ; ?
0026 9B D9 C1 FLD ST(1) ; E ; -1 ; E
0029 9B D9 FC FRNDINT ; INT(E) = I ; -1 ; E
002C 9B D9 2E 0000 R FLDCW OLD_CW ; ; ;
0031 9B D9 CA FXCH ST(2) ; E ; -1 ; I
0034 9B D8 E2 FSUB ST(0),ST(2) ; E - I = F ; -1 ; I
0037 9B D9 FD FSCALE ; F*2**-1 = F/2 ; -1 ; I
003A 9B D9 F0 F2XM1 ; (2**F/2)-1 ; -1 ; I
003D 9B DE E1 FSUBRP ST(1),ST(0) ; 2**F/2 ; I ; ?
0040 9B D8 8E 0000 U FMUL ST(0) ; 2**F ; I ; ?
0045 9B D9 FD FSCALE ; (2**F)*(2**I) ; I ; ?
0048 9B D9 C9 FXCH ST(1) ; I ; 2**(I+F) ; ?
004B 9B D8 D9 FCOMP ; 2**(I+F) ; ? ; ?
004E C3 RET ; 10**X ; ? ; ?
004F TEN_TO_X ENDP
004F CODE ENDS
END
 
. 7.24 10**ST
 
.
,
.
, 8087
, .
F2XM1 2 X, X
1/2. , E
; FSCALE 2
, F2XM1 .
 
E
. -
8087,
. ,
,
, .
, F2XM1.
 
FWAIT
FNSTCW.
,
.
, 8087
. , FWAIT
.
 
FRNDINT
E .
E ,
E . E
= I + F,
 
2**E = 2**I*2**F
 
.
F 1/2,
F2XM1.
-1, , F 2,
F/2. , FSCALE,
ST0 2 ,
ST1. ST1 -1,
1/2.
, ST0 1/2.
 
F2XM1 2 F/2, -1
-1,
F2XM1.
-1 . 2F/2 , ST0
2F.
ST1, FSCALE 2I
2F, ST0, .
FCOMP I
.