Czy były pakiety makr „programowania wyższego poziomu” dla IBM Macro Assembler?

Nov 21 2020

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 BINDAi STRITnie 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

5 Raffzahn Nov 21 2020 at 05:37

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.

2 zarchasmpgmr Nov 22 2020 at 08:42

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.