Какой смысл использовать END OF MEMBER в IBM Assembly - PullRequest
0 голосов
/ 02 июля 2018

Я анализирую некоторый IBM Assembly Language, который также является картой BMS.

Код выглядит так:

         DFHMSD TYPE=FINAL
         END
END OF MEMBER

Оператор END OF MEMBER не вызывает никаких синтаксических ошибок на мейнфрейме.

Почему это синтаксически правильно?

Какие функции предоставляет линия END OF MEMBER?

Ответы [ 2 ]

0 голосов
/ 09 июля 2018

Я попытался собрать то, что вы указали в вопросе, и вот что я обнаружил.

Мой пример исходного кода:

Источник 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 был собран и сгенерирован, и вы могли бы связать модуль, но ясно, что это проблема для последующих шагов.

Единственная ссылка на оператор END OF MEMBER в документах HLASM - это то, что он является частью обработки выхода HLASM .

Вызов END OF MEMBER упрощает управление стеком, требуемое при кодировании выхода LIBRARY, который содержит READ и FIND. Выход может использовать информацию, предоставленную этим вызовом, в обработке вложенных FIND, где обычно имеется соответствующее резюме FIND (options = 2) для каждого вложенного FIND (options = 3). Пример использования вызовов END OF MEMBER для управления стеком приведен в примере кода. Использование вызовов End of Member для управления стеком при выходе из TERM - TRMEXIT.

.

Недопустимый синтаксис для исходного кода сборки.

0 голосов
/ 02 июля 2018

HLASM Ссылка гласит:

Если оператор END не является последним оператором во входном потоке, и параметр BATCH был указано, ассемблер инициирует сборку нового исходного модуля, когда текущая сборка завершено.

Таким образом, если BATCH не указано в качестве опции-ассемблера, обработка должна прекратиться после достижения END -условия.

Вы также должны увидеть, что в вашем списке сборок: распечатанный список источников должен заканчиваться на END -Statement, END OF MEBER там не должен появляться.

Так что END OF MEMBER, похоже, бесполезен, но и не должен причинять вреда ...

...