3012
edycji
(Nie pokazano 7 pośrednich wersji utworzonych przez tego samego użytkownika) | |||
Linia 1: | Linia 1: | ||
EMAS jest assemblerem skrośnym dla MERRY 400, używającym, w odróżnieniu od [[ASSEM]], składni bliższej współczesnym assemblerom, oraz mnemoników MERY 400 (ale bez przyrostków zależnych od lokalizacji argumentu, patrz: [[Lista rozkazów]]). | EMAS jest assemblerem skrośnym dla MERRY 400, używającym, w odróżnieniu od [[ASSEM]], składni bliższej współczesnym assemblerom, oraz mnemoników MERY 400 (ale bez przyrostków zależnych od lokalizacji argumentu, patrz: [[Lista rozkazów]]). | ||
Repozytorium źródeł EMAS: https://github.com/jakubfi/emas | |||
= Wywołanie = | = Wywołanie = | ||
Linia 54: | Linia 56: | ||
?GVZ | ?GVZ | ||
EMAS | Wewnętrznie EMAS operuje na 32-bit liczbach ze znakiem. Kiedy ostateczna wartość będąca wynikiem operacji ma zostać umieszczona w obiekcie wynikowym, jej zakres jest sprawdzany i użytkownik jest informowany o ewentualnym jego przekroczeniu. Wyjątkiem jest argument dyrektywy '''.dword''', który jest 32-bit liczbą w kodzie U2. | ||
=== Znaki === | === Znaki === | ||
Linia 60: | Linia 62: | ||
EMAS pozwala na zapisywanie stałych całkowitoliczbowych również przy pomocy znaków, dwuznaków lub trójznaków. Znaki pojedyncze oraz dwuznaki obejmują cały zakres znaków ASCII i można je podawać również używając sekwencji unikowych. Trójznaki pozwalają kodować jedynie znaki poprawne dla [[CROOK-5 - Interpretator zleceń użytkownika - XOSL#Kod R40|kodu R40]]. | EMAS pozwala na zapisywanie stałych całkowitoliczbowych również przy pomocy znaków, dwuznaków lub trójznaków. Znaki pojedyncze oraz dwuznaki obejmują cały zakres znaków ASCII i można je podawać również używając sekwencji unikowych. Trójznaki pozwalają kodować jedynie znaki poprawne dla [[CROOK-5 - Interpretator zleceń użytkownika - XOSL#Kod R40|kodu R40]]. | ||
Znaki w pojedynczych cudzysłowach: | |||
'a', '\n', '\xa1', '\0177' | 'a', '\n', '\xa1', '\0177' | ||
kodowane są jako ich wartość w kodzie ASCII na młodszym bajcie słowa. | kodowane są jako ich wartość w kodzie ASCII na młodszym bajcie słowa. Dwuznaki: | ||
'ab', '\r\n', '\xaa\0001' | 'ab', '\r\n', '\xaa\0001' | ||
kodowane są jako wartości podanych znaków w kodzie ASCII odpowiednio na starszym i młodszym bajcie słowa. | kodowane są jako wartości podanych znaków w kodzie ASCII odpowiednio na starszym i młodszym bajcie słowa. Trójznaki: | ||
'abc' | 'abc', 'XYZ', '#_1' | ||
kodowane są w słowie za pomocą [[CROOK-5 - Interpretator zleceń użytkownika - XOSL#Kod R40|kodu R40]]. | |||
=== Liczby zmiennoprzecinkowe === | === Liczby zmiennoprzecinkowe === | ||
Linia 88: | Linia 90: | ||
=== Łańcuchy === | === Łańcuchy === | ||
Łańcuchy znaków są ciągami | Łańcuchy znaków są ciągami znaków ujętymi w podwójne cudzysłowy. Poszczególne znaki można zapisywać dosłownie, lub (w przypadku dyrektyw '''.ascii''' i '''.asciiz''') używając jednej z sekwencji unikowych: | ||
* \0'''yyy''' - gdzie '''yyy''' jest ósemkowym kodem znaku | * \0'''yyy''' - gdzie '''yyy''' jest ósemkowym kodem znaku | ||
Linia 150: | Linia 152: | ||
.global snprintf | .global snprintf | ||
.global strdup | .global strdup | ||
printf: | printf: | ||
... | ... | ||
Linia 156: | Linia 158: | ||
... | ... | ||
strdup: | strdup: | ||
procedura: | procedura: | ||
.global procedura | .global procedura | ||
Linia 276: | Linia 278: | ||
'''Składnia:''' .r40 ''łańcuch_r40'' | '''Składnia:''' .r40 ''łańcuch_r40'' | ||
Zapisuje w programie wynikowym podany łańcuch, kodując go po trzy znaki R40 na słowo maszynowe. | Zapisuje w programie wynikowym podany łańcuch, kodując go po trzy znaki R40 na słowo maszynowe. '''UWAGA:''' W kodzie R40 można użyuwać jedynie liter, liczb i znaków specjalnych: _, #, %. | ||
=== .res === | === .res === |