Instructieset van IBM 360

De tabellen hieronder tonen de volledige instructieset van de IBM Systeem/360.

Opmaak van instructies

012345678 910111213141516 1718192021222324 2526272829303132 3334353637383940 41424344454647
RR opcode Register 1 Register 2
RX opcode Register indeX Basis offset
SI opcode Immediate Basis offset
RS opcode Register 1 Register 2 Basis offset
SS opcode Lengte Basis 1 offset Basis 2 offset
Lengte 1 Lengte 2

RR: De meeste instructies in de rijen 0, 1, 2 en 3 zijn RR-instructies. Ze zijn twee bytes lang. Na de opcode worden twee registers genoemd. Bijvoorbeeld, de instructie AR 6,14 (interne code 1A6E) telt register 14 bij register 6 op.

RX: De instructies in de rijen 4, 5, 6 en 7 zijn RX-instructies. Ze zijn vier bytes lang. De ene operand is het register R. De andere operand bestaat uit een basisregister (B), een indexregister (X) en een offset van 12 bits. De instructie werkt met een geheugenadres dat wordt bepaald door de offset en de inhoud van B en X bij elkaar op te tellen.

Het basisregister wijst meestal naar het begin van het programma. Het wordt aan het begin van het programma geladen en daarna niet meer veranderd. Een klein programma heeft aan een enkel basisregister voldoende. Het indexregister kan worden gebruikt om arrays te adresseren.

Register 0 kan niet worden gebruikt als basis- of indexregister. Is er geen basis- of indexregister nodig, dan geeft men dus 0 op.

RS: Een aantal instructies in de rijen 8 en 9 zijn RS-instructies. Deze zijn net als RX-instructies, maar er zijn drie operanden: twee registers (R1 en R2) en een adres dat bestaat uit een basisregister en een offset van 12 bits. Er is dus geen indexregister zoals bij de RX-instructies. Bij sommige RS-instructies wordt R2 niet gebruikt.

SI: Andere instructies in de rijen 8 en 9, A en B zijn SI-instructies. Ze zijn vier bytes lang. De ene operand is direct in de instructie opgenomen. Dit heet immediate. De andere operand bestaat uit een basisregister en een offset van 12 bits, dus net als bij de RX-instructies, maar zonder indexregister. Er zijn ook SI-instructies waarbij de immediate operand niet wordt gebruikt.

SS: De instructies in de rijen C, D en F zijn SS-instructies. Ze zijn zes bytes lang. Beide operanden bestaan uit een basisregister en een offset. Verder is in de instructie de lengte van de operanden opgenomen. Soms is er één lengte (8 bits), soms twee (elk 4 bits). De waarde van de lengte is minimaal 1, maximaal 256 respectievelijk 16.

Tabel van instructies

De geprivilegieerde instructies hebben een gele achtergrond.

Sommige instructies zijn alleen beschikbaar op een uitbreiding van het systeem. Het zijn:

  • rood: Protection feature
  • blauw: Decimal feature (commerciële instructieset)
  • groen: Floating-point feature (wetenschappelijke instructieset)
  • roze: IBM 370

De tekst bovenaan en links geeft aan wat de meeste instructies in die regel of kolom doen. Hierop zijn uitzonderingen.

