IBM Basic Assembly Language och efterföljare

Basic Assembly Language ( BAL ) är den vanligaste termen för ett programmeringsspråk på låg nivå som används på IBM System/360 och efterföljande stordatorer. Ursprungligen gällde "Basic Assembly Language" endast för en extremt begränsad dialekt utformad för att köras under kontroll av IBM Basic Programming Support (BPS/360) på system med endast 8 KB huvudminne och endast en kortläsare , en korthålslagare och en skrivare för input/output — alltså ordet "Basic". Men det fullständiga namnet och initialismen "BAL" fäste sig nästan omedelbart i populär användning till alla assemblerspråkiga dialekter på System/360 och dess ättlingar. BAL för BPS/360 introducerades med System/360 1964.

Assemblers på andra System/360-operativsystem genom System/370 , System/390 och System z , såväl som UNIVAC Series 90 stordatorer tillverkade av Sperry Corporation , och BS2000 stordatorer som för närvarande tillverkas av Fujitsu , ärvde och utökade sin syntax. Det senaste språket är känt som IBM High-Level Assembler (HLASM). Programmerare som använder denna familj av assemblerare hänvisar också till dem som ALC, (för Assembly Language Coding), eller helt enkelt "assembler".

BAL är också minnesmärket för "Branch And Link" -instruktionen .

Generella egenskaper

Arkitekturen för IBM stordatorer har genomgått flera utökningar under åren, inklusive System/360, System/370, System/370 XA, ESA/370, ESA/390 och z/Architecture . Var och en av dessa arkitekturer har behållit kompatibilitet med de flesta funktionerna i sin föregångare. BAL använder den inbyggda instruktionsuppsättningen för dessa maskiner. Det är alltså närmare hårdvaran än tredje generationens språk som COBOL .

Instruktionsuppsättningen består av de lågnivåoperationer som stöds av arkitekturen, såsom:

Instruktion Mnemonisk Beskrivning
LADDA L kopiera ett värde från minnet till ett register
LAGRA ST kopiera ett värde från ett register till minnet
JÄMFÖRA C jämför ett registervärde med ett värde i minnet
Flytta SLL, SRL flytta bitarna i ett register åt vänster eller höger
STARTA UNDERKANAL SSCH starta en underkanals I/O-operation med hjälp av en sträng av kanalkommandoord

Den extrema enkelheten i dessa operationer innebär att källkoden för ett program som är skrivet i assembler vanligtvis är mycket längre än ett motsvarande program i exempelvis COBOL eller Fortran . Tidigare ansågs hastigheten för handkodade assemblerprogram ofta kompensera för denna nackdel, men med tillkomsten av optimering av kompilatorer, C för stordatorn och andra framsteg, har assembler förlorat mycket av sin tilltalande. IBM fortsätter dock att uppgradera assemblern och den används fortfarande när behovet av snabbhet eller mycket fin kontroll är av största vikt. Men alla IBMs efterföljare till BAL har inkluderat en sofistikerad makrofunktion som gör det möjligt att skriva mycket mer kompakt källkod.

En annan anledning att använda assembler är att inte alla operativsystemfunktioner kan nås på högnivåspråk. Applikationsprogrammets gränssnitt för stordatoroperativsystem definieras som en uppsättning "makro"-instruktioner för assemblerspråk, som vanligtvis anropar Supervisor Call (SVC) [t.ex. på z/OS] eller Diagnose (DIAG) [på t.ex. z/VM ] instruktioner för att anropa operativsystemsrutiner. Det är möjligt att använda operativsystemtjänster från program skrivna på högnivåspråk genom att använda assemblersubrutiner.

Assembler uttalande format

Keypunch-kort och en tryckt monteringslista var vanliga under IBM 370-sammansättningsspråket på 1970-talet

