Jump to content

IBM Basic assembly language and successors

From Wikipedia, the free encyclopedia
(Redirected fromHLASM)
Basic Assembly Language
Paradigmassembly language
DeveloperIBM
First appeared1964
OSIBM Basic Programming Support,Basic Operating System/360
Licensefree
Assembler D/E/F/G/H/XF
Paradigmmacro assembly language
DeveloperIBM
First appeared1966
OSIBMOS/VS,DOS/VS,VM/370and related
Licensevaried
High Level Assembler
Paradigmmacro assembly language
DeveloperIBM
First appeared1992
Stable release
Version 1 Release 6
OSIBMMVS/ESAand successors,VM/ESAand successors,VSE/ESAand successors
Licenseproprietary
Websitehttps://www.ibm.com/products/high-level-assembler-and-toolkit-feature
Majorimplementations
High Level Assembler

TheIBM Basic assembly language and successorsis a series ofassembly languagesandassemblersmade for theIBM System/360mainframe system and its successors through theIBM Z.

The first of these, theBasic Assembly Language(BAL), is an extremely restrictedassembly language,introduced in 1964 and used on 360 systems with only 8 KB of main memory, and only acard reader,acard punch,and a printer forinput/output,as part ofIBM Basic Programming Support(BPS/360). The Basic Assembler for BAL was also available as part ofBasic Operating System/360(BOS/360).

Subsequently, an assembly language appeared for the System/360 that had more powerful features and usability, such as support formacros.This language, and the line of assemblers that implemented it, continued to evolve for theSystem/370and the architectures that followed, inheriting and extending its syntax. Some in the computer industry referred to these under the generic term "Basic Assembly Language" or "BAL".[1]Many did not, however, and IBM itself usually referred to them as simply the "System/360 Assembler Language",[2]as the "Assembler" for a given operating system or platform,[3]or similar names. Specific assemblers were known by such names[a]as Assembler E, Assembler F, Assembler H, and so forth. Programmers utilizing this language, and this family of assemblers, also refer to them as ALC (for Assembly Language Coding), or simply "the assembler".

The latest derived language is known as theIBM High-Level Assembler(HLASM).

General characteristics

[edit]

As it is anassembly language,BAL uses the nativeinstruction setof the IBM mainframe architecture on which it runs,System/360.

The successors to BAL use the native instruction sets of the IBM mainframe architectures on which they run, includingSystem/360,System/370,System/370-XA,ESA/370,ESA/390,andz/Architecture.

The simplicity of machine instructions means that thesource codeof a program written in assembler will usually be much longer than an equivalent program in, say,COBOLorFortran.In the past, the speed of hand-coded assembler programs was often felt to make up for this drawback, but with the advent of optimizing compilers,Cfor the mainframe, and other advances, assembler has lost much of its appeal. IBM continues to upgrade the assembler, however, and it is still used when the need for speed or very fine control is paramount. However, all of the IBM successors to BAL have included a sophisticated macro facility that allows writing much more compact source code.

Another reason to use assembler is that not all operating system functions can be accessed in high level languages. The application program interfaces of IBM's mainframe operating systems is defined as a set of assembly language "macro" instructions, that typically invokeSupervisor Call(SVC) [e.g., on z/OS] or Diagnose (DIAG) [on, e.g., z/VM] instructions to invoke operating system routines. It is possible to use operating system services from programs written in high-level languages by use of assembler subroutines.

Assembler statement format

[edit]
Some programmers used an assembler coding form for the IBM 360 assembly languages and their successors
Keypunch cards and a printed assembly listing were common during IBM 370 assembly language use in the 1970s

