Кіріспе

IBM System/360 және оның кейінгі мейнфреймдері үшін ассемблер тілдері

IBM Basic ассемблер тілі және оның кейінгілері – IBM System/360 мейнфрейм жүйесі және IBM Z арқылы оның кейінгілері үшін жасалған ассемблер тілдері мен ассемблерлер жиынтығы. Олардың біріншісі, Basic Assembly Language (BAL) – өте шектеулі ассемблер тілі, 1964 жылы енгізілген. Ол 360 жүйелерінде тек 8 КБ негізгі жад, карта оқырман, картаны тесу машинасы және IBM Basic Programming Support (BPS/360) құрамында кіріс/шығыс үшін принтермен қолданылды. BAL үшін негізгі ассемблер Basic Operating System/360 (BOS/360) құрамында да қолжетімді болды. Кейіннен System/360 үшін макростарды қолдау сияқты күшті мүмкіндіктері мен пайдалануға ыңғайлылығы бар ассемблер тілі пайда болды. Бұл тіл және оны іске асыратын ассемблерлер желісі System/370 және одан кейінгі архитектуралар үшін дамуын жалғастырды, оның синтаксисін мұра етіп, кеңейтті. Компьютер индустриясындағы кейбір мамандар оларды "Basic Assembly Language" немесе "BAL" деп атады. Дегенмен, көптеген адамдар бұлай атамады, ал IBM өзі оларды көбінесе "System/360 Assembler Language" деп, немесе белгілі бір операциялық жүйе немесе платформа үшін "Assembler" немесе осыған ұқсас атаулармен атады. Нақты ассемблерлер Assembler E, Assembler F, Assembler H және т.б. деп белгілі болды. Бұл тілді және осы ассемблерлер отбасын пайдаланатын бағдарламашылар оларды ALC (ассемблер тілінің кодтамасы) немесе жай ғана "ассемблер" деп атайды. Соңғы туынды тіл IBM High Level Assembler (HLASM) деп аталады.

Жалпы сипаттамалары

Ассемблерлік тіл болғандықтан, BAL IBM мейнфрейм архитектурасының, яғни System/360-тың түпкілікті нұсқаулар жиынтығын пайдаланады. BAL-дың ізбасарлары IBM мейнфрейм архитектураларының түпкілікті нұсқаулар жиынтықтарын қолданады, оларға System/360, System/370, System/370 XA, ESA/370, ESA/390 және z/Architecture кіреді. Машиналық нұсқаулардың қарапайымдылығы ассемблермен жазылған бағдарламаның бастапқы коды COBOL немесе Fortran тіліндегі балама бағдарламадан әлдеқайда ұзын болатынын білдіреді. Бұрын қолмен жазылған ассемблер бағдарламаларының жылдамдығы осы кемшілікті толықтыратыны сезілген, бірақ компиляторларды оңтайландыру, мейнфрейм үшін C тілі және басқа да жетістіктермен ассемблер өзінің көп бөлігін жоғалтты. Дегенмен, IBM ассемблерді жаңартуды жалғастыруда және ол жылдамдық немесе өте жоғары дәлдік қажет болған кезде әлі де қолданылады. Бірақ BAL-дың барлық IBM ізбасарларына күрделі макро мүмкіндігі енгізілді, ол әлдеқайда ықшам бастапқы кодты жазуға мүмкіндік береді. Ассемблерді пайдаланудың тағы бір себебі – операциялық жүйенің барлық функцияларын жоғары деңгейдегі тілдерде қол жеткізу мүмкін емес. IBM мейнфрейм операциялық жүйелерінің қолданбалық бағдарламалық интерфейстері ассемблерлік тілдің «макро» нұсқаулары ретінде анықталған, олар әдетте операциялық жүйелік процедураларды шақыру үшін Supervisor Call (SVC) [мысалы, z/OS-де] немесе Diagnose (DIAG) [мысалы, z/VM-де] нұсқауларын шақырады. Жоғары деңгейдегі тілдерде жазылған бағдарламалардан ассемблерлік кіші бағдарламаларды пайдалану арқылы операциялық жүйелік қызметтерді пайдалануға болады.

Ассемблер нұсқаулығының пішімі

