Category Archives: IBM Mainframe Assembler

Videos and word documents that cover how to program in IBM mainframe assembler language.

Updating the Site

Evidently, I have a number of pages on the site that invoke a Flash player that is no longer supported in most browsers. I am working to repair this problem as quickly as possible. I apologize for the inconvenience.

Leave a comment

Filed under IBM Mainframe Assembler

Don’t Have Mainframe Access? Try This

If you want to learn IBM mainframe assembly language but don’t have access to an IBM System/z machine, there is an excellent alternative:  Z390 Portable Mainframe Assembler and Emulator. (Even if you do have access, you can find it helpful.) This product has a long, successful history, is freely distributed, and runs on Windows, Linux, and Mac PC’s. It also supports all the instructions described in the Principles of Operation manual of October, 2019 – very impressive!

I asked Don Higgins, the creator, to write a short article about his product. Here it is.

Z390 Portable Mainframe Assembler and Emulator Overview

Don Higgins

November 20, 2020

Z390 is an open-source, Java-based mainframe assembler and emulator designed to run on Windows, Linux, and Mac PC’s.  The predecessor to z390 was the PC/370 shareware mainframe assembler and emulator for MS-DOS PC’s.  PC/370 was used by thousands of students at universities in the 1980s.  In 1993 I sold PC/370 to Micro Focus, and in 1995 I went to work for Micro Focus developing the assembler component of the Micro Focus Mainframe Express product for Windows PCs.  In 2004 I left Micro Focus and started the z390 open source project. 

The original goal of z390 was to assemble, link, and execute problem state application programs on any platform that supports Java runtime.  Over the years, the following major features have been added to z390:

  1. Macro process and assembler compatible with HLASM
  2. Linker to create executable modules 
  3. Emulator with the following support:
    1. Problem state instruction execution
    1. Trace and dump options
    1. Floating-point, including HFP, BFP, and DFP.
    1. Storage management including GETMAIN and FREEMAIN
    1. QSAM, BDAM, and VSAM file management
    1. Sort merge utility
  4. zCOBOL compiler which generates z390 assembler
  5. zCICS transaction support developed by Melvyn Maltz
  6. Graphical User Interface

In 2012, I retired from z390 development for a while.  Abe Kornelis and Melvyn Maltz continued to develop z390.  In 2020 I returned and have spent most of 2020 upgrading the z390 assembler to correctly assemble all the IBM mainframe instructions in the Principles of Operation manual published in Oct. 2019.  A test program named ZOPCHECK was developed to verify all 2357 opcode, mnemonic, and operand combinations.


  1. Z390 Mainframe Assembler and Emulator Downloads
  2. Z390 Portable Mainframe Assembler and zCOBOL and zCICS
  3. Z390 Sort Utility
  4. ZOPCHECK Opcode Verification Program
  5. PC370 Assembler and Emulator History

Leave a comment

Filed under IBM Mainframe Assembler

z/OS Training at Marist College Enrolling Now

Marist College through the Institute of Data Center Professionals (IDCP) offers a variety of mainframe-based courses and professional z/OS certificates all online. Working jointly with IBM, these worldwide programs were designed to educate personnel who are entering the field as well as those with experience in z/OS and a variety of application programming tracks including COBOL, DB2 and Assembler language.

If you are looking for specialized mainframe training online, look no further.  Fall classes start August 31, 2020.  Here is the best link for the program:

For a number of years I’ve taught the two-course assembler sequence for Marist to people located around the globe. The course evolves each year and I take pride in adding new topics and videos each time I teach it. I’d love to work with you individually to master IBM Assembly language in a small-group asynchronous online setting. Together, we will work through a sequence of on-target programming assignments. At the end, you’ll have the necessary skills to begin working as an assembler programmer.  But don’t wait, classes are starting soon.


Leave a comment

Filed under IBM DB2, IBM Enterprise Cobol, IBM Mainframe Assembler

Writing Reentrant Assembler Code

Some programs run so often we take special efforts to make sure that only one copy of the program needs to be loaded into memory, no matter how many users are running it concurrently. That’s what reentrant programming is all about. We can do this by dynamically allocating storage for all the parts of our program that might change. Each user gets their own copy of dynamic storage.