The format of assembler language statements reflects the layout of an 80-column punched card, though successive versions have relaxed most of the restrictions.

  • The optional statement label ornameis a string alphanumeric characters beginning in column 1. The first character has to be alphabetic. Later versions added @, #, $, and _ to the legal characters used in labels, and increased the size from the initial six, to eight characters, then to almost unlimited lengths.
  • The operation code or "mnemonic" can begin in any column to the right of column 1, separated from the statement label by a blank. The operation code would be only a machine instruction (macros were not available), making it usually 1, 2, 3, or rarely 4 letters. The operation code was enhanced to allow up to eight characters, then later to effectively unlimited lengths.
  • The operand field can begin in any column to the right of the operation code, separated from the operation code by at least one blank. Blanks are invalid in operands except in character constants. The operand field, consisting of one or more operands, is optional depending on the operation code.
  • Optional comments can appear to the right of the operand field, separated by at least one blank.
  • BasicAssembly Language does not allow statement continuation. Later versions of the assembler indicate continuation by the appearance of any non-blank character in column 72 of the statement being continued. Basic Assembly Language requires that column 72 be blank.
  • A "full-card comment" is indicated by an asterisk (*) in column 1.
  • Card columns 73–80, called theidentification-sequence fieldcan be used by the programmer for any purpose, but usually contain sequence numbers for resorting a jumbled card deck.

Basic Assembly language also permits an alternate statement format with the statement starting in column 25, allowing the assembled instruction to be punched into the same card beginning in column 1. This option was not continued in later versions of the assembler.

Types of instructions

[edit]

Three main types of instructions are found in the source code of a program written in assembler.

Assembler instructions

[edit]

Assembler instructions, sometimes termeddirectives,pseudo operations or pseudoops on other systems, are requests to the assembler to perform various operations during the code generation process. For instance,CSECTmeans "start a section of code here";DSECTprovides data definitions for a structure, but generates no code;DCdefines a constant to be placed in the object code.

One of the more important assembler instructions isUSING,which supports the base-displacement addressing of the S/360 architecture. It guides the assembler in determining what base register and offset it should use for a relative address. In BAL, it was limited to the form

USING base,reg-1,...,reg-n

Machine instruction addresses on S/360 specify adisplacement(0–4095 bytes) from the value in abase register;while later versions of the architecture added relative-address formats, the older formats are still used by many instructions.USINGallows the programmer to tell the assembler that the specified base registers are assumed to contain the address of "base", base+4096 (if multiple registers are specified), etc. This only provides a shortcut for the programmer, who otherwise would have to specify the base register in each instruction. Programmers are still responsible for actually loading the address of "base" into the register before writing code that depends on this value.

The relatedDROPassembler instruction nullifies a previousUSING.

Machine instructions (mnemonic)

[edit]

There is a one-to-one relationship withmachine instructions.The full mnemonic instruction set is described in thePrinciples of Operation[4]manual for each instruction set. Examples:

* This is a comment line
* Load the fullword integer stored at the
* location labeled 'ZIGGY' into general register 3:
L 3,ZIGGY
SLA 4,5 shift the value in general register 4 left by 5 bits
MVC TARGET,SOURCE move characters from location 'SOURCE' to 'TARGET'
AP COUNT,=P'1' add 1 to value in memory location 'COUNT' (packed decimal format)
B NEXT unconditional branch to label 'NEXT'
HERE EQU * This is a label
CLC TARGET,=C'ADDRESS' Compare memory location 'TARGET' to string 'ADDRESS'
BE THERE branch if equal to program label 'THERE'

Generally accepted standards, although by no means mandatory, include the identification of general purpose registers with mnemonics. Unlike assemblers for some other systems, such asX86 assembly language,register mnemonics are not reserved symbols but are defined throughEQUstatements elsewhere in the program. This improves readability of assembler language programs and provides a cross-reference of register usage. Thus typically you may see the following in an assembler program:

R3 EQU 3
...
L R3,ZIGGY

Some notableinstructionmnemonics areBALR[b]for a call storing the return address and condition code in a register,SVC,[c]DIAG,[d]andZAP.[5]

System/360 machine instructions are one, two, or threehalfwordsin length (two to 6 bytes). Originally there were four instruction formats, designated by the first two bits of the operation code field;z/Architectureadded additional formats.

