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的值,但是当我运行代码时它什么也没显示
答案 0 :(得分:2)
自从我使用 S/3x0 汇编程序以来已经快三十年了;自从我使用 ASSIST 以来已经有四十多个了,但让我们看看我是否能记住。
您的行 XDECO 6,DISCOUNT
会将字符“1000”放在位置 DISCOUNT
;这似乎是正确的。我认为问题很可能是您的 XPRNT
语句中指定的长度。 (但请参阅下面我对运输控制的评论。)
在您的 XDECO 之后,您的存储部分如下所示:
0
” 1000
”(八个空格,后跟
"1000")就是这样。只有 13 个字节。但是您的 XPRNT
说要打印 80 个字节,从 LINE
开始。问题是,只定义了前 13 个字节。在一个真正的汇编程序中,你有 13 个定义的字节,在未定义的区域中可能还有二进制零;我不确定 ASSIST 系统会做什么。
您应该执行以下操作之一:在 DC CL67' '
之后声明您自己的另外 67 个字节 (DISCOUNT
) 的填充;或将您的 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
,“声明存储”,表示只声明该字段); DISCOUNT DC CL12' '
表示声明一个长度为 12 的字符字段并预填充空白(DC
,“声明常量”,不仅声明该字段,而且按指示填充它)。相比之下,DISCOUNT DS 12C
声明了一个包含 12 个字段的序列,每个字段的长度为 1(因为未指定)。这里不会让你感到厌烦,但是当没有明确指定长度时,一些汇编指令会使用字段的长度作为默认值,因此在声明时使用正确的长度是个好主意。