Formatet för assemblerspråksuttalanden återspeglar layouten för ett hålkort med 80 kolumner, även om successiva versioner har lättat på de flesta av begränsningarna.

  • Den valfria satsetiketten eller namnet är en sträng alfanumeriska tecken som börjar i kolumn 1. Det första tecknet måste vara alfabetiskt. Senare versioner lade till @, #, $ och _ till de juridiska tecknen som används i etiketter och utökade storleken från de första sex tecknen till åtta tecken, sedan till nästan obegränsade längder.
  • Operationskoden eller "mnemonic" kan börja i vilken kolumn som helst till höger om kolumn 1, separerad från satsetiketten med ett tomrum. Operationskoden skulle bara vara en maskininstruktion (makron var inte tillgängliga), vilket gör den vanligtvis 1, 2, 3 eller sällan 4 bokstäver. Operationskoden förbättrades för att tillåta upp till åtta tecken, och senare till faktiskt obegränsade längder.
  • Operandfältet kan börja i vilken kolumn som helst till höger om operationskoden, separerad från operationskoden med minst en blank. Blanks är ogiltiga i operander förutom i teckenkonstanter. Operandfältet, som består av en eller flera operander, är valfritt beroende på operationskoden.
  • Valfria kommentarer kan visas till höger om operandfältet, åtskilda av minst en tom.
  • Basic Assembly Language tillåter inte fortsättning av uttalande. Senare versioner av assemblern indikerar fortsättning genom att ett icke-tomt tecken visas i kolumn 72 i uttalandet. Basic Assembly Language kräver att kolumn 72 är tom.
  • En "helkortkommentar" indikeras med en asterisk (*) i kolumn 1.
  • Kortkolumnerna 73–80, kallade identifikationssekvensfältet kan användas av programmeraren för alla ändamål, men innehåller vanligtvis sekvensnummer för att tillgripa en virrig kortlek.

Basic Assembly-språk tillåter också ett alternativt satsformat med satsen som börjar i kolumn 25, vilket gör att den sammansatta instruktionen kan stansas på samma kort som börjar i kolumn 1. Detta alternativ fortsatte inte i senare versioner av assemblern.

Typer av instruktioner

Tre huvudtyper av instruktioner finns i källkoden för ett program skrivet i assembler.

Monteringsanvisningar

Assemblerinstruktioner, ibland kallade direktiv , pseudooperationer eller pseudoops på andra system, är förfrågningar till assembleraren att utföra olika operationer under kodgenereringsprocessen. Till exempel CSECT "starta en kodsektion här"; DC definierar en konstant som ska placeras i objektkoden.

En av de viktigare assemblerinstruktionerna är USING , som stöder den trunkerade adresseringen av S/360-arkitekturen. Den vägleder assemblern i att bestämma vilket basregister och offset den ska använda för en relativ adress. I BAL var det begränsat till formen

ANVÄNDER bas,reg-1,...,reg-n

Maskininstruktioner (mnemonik)

Det finns ett en-till-en-förhållande med maskininstruktioner . Den fullständiga mnemoniska instruktionsuppsättningen beskrivs i bruksanvisningen för principer för varje processor. Exempel:

* Detta är en kommentarsrad * Ladda helordsheltalet lagrat på * platsen märkt 'ZIGGY' i det allmänna register 3: L 3,ZIGGY SLA 4,5 flytta värdet i det allmänna register 4 vänster med 5 bitar MVC TARGET, SOURCE flytta tecken från plats 'SOURCE' till 'MÅL' AP COUNT,=P'1' lägg till 1 till värdet i minnesplatsen 'COUNT' (packat decimalformat) B NÄSTA ovillkorlig gren till etiketten 'NEXT' HÄR EQU * Detta är en etikett CLC TARGET ,=C'ADDRESS' Jämför minnesplatsen 'MÅL' med strängen 'ADRESS' BE THERE gren om lika med programetiketten 'THERE'

Allmänt accepterade standarder, även om de inte på något sätt är obligatoriska, inkluderar identifiering av allmänna register med mnemonics. Till skillnad från assemblers för vissa andra system, såsom X86 assemblerspråk , är registermnemonics inte reserverade symboler utan definieras genom EQU-satser någon annanstans i programmet. Detta förbättrar läsbarheten för assembler-språkprogram och ger en korsreferens av registeranvändning. Därför kan du vanligtvis se följande i ett assemblerprogram:

