Czy były pakiety makr „programowania wyższego poziomu” dla IBM Macro Assembler?
Język asemblera makr IBM / 360 był dość potężny, pozwalając na nietrywialne manipulowanie ciągami znaków w czasie kompilacji.
Czy istniały pakiety makr, które ułatwiałyby programowanie na (nieco) wyższym poziomie, np. Pisanie wyrażeń w postaci infiksowej, pozwalającej na formę programowania strukturalnego, standaryzowanie konwencji wywoływania podprogramów, wygodny dostęp do pól bitowych itp.?
Powodem, dla którego pytam, że jednym z języków asemblera BESM-6 był port na poziomie składni asemblera IBM / 360, w tym język makr, np.
macro
mnop &a,&b,&c,&d,&e,&f,&g,&h
aif (&a eq '').x
gbla &cnt global arith. variable
mnote * comment &cnt
&cnt seta &cnt+1
nop &a
mnop &b,&c,&d,&e,&f,&g,&h
.x anop
mend
MNOP FIRST,SECOND,THIRD,FOURTH
rozszerza się do
0001 0001 MACRO
0002 0002 MNOP &A,&B,&C,&D,&E,&F,&G,&H
0003 0003 AIF (&A EQ ’’).X
0004 0004 GBLA &CNT GLOBAL ARITH. VARIABLE
0005 0005 MNOTE * COMMENT &CNT
0006 0006 &CNT SETA &CNT+1
0007 0007 NOP &A
0008 0008 MNOP &B,&C,&D,&E,&F,&G,&H
0009 0009 .X ANOP
0010 0010 MEND
0011 0011 MNOP FIRST,SECOND,THIRD,FOURTH
0012 0005 * COMMENT 0
0013 +0007+ NOP FIRST
0014 0005 * COMMENT 1
0015 +0007+ NOP SECOND
0016 0005 * COMMENT 2
0017 +0007+ NOP THIRD
0018 0005 * COMMENT 3
0019 +0007+ NOP FOURTH
Brakuje jednak wstępnie skompilowanego pakietu makr do programowania „wyższego poziomu” (prawdopodobnie również przeniesionego z IBM / 360 z odpowiednimi modyfikacjami zależnymi od architektury).
Oto kilka przykładów użycia makr z pakietu:
RЕG (М1 = 1,М2 = 2,М3 = 3,М4 = 4,М5 = 5)
КТ1 ВINDА (А(PAGE1)+KMD+М14)
FКТ3 SТRIТ (NCMD,0,0,8),(NARCH,0,40,8),(SND,0,16,8)
ЕХРR (FNM = $) FILE NAME
ЕХРR (SND = (OWNER,ADDR)) SENDER
ЕХРR (NUMREQ = (OWNER,REQ)) REQUEST NUMBER
IFА (QUEUE),Z=DISCRD NO REQUEST
Wyszukiwanie w internecie najbardziej charakterystycznych nazwach makr BINDA
i STRIT
nie pomaga.
Jeśli pakiet makr z tymi lub podobnymi makrami istniał dla asemblera makr IBM / 360, uzyskanie dostępu do jego kodu źródłowego byłoby bardzo pomocne.
Odpowiedzi
Język asemblera makr IBM / 360 był dość potężny, pozwalając na nietrywialne manipulowanie ciągami znaków w czasie kompilacji.
Cóż, zredukowanie go do „manipulacji napisami” może się nie udać, ponieważ nie ma podobieństwa do zwykłych języków manipulacji na napisach. Jest to dość rozbudowany, imperatywny język programowania. Programy są wykonywane po „złożeniu”. Zapewnia typowane zmienne globalne i lokalne (bool, integer, string), tablice (w zależności od wersji asemblera) i więcej.
Czy istniały pakiety makr ułatwiające programowanie na (nieco) wyższym poziomie,
Nie tylko „trochę” wyżej.
jak pisanie wyrażeń w postaci wrostków, zezwalanie na formę programowania strukturalnego, standaryzację konwencji wywoływania podprogramów, wygodny dostęp do pól bitowych itp.?
W przypadku programowania strukturalnego (które ofc obejmuje konwencje wywoływania i struktury danych), odpowiedź na to pytanie dotyczy już stosów na maszynach bez stosu:
W jaki sposób C został przeniesiony na architektury, które nie miały stosu sprzętowego?
Przykład fałszywego programu, wywołującego funkcję i sprawdzającego wynik, skopiowany z odpowiedzi:
@ENTR TYPE=M,NAME=MAIN ** Main programm, execution starts here
...
@PASS NAME=FUBAR,PLIST=(FCB,RECORD)
@IF NE
LTR R15,R15 * Return Code Not Zero?
@THEN
@EXIT RC=#UNSATISFIED * Finish Program with Return Code UNSATISFIED
@BEND
...
@EXIT RC=#HAPPYENDING * Finish Program with Return Code HAPPYENDING
@END
@ENTR TYPE=L,NAME=FUBAR,PLIST=(FCB,RECORD) * Function FUBAR, called by MAIN
...
(do whatever needed with FCB and RECORD)
...
@EXIT RC=0 * Finish Function with Return Code Zero
@END
Podczas gdy wspomniany pakiet COLUMBUS Assembler (* 1) był AFAIK opracowaniem specyficznym dla Siemensa, był to w 100% kod makra F-Assembler. Oprócz biblioteki makr istniały również elementy formatujące listy, które zamieniały proste listy asemblera w zamierzone lub Nassi / Shneiderman .
Poza tym projekty / firmy oczywiście budowały pakiety makr, aby umożliwić łatwą obsługę bardziej złożonych problemów. Dodatkowo, oczywiście, każdy system operacyjny dostarczał makra dla wszystkich usług, które posiadał.
uzyskanie dostępu do jego kodu źródłowego byłoby bardzo pomocne
Cóż, wciąż mam gdzieś taśmę z kilkoma wersjami (sporo ją zmodyfikowaliśmy w stosunku do oryginalnej wersji). Ponadto przeportowałem go dawno temu na ORCA / M dla Apple II. Po prostu znalezienie jednego z nich może zająć trochę czasu.
Z drugiej strony, zbudowanie takiej biblioteki do programowania strukturalnego jest, z makrami F-Assembler (lub lepszymi) lub wyższymi / kompatybilnymi, w większości trywialnym zadaniem budowania stosu analizującego, aby sprawdzić składnię i wygenerować etykiety. Napisz mi wiadomość, jeśli chcesz podpowiedzieć.
D / E / F-Assembler (i jego język makr) został opublikowany wkrótce po wprowadzeniu / 360, gdzie F to wersja `` pełna '', ale także z ogromnym zapotrzebowaniem na pamięć RAM wynoszącą 64 KiB :)) Więc jest to najprawdopodobniej podstawa twojej paczki.
* 1 - Ten sam pakiet był dostępny dla języka COBOL, tylko wtedy generowanie kodu zostało wykonane przez preprocesor.
Istnieje grupa makr o nazwie Concept 14 , napisana przez pracownika IBM Federal Systems, Marvina Kesslera. Działały na IFOX00 (assemblerze F) i były używane jako podstawa dla HLASMTK SPM.
Mój były współpracownik Paul Scott dostarcza je w formacie IEBUPDTE. Posiada również skan dokumentacji; niestety brakuje strony.
Wierzę, że dotarli również do światów Herkulesa i z390.