tweede nibble→0123456789ABCDEF
Load PositiveLoad NegativeLoad & TestLoad Comp-
lement
Set Program MaskBranch
And Link
Branch on CounT Branch on ConditionSet Storage KeyInsert Storage KeySuper-
Visor Call
ConVert to DecimalConVert to Binary
SToreLoad AddressInsert aNdCompare LogicalOrXorLoadCom-
pare
Add Sub-
tract
Mult-
iply
Div-
ide
Add LogicalSubtract Logical
HalveLoud RoundedMultiplyAdd Unnormal-
ised
Subtract Unnormal-
ised
eerste nibble↓EXecuteAddSubtract
0programmabesturing SPMBALRBCTRBCR1SSK ISKSVC MVCLCLCL
132-bits integer in registers LPRLNRLTRLCRNRCLRORXRLRCRARSRMRDRALRSLR
264-bits drijvende komma in registers LPDRLNDR LTDRLCDR HDR LRDR MXRMXDR LDRCDR ADRSDR MDRDDR AWRSWR
332-bits drijvende komma in registers LPERLNER LTERLCER HERLRER AXRSXR LERCER AERSER MERDER AURSUR
416-bits integer STHLASTCICEXBALBCTBC1LHCHAHSHMHCVDCVB
532-bits integer STNCLOXLCASMDALSL
664-bits drijvende komma STD MXD LDCD ADSD MDDD AWSW
732-bits drijvende komma STELE CE AESE MEDE AUSU
eerste nibble↓ Set System MaskTest MaskLoad PSWDiagnose WRite DirectReaD DirectBranch indeX HighBranch indeX Low or Equal Shift RightShift LeftShift RightShift Left Shift RightShift LeftShift RightShift Left
SToreMoVe ImmediateTest and SetaNdCompare LogicalOrXorLoad Start IOTest IOHalt IOTest CHannel
8schuifinstructies SSMLPSWdiagnoseWRDRDDBXHBXLESRLSLLSRASLASRDLSLDLSRDASLDA
9Immediate STMTMMVITSNICLIOIXILMSIOTIOHIOTCH
A STNSM STOSM SIGP MC
B LRA diverse STCTLLCTL CSCDS CLMSTCM ICM
MoVeMoVe CharactersMoVe aNdCom-
pare
Logical
OrXor Zero
and
Add
Com-
pare
AddSub-
tract
TRans-
late
Trans-
late and Test
EDitEdit
and
MarK
eerste nibble↓PACKUNPacKMult-
iply
Div-
ide
C
Dreeks bytes in geheugen MVNMVCMVZNCCLCOCXCTRTRT EDEDMK
E
Fdecimaal SRPMVOPACKUNPK ZAPCP APSP MPDP

Uitgebreide mnemonische codes

1 De instructie BC krijgt als operand een conditie en een sprongadres. Om de programmering te vereenvoudigen zijn er uitgebreide mnemonische codes waarin de conditie al verwerkt is. Ook de instructie BCR heeft die mogelijkheid, maar alleen als de conditie 0 of 15 is. Merk op dat een enkele mnemonic meerdere betekenissen kan hebben: BM betekent if minus of if mixed, te gebruiken op het resultaat van een berekening of op TM. In beide gevallen wordt de conditie geassembleerd als 4.

MnemonischVoorwaardeMet BC(R)Opmerking
NOP(R) Ageen sprongBC(R) 0,AHoewel het geen effect heeft, moet er ook na NOP(R) een sprongadres staan.
B(R) Aonvoorwaardelijke sprongBC(R) 15,A
BZ Azero, nulBC 8,ANa berekening
zeroes, uitsluitend nullenNa TM
BE Aequal, gelijkNa vergelijking
BNZ Aniet nulBC 7,ANa berekening
not zeroesNa TM (niet in documentatie)
BNE Aniet gelijkNa vergelijking
BH AhogerBC 2,ANa vergelijking
BP Aplus, positiefNa berekening
BL AlagerBC 4,ANa vergelijking
BM Aminus, negatiefNa berekening
mixed, gemengd nullen en enenNa TM
BNH Aniet hogerBC 13,ANa vergelijking
BNP Aniet plusNa berekening
BNL Aniet lagerBC 11,ANa vergelijking
BNM Aniet minusNa berekening
not mixedNa TM (niet in documentatie)
BO AoverflowBC 1,ANa berekening
ones, uitsluitend enenNa TM
BNO Ageen overflowBC 14,ANa berekening (niet in documentatie)
not ones, niet uitsluitend enenNa TM

Registers

De architectuur heeft 16 registers van elk 32 bits. Ze zijn genummerd van 0 tot 15 en voor bijna elk doel bruikbaar.

Kan de processor drijvende-kommabewerkingen uitvoeren, dan zijn er ook nog 4 registers van elk 64 bits. Deze hebben de nummers 0, 2, 4, 6. Andere registernummers mogen bij een drijvende-kommabewerking niet worden gebruikt.

Alfabetische lijst van instructies

  • R1: het register waarnaar wordt verwezen in de eerste operand.
  • R2: het register waarnaar wordt verwezen in de tweede operand.