Ассемблер тіліндегі операторлар форматы 80 бағандық перфокартаның құрылымын көрсетеді, бірақ кейінгі нұсқалары көптеген шектеулерді жеңілдетті. Оператордың атауы немесе белгісі 1-бағаннан басталатын әріп-сандық символдар тізбегі болып табылады. Бірінші символ әріп болуы керек. Кейінгі нұсқалар @, #, $ және белгілерінде қолданылатын рұқсат етілген символдарға қосылды, ал бастапқы алты символдан сегіз символға, содан кейін дерлік шексіз ұзындыққа дейін ұлғайтылды. Операция коды немесе "мнемоника" 1-бағаннан оңға қарай кез келген бағаннан басталуы мүмкін, оператор белгісінен кемінде бір бос орынмен бөлінеді. Операция коды тек машиналық нұсқау болады (макростар болған жоқ), әдетте 1, 2, 3 немесе сирек 4 әріптен тұрады. Операция коды сегіз символға дейін, кейіннен дерлік шексіз ұзындыққа дейін кеңейтілді. Операциялық өріс операция кодынан кемінде бір бос орынмен бөлінген кез келген бағаннан басталуы мүмкін. Символдар операторларда рұқсат етілмейді, тек символ тұрақтыларында ғана қолданылуы мүмкін. Бір немесе бірнеше оператордан тұратын операторлық өріс, операция кодына байланысты міндетті емес. Операторлық өрістің оң жағында кемінде бір бос орынмен бөлінген қосымша түсініктемелер болуы мүмкін. Basic Assembly Language операторларды жалғастыруға рұқсат бермейді. Ассемблердің кейінгі нұсқалары жалғастырылатын оператордың 72-бағанында бос емес символдың болуын жалғастыру белгісі ретінде көрсетеді. Basic Assembly Language 72-бағанның бос болуын талап етеді. "Толық карточкаға түсініктеме" 1-бағанда жұлдызша (*) арқылы белгіленеді. 73-80 бағандар, идентификациялық тізбек өрісі деп аталады, бағдарламашы оларды кез келген мақсатта пайдалана алады, бірақ көбінесе араластырылған карточкалар жинағын қайта реттеу үшін реттік нөмірлерді қамтиды. Basic Assembly Language сонымен қатар оператордың 25-бағаннан басталуына мүмкіндік беретін балама оператор форматын қолдайды, бұл құрастырылған нұсқауды 1-бағаннан басталатын сол карточкаға тебуге мүмкіндік береді. Бұл опция ассемблердің кейінгі нұсқаларында қолданылмады.

Нұсқаулардың түрлері

Ассемблер тілінде жазылған бағдарламаның бастапқы кодында үш негізгі түрі бар нұсқаулар кездеседі.

Құрастырушы нұсқаулары

Ассемблер нұсқаулары, кейде директивалар, псевдооперациялар немесе басқа жүйелерде псевдоопциялар деп аталады, олар код жасау процесінде әртүрлі операцияларды орындау үшін ассемблерге жасалған сұраулар. Мысалы, CSECT "осы жерде код бөлімін бастау" дегенді білдіреді; DSECT құрылым үшін деректерді анықтайды, бірақ кодты жаратпайды; DC объектілік кодқа орналастырылатын тұрақтыны анықтайды. Ассемблердегі маңызды нұсқаулардың бірі – USING, ол S/360 архитектурасының базалық смещениелі адрестеуін қолдайды. Ол ассемблерге салыстырмалы мекенжай үшін қандай базалық регистр мен смещениені пайдалану керектігін анықтауға көмектеседі. BAL жүйесінде ол USING базалық, reg 1, ,reg n түрімен шектелген. S/360 архитектурасындағы машиналық нұсқаулар адрестері базалық регистрдегі мәннен смещениені (0–4095 байт) көрсетеді; архитектураның кейінгі нұсқалары салыстырмалы мекенжай форматтарын қосса да, ескі форматтар көптеген нұсқауларда әлі де қолданылады. USING бағдарламалаушыға ассемблерге көрсетілген базалық регистрлерде "база" мекенжайы, база + 4096 (бірнеше регистрлер көрсетілген жағдайда) және т.б. болатынын хабарлауға мүмкіндік береді. Бұл бағдарламалаушы үшін жай ғана ыңғайлылық, әйтпесе әрбір нұсқауда базалық регистрді көрсетуіне тура келер еді. Бағдарламашылар осы мәнге тәуелді код жазу алдында "база" мекенжайын регистрге жүктеуге жауапты. DROP ассемблер нұсқаулары бұрынғы USING нұсқауларын жояды.

Макролар мен шартты жиынтық

