为了好玩,我正在实现 Brainfuck 编译器,将 bf 翻译为例如x86 组件。目前我正在从事 bf 到大型机的组装工作。方言是“HLASM”,主机是 IBM 的一台 370。
到目前为止,它的大部分工作仅向操作员的控制台发出一个字符失败:我只得到空格,并且看起来添加了隐式换行符(我不想要)。
有人能发现我的错误吗?
* get a character to display
LLGC R6,0(R7)
* get a pointer to the buffer which will contain the char to displa
LA R5,BUFFER
* store character in buffer
STC R6,0(R5)
* get a pointer to the memory area describing the data to display
LA R1,MSGAREA
* invoke display char
SVC 35
MSGAREA EQU *
DC AL2(5)
DC XL2'00'
BUFFER DC C'!'
我建议写信给
SYSOUT
DD
,让您可以灵活地运行批处理(在 SYSOUT
中分配 JCL
)或交互运行(将 SYSOUT
分配给终端会话,我认为这是默认为 TSO
)。
[entry logic, initialization and so forth]
OPEN (SYSOUT,OUTPUT)
PUT SYSOUT,RECORD
CLOSE SYSOUT
[exit logic]
RECORD DC CL80' '
SYSOUT DCB DDNAME=SYSOUT, X
DSORG=PS, X
MACRF=PM, X
RECFM=FB, X
LRECL=80
如果您愿意将程序绑定到专门在 TSO 中运行,您可能还想查看终端 I/O 的 TPUT、TGET 和 TPG 宏。如果您习惯于在 Unix 中进行流式 I/O,那么终端 I/O 在 3270 环境中有点奇怪。
DCB
记录在here。 OPEN
记录在here。 PUT
记录在here。 CLOSE
记录在这里。
@mike - 文档位于:https://www.ibm.com/docs/en/zos/3.1.0?topic=descriptions-write-bpx1wrt-bpx4wrt-write-file-socket。附录中是一些代码示例 - 它与“write()”C 运行时函数没有任何不同。