SAS (asembler)

SAS (system adresów symbolicznych) − rodzina makroasemblerów polskich komputerów XYZ, ZAM-2 i ZAM-41, oraz radzieckiego komputera Urał 2.[1]

System programowania SAS został opracowany przez grupę SAKO pod kierownictwem profesora L. Łukaszewicza w latach 1959–1960 jako zewnętrzny język programowania dla komputera XYZ. Później system został rozbudowany i unowocześniony, by współpracować z komputerem ZAM-2. SAS jest półautomatycznym kodem, który znacznie ułatwia pracę programistów, eliminując konieczność ręcznego przydzielania miejsca w pamięci. Pozwala on na symboliczne adresowanie części instrukcji, a część operacyjna instrukcji jest przechowywana w postaci maszynowej, składającej się z dwóch liter będących skrótem polskich nazw instrukcji.

Dodatkowo, system SAS umożliwia automatyczne włączanie podprogramów zapisanych w pamięci pomocniczej do programów, dzieli programy na rozdziały oraz upraszcza prezentację wartości liczbowych dla komputera. Dzięki temu SAS znacznie ogranicza liczbę błędów popełnianych przez programistów, którzy wcześniej musieli wprowadzać rzeczywiste adresy do adresowych części instrukcji maszynowych. Skutkiem tego skrócenia czasu potrzebnego na sprawdzanie programów jest zwiększenie efektywności i szybkości ich tworzenia.[2]

Lista rozkazów

W literaturze podany jest zbiór rozkazów symbolicznych dla maszyny cyfrowej ZAM-2. Obejmuje on 32 pozycje. Liczba rozkazów wynika z liczby bitów przeznaczonej na część operacyjną rozkazu (5).

Kod
operacyjny
MnemonikOpis rozkazu
0SSSkocz i stop.
1WRWykonaj rozkaz wskazany adresem, po czym wróć do wykonywanego programu.
2PGPrzygotuj przepisywanie z wejścia albo bębna do pamięci operacyjnej lub z pamięci na wyjście lub bęben.
3SKSkok bezwarunkowy.
4SZSkocz, jeśli w akumulatorze jest 0.
5SPSkocz, jeśli w akumulatorze jest liczba dodatnia.
6SNSkocz, jeśli został zasygnalizowany nadmiar.
7SWSkocz, jeśli liczba jedynek w przeczytanym rządku taśmy była parzysta.
8SBPrzeskocz dwa rozkazy, jeśli zawartość B-rejestru i wskazanego adresem miejsca pamięci są jednakowe.
9BTBinarna taśma.
10UAUmieścić w akumulatorze liczbę pobraną z pamięci wskazanej adresem.
11UMUmieścić liczbę pobraną z pamięci w rejestrze mnożnika.
12UBUmieścić liczbę pobraną z pamięci w B-rejestrze.
13DBDodaj liczbę pobraną z pamięci do zawartości B-rejestru.
14BBOdejmij liczbę pobraną z pamięci od zawartości B-rejestru.
15RBUmieścić w rejestrze bębnowym liczbę z pamięci wskazanej adresem.
16PPPrzepisz 1 słowo z wejścia lub bębna do pamięci lub z pamięci na bęben albo na wyjście.
17PAPrześlij zawartość akumulatora do miejsca pamięci wskazanego adresem.
18PMPrześlij zawartość rejestru mnożnika do pamięci.
19PBPrześlij zawartość B-rejestru do pamięci.
20OKZaokrąglij zawartość akumulatora i prześlij wynik do pamięci.
21LWPrzesuń w lewo łączną zawartość akumulatora i rejestru mnożnika.
22PWPrzesuń w prawo łączną zawartość akumulatora i rejestru mnożnika.
23LCPrzesuń cyklicznie w lewo zawartość akumulatora.
24DODodaj słowo pobrane z pamięci do zawartości akumulatora.
25ODOdejmij słowo pobrane z pamięci od zawartości akumulatora.
26OBOdejmuj wartość bezwzględną słowa pobranego z pamięci od wartości bezwzględnej zawartości akumulatora.
27MNPomnóż słowo z pamięci przez zawartość rejestru mnożnika. 70-bitowy wynik umieścić w akumulatorze i rejestrze mnożnika traktowanych jako całość.
28DZŁączną zawartość akumulatora i rejestru mnożnika podziel przez liczbę pobraną z pamięci, iloraz umieścić w rejestrze mnożnika, resztę w akumulatorze.
29KOOblicz koniunkcję zawartości rejestru mnożnika i słowa pobranego z pamięci i zapisz ją w akumulatorze.
30ALOblicz alternatywę słowa pobranego z pamięci i zawartości akumulatora.
31NINic nie rób.

Bibliografia

  • K. Fiałkowski: Autokody i programowanie maszyn cyfrowych. Warszawa: WNT, 1976.

Przypisy

  1. Jan Szmelter, Język SAS dla maszyny cyfrowej Urał-2 : [skrypt], Wojskowa Akademia Techniczna, 1968 (pol.).
  2. Władysław Turski, Some Results of Research on Automatic Programming in Eastern Europe, Franz L. Alt, Morris Rubinoff (red.), t. 5, Elsevier, 1964, s. 23–108 [dostęp 2023-07-09] (ang.).