Basic Programming Support құрастырғышы макростарды қолдамады. Assembler D-ден басталатын кейінгі ассемблер нұсқалары бағдарламашыға нұсқауларды макростарға біріктіруге және оларды кітапханаға қосуға мүмкіндік береді, оларды басқа бағдарламаларда шақыруға болады, әдетте параметрлермен, C және басқа ұқсас тілдердегі алдын ала өңдеу мүмкіндіктері сияқты. Макростар таңдалған параметрлерге қарай әртүрлі кодты жасау үшін қолданылатын АИФ (if конструкциясы) сияқты шартты құрастырушы нұсқауларын қамтуы мүмкін. Бұл осы құрастырушының макро мүмкіндігін өте қуатты етеді. C тіліндегі көпжолды макростар ерекше жағдай болса, ассемблердегі макро анықтамалары жүздеген жолдан тұруы мүмкін.

Операциялық жүйе макролары

Көптеген бағдарламалар операциялық жүйеден қызметтерді қажет етеді, ал операциялық жүйе осы қызметтерді сұрату үшін стандартты макростарды ұсынады. Бұл Unix жүйелік шақыруларына ұқсас. Мысалы, MVS (кейін z/OS) жүйесінде STORAGE (OBTAIN параметрімен) жад блогын динамикалық түрде бөліп береді, ал GET командасы файлдан келесі логикалық жазбаны алады. Бұл макростар операциялық жүйеге тәуелді; жоғары деңгейдегі бірнеше тілдерден айырмашылығы, IBM мейнфреймдеріне арналған ассемблерлер жадты бөлу, I/O операцияларын орындау сияқты операциялар үшін операциялық жүйеге тәуелсіз командалар немесе кітапханаларды қамтамасыз етпейді, сондай-ақ әртүрлі IBM мейнфрейм операциялық жүйелері жүйелік қызметтер деңгейінде үйлесімсіз болады. Мысалы, тізбекті файлды жазу z/OS және z/VSE жүйелерінде әртүрлі кодталады.

Нұсқалар

IBM System/360 Model 20 құрастырғыштарын қоспағанда, IBM құрастырғыштары көбінесе алдыңғы нұсқаулармен үйлесімді болды. Ерекшеліктер көбінесе рұқсат етілген өрнектердің күрделілігі мен макро өңдеуде болды. OS/360 құрастырғыштары бастапқыда жадқа қажетті көлемі бойынша белгіленді.

Бастапқы бағдарламалауды қолдау құрастырғышы

BPS құрастырғышы – нағыз "базалық құрастырғыш". Ол карталардан жүктеліп, 8 КБ System/360 (Model 20 ерекшелік) жүйесінде жұмыс істеу үшін жасалған. Ол макро-нұсқауларды немесе кеңейтілген мнемоникаларды (мысалы, шартты код 2 жоғары салыстыруды көрсеткенде BC 2 орнына BH қолданылуы) қолдамайды. Ол тек бір басқару бөлімін ғана құрастыра алады және жалған бөлімдерге (құрылымдық анықтамалар) жол бермейді. Қашаңдағы өрнектерге рұқсат жоқ, ал өрнектер тек үш мүшеден тұрады және операторлар тек "+", " " және "*" болады.

Негізгі операциялық жүйе құрастырғышы

Бастапқы операциялық жүйе екі құрастырушы нұсқасын қамтиды. Екеуіне де 16 КБ жад керек, біреуі магниттік лентада, екіншісі дискіде орналасқан.

D құрастырушы

Ассемблер D – 16 КБ жад көлемі бар машиналар үшін DOS/360 ассемблері болды. Ол екі нұсқада шықты: ең аз 16 КБ жады бар машиналар үшін 10 КБ нұсқасы, және 24 КБ жады бар машиналар үшін 14 КБ нұсқасы. 64 КБ немесе одан да көп жады бар DOS машиналары үшін F деңгейлі ассемблер де қолжетімді болды. D ассемблерлері жоғарырақ нұсқалардың көптеген мүмкіндіктерін ұсынды.

E және F құрастырушы

Ассемблер E OS/360 жүйесінде кемінде 32 КБ негізгі жадта жұмыс істеу үшін жасалған, ал ассемблердің өзіне 15 КБ қажет. Ассемблер F 64 КБ жады бар жүйеде DOS/360 немесе OS/360 астында жұмыс істей алады, ассемблерге 44 КБ қажет. Бұл ассемблерлер OS/360-ның стандартты құрамына кіреді; құрылған нұсқа жүйе құру кезінде (SYSGEN) анықталған.

H құрастырушы