R3 EQU 3 ... L R3,SIGGY

Några anmärkningsvärda instruktionsmnemonics är BALR för ett samtal som lagrar returadressen och villkorskoden i ett register, SVC , DIAG och ZAP . Det senare inspirerade namnet på SuperZAP-verktyget av en programmerare som använde pseudonymen WAMOZART , jfr. SuperZap Free Online Dictionary of Computing .

System/360 maskininstruktioner är ett, två eller tre halvord långa (två till 6 byte). Ursprungligen fanns det fyra instruktionsformat, betecknade av de första två bitarna i operationskodfältet; z/Architecture har lagt till ytterligare format.

Makron och villkorlig montering

Grundläggande assemblerspråk stöder inte makron . Senare assemblerversioner tillåter programmeraren att gruppera instruktioner till makron och lägga till dem i ett bibliotek, som sedan kan anropas i andra program, vanligtvis med parametrar, som förprocessorfaciliteterna i C och relaterade språk. Makron kan inkludera villkorliga assembler-instruktioner, såsom AIF (en 'om'-konstruktion), som används för att generera olika kod enligt de valda parametrarna. Det gör den här assemblerns makrofunktion väldigt kraftfull. Medan flerradsmakron i C är ett undantag, kan makrodefinitioner i assembler lätt vara hundratals rader.

Operativsystems makron

De flesta program kräver tjänster från operativsystemet och operativsystemet tillhandahåller standardmakron för att begära dessa tjänster. Dessa är analoga med Unix- systemanrop . Till exempel, i MVS (senare z/OS), allokerar STORAGE (med parametern OBTAIN) dynamiskt ett minnesblock och GET hämtar nästa logiska post från en fil.

Till skillnad från Unix-systemanrop är makron dock inte standardiserade över operativsystem. Även något så enkelt som att skriva en "sekventiell fil" kodas annorlunda t.ex. i Z/OS än i Z/VSE.

Exempel

Följande fragment visar hur logiken "Om SEX = 'M', lägg till 1 till HANAR; annars, lägg till 1 till KVINNOR" skulle utföras i assembler.

CLI SEX, C'M' Man? BNE IS_FEM Om inte, förgrena sig runt L 7,MALES Ladda aktuellt värde för MALES i register 7 LA 7,1(7) lägg till 1 ST 7,MALES lagra tillbaka resultatet B GO_ON Avslutat med denna del IS_FEM EQU * A etikett L 7, KVINNOR Ladda aktuellt värde i KVINNOR i register 7 LA 7,1(7) lägg till 1 ST 7,KVINNOR lagra tillbaka resultatet GO_ON EQU * - resten av programmet - * HANAR DC F'0' Counter för HANAR (initialt=0) KVINNOR DC F'0'-räknare för KVINNOR (initialt=0)

Följande är det allestädes närvarande Hello world- programmet och skulle, när det körs under ett IBM-operativsystem som OS/VS1 eller MVS , visa orden "Hello World" på operatörens konsol:

HELLO CSECT Namnet på detta program är "HELLO" * Registrera 15 poäng här vid inträde från OPSYS eller den som ringer. STM 14,12,12(13) Spara register 14,15, och 0 till 12 i anroparens Spara område LR 12,15 Ställ in basregister med programmets ingångsadress MED HEJ,12 Berätta för assembler vilket register vi använder för pgm. bas LA 15,SPARA Nu Peka på vårt eget räddningsområde ST 15,8(13) Sätt framåt kedja ST 13,4(15) Sätt tillbaka kedja LR 13,15 Sätt R13 till adress för nytt räddningsområde * -slut på hushållning ( liknande för de flesta program) - WTO 'Hello World' Skriv till operatör (operativsystemmakro) * L 13,4(13) återställ adress till lagringsområde som tillhandahålls av den som ringer XC 8(4,13),8(13) Rensa framåtkedjan LM 14,12,12(13) Återställ register som vid ingång DROP 12 Motsatsen till 'ANVÄNDA' SR 15,15 Sätt register 15 till 0 så att returkoden (R15) är Noll BR 14 Återgå till den som ringer * SPARA DS 18F Definiera 18 fullord för att spara anropande programregister SLUTA HEJ Detta är slutet på programmet

