Basic Assembly Language (BAL) is the commonly used term for a low-level programming language used on
IBM System/360 and successor mainframes. Originally, "Basic Assembly Language" applied only to an extremely restricted dialect designed to run under control of
IBM Basic Programming Support (BPS/360) on systems with only 8 KB of main memory, and only a
card reader
A card reader is a data input device that reads data from a card-shaped storage medium. The first were punched card readers, which read the paper or cardboard punched cards that were used during the first several decades of the computer industry ...
, a
card punch, and a printer for
input/output
In computing, input/output (I/O, or informally io or IO) is the communication between an information processing system, such as a computer, and the outside world, possibly a human or another information processing system. Inputs are the signals ...
— thus the word "Basic". However, the full name and the
initialism "BAL" almost immediately attached themselves in popular use to all assembly-language dialects on the System/360 and its descendants. BAL for BPS/360 was introduced with the
System/360 in 1964.
Assemblers on other System/360 operating systems through
System/370
The IBM System/370 (S/370) is a model range of IBM mainframe computers announced on June 30, 1970, as the successors to the System/360 family. The series mostly maintains backward compatibility with the S/360, allowing an easy migration path ...
,
System/390
The IBM System/390 is a discontinued mainframe product family implementing the ESA/390, the fifth generation of the System/360 instruction set architecture. The first computers to use the ESA/390 were the Enterprise System/9000 (ES/9000 ...
, and
System z
IBM Z is a family name used by IBM for all of its z/Architecture mainframe computers.
In July 2017, with another generation of products, the official family was changed to IBM Z from IBM z Systems; the IBM Z family now includes the newest mod ...
, as well as the
UNIVAC Series 90 mainframes made by
Sperry Corporation
Sperry Corporation was a major American equipment and electronics company whose existence spanned more than seven decades of the 20th century. Sperry ceased to exist in 1986 following a prolonged hostile takeover bid engineered by Burroug ...
, and the
BS2000
BS2000 is an operating system for IBM 390-compatible mainframe computers developed in the 1970s by Siemens (Data Processing Department EDV) and from early 2000s onward by Fujitsu Technology Solutions.
Unlike other mainframe systems, BS2000 p ...
Mainframes currently made by
Fujitsu, inherited and extended its syntax. The latest derived language is known as the
IBM High-Level Assembler (HLASM). Programmers utilizing this family of assemblers also refer to them as ALC, (for Assembly Language Coding), or simply "assembler".
BAL is also the mnemonic of the "Branch And Link"
instruction.
General characteristics
The architecture of IBM mainframes has undergone several extensions over the years, including System/360, System/370, System/370 XA, ESA/370,
ESA/390
The IBM System/390 is a discontinued mainframe product family implementing the ESA/390, the fifth generation of the System/360 instruction set architecture. The first computers to use the ESA/390 were the Enterprise System/9000 (ES/90 ...
, and
z/Architecture
z/Architecture, initially and briefly called ESA Modal Extensions (ESAME), is IBM's 64-bit complex instruction set computer (CISC) instruction set architecture, implemented by its mainframe computers. IBM introduced its first z/Architecture ...
. Each of these architectures has retained
compatibility with most of the features of its predecessor. BAL uses the native
instruction set of these machines. It is thus closer to the hardware than third-generation languages such as
COBOL.
The instruction set consists of the low-level operations supported by the architecture, such as:
The extreme simplicity of these operations means that the
source code
In computing, source code, or simply code, is any collection of code, with or without comments, written using a human-readable programming language, usually as plain text. The source code of a program is specially designed to facilitate the w ...
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 interface of mainframe operating systems is defined as a set of assembly language "macro" instructions, that typically invoke
Supervisor Call (SVC)
.g., on z/OSor Diagnose (DIAG)
n, e.g., z/VMinstructions 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
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 or ''name'' is 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.
* ''Basic'' Assembly 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 the ''identification-sequence field'' can 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
Three main types of instructions are found in the source code of a program written in assembler.
Assembler instructions
Assembler 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,
CSECT
means "start a section of code here";
DC
defines a constant to be placed in the object code.
One of the more important assembler instructions is
USING
, which supports the truncated 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 instructions (mnemonic)
There is a one-to-one relationship with
machine instruction
In computer programming, machine code is any low-level programming language, consisting of machine language instructions, which are used to control a computer's central processing unit (CPU). Each instruction causes the CPU to perform a very ...
s. The full mnemonic instruction set is described in the ''Principles of Operation'' manual for each processor.
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
x86 assembly language is the name for the family of assembly languages which provide some level of backward compatibility with CPUs back to the Intel 8008 microprocessor, which was launched in April 1972. It is used to produce object code for t ...
, register mnemonics are not reserved symbols but are defined through EQU statements 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 notable
instruction mnemonics are
BALR
for a call storing the return address and condition code in a register,
SVC
,
DIAG
, and
ZAP
.
The latter inspired the name of the SuperZAP utility by a programmer using the pseudonym
WAMOZART
, cf. .
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
z/Architecture, initially and briefly called ESA Modal Extensions (ESAME), is IBM's 64-bit complex instruction set computer (CISC) instruction set architecture, implemented by its mainframe computers. IBM introduced its first z/Architecture ...
added additional formats.
Macros and conditional assembly
''Basic'' assembler language does not support
macros.
Later assembler versions 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
AIF
(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
Most programs will require services from the
operating system
An operating system (OS) is system software that manages computer hardware, software resources, and provides common services for computer programs.
Time-sharing operating systems schedule tasks for efficient use of the system and may also i ...
, and the OS provides standard macros for requesting those services. These are analogous to
Unix
Unix (; trademarked as UNIX) is a family of multitasking, multiuser computer operating systems that derive from the original AT&T Unix, whose development started in 1969 at the Bell Labs research center by Ken Thompson, Dennis Ritchie, an ...
system call
In computing, a system call (commonly abbreviated to syscall) is the programmatic way in which a computer program requests a service from the operating system on which it is executed. This may include hardware-related services (for example, acc ...
s. For instance, in
MVS (later z/OS), STORAGE (with the OBTAIN parameter) dynamically allocates a block of memory, and GET retrieves the next logical record from a file.
Unlike Unix system calls, macros are not standardized across operating systems though. Even something as simple as writing a "sequential file" is coded differently e.g. in Z/OS than in Z/VSE.
Examples
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
''Hello'' is a salutation or greeting in the English language. It is first attested in writing from 1826. Early uses
''Hello'', with that spelling, was used in publications in the U.S. as early as the 18 October 1826 edition of the '' Norwich ...
program, and would, executing under an IBM operating system such as
OS/VS1
Operating System/Virtual Storage 1, or OS/VS1, is a discontinued IBM mainframe computer operating system designed to be run on IBM System/370 hardware. It was the successor to the Multiprogramming with a Fixed number of Tasks (MFT) option of Sys ...
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
WTO
is 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 system
Job control language
Job Control Language (JCL) is a name for scripting languages used on IBM mainframe operating systems to instruct the system on how to run a batch job or start a subsystem.
More specifically, the purpose of JCL is to say which programs to run, ...
(JCL) like this:
// 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 System/360 Model 20 is the smallest member of the IBM System/360 family announced in November 1964. The Model 20 supports only a subset of the System/360 instruction set, with binary numbers limited to 16 bits and no floating point. In ...
, the IBM assemblers were largely upward-compatible. The differences were mainly in the complexity of expressions allowed and in macro processing.
OS/360
OS/360, officially known as IBM System/360 Operating System, is a discontinued batch processing operating system developed by IBM for their then-new System/360 mainframe computer, announced in 1964; it was influenced by the earlier IBSYS/IBJOB ...
assemblers were originally designated according to their memory requirements.
7090/7094 Support Package assembler
This cross-assembler runs on a
7090 or 7094 system and was used while System/360 was in development.
Basic Programming Support assembler
The 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 '*'.
[
]
Basic Operating System assembler
The
Basic Operating System has two assembler versions. Both require 16 KB memory, one is tape resident and the other disk.
Assembler D
Assembler 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.
Assembler E and F
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. 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. These assemblers are a standard part of OS/360; the version that was generated was specified at
system generation
In computing system generation or sysgen is the process of creating a particular unique instance of an operating system by combining user-specified options and parameters with manufacturer-supplied general-purpose program code to produce an oper ...
(SYSGEN).
Model 44 Programming System Assembler
"With certain exceptions, the
IBM System/360 Model 44 Programming System Assembler Language is a selected subset of the languages available in the IBM System/360 programming support." Most significantly the Model 44 assembler lacked support for macros and continuation statements. On the other hand it had a number of features not found in other System/360 assemblers—notably instructions to update a
card image Card image is a traditional term for a character string, usually 80 characters in length, that was, or could be, contained on a single punched card. IBM cards were 80 characters in length. UNIVAC cards were 90 characters in length. Card image files ...
source dataset, named common, and implicit definition of
SETA
assembler variables.
Assembler G
"Assembler G" is a set of modifications made to Assembler F in the 1970s by the
University of Waterloo
The University of Waterloo (UWaterloo, UW, or Waterloo) is a public research university with a main campus in Waterloo, Ontario, Canada. The main campus is on of land adjacent to "Uptown" Waterloo and Waterloo Park. The university also operates ...
(Assembler F was/is open source). Enhancements are mostly in better handling of input/output and improved buffering which speed up assemblies considerably. "Assembler G" was never an IBM product.
Assembler H
Assembler H Version 2 was announced in 1981 and includes support for Extended Architecture (XA), including the AMODE and RMODE directives. It was withdrawn from marketing in 1994 and support ended in 1995. It was replaced by High Level Assembler.
Assembler XF
Assembler XF is an upgrade of Assembler F which includes the new System/370 architecture instructions. This version provides a common assembler for OS/VS and DOS/VS 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.
High Level Assembler
High Level Assembler (HLASM), announced in 1992 as a licensed program "becomes the default translator for System/370 (TM) and System/390 (TM) operating environments." The assembler supports the MVS, VSE, and VM operating systems and successors. As of Release 6 it now is able to run under Linux on IBM Z and generate
ELF
An elf () is a type of humanoid supernatural being in Germanic mythology and folklore. Elves appear especially in North Germanic mythology. They are subsequently mentioned in Snorri Sturluson's Icelandic Prose Edda. He distinguishes "ligh ...
or
COFF
The Common Object File Format (COFF) is a format for executable, object code, and shared library computer files used on Unix systems. It was introduced in Unix System V, replaced the previously used a.out format, and formed the basis for ex ...
object files. It features a long list of mostly usability enhancements, and incorporates the
SLAC
SLAC National Accelerator Laboratory, originally named the Stanford Linear Accelerator Center,
is a United States Department of Energy National Laboratory operated by Stanford University under the programmatic direction of the U.S. Departme ...
(Stanford Linear Accelerator) modifications to Assembler H. Among features added were an indication of
CSECT
/
DSECT
for location counter, dependent and labelled USING statements, a list of USING statements currently active, an indication of whether a variable is read or written in the cross-reference, and allowing mixed-case symbol names. The ''
RSECT
'' directive (Read-only Control Section) allows the assembler to check reentrancy on a per-section basis.
RSECT
was previously "undocumented and inconsistently implemented in Assembler H." HLASM is the current assembler for IBM mainframe systems as of 2012.
Specialized versions
IBM System/360 Model 44 PS assembler
The
IBM System/360 Model 44 Programming System Assembler processes a language that is a "selected subset" of OS/360 and DOS/360 assembler language. It has no support for storage-to-storage (SS) instructions or the ''convert to binary'' (
CVB
), ''convert to decimal'' (
CVD
), ''read direct'' (
RDD
) and ''write direct'' (
WRD
) instructions.
It does include four instructions unique to the Model 44: ''Change Priority Mask'' (
CHPM
), ''Load PSW Special'' (
LPSX
), ''Read Direct Word'' (
RDDW
), and ''Write Direct Word'' (
WRDW
). It also includes directives to update the source program, a function performed by utility programs in other systems (
SKPTO
,
REWND
,
NUM
,
OMIT
and
ENDUP
). It provides ''named common'' and implicitly defined
&SETA
symbols, but has some restrictions as well.
IBM System/360 TSS assembler
The assembler for the
System/360 Model 67 Time Sharing System has a number of differences in directives to support unique TSS features. The
''PSECT''
directive generates a ''Prototype Control Section'' containing relocatable address constants and modifiable data used by the program.
Non-IBM assemblers
There have been several IBM-compatible assemblers for special environments.
* The
Univac 90/60, 90/70 and 90/80 series from
Unisys
Unisys Corporation is an American multinational information technology (IT) services and consulting company headquartered in Blue Bell, Pennsylvania. It provides digital workplace solutions, cloud, applications, and infrastructure solutions, ...
was designed to accept IBM-format assembler, as the machine series was a workalike to the S/360 and S/370.
* The
Fujitsu BS2000 series was also built as a 370 workalike from the same resource as Univac, and is still in use in some parts of Europe.
* Dignus LLC ''Systems/ASM'' is an HLASM-compatible assembler that can run natively on IBM systems or as a cross-assembler.
* Freeware ''PC/370'', written by Don Higgins, was later purchased by
Micro Focus
Micro Focus International plc is a British multinational software and information technology business based in Newbury, Berkshire, England. The firm provides software and consultancy. The company is listed on the London Stock Exchange and is ...
.
* ''z390'' is an assembler and System 390 emulator also written by Don Higgins and is programmed in
Java
Java (; id, Jawa, ; jv, ꦗꦮ; su, ) is one of the Greater Sunda Islands in Indonesia. It is bordered by the Indian Ocean to the south and the Java Sea to the north. With a population of 151.6 million people, Java is the world's mos ...
. It is open source and available from http://www.z390.org/
* Penn State University authored a package called ''
ASSIST
Assist or ASSIST may refer to:
Sports
Several sports have a statistic known as an "assist", generally relating to action by a player leading to a score by another player on their team:
*Assist (basketball), a pass by a player that facilitates a ba ...
'', which includes a System 370 assembler and interpreter.
* Tachyon Software LLC markets the ''Tachyon Assembler Workbench'' which runs on Windows, Linux/x86, Linux for S/390 and zSeries, AIX and Solaris.
*
GNU Assembler (gas) is part of the
GNU Compiler Collection
The GNU Compiler Collection (GCC) is an optimizing compiler produced by the GNU Project supporting various programming languages, hardware architectures and operating systems. The Free Software Foundation (FSF) distributes GCC as free softwar ...
(gcc) for
Linux on OS/390 and IBM Z. This assembler has a unique syntax that is incompatible with other assemblers for IBM architectures.
See also
*
IBM System/360
*
Assembly language
*
ASSIST assembler
*
PC-based IBM-compatible mainframes – list of compatible machines or virtual machines
*
Disassembler
A disassembler is a computer program that translates machine language into assembly language—the inverse operation to that of an assembler. A disassembler differs from a decompiler, which targets a high-level language rather than an assembly l ...
– reverse process of Assembly, reconstructing assembly-like source from machine code
Notes
References
;Additional references
* Rudd, Anthony. An Illustrated Guide for z/Architecture Assembler Programmers. Create Space (2012).
External links
A Programmer's Introduction to IBM System/360 Assembler Language (Student Text)High Level Assembler for z/OS & z/VM & z/VSE Language ReferenceThe Punctilious Programmer: IBM Mainframe AssemblerBasic IBM Mainframe Assembly Language Programming*
tp://ulita.ms.mff.cuni.cz/predn/NSWI119/AssemblerIBM_390.pdf OS/390 Assembler Programming Introduction{Dead link, date=January 2020 , bot=InternetArchiveBot , fix-attempted=yes or tr
thisWeb enabled IBM Assembler F compiler for small experimentsASSIST – Assembler System for Student Instruction & Systems Teaching
Basic assembly language
Assembly languages
Assembly language software
Assembly language Basic