Assembler H OS/360 және одан кейінгі жүйелерде жұмыс істеді; ол Assembler F-тен жылдам және күшті болды, бірақ макро тілі толыққанды үйлесімді болмады. Assembler H нұсқасы 2 1981 жылы жарияланды және кеңейтілген архитектураны (XA) қолдады, соның ішінде AMODE және RMODE директиваларын қамтыды. 1994 жылы сатудан алынып, 1995 жылы қолдау тоқтатылды. Оның орнына High Level Assembler келді.

XF құрастырушы

Assembler XF - жаңа System/370 архитектурасының нұсқауларын қосатын, Assembler F-тің көбінесе үйлесімді жаңартуы. Бұл нұсқа OS/VS, DOS/VS және VM жүйелері үшін ортақ құрастырғыш қызметін атқарады. Басқа өзгерістерге өрнектерге және макро өңдеуге қойылған шектеулерді жеңілдету кіреді. Assembler XF үшін кемінде 64 КБ (виртуалды) көлемді бөлім/аймақ қажет. Ұсынылатын көлем – 128 КБ.

Жоғары деңгейдегі құрастырушы

1992 жылғы маусымда IBM Assembler H Version 2-ні алмастырып, High Level Assembler немесе HLASM жарыққа шықты. Ол System/370 және System/390 үшін стандартты аудармашы болды және MVS, VSE және VM операциялық жүйелерін қолдады. 2023 жылдан бастап, бұл IBM-нің z/Architecture негізіндегі z/OS, z/VSE, z/VM және z/TPF операциялық жүйелері үшін қолданыстағы ассемблер бағдарламалау тілі болып табылады. 6-шы және одан кейінгі нұсқалар Linux жүйесінде де жұмыс істейді және ELF немесе GOFF нысандық файлдарын (объект файлдарын) құрайды (бұл орта кейде IBM Z-дегі Linux деп аталады). Джон Роберт Эрман IBM-де жұмыс істеген кезінде HLASM-ді жасап, оның бас дамытушысы болды және ол "жоғары деңгейлі ассемблердің әкесі" деп есептеледі. Аты айтылғанына қарамастан, HLASM-нің өзінде әдетте жоғары деңгейлі ассемблермен байланысты көптеген мүмкіндіктер жоқ. Аты қосымша макро тілінің мүмкіндіктерінен, мысалы, пайдаланушы анықтаған функцияларды жазу мүмкіндігінен туындауы мүмкін. Ассемблер көбінесе Assembler H және Assembler(XF) сияқты, SLAC (Стэнфорд сызықтық үдеткіші) өзгертулерін қамтиды. Қосылған мүмкіндіктердің ішінде орналасу санағы үшін CSECT/DSECT көрсеткіші, тәуелді және белгіленген USING операторлары, қазіргі уақытта қолданыстағы USING операторларының тізімі, айқас сілтемеде айнымалының оқылатынын немесе жазылатынын көрсету және әр түрлі регистрдегі символ атауларын пайдалану мүмкіндігі бар. RSECT директивасы (тек оқуға арналған басқару бөлімі) ассемблерге қайта кіруді бөлімдер бойынша тексеруге мүмкіндік береді. RSECT бұрын "Assembler H-де құжатталмаған және тұрақсыз іске асырылған".

7090/7094 Қолдау пакетін құрастырушы

SUPPAK деп аталатын IBM 7090/7094 қолдау пакеті "System 360 үшін жазылған бағдарламаларды IBM 709, 7090, 7094 немесе 7094 II жүйелерінде құрастыруға, тестілеуге және орындауға мүмкіндік беретін үш бағдарламадан тұрады". Бұл кросс-ассемблер 7090 немесе 7094 жүйесінде жұмыс істейді және System/360 әзірлену кезінде пайдаланылды. Бұл құрастырғыш алты биттік BCD және сегіз биттік EBCDIC таңбалар жиынтығын қолдайды.

IBM System/360 Model 20 құрастырушылары

