Tvůrce webu je i pro tebe! Postav třeba web. Bez grafika. Bez kodéra. Hned.
wz

<< Zpět

česky: , English:

FLOAT

Aritmetika s plovoucí čárkou

Knihovní funkce aritmetiky s plovoucí čárkou simulují matematický koprocesor pro výpočty s jednoduchou přesností. Pro velký rozsah kódu jsou zde pouze nejzákladnější matematické operace. Chybí goniometrické funkce, mocniny, logaritmy. Důvodem chybějících funkcí je i to, že interní výpočty s jednoduchou přesností by způsobovaly příliš velkou chybovost výsledku. Je-li k dispozici matematický koprocesor, použije se pro složitější výpočty jeho podpora. Může tím vzniknout malá odchylka na posledních desetinných místech oproti emulovanému výpočtu.

Čísla s plovoucí čárkou v jednoduché přesnosti odpovídají formátu IEEE 754-1985. Velikost operandu je 4 bajty, z toho:

- bit 31: znaménkový bit, 1=negativní číslo, 0=pozitivní číslo
- bit 23..30: exponent (8 bitů) posunutý o 127 (tj. nulový exponent, např. pro číslo "1", má posunutou hodnotu 127)
- bit 0..22: mantisa (23 bitů) bez nejvýznamnějšího bitu "1"

Exponent je v rozsahu -126 .. +127 (v posunuté hodnotě 1 .. 254). Exponent -127 (posunutá hodnota 0) představuje nulu. Na rozdíl od fyzického koprocesoru se zde nepočítá se subnormálními hodnotami (tj. s exponentem -127 a nenulovou mantisou). Exponent +128 (posunutá hodnota 255) představuje nekonečno NaN (přetečení výsledku). Záporné nekonečno se nepoužívá.

Čísla jsou v rozsahu 1.1754944e-38 (=00800000h) až 1.7014118e+38 (=7F000000h), kladná nebo záporná.


FloatZero - floating-point zero constant

OUTPUT:
DX:AX = 0.0


FloatOne - floating-point one constant

OUTPUT:
DX:AX = 1.0


FloatInf - floating-point infinity constant

OUTPUT:
DX:AX = 1.#INF000


FloatPi - floating-point PI constant

OUTPUT:
DX:AX = PI constant (3.14159265)


FloatNeg - floating-point negate number

INPUT:
DX:AX = number

OUTPUT:
DX:AX = result

NOTES: Only highest byte of number (DH) is needed.


FloatAbs - floating-point absolute number

INPUT:
DX:AX = number

OUTPUT:
DX:AX = result

NOTES: Only highest byte of number (DH) is needed.


FloatCmp - floating-point comparison

INPUT:
DX:AX = first operand
CX:BX = second operand

OUTPUT:
AL = 1 if first > second, 0 if first = second, -1 if first < second
SF, ZF = as for "signed CMP first,second", use JL, JG, JLE,...


FloatCmpZ - floating-point comparison with zero

INPUT:
DX:AX = operand

OUTPUT:
AL = 1 if operand > 0, 0 if operand = 0, -1 if operand < 0
SF, ZF = as for "signed CMP operand,0", use JL, JG, JLE,...


FloatFact - floating-point factorial

INPUT:
AL = integer number 0..34

OUTPUT:
DX:AX = floating-point number n!


FloatInvFact - floating-point invert factorial

INPUT:
AL = integer number 0..34

OUTPUT:
DX:AX = floating-point number 1/n!


FloatFromWord - import floating-point from unsigned word

INPUT:
AX = integer unsigned number

OUTPUT:
DX:AX = floating-point number


FloatFromDWord - import floating-point from unsigned dword

INPUT:
DX:AX = integer unsigned number

OUTPUT:
DX:AX = floating-point number


FloatFromSWord - import floating-point from signed word

INPUT:
AX = integer signed number

OUTPUT:
DX:AX = floating-point number


FloatFromSDWord - import floating-point from signed dword

INPUT:
DX:AX = integer signed number

OUTPUT:
DX:AX = floating-point number


FloatToWord - export floating-point to unsigned word

INPUT:
DX:AX = floating-point number

OUTPUT:
AX = integer unsigned number


FloatToDWord - export floating-point to unsigned dword

INPUT:
DX:AX = floating-point number

OUTPUT:
DX:AX = integer unsigned number


FloatToSWord - export floating-point to signed word

INPUT:
DX:AX = floating-point number

OUTPUT:
AX = integer signed number


FloatToSDWord - export floating-point to signed dword

INPUT:
DX:AX = floating-point number

OUTPUT:
DX:AX = integer signed number


FloatAdd - floating-point addition

INPUT:
DX:AX = first operand
CX:BX = second operand

OUTPUT:
DX:AX = result


FloatSub - floating-point subtraction

INPUT:
DX:AX = first operand
CX:BX = second operand

OUTPUT:
DX:AX = result (= first - second)


FloatMul - floating-point multiplication

INPUT:
DX:AX = first operand
CX:BX = second operand

OUTPUT:
DX:AX = result


FloatDiv - floating-point division

INPUT:
DX:AX = first operand (dividend)
CX:BX = second operand (divisor)

OUTPUT:
DX:AX = result (quotient)


FloatInv - floating-point inverse (reciprocal) value

INPUT:
DX:AX = operand

OUTPUT:
DX:AX = result (1/operand)


Constants:

FLOAT_INF: (=7F800000h) floating-point infinity value
FLOAT_ZERO: (=0) floating-point zero value
FLOAT_ONE: (=3F800000h) floating-point one value
FACT_MAX: (=34) max. valid factorial index


Zdrojový kód FLOAT.ASM

<< Zpět