Macros and conditional assembly

[edit]

The Basic Programming Support assembler did not supportmacros.Later assembler versions beginning with Assembler D[6]allow the programmer to group instructions together into macros and add them to a library, which can then be invoked in other programs, usually with parameters, like the preprocessor facilities in C and related languages. Macros can include conditional assembler instructions, such asAIF(an ‘if’ construct), used to generate different code according to the chosen parameters. That makes the macro facility of this assembler very powerful. While multiline macros in C are an exception, macro definitions in assembler can easily be hundreds of lines.

Operating system macros

[edit]

Most programs will require services from theoperating system,and the OS provides standard macros for requesting those services. These are analogous toUnixsystem calls.For instance, inMVS(later z/OS),STORAGE(with theOBTAINparameter) dynamically allocates a block of memory, andGETretrieves the next logical record from a file.

These macros are operating-system-dependent; unlike several higher-level languages, IBM mainframe assembly languages don't provide operating-system-independent statements or libraries to allocate memory, perform I/O operations, and so forth, and different IBM mainframe operating systems are not compatible at the system service level. For example, writing a sequential file would be coded differently in z/OS and in z/VSE.

Examples

[edit]

The following fragment shows how the logic "If SEX = 'M', add 1 to MALES; else, add 1 to FEMALES" would be performed in assembler.

CLI SEX,C'M' Male?
BNE IS_FEM If not, branch around
L 7,MALES Load current value of MALES into register 7
LA 7,1(7) add 1
ST 7,MALES store back the result
B GO_ON Finished with this portion
IS_FEM EQU * A label
L 7,FEMALES Load current value in FEMALES into register 7
LA 7,1(7) add 1
ST 7,FEMALES store back the result
GO_ON EQU * - rest of program -
*
MALES DC F'0' Counter for MALES (initially=0)
FEMALES DC F'0' Counter for FEMALES (initially=0)

The following is the ubiquitous"Hello, World!" program,and would, executing under an IBM operating system such asOS/VS1orMVS,display the words 'Hello, World!' on the operator's console:

HELLO CSECT The name of this program is 'HELLO'
* Register 15 points here on entry from OPSYS or caller.
STM 14,12,12(13) Save registers 14,15, and 0 thru 12 in caller's Save area
LR 12,15 Set up base register with program's entry point address
USING HELLO,12 Tell assembler which register we are using for pgm. base
LA 15,SAVE Now Point at our own save area
ST 15,8(13) Set forward chain
ST 13,4(15) Set back chain
LR 13,15 Set R13 to address of new save area
* -end of housekeeping (similar for most programs) -
WTO 'Hello, World!' Write To Operator (Operating System macro)
*
L 13,4(13) restore address to caller-provided save area
XC 8(4,13),8(13) Clear forward chain
LM 14,12,12(13) Restore registers as on entry
DROP 12 The opposite of 'USING'
SR 15,15 Set register 15 to 0 so that the return code (R15) is Zero
BR 14 Return to caller
*
SAVE DS 18F Define 18 fullwords to save calling program registers
END HELLO This is the end of the program

WTOis an assembler macro that generates an operating system call. Because of saving registers and later restoring and returning, this small program is usable as a batch program invoked directly by the operating systemJob control language(JCL) like this:

//EXECPGM=HELLO

or, alternatively, it can be CALLed as a subroutine from such a program:

CALL 'HELLO'

Versions

[edit]
Batch job printout showing identification page for Assembler G

With the exception of the assemblers for theIBM System/360 Model 20,the IBM assemblers were largely upward-compatible. The differences were mainly in the complexity of expressions allowed and in macro processing.OS/360assemblers were originally designated according to their memory requirements.

Basic Programming Support assembler

[edit]