WTO är ett assemblermakro som genererar ett operativsystemanrop. På grund av att spara register och senare återställa och returnera, kan detta lilla program användas som ett batchprogram som anropas direkt av operativsystemet Job Control Language (JCL) så här:

   //  EXEC  PGM=HEJ 

eller alternativt kan den anropas som en subrutin från ett sådant program:

RING "HEJ"

versioner

Utskrift av batchjobb som visar identifieringssidan för Assembler G

Med undantag för montörerna för IBM System/360 Model 20 var IBM-montörerna i stort sett uppåtkompatibla. Skillnaderna låg främst i komplexiteten hos tillåtna uttryck och i makrobearbetning. OS/360 -montörer designades ursprungligen enligt deras minneskrav.

7090/7094 Supportpaketmontör

Denna korsmonterare körs på ett 7090- eller 7094- system och användes medan System/360 var under utveckling.

Grundläggande programmeringsstöd assembler

Montören för BPS är den sanna "grundläggaren". Det var tänkt att laddas från kort och skulle köras på ett 8 KB System/360 (förutom modell 20). Den har inget stöd för makroinstruktioner eller utökad mnemonics (som BH i stället för BC 2 till förgrening om villkorskod 2 indikerar en hög jämförelse). Den kan bara montera en enda kontrollsektion och tillåter inte dummysektioner (strukturdefinitioner). Uttryck inom parentes är inte tillåtna och uttryck är begränsade till tre termer med de enda operatorerna '+', '-' och '*'.

Grundläggande operativsystem assembler

Det grundläggande operativsystemet har två assemblerversioner. Båda kräver 16 KB minne, den ena är bandinbyggd och den andra disken.

Montör D

Assembler D var DOS/360 assembler för maskiner med en minnesstorlek på 16 KB. Den kom i två versioner: En 10 KB-variant för maskiner med minst 16 KB-minne och en 14 KB-variant för maskiner med 24 KB. En assembler på F-nivå fanns också tillgänglig för DOS-maskiner med 64 KB eller mer. D montörer erbjöd nästan alla funktioner i högre versioner.

Montör E och F

Assembler E designades för att köras på ett OS/360-system med minst 32 KB huvudminne, där själva assemblern kräver 15 KB. Assembler F kan köras under antingen DOS/360 eller OS/360 på ett system med 64 KB minne, där assemblern kräver 44 KB. Dessa montörer är en standarddel av OS/360; versionen som genererades specificerades vid systemgenerering (SYSGEN).

Modell 44 Programmeringssystem Assembler

"Med vissa undantag är IBM System/360 Model 44 Programming System Assembler Language en utvald undergrupp av de språk som är tillgängliga i IBM System/360 programmeringsstöd." Framför allt saknade Model 44 assembler stöd för makron och fortsättningssatser. Å andra sidan hade den ett antal funktioner som inte hittades i andra System/360-assemblerare - särskilt instruktioner för att uppdatera en för kortbildskällor , kallad common, och implicit definition av SETA -assemblervariabler.

Montör G

"Assembler G" är en uppsättning modifieringar som gjordes av Assembler F på 1970-talet av University of Waterloo (Assembler F var/är öppen källkod). Förbättringar är mestadels bättre hantering av input/output och förbättrad buffring som påskyndar sammansättningarna avsevärt. "Assembler G" var aldrig en IBM-produkt.

Montör H

Assembler H Version 2 tillkännagavs 1981 och inkluderar stöd för Extended Architecture (XA), inklusive AMODE- och RMODE-direktiven. Det drogs tillbaka från marknadsföring 1994 och stödet upphörde 1995. Det ersattes av High Level Assembler.

Assembler XF

Assembler XF är en uppgradering av Assembler F som inkluderar de nya System/370 arkitekturinstruktionerna. Denna version tillhandahåller en gemensam assembler för OS/VS- och DOS/VS-system. Andra ändringar inkluderar avslappnande begränsningar för uttryck och makrobearbetning. Assembler XF kräver en minsta partitions-/regionstorlek på 64 KB (virtuell). Rekommenderad storlek är 128 KB.

