`

[zz] 主机OS/390汇编程序入门篇

 
阅读更多

概述

主机OS/390 汇编程序曾经风靡一时。它曾应用于很多商业应用系统,特别是联机应用系统。随着高级语言的普及,以及计算机硬件资源的成本日趋下降,汇编语言不再是人们开发的首选,但是汇编语言还是有它的优点,现在仍然有着它用武之处。汇编语言适合于下面的几个方面:


1、任务需要很快的执行速度,例如驱动程序,ASCII to EBCDIC 转换程序,EXIT程序等。 
2、需要利用系统底层接口,例如JES2 Exits,和MVS的大部分接口。 
3、一些MVS系统只提供汇编语言接口,例如TCP/IP NPF Exit. 
4、一些应用系统只提供汇编语言接口,例如用户的一些已有的系统的开发和维护的等。

此文的目的在于展现给大家如何在OS/390系统上开发一个简单的汇编程序。此文也适应于MVS系统和Z/OS 系统。

第一步、建立自己的库文件

首先你需要建立自己的文件库,下面的文件库是一般必须的: 
1、汇编语言源文件库 
2、JCL文件库 
3、执行文件库

若想知道如何建立自己的这些文件,请参阅我的大作: 
新手入门:如何在OS/390中建立自己的新文件

第二步、编写汇编程序”HELLO”

这是一个巨简单的汇编程序,显示“HELLO, THE WORLD!”.

按照下面步骤编辑该程序: 
1、在ISPF中,输入=2, 进入Edit Entry Panel 

2、输入你的源文件名称和HELLO, 如下所示: 

3、进入ISPF Edit Panel, 如下所示。 

4、输入HELLO源程序。有关ISPF EDIT 的用法,请参照HELP(键入F1). 你也可以从这里拷过去(Copy/Paste)。 另外,建议使用HILITE ON命令使得程序易读。该命令同样适用于所有Mainframe的高级语言。 

下面是这个HELLO的源程序: 

HELLO TITLE 'ASSEMBLER DEMONSTRATION PROGRAM.' ********************************************************************* * PROGRAM: HELLO. * * PURPOSE: DEMONSTATION ASSEMBLER PROGRAM * * DESIGN : HUNTER * * DATE : APRIL, 2005 * * DESCRIPTION: * * 1. COMPILE. * * USE FOLLOWING SAMPLE JCL TO COMPILE THE PROGRAM * * * * //JOBCARD ... * * //COMPILE EXEC ASMACL * * //C.SYSIN DD DISP=SHR,DSN=HUNTER.ASM.SOURCE(HELLO) <--CHANGE * * //C.SYSLIB DD DISP=SHR,DSN=SYS1.MACLIB * * // DD DISP=SHR,DSN=SYS1.MODGEN * * //L.SYSLMOD DD DISP=SHR,DSN=HUNTER.ASM.LOADLIB <--CHANGE * * //L.SYSIN DD * * * NAME HELLO(R) * * /* * * * * 2. RUN * * THE PROGRAM NEEDS SYSPRINT DD TO SHOW THE MESSAGE. * * * * //JOBCARD ... * * //HELLO EXEC PGM=HELLO * * //STEPLIB DD DISP=SHR,DSN=HUNTER.ASM.LOADLIB * * //SYSPRINT DD SYSOUT=* * * * * 3. SAMPLE OUTPUT * * THE SAMPLE OUTPUT WILL BE: * * HELLO, THE WORLD! * * * ********************************************************************* HELLO CSECT * DEFINE REGISTER EQUALS USING IBM STANDARD MACRO YREGS * YREGS * BUILD UP BASE REGISTERS FOR THE PROGRAM * USING HELLO,R15 ;R15 IS CURRENT ADDRESS, USING IT SAVE (14,12) ;SAVE CALLER'S REGISTERS USING SAVE LR R12,R15 ;COPY THE CURRENT CSECT LOCATION DROP R15 ;DROP THE TEMPORARY USING USING HELLO,R12 ;USE R12 AS BASE REG FROM NOW ON * BUILD LINKAGE OF THIS PROGRAM AND THE CALLER. ST R13,SAVEAREA+4 ;SET OUR BACKWARD LINK IN OUR SAVE LA R15,SAVEAREA ;LOAD ADDR OF OUR SAVEAREA TO R15 ST R15,8(R13) ;SET CALLER(MYSELF)'S FORWARD LINK LR R13,R15 ;LOAD OUR SAVEAREA ADDR TO R13. * MAIN PROGRAM BEGINS HERE OPEN (SYSPRINT,(OUTPUT)) ;OPEN THE SYSPRINT FILE. PUT SYSPRINT,HELLOMSG ;WRITE THE MESSAGE CLOSE SYSPRINT ;CLOSE SYSPRINT FILE * RETURN LINKAGE TO THE CALLER L R13,4(R13) ;LOAD ADDR OF CALLER'S SAVEAREA RETURN (14,12),RC=0 ;RESTORE CALLER'S REGS AND RETURN * STATIC STORAGE AREA SAVEAREA DS 18F ;REGISTER SAVE AREA HELLOMSG DC CL133' HELLO, THE WORLD!' SYSPRINT DCB DSORG=PS,MACRF=PM,DDNAME=SYSPRINT,RECFM=FBA,LRECL=133 END HELLO

第三步、编译汇编程序”HELLO”

在你的JCL库中,建立下面的JCL member HELLOCPL, 下面是编辑JCL步骤: 
1、在ISPF中,输入=2, 进入Edit Entry Panel 
2、输入你的JCL库文件和HELLOCPL。 
3、进入ISPF Edit Panel。 
4、输入JCL语句。有关ISPF EDIT 的用法,请参照HELP(键入F1). 你也可以从这里拷过去(Copy/Paste)。

使用下面的JCL HELLOCPL 来编译这个程序:

//youridCP JOB (),YOUR.NAME,MSGCLASS=H,MSGLEVEL=(1,1), // CLASS=A,NOTIFY=&SYSUID //*************************************************************** //COMPILE EXEC ASMACL //C.SYSIN DD DISP=SHR,DSN=HUNTER.ASM.SOURCE(HELLO) ? CHANGE!! //C.SYSLIB DD DISP=SHR,DSN=SYS1.MACLIB // DD DISP=SHR,DSN=SYS1.MODGEN //L.SYSLMOD DD DISP=SHR,DSN=HUNTER.ASM.LOADLIB ? CHANGE!! //L.SYSIN DD * NAME HELLO(R) /*

下面是如何察看编译结果: 
1、使用=S;H到SDSF的HOLD Queue中。 
2、使用命令PREFIX yourid* 显示所有输出。 
3、使用命令SORT CRDATE D 显示最近的输出在开头。 
4、在作业youridCP的行命令处输入? 
5、在DDNAME SYSPRINT行命令处输入S, 你将看到编译的输出。假若有错误信息,使用命令F ASMA和F5键来查看错误信息。

第四步、运行汇编程序”HELLO”

在你的JCL库中,建立下面的JCL member HELLOCPL, 下面是编辑JCL: 
1、SPF中,输入=2, 进入Edit Entry Panel 
2、输入你的JCL库文件和HELLORUN。 
3、进入ISPF Edit Panel。 
4、输入JCL语句。有关ISPF EDIT 的用法,请参照HELP(键入F1). 你也可以从这里拷过去(Copy/Paste)。

使用下面的JCL HELLORUN运行这个程序:

//youridRN JOB (),YOUR.NAME,MSGCLASS=H,MSGLEVEL=(1,1), // CLASS=A,NOTIFY=&SYSUID //HELLO EXEC PGM=HELLO //STEPLIB DD DISP=SHR,DSN=HUNTER.ASM.LOADLIB <-- CHANGE!! //SYSPRINT DD SYSOUT=*

该程序的执行结果将在该程序的执行结果将保存在SYSPRINT DD中。下面是如何察看执行结果: 
1、使用=S;H到SDSF的HOLD Queue中。 
2、使用命令PREFIX yourid* 显示所有输出。 
3、使用命令SORT CRDATE D 显示最近的输出在开头。 
4、在作业youridRN的行命令处输入? 
5、在DDNAME SYSPRINT行命令处输入S,你将看到下面的程序输出: HELL, THE WORLD!

调试汇编程序

在程序编译出问题时,可以到编译的SYSPRINT 输出中,查找ASMA关键字,来查看有关错误信息。错误信息可以到下面网站查找到解释: HLASM Users Guide

当程序运行出错时,使用以下方法: 
1、程序ABEND,在程序输出中找到ABEND Code 和Reason, 然后到下面网站查找: MVS System Codes 
2、使用SYSPRINT 输出,将向查看的数据输出到SYSPRINT DD中。 
3、使用WTO信息。该方法适合于测试程序运行的逻辑路径,例如测试程序是否执行到了此处。下面的一段程序在HELLO中加入两个WTO信息:

WTO 'SHOW HELLO MESSAGE.'   ;SHOW DEBUG MESSAGE OPEN (SYSPRINT,(OUTPUT))     ;OPEN THE SYSPRINT FILE PUT SYSPRINT,HELLOMSG      ;WRITE THE MESSAGE CLOSE SYSPRINT      ;CLOSE SYSPRINT FILE WTO 'END OF HELLO MESSAGE.' ;SHOW DEBUG MESSAGE

参考资料

 

书名 链接 汇编语言编译软件使用手册 信息查阅手册 JCL 用户指南 JCL语言参考 ESA体系汇编指令参考大全(31位或者24位) Z体系汇编指令参考大全(64位、31位或者24位) MVS系统汇编调用指南
High Level Assembler for MVS
MVS Message and Codes
MVS JCL Users Guide
MVS JCL Reference
ESA/390 Principles of Operations
z/Architecture Principles of Operations
MVS Assembler Services Guide

分享到:
评论

相关推荐

    ZZ18000/25.5/50型四柱支撑掩护式支架的研制与应用

    ZZ18000/25.5/50型四柱支撑掩护式支架是一款专为煤矿快速搬家和回撤巷道支护设计的高效设备。这款支架在煤炭开采中扮演着至关重要的角色,特别是在高产高效矿井中,其有效提升了综采设备的利用率和搬家倒面的速度。 ...

    ZZ8500/20/40型液压支架中缸筒设计及工艺的改进

    针对ZZ8500/20/40型液压支架中缸筒设计不合理部分进行改进。分别列举了中缸筒按原设计和改进后设计进行加工的工艺过程,并对二者进行了比较。改进前设计加工工艺繁琐,费料费时,效率低;改进后省工省料,可降低成本,提高...

    ZZ8200/22/45型四柱支撑掩护式液压支架研制与应用

    根据掌石沟煤业有限公司15号煤层的地质...分析了ZZ8200/22/45型四柱支撑掩护式液压支架的结构组成、适用范围和技术参数等,对支架的顶梁、底座、掩护梁进行了阐述。该支架的使用保证了较高的支护效率和人员生产安全。

    ZZ13000/28/60重型液压支架井下整体快速搬运的研究

    【ZZ13000/28/60重型液压支架井下整体快速搬运的研究】 在煤炭开采领域,随着技术的不断进步,大型化、高效化的综采综掘设备日益普及,尤其是大功率、大采高的液压支架。晋华宫矿在开采过程中遇到的挑战是如何在...

    ZZ13000/28/60型液压支架稳定性研究

    通过对ZZ13000/28/60型液压支架结构的介绍,重点对四连杆机构力的纵向稳定性进行了分析,验证了液压支架四连杆结构的设计是合理的、正确的,能确保工作面的稳定性,为煤矿高效、安全生产提供重要的保障。

    综采面回撤三角区ZZ7200/18/36型支架电液系统设计

    《综采面回撤三角区ZZ7200/18/36型支架电液系统设计》一文探讨了为了提升煤炭开采中综采工作面的搬家速度和工作效率而研发的ZZ7200/18/36型三角区液压支架。这种支架专门应用于综采快速搬家工作面端头三角区的支护,...

    ZZ5900/14/28型液压支架设计探讨

    ZZ5900/14/28型液压支架作为煤矿开采领域的重要设备,主要用于支撑井下的顶板,为矿工提供安全的工作环境。设计一种新型液压支架不仅涉及到结构的设计,而且要考虑材料的选择、焊接工艺、以及如何满足井下作业的特殊...

    ZZ6400/22/45型液压支架的选型及支护强度验算

    综采工作面液压支架架型是否与工作面煤层...根据丁集煤矿1121(3)回采工作面地质条件,选用ZZ6400/22/45型液压支架。为验证液压支架的支护强度,对其进行支护强度验算,验算结果表明,所选支架的支护强度满足顶板压力要求。

    ZZ3200/11/21型液压支架改造

    ZZ3200/11/21型液压支架投用后,由于盘江支护条件的改变顶梁护帮板结构不能适应盘江煤层条件,液压系统反冲洗过滤器通液孔径很小,对水质要求极高,容易堵塞,致使支架无法正常工作,原ZZ3200/11/21型液压系统是本架操纵...

    ZZ9000/23/48型液压支架柱窝铸造工艺的优化

    潞安机械公司在ZZ9000/23/48型液压支架柱窝铸件实际生产过程中,由于传统工艺的局限,柱窝铸件冒口处无法得到有效补缩,导致柱窝在切割冒口后发现十字结构热节处存在严重的缩孔缺陷,直接导致铸件报废,无法使用。...

    base zz zz zz zz

    base zz zz zz zz zz base zz zz zz zz zz base zz zz zz zz zz base zz zz zz zz zz

    ZZ8800/25/50型液压支架立柱强度计算

    以某矿用280型双伸缩立柱拟定的各个技术参数为基础,通过建立二维模型,根据双伸缩立柱的结构特点,通过对壁厚、稳定性和活塞杆强度的计算验证技术参数能否满足使用要求。计算结果表明:计算方法合理,该型号双伸缩立柱...

    ZZ9900/29.5/50型支架护帮装置限压阀板的改进

    标题和描述提到的知识点集中于对ZZ9900/29.5/50型支撑掩护式大采高液压支架护帮装置限压控制系统中限压阀板的改进。这项改进主要针对的是该限压阀板存在的缺陷。为了深入理解和掌握这部分内容,我们首先需要对液压...

    大采高ZZ13000/28/60型液压支架的稳定性分析

    本文主要讨论了大采高ZZ13000/28/60型液压支架在晋华宫矿大采高工作面的应用和稳定性分析。该工作面地质条件复杂,煤层硬度高,顶板稳定性差,因此对液压支架的抗冲击性能提出了严峻挑战。针对这种情况,文章提出了...

    在页面处理分页

    var zz =new Array(a.length); for(var i=0;i ;i++){ zz[i]=a[i].innerHTML; } //div的字符串数组付给zz var pageno=1; //当前页 var pagesize=3; //每页多少条信息 if(zz.length%pagesize==0){ var pageall =zz....

    BC480/22/42支撑掩护式液压支架的改造

    已造成相当数量的结构件变形,影响了支架的整体稳定性,目前支架的状况已不能满足煤矿安全生产要求,全部报废会造成资源的极大浪费,通过对该支架进行改造,使整体性能超过原BC480/22/42支架,整机性能和ZZ5200/19.5/4支架...

    ZZ13000/28/60型液压支架选型设计初步研究

    大同煤矿集团公司晋华宫矿南山区域402盘区12#层为侏罗系厚煤层赋存区。通过对该区域的地质情况、开采矿压总结分析,初步对支架的架型、工作阻力进行设计研究,实现了"两硬"条件下6 m厚煤层一次采全高综采工作面的安全...

Global site tag (gtag.js) - Google Analytics