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

z/OS UNIX System Services环境下汇编程序如何获取命令行参数?

z/OS UNIX System Services 汇编程序命令行参数的存储位置

在z/OS UNIX System Services(USS)环境下,当你通过mypgm p1 p2运行汇编程序时,命令行参数并非直接存放在R1寄存器中,R1实际指向一个参数信息块(Parameter Information Block, PIB),所有参数的元数据都通过这个结构来访问。

PIB结构说明

PIB是固定格式的控制块,核心字段如下:

PIB       DSECT
PIBARGCN  DS    F               ; 参数总个数(包含程序名,示例中为3:mypgm、p1、p2)
PIBARGVP  DS    F               ; 指向参数向量表的指针
PIBENVP   DS    F               ; 指向环境变量表的指针
PIBEND    DS    0F

参数的实际存储

参数向量表是连续的地址数组,每个元素是一个指针,指向以null(X'00')结尾的字符串:

  • 第一个指针指向程序名mypgm的字符串
  • 第二个指针指向参数p1
  • 第三个指针指向参数p2

汇编代码示例(获取参数)

以下是一段简单的汇编代码,演示如何读取p1和p2:

MYPGM CSECT
         STM   R14,R12,12(R13)    ; 保存调用者寄存器
         LR    R12,R15            ; 设置基址寄存器
         USING MYPGM,R12
         LA    R13,SAVEAREA       ; 建立保存区
         ST    R13,4(R1)
         ST    R1,8(R13)

* 从PIB获取参数信息
         L     R2,PIBARGCN(R1)    ; R2 = 参数总个数(示例中为3)
         L     R3,PIBARGVP(R1)    ; R3 指向参数向量表

* 读取第一个参数p1(跳过程序名,取向量表第二个元素)
         L     R4,8(R3)           ; R4 指向p1的字符串地址
* 这里可添加字符串处理逻辑(如打印、解析等)

* 读取第二个参数p2
         L     R5,12(R3)          ; R5 指向p2的字符串地址

* 程序退出
         L     R14,12(R13)        ; 恢复寄存器
         LM    R0,R12,20(R13)
         BR    R14                ; 返回系统

SAVEAREA DS    18F                ; 标准寄存器保存区
PIB      DSECT
PIBARGCN DS    F
PIBARGVP DS    F
PIBENVP  DS    F
         END   MYPGM

关键注意点

  • 参数个数包含程序名本身,所以mypgm p1 p2的参数总数是3,而非2。
  • 所有参数字符串以null结尾,遵循POSIX规范,与TSO/批处理环境的参数传递机制完全不同。
  • 若你之前尝试直接从R1读取参数失败,大概率是混淆了USS与TSO环境的参数传递逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 00:10:11