- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
org 100h
Begin:
call FPU_init
fild [Number] ;сложение
fidiv [Number2] ;деление
frndint ;округление (в сторону нуля-
call Ar_prog ;т. к. регистр RC установлен в 11)
fimul [Number2]
fild [Number]
fisub [Number10]
fidiv [Number3]
frndint
call Ar_prog
fimul [Number3]
fild [Number]
fidiv [Number4]
frndint
call Ar_prog
fimul [Number4]
fincstp
fincstp
fadd st0, st2
fsub st0, st6
fist [Number9]
call FPU_init
fild [Number5]
xor cx,cx
Out1:
fild [Number9] ;помещаем значение, полученное после вычитания
inc cx ;увеличиваем cx
fcom st1 ;сравниваем значение с 10
fstsw [Number14]
mov ax, [Number14]
sahf
jb Out2 ;если меньше 10, перейти к Out2
fdiv st0,st1 ;делим на 10
frndint ;округляем
fistp [Number12] ;результат - в Number12
fild [Number9] ;снова загружаем
fprem ;остаток от деления на 10
fiadd [Number15] ;прибавляем 30h
fistp [Number13] ;выгружаем в память
push [Number13] ;толкаем в стек
fild [Number12] ;результат деления - в Number9
fistp [Number9]
jmp Out1 ;цикл
Out2:
mov di, String ;записываем смещение строки
fiadd [Number15]
fist [Number13]
push [Number13]
Out3:
pop dx ;выталкиваем коды цифр, начиная с конца
mov [di],dl ;записываем их в строку
inc di ;увеличиваем смещение
loop Out3 ;повторяем это
mov [di], byte 24h ;записываем код конца строки для вывода
mov dx, String ;записываем смещение строки в
mov ah, 09h ;вызываем прерывание
int 21h
int 20h
Ar_prog:
fist [Number9]
fimul [Number9]
fild [Number9]
fadd st0,st1
fidiv [Number8]
frndint
ret
FPU_init:
finit ;инициализация сопроцессора
fstcw [Number6] ;получение контрольного слова
mov ax, [Number7] ;установка десятого и одиннадцатого
or [Number6], ax ;битов слова в 11 (можно две команды bts)
fldcw [Number6] ;загрузка контрольного слова в FPU
ret
Number dw 1000d
Number2 dd 3d
Number3 dw 5d
Number4 dw 15d
Number5 dw 10d
Number6 dw ?
Number7 dw 0c00h
Number8 dw 2d
Number9 dd ?
Number10 dw 1d
Number11 db 30h
Number12 dd ?
Number13 dw ?
Number14 dw ?
Number15 dd 0030h
String db ?
Первый в жизни осмысленный код. Я нормален?