The assembler forBPSis the true "basic assembler." It was intended to be loaded from cards and would run on an 8 KB System/360 (except Model 20). It has no support for macro instructions orextended mnemonics(such as BH in place of BC 2 to branch if condition code 2 indicates a high compare). It can assemble only a single control section and does not allowdummy sections(structure definitions). Parenthesized expressions are not allowed and expressions are limited to three terms with the only operators being '+', '-', and '*'.[7]: 59–61 

Basic Operating System assembler

[edit]

TheBasic Operating Systemhas two assembler versions. Both require 16 KB memory, one is tape resident and the other disk.[8]: 7–8 

Assembler D

[edit]

Assembler D was theDOS/360assembler for machines with a memory size of 16 KB. It came in two versions: A 10 KB variant for machines with the minimum 16 KB memory, and a 14 KB variant for machines with 24 KB. An F-level assembler was also available for DOS machines with 64 KB or more. D assemblers offered nearly all the features of higher versions.[9]: 7 

Assembler E and F

[edit]

Assembler E was designed to run on an OS/360 system with a minimum of 32 KB of main storage, with the assembler itself requiring 15 KB.[10]: 2 Assembler F can run under either DOS/360 or OS/360 on a system with a 64 KB memory, with the assembler requiring 44 KB.[11][12][13]These assemblers are a standard part of OS/360; the version that was generated was specified atsystem generation(SYSGEN).

Assembler H

[edit]

Assembler H runs onOS/360 and successors;it was faster and more powerful than Assembler F, but the macro language was not fully compatible.

Assembler H Version 2 was announced in 1981 and includes support for Extended Architecture (XA), including theAMODEandRMODEdirectives.[14]: 3-28 It was withdrawn from marketing in 1994 and support ended in 1995. It was replaced by High Level Assembler.[15]

Assembler XF

[edit]

Assembler XF is a mostly compatible upgrade of Assembler F that includes the new System/370 architecture instructions. This version provides a common assembler for OS/VS, DOS/VS and VM systems. Other changes include relaxing restrictions on expressions and macro processing. Assembler XF requires a minimum partition/region size of 64 KB (virtual). Recommended size is 128 KB.[16]: 73 

High Level Assembler

[edit]

High Level AssemblerorHLASMwas released in June 1992 replacing IBM's Assembler H Version 2.[17][18]It was the default translator for System/370 and System/390, and supported the MVS, VSE, and VM operating systems. As of 2023 it isIBM's currentassemblerprogramming language for itsz/OS,z/VSE,z/VMandz/TPFoperating systemsonz/Architecturemainframecomputers.Release 6 and later also run onLinux,and generateELForGOFFobject files (this environment is sometimes referred to asLinux on IBM Z).[19]While working at IBM, John Robert Ehrman created and was the lead developer for HLASM[e]and is considered the "father of high level assembler".[21]

Despite the name, HLASM on its own does not have many of the features normally associated with ahigh-level assembler.The name may come from the additional macro language capabilities, such as the ability to write user-defined functions. The assembler is mostly similar to Assembler H and Assembler(XF), incorporating theSLAC(Stanford Linear Accelerator) modifications. Among features added were an indication ofCSECT/DSECTfor location counter, dependent[f]and labelled[g]USINGstatements, a list ofUSINGstatements currently active, an indication of whether a variable is read or written in the cross-reference, and allowing mixed-case symbol names.[22]TheRSECTdirective (Read-only Control Section) allows the assembler to check reentrancy on a per-section basis.RSECTwas previously "undocumented and inconsistently implemented in Assembler H."[23]: 41 

High Level Assembler Toolkit

[edit]

TheHigh Level Assembler Toolkitis a separately priced accompaniment to the High Level Assembler. The toolkit contains:[24]

  • A set ofstructured programmingmacros
    • IF/ELSE/ENDIF
    • DO/ENDDO
    • STRTSRCH/ORELSE/ENDLOOP/ENDSRCH
    • CASENTRY/CASE/ENDCASE
    • SELECT/WHEN/OTHRWISE/ENDSEL.
  • Adisassembler.
  • A "Program Understanding Tool" (re-engineeringaid).
  • A Source XREF utility (cross-reference facility).
  • Interactive Debug Facility.
  • Enhanced SuperC (source comparison tool).