Montör på hög nivå

High Level Assembler (HLASM), tillkännagav 1992 som ett licensierat program "blir standardöversättaren för System/370 (TM) och System/390 (TM) operativsystem." Assembleren stöder operativsystemen MVS, VSE och VM och efterföljare. Från och med Release 6 kan den nu köras under Linux på IBM Z och generera ELF- eller GOFF- objektfiler. Den har en lång lista med mestadels användbarhetsförbättringar och innehåller SLAC (Stanford Linear Accelerator) modifikationer av Assembler H. Bland funktioner som lades till var en indikation på CSECT / DSECT för platsräknare, beroende och märkta USING-satser, en lista över USING-satser för närvarande aktiv, en indikation på om en variabel läses eller skrivs i korsreferensen, och tillåter symbolnamn med blandade versaler. RSECT - direktivet (Read-only Control Section) tillåter montören att kontrollera återinträde per sektion. RSECT var tidigare "odokumenterat och inkonsekvent implementerat i Assembler H." HLASM är den nuvarande montören för IBM stordatorsystem från och med 2012.

Specialiserade versioner

IBM System/360 modell 44 PS assembler

IBM System/360 Model 44 Programming System Assembler bearbetar ett språk som är en "vald delmängd" av OS/360 och DOS/360 assemblerspråk. Den har inget stöd för instruktioner för lagring till lagring (SS) eller konvertera till binär ( CVB ), konvertera till decimal ( CVD ), läs direkt ( RDD ) och skriv direkt ( WRD ) instruktioner. Den innehåller fyra instruktioner som är unika för Model 44: Ändra prioritetsmask ( CHPM ), Ladda PSW Special ( LPSX ), Läs direktord ( RDDW ) och Skriv direktord ( WRDW ). Den innehåller också direktiv för att uppdatera källprogrammet, en funktion som utförs av hjälpprogram i andra system ( SKPTO , REWND , NUM , OMIT och ENDUP ). Den tillhandahåller namngivna vanliga och implicit definierade &SETA- symboler, men har också vissa begränsningar.

IBM System/360 TSS assembler

Samlaren för System/360 Model 67 Time Sharing System har ett antal skillnader i direktiv för att stödja unika TSS-funktioner. PSECT - direktivet genererar en prototypkontrollsektion som innehåller flyttbara adresskonstanter och modifierbara data som används av programmet.

Icke-IBM montörer

Det har funnits flera IBM-kompatibla montörer för speciella miljöer.

  • Univac 90/60-, 90/70- och 90/80- serierna från Unisys designades för att acceptera IBM-format assembler, eftersom maskinserien var en arbetsliknande till S/360 och S/370.
  • Fujitsu BS2000 - serien byggdes också som en 370 workalike från samma resurs som Univac, och används fortfarande i vissa delar av Europa.
  • Dignus LLC Systems/ASM är en HLASM-kompatibel assembler som kan köras inbyggt på IBM-system eller som en cross-assembler.
  • Freeware PC/370 , skriven av Don Higgins, köptes senare av Micro Focus .
  • z390 är en assembler och System 390 - emulator också skriven av Don Higgins och är programmerad i Java . Den är öppen källkod och tillgänglig från http://www.z390.org/
  • Penn State University skrev ett paket som heter ASSIST , som inkluderar en System 370 assembler och tolk.
  • Tachyon Software LLC marknadsför Tachyon Assembler Workbench som körs på Windows, Linux/x86, Linux för S/390 och zSeries, AIX och Solaris.
  • GNU Assembler (gas) är en del av GNU Compiler Collection (gcc) för Linux på OS/390 och IBM Z . Denna assembler har en unik syntax som är inkompatibel med andra assemblers för IBM-arkitekturer.

Se även

Anteckningar

Ytterligare referenser
  • Rudd, Anthony. En illustrerad guide för z/Architecture Assembler-programmerare. Skapa utrymme (2012).

externa länkar