如何在 assist/assembler 中打印文字值

how to print a literal value in assist/assembler

           MAIN       CSECT
           USING     MAIN,15
           L         6,=F'1000'
           XDECO     6,DISCOUNT
           XPRNT     LINE,80
           BR        14
           LTORG
LINE       DC        C'0'
DISCOUNT   DS        12C
           END       MAIN

所以我在 IBM 汇编器中有这段代码,我想做的是打印寄存器 6 中的值,它是 1000decimal 但是当我 运行 代码时它没有显示任何东西

自从我使用 S/3x0 汇编器以来已经快三十年了;自从我使用 ASSIST 以来已有 40 多个,但让我们看看我是否记得。

您的行 XDECO 6,DISCOUNT 会将字符“1000”放在 DISCOUNT 位置;这似乎是正确的。我认为问题可能出在您的 XPRNT 语句中指定的长度。 (但请参阅下面我对回车控制的评论。)

在你的 XDECO 之后,你的存储部分看起来像这样:

  • LINE(1 字节):“0
  • DISCOUNT(12 个字节):“ 1000”(八个空格,后跟 "1000")

就是这样。只有 13 个字节。但是你的 XPRNT 说要打印 80 个字节,从 LINE 开始。问题是,只定义了前 13 个字节。在一个真正的汇编程序中,你有 13 个已定义的字节,并且可能在未定义区域中有二进制零;我不确定 ASSIST 系统会做什么。

您应该执行以下操作之一:在 DISCOUNT 之后声明您自己的另外 67 个字节 ( DC CL67' ') 的填充;或将您的 XPRNT 限制为 13 个字节。

注意:与上面的评论相反,您从 LINE 而不是 DISCOUNT 打印是正确的; XPRNT 使用 carriage control 的第一个字符,并打印后面的内容;在这种情况下,不会打印“0”,但会用于告诉打印机在打印后面的文本之前前进 2 行。

事实上,您的第一个 XPRNT 习惯使用“1”的回车控制来指示前进到新页面。您的程序可能正在打印正确的信息(可能在“ 1000”之后有一些垃圾),但是如果没有前进到新页面,您正在查看错误的位置而不是直接在您的列表之后.

顺便说一下,只是一个样式问题:您的 DISCOUNT 字段实际上应该声明为:

DISCOUNT   DS        CL12

或者,甚至更好:

DISCOUNT   DC        CL12' '    NOTE: USE OF DC RATHER THAN DS HERE

而不是:

DISCOUNT   DS        12C

DISCOUNT DS CL12表示声明一个长度为12的字符字段(未初始化;DS,“declare storage”,表示只声明该字段); DISCOUNT DC CL12' '表示声明一个长度为12的字符域,并预填空格(DC,“声明常量”,不仅声明该域,而且按指示填充)。相反,DISCOUNT DS 12C 声明了十二个字段的序列,每个字段的长度为 1(因为未指定)。它不会在这里烧你,但是一些汇编程序指令会在未明确指定长度时使用字段的长度作为默认值,因此在声明时使用正确的长度是个好主意。