我正在解析一些IBM汇编语言,它也恰好是BMS映射。
代码如下:
new Promise((resolve) => {
it('dummy', (done) => { resolve(); return done(); });
})
.then(() => {
return registerNonExistingUser(email, pass, role);
})
.then((_jwtToken: string) => {
return authenticateUserCorrectJwt(_jwtToken);
})
DFHMSD TYPE=FINAL
END
END OF MEMBER
语句不会在大型机上引起任何语法错误。
为什么语法上正确?
END OF MEMBER
行提供什么功能?
答案 0 :(得分:3)
HLASM参考指出:
如果END语句不是输入流中的最后一条语句,并且BATCH选项已被执行 指定,当当前程序集为 完成。
因此,除非将BATCH
指定为汇编器选项,否则一旦达到END
语句,处理应停止。
您还应该能够在程序集列表中看到这一点:打印的源代码列表应在END
声明处停止,END OF MEBER
不应在那里出现。
所以END OF MEMBER
似乎没有用,但也不应造成伤害...
答案 1 :(得分:2)
我试图整理您在问题中提供的内容,这就是我发现的内容。
我的示例源代码是:
EOS来源
EOS CSECT
SR 15,15
BR 14
END EOS
END OF MEMBER
组装源代码时,组装步骤以返回码8完成。但是,它似乎已经处理了源代码,直到 END EOS 语句。然后,它开始将以下文本作为另一个模块进行处理。
程序集输出清单
Active Usings: None
Loc Object Code Addr1 Addr2 Stmt Source Statement
1 *
000000 00000 00004 2 EOS CSECT
000000 1BFF 3 SR 15,15
000002 07FE 4 BR 14
000000 5 END EOS
Diagnostic Cross Reference and Assembler Summary
No Statements Flagged in this Assembly
HIGH LEVEL ASSEMBLER, 5696-234, RELEASE 6.0, PTF UI50739
有趣的是,在同一组装步骤中,我得到了一系列错误,这些错误与第一个CSECT无关,导致返回代码为8。请注意END OF MEMBER
的行号为1。这些错误是:>
声明后的错误END
Active Usings: None
Loc Object Code Addr1 Addr2 Stmt Source Statement
1 END OF MEMBER
** ASMA057E Undefined operation code - OF
** ASMA435I Record 6 in USER1.TEST.CNTL(EOS) on volume: T70502
** ASMA140W END record missing
** ASMA435I Record 6 in USER1.TEST.CNTL(EOS) on volume: T70502
在这种情况下,没有问题,因为CSECT已组装并生成,您可以链接模块,但是显然这是后续步骤的问题。
HLASM文档中对语句END OF MEMBER
的唯一引用是它是HLASM exit processing的一部分。
END MEMBER调用简化了对包含READ和FIND的LIBRARY出口进行编码所需的堆栈管理。出口可能在嵌套FIND的处理中使用此调用提供的信息,对于每个嵌套FIND(选项= 3),通常都有一个对应的恢复FIND(选项= 2)。有关如何使用END OF MEMBER调用执行堆栈管理的示例,请参见代码示例“使用End of Member调用”在TERM出口-
TRMEXIT
中执行堆栈管理。
这不是汇编源代码的有效语法。