Want to get your assembler program to run in the Language Environment?  It needs to be reentrant.  Future posts will cover COBOL calling Assembler and Assembler calling COBOL in the Language Environment, but to follow along, you first have to learn how to  write assembler reentrantly.

Some programmers write all their programs in a reentrant style. There’s not a lot of extra overhead. Want to give it a try?  I’ve posted a video about how it works here and in the assembler video course. There’s also a sample reentrant program you can start with here.  The video explains in detail how the program works.




Filed under IBM Mainframe Assembler

Marist ECC Conference – Free Online June 7-9

Marist College sponsors one of my favorite mainframe conferences each year called the Enterprise Computing Conference. This year it is scheduled for June 7-9, and it is online and free. The conference always features some interesting general talks by leading IBM and industry experts, as well as a number of smaller talks on mainframe related topics. Here is your chance to attend for free. Check out the conference schedule here:

Be sure to register early so you won’t miss anything. I’m sorry I won’t get a chance to visit the lovely Marist campus on the Hudson river this year, but I’m looking forward to enjoying the conference virtually. See you there.

Leave a comment

Filed under IBM Mainframe Assembler

Datasets for the COBOL Course

I have added a tab (Course Datasets) at the top of the blog to help provide input data for the programs referenced in the COBOL course.

In the case of input files that contain packed data, I am including a COBOL program that will produce the input file when you run it. Each COBOL program takes its own data from an in-stream dataset. I’m including the COBOL code and the JCL surrounding it to make things easier. You will have to adjust the file names.

In the case textual data files, I’m including a copy of the input data which you can paste into a member in a PDS to create the input file.

Let me know if I can help.

1 Comment

Filed under IBM Mainframe Assembler


I had lots of fun this morning on IBM’s COBOL FRIDAY with Sudharsana Srinivasan and Paul Newton. I talked mostly about COBOL intrinsic functions, but we also considered what to do if you wanted to write something that sort of works like a user-defined function. Enterprise COBOL doesn’t support user-defined functions just yet, but it’s in the works. My work-around involves writing nested programs. You can watch the webcast here if you are interested. I also posted some sample code at the Enterprise COBOL tab that goes along with the talk. The STACKY program does dynamic allocation and creates a stack for storing pointers to records. It uses a nested programming style to create the data structure.

Leave a comment

Filed under IBM Mainframe Assembler

Learn You a COBOL for Great Good

The title is a reference to one of my favorite programming language instruction texts: Learn You a Haskell for Great Good. Funny, well-written and instructive. If you want to learn a functional language, Haskell is a fine choice. I still like writing in Scheme – another functional language that’s almost as old as Cobol.

But today’s topic is Cobol, which has been in the news lately, and which has a few programmers dusting off their old textbooks and manuals.  If you want to learn Cobol or brush up on your old Cobol skills, I might be able to help. I developed an online class a few years ago to use for corporate training. Now I’ve decided to publish it for general use.

You can find it here: IBM Enterprise Cobol and as a link at the top of the home page. It was built with the idea of taking a beginner and turning them into a corporate programmer. If you have some mainframe skills already, you can skip some of the beginning lessons.

The course is divided into 5 units, and if you push hard, it’s possible to get through a unit each day – a week of corporate training.  The course comes with an extensive collection of slides – 299 in all.  There are 15 programming problems that you will need to tackle and complete if you are really wanting to learn something.

You can help me by reporting any problems you have with the site or with the material.

So, … I hope this will help you learn a Cobol for great good!


Filed under IBM Enterprise Cobol, IBM Mainframe Assembler

Introduction to Macros and Conditional Assembly

In the Video Course for IBM Assembler section, I’ve added an introductory lesson on Conditional Assembly and Macro Processing. If you haven’t written macros or want to learn something about conditional assembly instructions, this guide will get you started. There’s also a link to the Powerpoint that goes along with the video.

Leave a comment

Filed under IBM Mainframe Assembler

What you can learn from the Cobol compiler about Assembly language

It can be fun to take a look at the assembly language listing of a Cobol program. Geeky, admittedly, but still fun. If you have never given the listings much thought, take a look at this video. You might be surprised what the Cobol compiler gets up to, and what you can learn about Cobol and assembler. In this video I examine whether to COMPUTE or not to COMPUTE, whether to PERFORM or to PERFORM THRU, and what happens when you tell the optimizer to give it the old college try.

1 Comment

Filed under IBM Mainframe Assembler