EMAWP: Różnice pomiędzy wersjami

Z MERA 400 wiki
Przejdź do nawigacji Przejdź do wyszukiwania
(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