IBM Basic assembly language and successors
The IBM Basic assembly language and successors is a series of assembly languages and assemblers made for the IBM System/360 mainframe system and its successors through the IBM Z. The first of these, the Basic Assembly Language (BAL), is an extremely restricted assembly language, introduced in 1964 and used on 360 systems with only 8 KB of main memory, and only a card reader, a card punch, and a printer for input/output, as part of IBM Basic Programming Support (BPS/360). The Basic Assembler for BAL was also available as part of Basic Operating System/360 (BOS/360). Subsequently, an assembly language appeared for the System/360 that had more powerful features and usability, such as support for macros. This language, and the line of assemblers that implemented it, continued to evolve for the System/370 and 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 the IBM High-Level Assembler (HLASM). General characteristicsAs it is an assembly language, BAL uses the native instruction set of the IBM mainframe architecture on which it runs, System/360, just as the successors to BAL use the native instruction sets of the IBM mainframe architectures on which they run, including System/360, System/370, System/370-XA, ESA/370, ESA/390, and z/Architecture. The simplicity of machine instructions means that the source code of a program written in assembler will usually be much longer than an equivalent program in, say, COBOL or Fortran. 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, C for 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 invoke Supervisor Call ( Assembler statement format![]() ![]() The format of assembler language statements reflects the layout of an 80-column punched card, though successive versions have relaxed most of the restrictions.
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 instructionsThree main types of instructions are found in the source code of a program written in assembler. Assembler instructionsAssembler instructions, sometimes termed directives, pseudo operations or pseudoops on other systems, are requests to the assembler to perform various operations during the code generation process. For instance, One of the more important assembler instructions is USING base,reg-1,...,reg-n
Machine instruction addresses on S/360 specify a displacement (0–4095 bytes) from the value in a base register; while later versions of the architecture added relative-address formats, the older formats are still used by many instructions. The related Machine instructions (mnemonic)There is a one-to-one relationship with machine instructions. The full mnemonic instruction set is described in the Principles 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 as X86 assembly language, register mnemonics are not reserved symbols but are defined through R3 EQU 3
...
L R3,ZIGGY
Some notable instruction mnemonics are System/360 machine instructions are one, two, or three halfwords in length (two to 6 bytes). Originally there were four instruction formats, designated by the first two bits of the operation code field; z/Architecture added additional formats. Macros and conditional assemblyThe Basic Programming Support assembler did not support macros. 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 as Operating system macrosMost programs will require services from the operating system, and the OS provides standard macros for requesting those services. These are analogous to Unix system calls. For instance, in MVS (later z/OS), 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. ExamplesThe 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 as OS/VS1 or MVS, 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
// EXEC PGM=HELLO
or, alternatively, it can be CALLed as a subroutine from such a program: CALL 'HELLO'
Versions![]() With the exception of the assemblers for the IBM 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/360 assemblers were originally designated according to their memory requirements. Basic Programming Support assemblerThe assembler for BPS is 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 or extended 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 allow dummy 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 assemblerThe Basic Operating System has two assembler versions. Both require 16 KB memory, one is tape resident and the other disk.[8]: 7–8 Assembler DAssembler D was the DOS/360 assembler 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 FAssembler 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 at system generation (SYSGEN). Assembler HAssembler H runs on OS/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 the Assembler XFAssembler 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 AssemblerHigh Level Assembler or HLASM was 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 is IBM's current assembler programming language for its z/OS, z/VSE, z/VM and z/TPF operating systems on z/Architecture mainframe computers. Release 6 and later also run on Linux, and generate ELF or GOFF object files (this environment is sometimes referred to as Linux 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 a high-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 the SLAC (Stanford Linear Accelerator) modifications. Among features added were an indication of High Level Assembler ToolkitThe High Level Assembler Toolkit is a separately priced accompaniment to the High Level Assembler. The toolkit contains:[23]
Specialized versions7090/7094 Support Package assemblerThe 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 a 7090 or 7094 system and was used while System/360 was in development.[7][24] This assembler supports six-bit BCD character set as well as eight-bit EBCDIC. IBM System/360 Model 20 assemblersIBM 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 instructions The DPS/TPS assembler is a somewhat restricted version of System/360 BPS/BOS Assembler.[25]: 132–134 IBM System/360 Model 44 PS assemblerThe IBM System/360 Model 44 Programming 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 a card image source dataset, named common, and implicit definition of It has no support for storage-to-storage (SS) instructions or the convert to binary ( It also includes directives to update the source program, a function performed by utility programs in other systems ( IBM System/360 TSS assemblerThe assembler for the System/360 Model 67 Time Sharing System has a number of differences in directives to support unique TSS features. The Assembler G"Assembler G" is a set of modifications made to Assembler F in the 1970s by the University 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.[30] "Assembler G" was never an IBM product. Non-IBM assemblersThere have been several IBM-compatible assemblers for special environments.[31]
ImportanceOriginally 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 through what were known as Exits—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
Notes
References
External linksWikibooks has a book on the topic of: 360 Assembly
|
Portal di Ensiklopedia Dunia