IBM 370 Assembly Language
   HOME

TheInfoList



OR:

Basic Assembly Language (BAL) is the commonly used term for a low-level programming language used on
IBM System/360 The IBM System/360 (S/360) is a family of mainframe computer systems that was announced by IBM on April 7, 1964, and delivered between 1965 and 1978. It was the first family of computers designed to cover both commercial and scientific applica ...
and successor mainframes. Originally, "Basic Assembly Language" applied only to an extremely restricted dialect designed to run under control of
IBM Basic Programming Support IBM Basic Programming Support/360 (BPS), originally called Special Support, was a set of standalone programs for System/360 mainframes with a minimum of 8 KiB of memory. BPS was developed by IBM's General Products Division in Endicott, New ...
(BPS/360) on systems with only 8 KB of main memory, and only a card reader, a
card punch A computer punched card reader or just computer card reader is a computer input device used to read computer programs in either source or executable form and data from punched cards. A computer card punch is a computer output device that punches ...
, and a printer for input/output — thus the word "Basic". However, the full name and the
initialism An acronym is a word or name formed from the initial components of a longer name or phrase. Acronyms are usually formed from the initial letters of words, as in ''NATO'' (''North Atlantic Treaty Organization''), but sometimes use syllables, as ...
"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 The IBM System/360 (S/360) is a family of mainframe computer systems that was announced by IBM on April 7, 1964, and delivered between 1965 and 1978. It was the first family of computers designed to cover both commercial and scientific applica ...
in 1964. Assemblers on other System/360 operating systems through System/370, System/390, and System z, as well as the UNIVAC Series 90 mainframes made by Sperry Corporation, and the BS2000 Mainframes currently made by
Fujitsu is a Japanese multinational information and communications technology equipment and services corporation, established in 1935 and headquartered in Tokyo. Fujitsu is the world's sixth-largest IT services provider by annual revenue, and the la ...
, inherited and extended its syntax. The latest derived language is known as the
IBM High-Level Assembler 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 unde ...
(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, and z/Architecture. Each of these architectures has retained
compatibility Compatibility may refer to: Computing * Backward compatibility, in which newer devices can understand data generated by older devices * Compatibility card, an expansion card for hardware emulation of another device * Compatibility layer, compon ...
with most of the features of its predecessor. BAL uses the native
instruction set In computer science, an instruction set architecture (ISA), also called computer architecture, is an abstract model of a computer. A device that executes instructions described by that ISA, such as a central processing unit (CPU), is called an ' ...
of these machines. It is thus closer to the hardware than third-generation languages such as
COBOL COBOL (; an acronym for "common business-oriented language") is a compiled English-like computer programming language designed for business use. It is an imperative, procedural and, since 2002, object-oriented language. COBOL is primarily us ...
. 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 of a program written in assembler will usually be much longer than an equivalent program in, say,
COBOL COBOL (; an acronym for "common business-oriented language") is a compiled English-like computer programming language designed for business use. It is an imperative, procedural and, since 2002, object-oriented language. COBOL is primarily us ...
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 A supervisor, or lead, (also known as foreman, boss, overseer, facilitator, monitor, area coordinator, line-manager or sometimes gaffer) is the job title of a lower-level management position that is primarily based on authority over workers or ...
(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 instructions. 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, 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 SVC or .svc may refer to: Biology * Spring viraemia of carp, a disease of fish * Superior vena cava, a heart vein Colleges * Saginaw Valley College, now Saginaw Valley State University, Michigan, US * School of Visual Concepts, Seattle, Was ...
, 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 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, and the OS provides standard macros for requesting those services. These are analogous to Unix system calls. 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 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 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 (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 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.


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 Disk Operating System/360, also DOS/360, or simply DOS, is the discontinued first member of a sequence of operating systems for IBM System/360, System/370 and later mainframes. It was announced by IBM on the last day of 1964, and it was first d ...
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 operat ...
(SYSGEN).


Model 44 Programming System Assembler

"With certain exceptions, the
IBM System/360 Model 44 The IBM System/360 Model 44 is a specialized member of the IBM System/360 family, with a variant of the System/360 computer architecture, designed for scientific computing, real-time computing, process control and numerical control (NC). The Mode ...
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 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 (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 or COFF object files. It features a long list of mostly usability enhancements, and incorporates the SLAC (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 The IBM System/360 Model 44 is a specialized member of the IBM System/360 family, with a variant of the System/360 computer architecture, designed for scientific computing, real-time computing, process control and numerical control (NC). The Mode ...
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 was designed to accept IBM-format assembler, as the machine series was a workalike to the S/360 and S/370. * The
Fujitsu is a Japanese multinational information and communications technology equipment and services corporation, established in 1935 and headquartered in Tokyo. Fujitsu is the world's sixth-largest IT services provider by annual revenue, and the la ...
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. * ''z390'' is an assembler and System 390 emulator also written by Don Higgins and is programmed in Java. It is open source and available from http://www.z390.org/ * Penn State University authored a package called '' ASSIST'', 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 (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 The IBM System/360 (S/360) is a family of mainframe computer systems that was announced by IBM on April 7, 1964, and delivered between 1965 and 1978. It was the first family of computers designed to cover both commercial and scientific applica ...
*
Assembly language In computer programming, assembly language (or assembler language, or symbolic machine code), often referred to simply as Assembly and commonly abbreviated as ASM or asm, is any low-level programming language with a very strong correspondence be ...
* ASSIST assembler *
PC-based IBM-compatible mainframes Since the rise of the personal computer in the 1980s, IBM and other vendors have created PC-based IBM-compatible mainframes which are compatible with the larger IBM mainframe computers. For a period of time PC-based mainframe-compatible systems ...
– list of compatible machines or virtual machines * Disassembler – 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 Reference

The Punctilious Programmer: IBM Mainframe Assembler

Basic 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
this

Web enabled IBM Assembler F compiler for small experiments

ASSIST – Assembler System for Student Instruction & Systems Teaching
Basic assembly language 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 unde ...
Assembly languages Assembly language software Assembly language Basic