Specialized versions

[edit]

7090/7094 Support Package assembler

[edit]

The IBM 7090/7094 Support Package, known as SUPPAK, "consists of three programs designed to permit programs written for a System 360 to be assembled, tested, and executed on an IBM 709, 7090, 7094, or 7094 II."

This cross-assembler runs on a7090 or 7094system and was used while System/360 was in development.[7][25]This assembler supports six-bitBCDcharacter set as well as eight-bitEBCDIC.

IBM System/360 Model 20 assemblers

[edit]

IBM supplied two assemblers for the Model 20: the Model 20 Basic Assembler, and the Model 20 DPS/TPS Assembler. Both supported only instructions available on the Model 20, including unique instructionsCIO,TIO,XIOB,SPSW,BAS,BASR,andHPR.[26]: 110 The Basic Assembler is a slightly more restricted version of System/360 Basic Assembler;[27]notably, symbols are restricted to four characters in length. This version is capable of running on a system with 4 KB memory, and macro support is limited toIOCSmacros. The card versions are two-pass assemblers that only support card input/output. The tape-resident versions are one-pass, usingmagnetic tapefor intermediate storage. Programs assembled with the CPS Assembler can address a maximum of 16 KB.[27]: 7–8 

The DPS/TPS assembler is a somewhat restricted version of System/360 BPS/BOS Assembler.[26]: 132–134 

IBM System/360 Model 44 PS assembler

[edit]

TheIBM System/360 Model 44Programming System Assembler processes a language that is a "selected subset" of OS/360 and DOS/360 assembler language.

Most significantly the Model 44 assembler lacks support for macros and continuation statements. On the other hand it has a number of features not found in other System/360 assemblers—notably instructions to update acard imagesource dataset, named common, and implicit definition ofSETAassembler variables.[28]

It has no support for storage-to-storage (SS) instructions or theconvert to binary(CVB),convert to decimal(CVD),read direct(RDD) andwrite direct(WRD) instructions.[29]It does include four instructions unique to the Model 44:Change Priority Mask(CHPM),Load PSW Special(LPSX),Read Direct Word(RDDW), andWrite Direct Word(WRDW).

It also includes directives to update the source program, a function performed by utility programs in other systems (SKPTO,REWND,NUM,OMITandENDUP).[29]: 53, 73 

IBM System/360 TSS assembler

[edit]

The assembler for theSystem/360 Model 67 Time Sharing Systemhas a number of differences in directives to support unique TSS features. ThePSECTdirective generates aPrototype Control Sectioncontaining relocatable address constants and modifiable data used by the program.[30]: 143 

Assembler G

[edit]

"Assembler G" is a set of modifications made to Assembler F in the 1970s by theUniversity of Waterloo(Assembler F was/is open source). Enhancements are mostly in better handling of input/output and improved buffering which speed up assemblies considerably.[31]"Assembler G" was never an IBM product.

Non-IBM assemblers

[edit]

There have been several IBM-compatible assemblers for special environments.[32]

  • TheUnivac 90/60, 90/70 and 90/80series fromUnisyswas designed to accept IBM-format assembler, as the machine series was a workalike to the S/360 and S/370.
  • TheFujitsuBS2000 series was also built as a 370 workalike from the same resource as Univac, and is still in use in some parts of Europe.[33]
  • Dignus LLCSystems/ASMis an HLASM-compatible assembler that can run natively on IBM systems or as a cross-assembler.[34]
  • FreewarePC/370,written by Don Higgins, was later purchased byMicro Focus.
  • z390is an assembler and System 390 emulator also written by Don Higgins and is programmed inJava.It is open source and available fromhttp://www.z390.org/
  • Penn State University authored a package calledASSIST,which includes a System 370 assembler and interpreter.
  • Tachyon Software LLC markets theTachyon Assembler Workbenchwhich runs on Windows, Linux/x86, Linux for S/390 and zSeries, AIX and Solaris.[35]
  • GNU Assembler(gas) is part of theGNU Compiler Collection(gcc) forLinux on OS/390 and IBM Z.This assembler has a unique syntax that is incompatible with other assemblers for IBM architectures.

