assembly 尝试在z/OS上的汇编程序中调用BPX 1 WRT时发生链接错误

ocebsuys  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(117)

我正在编写一些汇编代码来执行'Hello World',但我想写入UNIX系统服务中的stdout,而不是WTO或PUT到DDName。
我使用'as'和'ld',没有任何特殊的选项来组装和链接,例如。

as -mlist hw.asm >hw.lst
ld hw.o

字符串
我希望我需要从某个地方拉入BPX 1WRT的库代码,但我在文档中找不到它。我最终得到:

Assembler Done No Statements Flagged
 IEW2457E 9208 SYMBOL BPX1WRT UNRESOLVED.  NO CALL LIBRARY SPECIFIED.
 IEW2665S 40FF MODULE *NULL*  IS NON-EXECUTABLE AND WAS NOT SAVED BECAUSE
          STORENX=NEVER.
IEW5033 The binder ended with return code 12.


我将其编码为可重入代码。下面是代码(我希望这里有可寻址性错误,因为我还没有得到它的链接)

PRINT ON,GEN,DATA
HELLO   CSECT
*
* Prolog
*
        SAVE (14,12)
        BASR R12,0
        USING *,R12
        STORAGE OBTAIN,LENGTH=DYNSIZE,ADDR=(R11)
        USING DYNAREA,R11
        LA R2,SAVEA
        ST R2,8(,R13)
        ST R13,SAVEA+4
        LR R13,R2
*
* Body
* Write Hello World to STDOUT
*
        MVC RECORD,=C'Hello World'
        MVC RECLEN,RECSIZE
        LA  R15,RECORD
        ST  R15,RECADDR
        CALL BPX1WRT,                                                  +
               (STDOUT,                                                +
               RECORD,                                                 +
               BPXALET,                                                +
               RECLEN,                                                 +
               RV,                                                     +
               RC),                                                    +
               VL,MF=(E,PLIST)

*
* Epilog
*
        STORAGE RELEASE,LENGTH=DYNSIZE,ADDR=(R11)
        RETURN (14,12),RC=0
        LTORG
*
* Statics (constants)
*
STDOUT  DC F'0'
STDIN   DC F'1'
STDERR  DC F'2'
BPXALET DC F'0'
*
* Dynamic (storage obtain'ed) area
*
DYNAREA DSECT
DYNSIZE EQU DYNEND-*
*
* Stack save area always first
*
SAVEA   DS 18F
*
* Working storage
*
RECSIZE EQU RECEND-*
RECORD  DS CL80
RECLEN  DS F
RECEND  EQU *
RECADDR DS A
RV      DS F
RC      DS F
PLIST   DS 10A * Is this enough?
*
* End of working storage
*
DYNEND  EQU *
*
* Equates
*
R0      EQU 0
R1      EQU 1
R2      EQU 2
R3      EQU 3
R4      EQU 4
R5      EQU 5
R6      EQU 6
R7      EQU 7
R8      EQU 8
R9      EQU 9
R10     EQU 10
R11     EQU 11
R12     EQU 12
R13     EQU 13
R14     EQU 14
R15     EQU 15
        END

mrzz3bfm

mrzz3bfm1#

您使用CALL宏而不是LINK(或更好的LINKX)宏来调用BPX 1WRT。这将静态地将BPX 1WRT的加载模块包含到链接程序中。使用LINKX来动态加载和执行BPX 1WRT。
链接错误是因为在链接步骤的SYSLIB DD中没有BPX 1WRT所在的系统库。

相关问题