MnemonischMachinecodeVoluitUitleg
A, AR5A, 1AAddDe tweede operand (32 bits) wordt opgeteld bij R1 en de conditiecode wordt gezet.
AD, ADR
AE, AER
6A, 2A
7A, 3A
idem met drijvende komma
AH4AAdd HalfwordDe tweede operand (16 bits met teken) wordt opgeteld bij R1 en de conditiecode wordt gezet.
AL, ALR5E, 1EAdd logicalHetzelfde als Add, maar de conditiecode heeft een andere betekenis
APAdd decimalDe twee operanden zijn packed decimal (elk maximaal 16 bytes).
AU, AUR
AW, AWR
6E, 2E
7E, 3E
Add unnormalisedAls AD en AE, maar zonder normalisatie
AXR36Add Normalisedoptelling van drijvende-kommagetallen (128 bits)
BAL, BALR45, 05Branch and linkHet huidige executieadres wordt opgeslagen in R1 en er wordt gesprongen naar het adres in de tweede operand. Springen naar het adres in register 0 is niet mogelijk.
BC, BCR47, 07Branch on conditionHeeft de conditie in R1 een waarde die overeenkomt met de conditiecode, dan wordt er gesprongen naar het adres in de tweede operand. Springen naar het adres in register 0 is niet mogelijk.
BCT, BCTR46, 06Branch on countR1 wordt met 1 verminderd. Is het resultaat niet nul, dan wordt de sprong uitgevoerd.
BXH86Branch on index highR2 wordt opgeteld by R1. Is het resultaat positief, dan wordt de sprong uitgevoerd.
BXLE87Branch on index low or equal
C, CR59, 19CompareR1 wordt vergeleken met de tweede operand (32 bits) en de conditiecode wordt gezet.
CD, CDR
CE, CER
69, 29
79, 39
idem met drijvende komma
CH49Compare HalfwordR1 wordt vergeleken met de tweede operand (16 bits met teken) en de conditiecode wordt gezet.
CL, CLR55, 15Compare logical
CLCD5Compare logical characters
CLI95Compare Logical ImmediateVergelijking tussen de eerste operand en de tweede operand
CPF9Compare decimalVergelijking tussen packed decimal getallen
CVB4FConvert to binaryDe tweede operand (packed decimal, 64 bits) wordt geconverteerd naar binair.
CVD4EConvert to decimalR1 wordt geconverteerd naar packed decimal (64 bits)
D, DR5D, 1DDivideR1 (een even register) en het daaropvolgende register worden gedeeld door de tweede operand. de rest komt in R1, het quotiënt in het volgende register.
DD, DDR
DE, DER
6D, 2D
7D, 3D
idem met drijvende komma
83DiagnoseVoor intern gebruik door IBM, heeft geen mnemonische code
DPFDDivide decimalQuotiënt en rest komen naast elkaar in de eerste operand.
EDDEEdit
EDMKDFEdit and Mark
EX44ExecuteDe instructie op het aangegeven adres wordt uitgevoerd.
HDR, HER42, 43HalveHalveer drijvende-kommagetal
HIO9DHalt I/O
IC43Insert characterDe tweede operand komt in de rechterbyte van R1, de rest van R1 blijft onveranderd.
ISK09Insert storage key
L, LR58, 18LoadDe tweede operand (32 bits) wordt gekopieerd naar R1.
LA41Load AddressHet adres van de tweede operand wordt in R1 geplaatst, de linker byte van R1 wordt nul.
LD, LDR68, 28De tweede operand (64 bits) wordt gekopieerd naar drijvende-kommaregister R1 en het daaropvolgende register.
LCR13Load complementHet tegengestelde van R2 wordt gekopieerd naar R1 en de conditiecode wordt gezet.
LCDR, LCER24, 34idem met drijvende komma
LE, LER78, 38De tweede operand (32 bits) wordt gekopieerd naar drijvende-kommaregister R1.
LH48Load halfwordDe tweede operand (16 bits) wordt gekopieerd naar de rechterhelft van R1 en het tekenbit wordt gepropageerd.
LM89Load multipleEen aantal opeenvolgende registers (van R1 t/m R2) worden geladen.
LNR11Load negativeDe negatieve waarde van R2 wordt gekopieerd naar R1 en de conditiecode wordt gezet.
LNDR, LNER21, 31idem met drijvende komma
LPR10Load positiveDe absolute waarde van R2 wordt gekopieerd naar R1 en de conditiecode wordt gezet.
LPDR, LPER20, 30idem met drijvende komma
LPSW28Load program status word
LRDR, LRER25, 26Load RoundedDe inhoud van R2 wordt afgerond en het resultaat komt in R1.
LTDR, LTER22, 32Als LTR, met drijvende komma
LTR12Load and testR2 wordt gekopieerd naar R1 en de conditiecode wordt gezet.
M, MR5C, 1CMultiplyDe tweede operand (32 bits) wordt vermenigvuldigd met R1 (een even register) en het resultaat komt in R1 en het opvolgende register.
MD, MDR
ME, MER
6C, 2C
7C, 3C
idem met drijvende komma
MH4CMultiply HalfwordDe tweede operand (16 bits) wordt vermenigvuldigd met R1 (een even register) en het resultaat komt in R1 en het opvolgende register.
MPFCMultiply decimalDe tweede operand mag niet langer zijn dan 8 bytes. De eerste operand moet groot genoeg zijn voor het product.
MVCD2Move characterseen aantal opeenvolgende bytes in het geheugen worden verplaatst.
MVI92Move immediateDe eerste operand wordt in de tweede operand opgeslagen.
MVND1Move Numeric
MVOF1Move with Offset
MVZD3Move Zones
MXD, MXDR67, 27MultiplyVermenigvuldiging van drijvende-kommagetallen (64 bits, resultaat 128 bits)
MXR26MultiplyVermenigvuldiging van drijvende-kommagetallen (128 bits)
N, NR54, 14AndLogische En van R1 en de tweede operand
NCD4And characters
NI94And immediateLogische En van de eerste operand en de tweede operand
O, OR56, 16OrLogische Of van R1 en de tweede operand
OCD6Or characters
OI96Or immediateLogische Of van de eerste operand en de tweede operand
PACKF2PackConversie van zoned decimal naar packed decimal
RDD85Read direct
S, SR5B, 1BSubtractDe tweede operand wordt afgetrokken van R1 en de conditiecode wordt gezet.
SD, SDR
SE, SER
6B, 2B
7B, 3B
idem met drijvende komma
SH4BSubtract HalfwordDe tweede operand (16 bits met teken) wordt afgetrokken van R1 en de conditiecode wordt gezet.
SL, SLR5F, 1FSubtract logicalHetzelfde als Subtract, maar de conditiecode heeft een andere betekenis
SIO9CStart I/O
SLA8BShift left singleR1 wordt zoveel bits naar links geschoven als aangegeven in de tweede operand. Het tekenbit verandert niet.
SLDA8FShift left doubleAls SLA, met twee opeenvolgende registers
SLL, SLDL89, 8DShift left logical
SPFBSubtract decimalZie AP
SPM04Set program mask
SRA, SRDA8A, 8EShift rightAls SLA en SLDA. Het tekenbit wordt gepropageerd
SRL, SRDL88, 8CShift right logical
SSK08Set storage key
SSM80Set system mask
ST50StoreR1 wordt opgeslagen op het adres van de tweede operand.
STC42Store CharacterDe rechterbyte van R1 wordt op de tweede operand opgeslagen.
STD, STE60, 70StoreDrijvendekomma-register R1 (32 of 64 bits) wordt opgeslagen op het adres van de tweede operand.
STH40Store HalfwordDe rechterhelft van R1 wordt op de tweede operand opgeslagen.
STM90Store MultipleR1 tot en met R2 worden opgeslagen op het adres van de tweede operand.
SVC0ASupervisor callhet Program status word wordt opgeslagen op adres 20h en een nieuw PSW wordt opgehaald van adres 60h.
SU, SUR
SW, SWR
6F, 2F
7F, 3F
Subtract unnormalisedAls SD en SE, maar zonder normalisatie
SXR37Subtract Normalisedaftrekking van drijvende-kommagetallen (128 bits)
TCH9FTest channel
TIO9DTest I/O
TM91Test under Mask
TRDCTranslate
TRTDDTranslate and Test
TS93Test and SetSemafoorinstructie: De linkerbit van de operand wordt in de conditiecode gezet en de operandbyte wordt 0FFh.
UNPKF3UnpackConversie van packed decimal naar zoned decimal
WRD84Write direct
X, XR57, 17XorLogische exclusieve Of van R1 en de tweede operand
XCD7Xor characters
XI97Xor immediateLogische exclusieve Of van de eerste operand en de tweede operand
ZAPF8Zero and AddDe tweede operand wordt gekopieerd naar de eerste. De operanden zijn maximaal 16 bytes lang, maar niet noodzakelijk even lang. Dit komt overeen met het op nul zetten van de eerste operand, waarna de instructie AP wordt uitgevoerd.
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.