Importance

[edit]

Originally all System/360 operating systems were written in assembler language, and all system interfaces were defined by macro definitions. Access from high-level languages (HLLs) was restricted to what that language supplied, and other system calls had to be coded as assembler subroutines called from HLL programs. Also, IBM allowed customization of OS features by an installation thru what were known asExits—user-supplied routines that could extend or alter normal OS functions. These exits were required to be coded in assembler language. Later, IBM recoded OS/360 in a systems programming language,PL/S,but, except for a short trial, decided not to release the PL/S compiler to users. As a result of these factors, assembler language saw significant use on IBM systems for many years.

See also

[edit]

Notes

[edit]
  1. ^IBM indicate the target sizes of its software with the letters
    • D 16 KiB
    • E 32 Kib
    • F 64 KiB
    • G 128 KiB
    • H 256 KiB
    • I 512 KiB
  2. ^Most uses ofBALRhave been replaced byBASRand similar instructions.
  3. ^Many uses ofSVChave been replaced by aPCinstruction.
  4. ^VM repurposesDIAGas anHVCinstruction.
  5. ^HLASM followed a SHARE requirement to incorporate Greg Mushial's enhancements[20]to Assembler H into the supported product.
  6. ^A dependentUSINGis one that specifies a relocatable expression instead of a list of registers:
    USING IHADCB,SYSPRINT
    ...
    TM DCBOPTCD,DCBOPTC Test OPTCD in SYSPRINT
    ...
    
  7. ^A labelledUSINGis one that only affects instructions that explicitly refer to it by qualifying an expression with a label:
    LA R4,SYSIN
    LA R5,SYSPRINT
    IN USING IHADCB,R4
    OUT USING IHADCB,R5
    ...
    TM IN.DCBOFLGS,DCBOFTM Test OFLGS in SYSIN
    ...
    TM OUT.DCBOPTCD,DCBOPTC Test OPTCD in SYSPRINT
    ...
    

References

