Int 21h; выведем цифру на экран
jmp pdl2; и продолжим
pdl3: pop DX; восстанавливаем регистры
pop CX
pop AX
ret
PrnDec ENDP
Main PROC FAR
push DS
sub AX,AX
push AX
mov AX,DATA
mov DS,AX
fninit; инициализация FPU
; ':='
fld _r2
fstp _v_v[0]
; ':='
fld _r4
fstp _v_v[4]
; ':='
fld _r5
fstp _v_v[8]
; 'LENGTH'
fldz
mov SI, 0
_l0:fld _v_v[SI]
fmul _v_v[SI]
fstp rTmp1
fadd rTmp1
add SI,4
cmp SI,12
jl _l0
fsqrt
fstp _r_id1
; ':='
fld _r_id1
fstp _r_r
; 'REL'
mov AX, 1
mov _i_exp1, AX
fld _r_r
fcomp _r6
fstsw AX
sahf
jb _l1
mov AX, 0
mov _i_exp1, AX
_l1:
; 'BF'
mov AX, _i_exp1
cmp AX, 0
jne _l2
jmp Llab1_if1
_l2:
; 'WRITE'
fld DWORD PTR _r_r
fldz
fcomp
fstsw AX
sahf
jbe _l3
fchs
fstp DWORD PTR _r_r
mov DX, OFFSET MINUS
call WriteMsg
_l3:
fstcw iTmp
and iTmp, 1111001111111111b
or iTmp, 0000010000000000b
fldcw iTmp
fld DWORD PTR _r_r
fistp iTmp
mov AX, iTmp
call PrnDec
mov DX, OFFSET DOT
call WriteMsg
mov CX,_i3
cmp CX,-1
jne _l4_0
mov CX,2
_l4_0:
fld DWORD PTR _r_r
fild iTmp
fstp rTmp1
fsub rTmp1
fmul rTmp
fst DWORD PTR _r_r
dec CX
cmp CX,0
jne _l4_1
fstcw iTmp
and iTmp, 1111001111111111b
or iTmp, 0000100000000000b
fldcw iTmp
_l4_1:fistp iTmp
mov AX, iTmp
call PrnDec
cmp CX,0
je _l4_2
jmp _l4_0
_l4_2:
; 'BRL'
jmp Llab2_if1
; 'DEFL'
Llab1_if1:
; 'WRITE'
fld DWORD PTR _r_r
fldz
fcomp
fstsw AX
sahf
jbe _l5
fchs
fstp DWORD PTR _r_r
mov DX, OFFSET MINUS
call WriteMsg
_l5:
fstcw iTmp
and iTmp, 1111001111111111b
or iTmp, 0000010000000000b
fldcw iTmp
fld DWORD PTR _r_r
fistp iTmp
mov AX, iTmp
call PrnDec
mov DX, OFFSET DOT
call WriteMsg
mov CX,_i8
cmp CX,-1
jne _l6_0
mov CX,2
_l6_0:
fld DWORD PTR _r_r
fild iTmp
fstp rTmp1
fsub rTmp1
fmul rTmp
fst DWORD PTR _r_r
dec CX
cmp CX,0
jne _l6_1
fstcw iTmp
and iTmp, 1111001111111111b
or iTmp, 0000100000000000b
fldcw iTmp
_l6_1:fistp iTmp
mov AX, iTmp
call PrnDec
cmp CX,0
je _l6_2
jmp _l6_0
_l6_2:
; 'DEFL'
Llab2_if1:
ret
Main ENDP
CODE ENDS
END Main