IBM Assembly中的END OF MEMBER有什么用?

时间:2018-07-02 03:17:41

标签: assembly zos

我正在解析一些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行提供什么功能?

2 个答案:

答案 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中执行堆栈管理。

这不是汇编源代码的有效语法。