You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求z/OS平台可重入HL/ASM Hello World示例(基于BPX1WRT)

可重入z/OS HL/ASM Hello World(基于BPX1WRT)

以下是符合可重入要求、使用BPX1WRT(POSIX write服务)向stdout输出的Hello World示例,规避了WTO控制台输出的限制:

TITLE 'REENTRANT HELLO WORLD VIA BPX1WRT'
         REENTRANT,CSECT=YES         ; 声明程序可重入,代码段设为只读
HELLO    CSECT
         USING HELLO,R12             ; 建立基址寄存器关联
         STM   R14,R12,12(R13)       ; 保存调用者寄存器组
         LR    R12,R15               ; 初始化基址寄存器
         LA    R15,SAVEAREA          ; 指向本地保存区
         ST    R15,8(R13)            ; 将保存区链入调用链
         LR    R13,R15               ; 更新保存区指针

*        准备BPX1WRT调用参数
         LA    R1,MSGBUF             ; R1: 输出缓冲区地址(只读常量)
         LA    R2,MSGLEN             ; R2: 输出字节长度
         LA    R3,1                  ; R3: 文件描述符(1对应stdout)
         CALL  BPX1WRT,(R1,R2,R3),VL ; 调用POSIX write服务

*        恢复寄存器并返回
         LM    R14,R12,12(R13)       ; 恢复调用者寄存器
         L     R13,4(R13)            ; 恢复上一级保存区指针
         BR    R14                   ; 返回调用环境

*        只读常量数据(放在代码段,无修改操作)
MSGBUF   DC    C'Hello, z/OS HL/ASM!'
         DC    X'0A'                 ; 换行符(ASCII)
MSGLEN   EQU   *-MSGBUF              ; 自动计算消息长度

SAVEAREA DS    18F                   ; 标准寄存器保存区
         END   HELLO

可重入设计关键说明

  • 只读代码段:通过REENTRANT,CSECT=YES告知编译器将代码和只读数据标记为不可修改,完全符合z/OS可重入程序定义
  • 无代码段修改:所有数据均为只读常量,程序运行过程中不会修改任何代码段内容
  • 标准寄存器管理:采用z/OS标准保存区处理寄存器,避免依赖非可重入的存储逻辑

编译链接提示

  1. 编译:使用HLASM编译器,指定REENTRANT选项
  2. 链接:使用IEWL链接器,指定RENT选项,确保生成可重入的可执行模块

内容的提问来源于stack exchange,提问作者mike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 05:33:26