[edit]
  1. ^For instance, seeMcQuillen, Kevin (1975).System/360–370 Assembler Language (OS).Fresno, California: Mike Murach & Associates. p. 17.LCCN74-29645.
  2. ^For instance,A Programmer's Introduction to IBM System/360 Assembler Language.Poughkeepsie, New York: International Business Machines Corporation. 1969.
  3. ^For instance, on the "yellow card", sixth page of foldout, marked as for OS/VS, VM/370, and DOS/VS:"System/370 Reference Summary" (Document). White Plains, New York: IBM Corporation. November 1976.Fourth edition.
  4. ^IBM System/360 Principles of Operation(PDF).IBM Systems Reference Library. IBM Corporation. A22-6821-0.RetrievedDec 6,2018.
  5. ^"HLASM - List of all Opcodes, Extended Mnemonics and Function Codes, Sorted by Mnemonic".RetrievedJanuary 14,2013.
  6. ^"IBM System/360 Basic Programming Support"(PDF).bitsavers.p. 61.Retrieved6 September2023.
  7. ^abIBM System/360 Basic Programming Support Basic Assembler Language(PDF).IBM Systems Reference Library. IBM Corporation. February 1965. C20-6503-0.RetrievedApril 5,2022.
  8. ^IBM System/360 Basic Operating System Language Specifications Assembler (16K Disk/Tape)(PDF).IBM Systems Reference Library. IBM Corporation. December 1965. C24-3414-1.RetrievedApril 5,2022.
  9. ^IBM Corporation (1970).IBM System/360 Disk and Tape Operating Systems Assembler Language(PDF).
  10. ^IBM System/360 Operating System Assembler (32K) Program Logic Manual(PDF).IBM. 1966. Y26-3598-0.
  11. ^IBM System/360 Disk Operating System Assembler [F] Program Logic(PDF).IBM. 1968. Y26-3716-0.
  12. ^IBM System/360 Operating System Assembler (F) Program Logic(PDF).IBM. 1971. GY26-3700-2.
  13. ^OS Assembler Language, OS Release 21(PDF).IBM. 1974. GC28-6514-9.
  14. ^IBM Corporation (1984).MVS/Extended Architecture Conversion Notebook(PDF).
  15. ^IBM Corporation (20 December 1996)."5668-962 IBM Assembler H Version 2 Release 1.0".RetrievedOctober 8,2012.
  16. ^IBM Corporation (1973).OS/VS Assembler Programmer's Guide(PDF).
  17. ^IBM Corporation."IBM High Level Assembler and Toolkit Feature - Release History".RetrievedOctober 21,2012.
  18. ^IBM Corporation (5 May 1992)."Announcement Letter 292-244: IBM HIGH LEVEL ASSEMBLER/MVS & VM & VSE".RetrievedOctober 21,2012.
  19. ^IBM Corporation (2008).High Level Assembler for Linux on zSeries User's Guide(PDF).
  20. ^Greg Mushial (July 20, 1983),"Module 24: SLAC Enhancements to and Beautifications of the IBM H-Level Assembler for Version 2.8",SLAC VM NOTEBOOK,Stanford Linear Accelerator Center
  21. ^"Guide to the John R. Ehrman collection".Online Archive of California.X5621.2010.Archivedfrom the original on 2022-10-15.Retrieved2022-10-15.[1]
  22. ^"IBM HIGH LEVEL ASSEMBLER/MVS & VM & VSE".Announcement letters.IBM Corporation. May 5, 1992. 292-244.RetrievedOctober 8,2012.
  23. ^IBM High Level Assembler for MVS & VM & VSE Release 2 Presentation Guide(PDF).Redbooks.IBM.December 1995. SG24-3910-01. Archived fromthe original(PDF)on 2016-01-23.RetrievedSeptember 29,2023.
  24. ^IBM Corporation."Toolkit Feature components".IBM.RetrievedSeptember 5,2023.
  25. ^IBM 7090/7094 Support Package for IBM System/360(PDF).IBM Systems Reference Library. IBM Corporation. November 1964. C28-6501-2.RetrievedApril 5,2022.
  26. ^abIBM Corporation (April 1970).IBM System/360 Model 20 Disk and Tape Programming Systems Assembler Language(PDF).RetrievedOctober 2,2023.
  27. ^abIBM Corporation (May 1969).IBM System/360 Model 20 Card Programming Support Basic Assembler Language(PDF).RetrievedOctober 2,2023.
  28. ^IBM Corporation (1966).IBM System/360 Model 44 Programming System Assembler Language(PDF).p. 73.RetrievedJuly 2,2019.
  29. ^abIBM Corporation (1966).IBM System/360 Model 44 Programming System Assembler Language(PDF).
  30. ^IBM Corporation (1976).IBM Time Sharing System Assembler Programmer's Guide(PDF).
  31. ^Stanford Linear Accelerator Center."GENERALIZED IBM SYSTEM 360 SOFTWARE MEASUREMENT (SLAC-PUB-715)"(PDF).RetrievedOctober 8,2012.
  32. ^Alcock, David."Dave's z/Architecture Assembler FAQ".Planet MVS.RetrievedDecember 15,2012.
  33. ^Fujitsu ASSEMH manuals available fromhttp://manuals.ts.fujitsu.com/index.php?id=1-2-2926-15435(Retrieved 2016-02-27)
  34. ^Dignus, LLC."Systems/ASM".RetrievedDecember 15,2012.
  35. ^Tachyon Software LLC."Tachyon Software".RetrievedDecember 15,2012.
[edit]