EMAWP: Różnice pomiędzy wersjami
(Utworzono nową stronę "EMAWP to biblioteka i narzędzia pozwalające operować na liczbach długich i zmiennoprzecinkowych w taki sam sposób, w jaki robi to Arytmometr Wielokrotnej Precyzji...") |
Nie podano opisu zmian |
||
Linia 1: | Linia 1: | ||
__NOTOC__ | |||
EMAWP to biblioteka i narzędzia pozwalające operować na liczbach długich i zmiennoprzecinkowych w taki sam sposób, w jaki robi to [[Arytmometr Wielokrotnej Precyzji]]. Biblioteka używana jest przez emulator [[EM400]] do realizowania funkcjonalności AWP, oraz przez assembler [[EMAS]] i deassembler [[EMDAS]] do konwersji liczb zmiennoprzecinkowych między konwencją zapisu MERY-400 a formatem systemu, na którym narzędzia działają. | EMAWP to biblioteka i narzędzia pozwalające operować na liczbach długich i zmiennoprzecinkowych w taki sam sposób, w jaki robi to [[Arytmometr Wielokrotnej Precyzji]]. Biblioteka używana jest przez emulator [[EM400]] do realizowania funkcjonalności AWP, oraz przez assembler [[EMAS]] i deassembler [[EMDAS]] do konwersji liczb zmiennoprzecinkowych między konwencją zapisu MERY-400 a formatem systemu, na którym narzędzia działają. | ||
Wersja z 19:19, 9 sty 2016
EMAWP to biblioteka i narzędzia pozwalające operować na liczbach długich i zmiennoprzecinkowych w taki sam sposób, w jaki robi to Arytmometr Wielokrotnej Precyzji. Biblioteka używana jest przez emulator EM400 do realizowania funkcjonalności AWP, oraz przez assembler EMAS i deassembler EMDAS do konwersji liczb zmiennoprzecinkowych między konwencją zapisu MERY-400 a formatem systemu, na którym narzędzia działają.
Repozytorium źródeł EMAWP: https://github.com/jakubfi/emawp
Z biblioteką dostarczane jest narzędzie emawp pozwalające wykonywać operacje AWP na liczbach zmiennoprzecinkowych w linii poleceń. Jego wywołanie ma jedną z postaci:
emawp [-v] <argumrnt> emawp [-v] -n <argument> emawp [-v] -a|-s|-m|-d <argument> <argument> emawp -h
gdzie:
- argument - liczba zmiennoprzecinkowa (np. 1.4512) lub trzy 16-bit liczby hexadecymalne (np. 0x4234 0xe3fa 0x0001)
- -n - normalizacji argumentu
- -a - wykonanie operacji dodawania argumentów
- -s - wykonanie operacji odejmowania argumentów
- -m - wykonanie operacji mnożenia argumentów
- -d - wykonanie operacji dzielenia argumentów
- -v - włączenie trybu gadatliwego
- -h - wyświetlenie pomocy.
Przykłady użycia
Normalizacja
Liczba zmiennoprzecinkowa zapisana w postaci używanej przez AWP jako 0x2f00 0x0000 0x0002 ma wartość 1.46875, ale jest zdenormalizowana. Znormalizować ją można następująco:
> emawp -n 0x2f00 0x0000 0x0002 in1: DENORM ---- 0x2f00 0x0000 0x0002 -> 1.468750000000000000000000000000000000000000 norm: OK ---- 0x5e00 0x0000 0x0001 -> 1.468750000000000000000000000000000000000000
Operacje arytmetyczne
Wykonanie dodawania liczby 0.5 i 1.5 w postaci używanej przez AWP ma postać:
> emawp -a 0x4000 0x0000 0x0000 0x6000 0x0000 0x0001 in1: OK ---- 0x4000 0x0000 0x0000 -> 0.500000000000000000000000000000000000000000 in2: OK ---- 0x6000 0x0000 0x0001 -> 1.500000000000000000000000000000000000000000 add: OK ---- 0x4000 0x0000 0x0002 -> 2.000000000000000000000000000000000000000000
I jest ono równoznaczne wykonaniu tej samej operacji z użyciem zapisu z kropką:
> emawp -a 0.5 1.5 in1: OK ---- 0x4000 0x0000 0x0000 <- 0.500000000000000000000000000000000000000000 in2: OK ---- 0x6000 0x0000 0x0001 <- 1.500000000000000000000000000000000000000000 add: OK ---- 0x4000 0x0000 0x0002 -> 2.000000000000000000000000000000000000000000
Typy argumentów można również mieszać.
Flagi i błędy
Zgodnie z zachowaniem AWP, emawp prezentuje flagi i błędy operacji. Druga kolumna wyjścia opisuje stan operacji:
- OK - poprawny
- UDFLOW - podmiar dzielenia zmiennoprzecinkowego
- OVFLOW - nadmiar dzielenia zmiennoprzecinkowego
- DENORM - argument zdenormalizowany
Kolumna trzecia zawiera flagi, które ustawiła operacja arytmetyczna. Na czterech kolejnych pozycjach zapalić się mogą kolejno:
- Z - zero
- M - minus
- C - przeniesienie
- V - przepełnienie