EMAS: Różnice pomiędzy wersjami

Przejdź do nawigacji Przejdź do wyszukiwania
Usunięte 663 bajty ,  18 sierpnia
brak opisu edycji
Nie podano opisu zmian
Linia 15: Linia 15:
** '''-O <otype>''' - typ wyniku asemblacji. Możliwe wybory to:
** '''-O <otype>''' - typ wyniku asemblacji. Możliwe wybory to:
*** ''raw'' - binarny obraz gotowy do umieszczenia w pamięci maszyny i uruchomienia (domyślny wybór)
*** ''raw'' - binarny obraz gotowy do umieszczenia w pamięci maszyny i uruchomienia (domyślny wybór)
*** ''emelf'' - konsolidowalny obiekt [[EMELF]]
*** ''debug'' - tekstowy opis zawartości kolejnych komórek pamięci
*** ''debug'' - tekstowy opis zawartości kolejnych komórek pamięci
*** ''keys'' - tekstowy opis zawartości kolejnych komórek pamięci w formacie łatwym do wprowadzenia z pulpitu technicznego maszyny
*** ''keys'' - tekstowy opis zawartości kolejnych komórek pamięci w formacie łatwym do wprowadzenia z pulpitu technicznego maszyny
** '''-o <wyjście>''' - nazwa pliku wyjściowego. Jeśli nie zostanie podana, domyślny wygór zależy od typu wyniku asemblacji:
** '''-o <wyjście>''' - nazwa pliku wyjściowego. Jeśli nie zostanie podana, domyślny wygór zależy od typu wyniku asemblacji:
*** ''raw'' - nazwa pliku wejściowego z pominiętym rozszerzeniem. Jeśli wejście nie jest plikiem, to wyjściem jest plik 'a.out'
*** ''raw'' - nazwa pliku wejściowego z pominiętym rozszerzeniem. Jeśli wejście nie jest plikiem, to wyjściem jest plik 'a.out'
*** ''emelf'' - nazwa pliku wejściowego z rozszerzeniem zamienionym na '.o'. Jeśli wejście nie jest plikiem, to wyjściem jest plik 'a.out'
*** ''debug'' i ''keys'' - standardowe wyjście
*** ''debug'' i ''keys'' - standardowe wyjście
** '''-c <cpu>''' - wybierz procesor, dla jakiego assembler produkuje binaria. Możliwe wybory to: ''mera400'', ''mx16''. Ustawienie procesora na MX-16 pozwala na użycie dodatkowych instrukcji oraz poszerza przestrzeń adresową programu z 32 do 64k słów. Domyślnie przyjmowany procesor to ''mera400''. Opcja nadpisuje wybór dokonany w źródłe dyrektywą '''.cpu'''.
** '''-c <cpu>''' - wybierz procesor, dla jakiego assembler produkuje binaria. Możliwe wybory to: ''mera400'', ''mx16''. Ustawienie procesora na MX-16 pozwala na użycie dodatkowych instrukcji oraz poszerza przestrzeń adresową programu z 32 do 64k słów. Domyślnie przyjmowany procesor to ''mera400''. Opcja nadpisuje wybór dokonany w źródłe dyrektywą '''.cpu'''.
Linia 184: Linia 182:
  lw r1, zmienna.a
  lw r1, zmienna.a
  lw r2, zmienna.b
  lw r2, zmienna.b
=== Widoczność symboli dla konsolidatora ===
Wszystkie symbole definiowane są jako widoczne wyłącznie w ramach asemblowanego obiektu. Jeśli symbol ma być widoczny dla konsolidatora, należy go zadeklarować jako zewnętrzny dyrektywą '''.global'''. Zmiana zasięgu może nastąpić przed, lub po definicji:
.global printf
.global snprintf
.global strdup
printf:
...
snprintf:
...
strdup:
procedura:
.global procedura


== Wyrażenia ==
== Wyrażenia ==
Linia 315: Linia 296:


Ustala nową bieżącą pozycję assemblacji. Następne wygenerowane słowo zostanie umieszczone już pod podanym, nowym adresem.
Ustala nową bieżącą pozycję assemblacji. Następne wygenerowane słowo zostanie umieszczone już pod podanym, nowym adresem.
=== .entry ===
'''Składnia:''' .entry ''adres''
Dyrektywa ma efekt wyłącznie w przypadku generowania pliku wynikowego jako obiektu EMELF. Określa adres wejścia do programu.
=== .global ===
'''Składnia:''' .global ''nazwa_etykiety''
Dyrektywa ma efekt wyłącznie w przypadku generowania pliku wynikowego jako obiektu EMELF. Wskazuje, że symbol będzie widoczny dla linkera.


=== .ifdef, .ifndef ===
=== .ifdef, .ifndef ===
Linia 390: Linia 359:


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 sumowana z (B-modyfikowana) rejestrem r3
* LW r1, r2+r3 - ładowana jest wartość z rejestru r2 sumowana z (B-modyfikowana) rejestrem r3
Linia 398: Linia 368:
* 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, [0x1000+r2] - ładowana jest wartość z komórki pamięci (D-modyfikacja) o adresie 0x1000 sumowana z (B-modyfikowanym) zawartością rejestru r2
* 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
UWAGA: ```[]``` oznacza D-modyfikację, której efekt będzie różny w zależności od treści rozkazu, np.:
* LW r1, [10] - załadowanie do rejestru r1 wartości z komórki pamięci 10 (pojedyncza dereferencja)
* TW r1, [10] - załadowanie do rejestru r1 wartości z komórki pamięci wskazanej adresem zapisanym w komórce 10 (podwójna dereferencja)


Przykłady użycia rozkazów z argumentem krótkim:
Przykłady użycia rozkazów z argumentem krótkim:

Menu nawigacyjne