Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая работа по ТЯП(РЯП).doc
Скачиваний:
17
Добавлен:
01.05.2014
Размер:
572.42 Кб
Скачать

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

53