因为这个原因:“我想用它更好地理解 Cobol 的工作原理”,所以我会让步。
简单的答案是,对于 z/OS 上的 Enterprise COBOL,有一个编译器选项叫做 LIST。LIST 将在您的编译清单中提供所谓的“伪汇编”输出(以及一些其他有用的内容,以便了解可执行程序)。另一个编译器选项 OFFSET 显示每个 COBOL 动词生成的代码距程序开始处的位移量。LIST(本质上已经具有偏移量)和 OFFSET 是互斥的。因此,您需要指定 LIST 和 NOOFFSET。
编译器选项可以在编译器的 EXEC PGM= PARM 中指定。由于 PARM 限制为 100 个字符,编译器选项也可以在数据集中指定,DDName 为 SYSOPTF(反过来,您使用编译器选项指定其使用)。
第三种指定编译器选项的方法是在程序源中包含它们,使用 PROCESS 或(更常见,因为它更短)CBL 语句。
很可能您有一个“面板”来编译您的程序。这可能有一个允许指定选项的字段。
然而,请注意以下几点:在安装编译器时,有可能“固定”编译器选项(这意味着应用程序员无法更改它们);在安装编译器时,有可能禁止使用PROCESS / CBL语句。
以上的原因是标准化。有些编译器选项会影响代码生成,在同一系统中使用不同的代码生成选项可能会导致意外后果。即使在不同系统之间,如果程序员倾向于期望“正常”的选项,则不希望使用不同的代码生成选项。
列出仅限列表的选项不太可能被“固定”,但是如果您无法指定选项,则可能需要提出特殊请求。这不常见,但您可能很不幸。如果对您不起作用,那不是我的错。
您特定版本的 Enterprise COBOL 编程指南中记录了这些编译器选项以及如何指定它们。您还将在其中找到伪汇编程序的文档(请注意,由于没有充分理由,它在文档中出现为“伪汇编程序”,“伪汇编程序”和“伪汇编程序”)。
当你看到伪汇编代码时,你会发现它的格式与汇编语句不同(我从未发现为什么,但据我所知,它已经存在了40多年)。伪汇编代码所在的行还将包含机器码,其格式与您已经熟悉的汇编输出相同。
不要期望看到编译后的COBOL程序看起来像您编写的汇编程序。Enterprise COBOL遵循语言标准(1985)和IBM扩展。对于“为什么会这样做”,答案可能是“因为”,除了优化(稍后再看)。
您看到的内容将严重取决于您编译器的版本,因为2013年夏天,IBM推出了V5,具有全新的代码生成和优化。在V4.2之前,代码生成器可以追溯到“ESA”,这意味着自ESA以来引入的600多条机器指令对Enterprise COBOL程序不可用,并且扩展了寄存器。使用V4.2和V6.1(撰写本文时的最新版本)编译的相同COBOL程序将明显不同,不仅因为不同的指令,而且还因为可执行COBOL程序的结构也进行了重新设计。
然后是优化。在V4.2中,有一级可能的优化,并且优化代码通常是“可识别的”。使用V5+,有三个级别的优化(不需要请求即可获得零级),并且优化更加极端,包括一些极端的东西。如果您使用V5+,想了解更多信息,请使用OPT(0)来掌握正在发生的情况,然后注意OPT(1)和OPT(2)的影响(并意识到由于增加的编译时间所需的优化工作量有多大)。
实际上没有太多官方内部文档。搜索引擎会显示一些内容。如果您想了解更多关于V5+内部的知识,
IBM的编译器咖啡厅:COBOL咖啡厅论坛-IBM是一个很好的地方,因为有几位开发人员会参与其中。对于V4.2及以下版本,这里可能是询问更多具体问题的好地方之一。