3041
edycji
| (Nie pokazano 2 pośrednich wersji utworzonych przez tego samego użytkownika) | |||
| Linia 391: | Linia 391: | ||
EMAS używa mnemoników z [[Lista rozkazów|oryginalnej listy rozkazów]] MERY-400, ale wprowadza zmiany składniowe wynikające z innego zapisu argumentu normalnego. Nie używa przyrostków zależnych od lokalizacji argumentu. Czyli np. rozkaz ```LWn`` z listy rozkazów, gdzie ```n``` zmienia się w zależności od typu argumentu normalnego, ma zawsze mnemonik ```LW```. Lokalizację argumentu określa składnia dla rejestrów rB i rC. Poniższe przykłady ładowania wartości do rejestru r1 przedstawiają wszystkie możliwe postacie argumentu normalnego: | EMAS używa mnemoników z [[Lista rozkazów|oryginalnej listy rozkazów]] MERY-400, ale wprowadza zmiany składniowe wynikające z innego zapisu argumentu normalnego. Nie używa przyrostków zależnych od lokalizacji argumentu. Czyli np. rozkaz ```LWn`` z listy rozkazów, gdzie ```n``` zmienia się w zależności od typu argumentu normalnego, ma zawsze mnemonik ```LW```. Lokalizację argumentu określa składnia dla rejestrów rB i rC. Poniższe przykłady ładowania wartości do rejestru r1 przedstawiają wszystkie możliwe postacie argumentu normalnego: | ||
* LW r1, r2 - ładowana jest wartość z rejestru r2 | * LW r1, r2 - ładowana jest wartość z rejestru r2 | ||
* LW r1, r2+r3 - ładowana jest wartość z rejestru r2 B-modyfikowana | * LW r1, r2+r3 - ładowana jest wartość z rejestru r2 sumowana z (B-modyfikowana) rejestrem r3 | ||
* LW r1, [r2] - ładowana jest wartość z komórki pamięci (D-modyfikacja) wskazanej zawartością rejestru r2 | * LW r1, [r2] - ładowana jest wartość z komórki pamięci (D-modyfikacja) wskazanej zawartością rejestru r2 | ||
* LW r1, [r2+r3] - ładowana jest wartość z komórki pamięci (D-modyfikacja) wskazanej zawartością rejestru r2 B-modyfikowanego | * LW r1, [r2+r3] - ładowana jest wartość z komórki pamięci (D-modyfikacja) wskazanej zawartością rejestru r2 sumowanego z (B-modyfikowanego) rejestrem r3 | ||
* LW r1, 0x1000 - ładowana jest wartość 0x1000 | * LW r1, 0x1000 - ładowana jest wartość 0x1000 | ||
* LW r1, 0x1000+r2 - ładowana jest wartość 0x1000 B-modyfikowana | * LW r1, 0x1000+r2 - ładowana jest wartość 0x1000 sumowana z (B-modyfikowana) rejestrem r2 | ||
* LW r1, [0x1000] - ładowana jest wartość z komórki pamięci (D-modyfikacja) o adresie 0x1000 | * LW r1, [0x1000] - ładowana jest wartość z komórki pamięci (D-modyfikacja) o adresie 0x1000 | ||
* LW r1, [ | * LW r1, [0x1000+r2] - ładowana jest wartość z komórki pamięci (D-modyfikacja) o adresie 0x1000 sumowana z (B-modyfikowanym) zawartością rejestru r2 | ||
Przykłady użycia rozkazów z argumentem krótkim: | |||
* LWT r1, 12 | |||
* AWT r1, -5 | |||
* RWS r1, etykieta | |||
* UJS -1 | |||
* UJS etykieta | |||
* SHC 2 | |||
= Pliki nagłówkowe = | |||
Z assemblerem EMAS dostarczany jest [https://github.com/jakubfi/emas/tree/master/asminc zestaw plików nagłówkowych] definiujących stałe przydatne przy programowaniu w obszarze systemu operacyjnego i dla urządzeń wejścia-wyjścia: | |||
* cpu.inc - stałe wynikające z architektury systemu ([[Mapa pamięci|zdefiniowane lokalizacje pamięci]], [[Przerwania|przerwania, maski przerwań]]), | |||
* io.inc - podstawowe stałe przydatne przy konfigurowaniu pamięci, stałe dla systemu wejścia-wyjścia, komendy dla kanału znakowego i wspólne komendy dla urządzeń w nim pracujących, | |||
* mega.inc - komendy dla [[Pamięć MEGA|pamięci mega]] Amepolu, | |||
* multix.inc - stałe i komendy przydatne przy programowaniu procesora peryferyjnego [[MULTIX]]. | |||
Znaczenie poszczególnych stałych opisane jest w plikach nagłówkowych, ich rolę opisuje [[DTR|Dokumentacha Techniczno-Ruchowa]] minikomputera. | |||