IBM 20-модель үшін екі құрастырғышты ұсынды: 20-модельдік негізгі құрастырғыш және 20-модельдік DPS/TPS құрастырғыш. Екеуі де CIO, TIO, XIOB, SPSW, BAS, BASR және HPR сияқты 20-модельде қолжетімді нұсқауларды ғана қолдады. Негізгі құрастырғыш – System/360 негізгі құрастырғышының сәл шектеулі нұсқасы; атап айтқанда, символдардың ұзындығы төрт таңбамен шектелген. Бұл нұсқа 4 КБ жадысы бар жүйеде жұмыс істей алады, ал макро қолдауы IOCS макроларымен ғана шектеледі. Карталық нұсқалары – екі өтімді құрастырғыштар, олар тек карталық кіріс/шығысты қолдайды. Таспалық нұсқалары бір өтімді, аралық сақтау үшін магниттік таспаны пайдаланады. CPS құрастырғышымен құрастырылған бағдарламалар ең көп дегенде 16 КБ көлемдегі жадты пайдалана алады. Ол сақтаудан сақтауға (SS) нұсқауларын, сондай-ақ бинарлыққа (CVB) түрлендіру, ондыққа (CVD) түрлендіру, тікелей оқу (RDD) және тікелей жазу (WRD) нұсқауларын қолдамайды. Ол 44-модельге тән төрт нұсқауды қамтиды: Басымдық маскасын өзгерту (CHPM), Арнайы PSW жүктеу (LPSX), Тікелей сөзді оқу (RDDW) және Тікелей сөзді жазу (WRDW). Сондай-ақ, ол бастапқы бағдарламаны жаңартуға арналған директиваларды қамтиды, бұл функция басқа жүйелердегі қосымша бағдарламалармен (SKPTO, REWND, NUM, OMIT және ENDUP) орындалады.

Жинақтаушы G

"Assembler G" – 1970-ші жылдары Ватерлоо университетінің Assembler F-ке енгізген өзгерістер жиынтығы (Assembler F ашық кодты болған / болып табылады). Жақсартулар негізінен кіріс/шығысты жақсырақ басқару және буферлеуді жетілдіруде, бұл құрастыру процесін едәуір жылдамдатады. "Assembler G" ешқашан IBM өнімі болған емес.

IBM емес құрастырушылар

Арнайы орталар үшін бірнеше IBM үйлесімді құрастырғыштар болды. Unisys компаниясының Univac 90/60, 90/70 және 90/80 сериялары IBM форматтағы құрастырғыштарды қабылдау үшін жасалған, себебі бұл машиналар сериясы S/360 және S/370 серияларына ұқсас болды. Fujitsu BS2000 сериясы да Univac-пен бірдей ресурстан 370-ге ұқсас машина ретінде құрылды және әлі күнге дейін Еуропаның кейбір аймақтарында қолданылады. Dignus LLC Systems/ASM – HLASM үйлесімді құрастырғыш, ол IBM жүйелерінде немесе кросс-құрастырғыш ретінде жұмыс істей алады. Дон Хиггинс жазған тегін PC/370 құрастырғышы кейіннен Micro Focus компаниясы сатып алды. z390 – Дон Хиггинс жазған және Java тілінде бағдарламаланған құрастырғыш және System 390 эмуляторы. Бұл ашық кодты және http://www.z390.org/ мекенжайынан қолжетімді. Пенн-Стейт университеті System 370 құрастырғышы мен интерпретаторын қамтитын ASSIST атты пакетті жасады. Tachyon Software LLC Windows, Linux/x86, Linux for S/390 және zSeries, AIX және Solaris жүйелерінде жұмыс істейтін Tachyon Assembler Workbench құралын сатады. GNU Assembler (gas) OS/390 және IBM Z-дегі Linux үшін GNU Compiler Collection (gcc) жинағының бір бөлігі болып табылады. Бұл құрастырғыштың ерекше синтаксисі бар, ол IBM архитектуралары үшін басқа құрастырғыштармен үйлесімсіз.

Маңыздылық

Бастапқыда барлық System/360 операциялық жүйелері ассемблер тілінде жазылған, ал барлық жүйелік интерфейстер макрос анықтамаларымен белгіленген. Жоғары деңгейдегі тілдерден (ЖЖТ) қол жеткізу тек сол тілдің мүмкіндіктерімен шектелді, ал қалған жүйелік шақырулар ЖЖТ бағдарламаларынан шақырылатын ассемблерлік кіші бағдарламалар түрінде кодталуы тиіс еді. Сонымен қатар, IBM орнату арқылы операциялық жүйенің мүмкіндіктерін өзгертуге рұқсат берді, бұл Exits деп аталатын пайдаланушы ұсынған процедуралар арқылы іске асырылды – олар операциялық жүйенің қалыпты функцияларын кеңейтуге немесе өзгертуге мүмкіндік берді. Бұл Exits ассемблер тілінде кодталуы керек болды. Кейін IBM OS/360-ты PL/S жүйелік бағдарламалау тілінде қайта кодтады, бірақ қысқа сынақтан кейін PL/S компиляторын пайдаланушыларға ұсынбауға шешім қабылдады. Осы факторлардың нәтижесінде ассемблер тілі IBM жүйелерінде көп жылдар бойы кеңінен қолданылды.