Программирование кода сборки для мэйнфрейма z390 - PullRequest
2 голосов
/ 09 октября 2011

Не закончена с этой проблемой

В этой программе из-за неизвестной проблемы ассемблер отклоняет код из-за явно неизвестных макросов или из-за того, что сборка выглядит как макросы. Я не уверен, как это исправить.

Я использую переносной мэйнфрейм-ассемблер z390 и эмулятор (http://www.z390.org/).

Другая ссылка: www.z390.org/z390_Documentation.htm

Соответствующий pdf находится по адресу http://tradingwiz.net63.net/pdf/Sessions5and6.pdf.

Руководство по сборке находится на http://publibz.boulder.ibm.com/epubs/pdf/asmr1020.pdf,, но у меня возникают проблемы с его применением.

Обновление: я все еще хочу удалить ошибку о "отсутствующем макросе = DSORG = PS", и я не знаю, как сказать ассемблеру, где находится базовый регистр ("базовый регистр не найден")

Еще один вопрос: есть ли для этого какие-либо ресурсы, особенно те, которые легко понять?

Если вам нужна дополнительная информация, я с радостью помогу.

        TITLE 'CS 4321 Program #4 by J. Colt Wright'
        PRINT NOGEN    
COPY SUBENTRY

    TITLE 'PROGRAM 4 80/80 LISTING'

    PRINT NOGEN
COPY2 SUBENTRY

    WTO 'PROG4 COPY PROG4 (ASCII) TO COPY (ASCII)'
    OPEN (INFILE,INPUT)
    OPEN (OUTFILE,OUTPUT)
    WTO 'Files opened successfully'
*
LOOP EQU *
GET INFILE,IRECORD
    MVC ORECORD,=CL133' '
    MVC ORECORD(80),IRECORD
    PUT OUTFILE,ORECORD
    B LOOP
*
EOF EQU *
    CLOSE (INFILE,,OUTFILE)
    WTO 'PROG4 ENDED OK'
    SUBEXIT


INFILE  DCB   DDNAME=INFILE,    X
              DSORG=PS,         X
              RECFM=FT,         X
              LRECL=72,         X
              EODAD=EOF,        X
              MACRF=GM          X
*
OUTFILE DCB   DDNAME=OUTFILE,   X
              DSORG=PS,         X
              RECFM=FT,         X
              LRECL=80,         X
              MACRF=PM          
*
IRECORD DC    CL72' '
ORECORD DC    CL80' '
          ENDPGM  DS D
          END COPY

20:22:31 PROG4     MZ390 START USING z390 V1.5.05 ON J2SE 1.6.0_26 10/08/11
20:22:31 PROG4     AZ390 AZ390E error  29      (1/29)211                 DSORG=PS,         X
20:22:31 PROG4     AZ390 AZ390I ERRSUM missing macro = DSORG=PS,
20:22:31 PROG4     AZ390 AZ390E error  29      (1/30)212                 RECFM=FT,         X
20:22:31 PROG4     AZ390 AZ390I ERRSUM missing macro = RECFM=FT,
20:22:31 PROG4     AZ390 AZ390E error  29      (1/31)213                 LRECL=72,         X
20:22:31 PROG4     AZ390 AZ390I ERRSUM missing macro = LRECL=72,
20:22:31 PROG4     AZ390 AZ390E error  29      (1/32)214                 EODAD=EOF,        X
20:22:31 PROG4     AZ390 AZ390I ERRSUM missing macro = EODAD=EOF,
20:22:31 PROG4     AZ390 AZ390E error  29      (1/33)215                 MACRF=GM          X
20:22:31 PROG4     AZ390 AZ390I ERRSUM missing macro = MACRF=GM
20:22:31 PROG4     AZ390 AZ390E error  29      (1/36)252                 DSORG=PS,         X
20:22:31 PROG4     AZ390 AZ390I ERRSUM missing macro = DSORG=PS,
20:22:31 PROG4     AZ390 AZ390E error  29      (1/37)253                 RECFM=FT,         X
20:22:31 PROG4     AZ390 AZ390I ERRSUM missing macro = RECFM=FT,
20:22:31 PROG4     AZ390 AZ390E error  29      (1/38)254                 LRECL=80,         X
20:22:31 PROG4     AZ390 AZ390I ERRSUM missing macro = LRECL=80,
20:22:31 PROG4     AZ390 AZ390E error  29      (1/39)255                 MACRF=PM 
20:22:31 PROG4     AZ390 AZ390I ERRSUM missing macro = MACRF=PM
20:22:31 PROG4     AZ390 AZ390E error  29      (1/43)259                 ENDPGM  DS D
20:22:31 PROG4     AZ390 AZ390I ERRSUM missing macro = ENDPGM
20:22:31 PROG4     AZ390 AZ390E ERRSUM Critical Error Summary Option
20:22:31 PROG4     AZ390 AZ390E ERRSUM Fix and repeat until all nested errors resolved
20:22:31 PROG4     AZ390 AZ390E ERRSUM missing macro =DSORG=PS,
20:22:31 PROG4     AZ390 AZ390E ERRSUM missing macro =RECFM=FT,
20:22:31 PROG4     AZ390 AZ390E ERRSUM missing macro =LRECL=72,
20:22:31 PROG4     AZ390 AZ390E ERRSUM missing macro =EODAD=EOF,
20:22:31 PROG4     AZ390 AZ390E ERRSUM missing macro =MACRF=GM
20:22:31 PROG4     AZ390 AZ390E ERRSUM missing macro =LRECL=80,
20:22:31 PROG4     AZ390 AZ390E ERRSUM missing macro =MACRF=PM
20:22:31 PROG4     AZ390 AZ390E ERRSUM missing macro =ENDPGM
20:22:31 PROG4     AZ390 AZ390E ERRSUM total missing   copy   files =0
20:22:31 PROG4     AZ390 AZ390E ERRSUM total missing   macro  files =8
20:22:31 PROG4     AZ390 AZ390E ERRSUM total undefined symbols      =0
20:22:31 PROG4     AZ390 AZ390E ERRSUM total mz390 errors    = 0
20:22:31 PROG4     AZ390 AZ390E ERRSUM total az390 errors    = 10
20:22:32 PROG4     AZ390 AZ390I FID=  1 ERR=  10 c:\Program Files\Automated Software Tools\z390\CS4321\PROG4.MLC
20:22:32 PROG4     MZ390 ENDED   RC=12 SEC= 0 MEM(MB)= 47 IO=2420

        TITLE 'CS 4321 Program #4 by J. Colt Wright' 
        PRINT NOGEN    
COPY          SUBENTRY
    TITLE 'PROGRAM 4 80/80 LISTING'
    PRINT NOGEN
COPY2 SUBENTRY

    WTO 'PROG4 COPY PROG4 (ASCII) TO COPY (ASCII)'
    OPEN (INFILE,INPUT)
    OPEN (OUTFILE,OUTPUT)
    WTO 'Files opened successfully'
*
LOOP EQU *
    GET INFILE,IRECORD
    MVC ORECORD,=CL133' '
    MVC ORECORD(80),IRECORD
    PUT OUTFILE,ORECORD
    B LOOP
*
EOF EQU *
    CLOSE (INFILE,,OUTFILE)
    WTO 'PROG4 ENDED OK'
    SUBEXIT

    SUBEXIT   


INFILE  DCB     DDNAME=INFILE,                                         X
                DSORG=PS,                                              X
                RECFM=FT,                                              X
                LRECL=72,                                              X
                EODAD=EOF,                                             X
                MACRF=GM
*
OUTFILE DCB     DDNAME=OUTFILE,    
                DSORG=PS,                                              X
                RECFM=FT,                                              X
                LRECL=80,                                              X
                MACRF=PM
*
IRECORD DC    CL72' '
ORECORD DC    CL80' '
ENDPGM  DS D
 END COPY


08:39:00 PROG4     MZ390 START USING z390 V1.5.05 ON J2SE 1.6.0_26 10/09/11
08:39:00 PROG4     AZ390 AZ390E error 144      (1/15)141       MVC ORECORD,=CL133' '
08:39:00 PROG4     AZ390 AZ390I no base register found
08:39:00 PROG4     AZ390 AZ390E error  29      (1/39)258                       DSORG=PS,                                                RECFM=FT,                                                LRECL=80,                                               MACRF=PM
08:39:00 PROG4     AZ390 AZ390I ERRSUM missing macro = DSORG=PS,
08:39:00 PROG4     AZ390 AZ390E ERRSUM Critical Error Summary Option
08:39:00 PROG4     AZ390 AZ390E ERRSUM Fix and repeat until all nested errors resolved
08:39:00 PROG4     AZ390 AZ390E ERRSUM missing macro =DSORG=PS,
08:39:00 PROG4     AZ390 AZ390E ERRSUM total missing   copy   files =0
08:39:00 PROG4     AZ390 AZ390E ERRSUM total missing   macro  files =1
08:39:00 PROG4     AZ390 AZ390E ERRSUM total undefined symbols      =0
08:39:00 PROG4     AZ390 AZ390E ERRSUM total mz390 errors    = 0
08:39:00 PROG4     AZ390 AZ390E ERRSUM total az390 errors    = 2
08:39:01 PROG4     AZ390 AZ390I FID=  1 ERR=   2 c:\Program Files\Automated Software Tools\z390\CS4321\PROG4.MLC
08:39:01 PROG4     MZ390 ENDED   RC=12 SEC= 0 MEM(MB)= 47 IO=2374

Ответы [ 2 ]

3 голосов
/ 09 октября 2011

Я не эксперт в эмуляторе z390, но из того, что я знаю о стандартном ассемблере z / OS, я взгляну на ваши символы продолжения (символы X в кодированных вызовах макросов DCB).Обычно они должны быть в столбце 72, а оператор продолжения должен начинаться в столбце 16 каждой строки продолжения.

В последней строке продолжения вашего первого DCB я бы удалил символ продолжения 'X' на MACRF = GM, так как это конец вашего утверждения.

Также ваша метка ENDPGM должна бытьв столбце 1 иначе ассемблер думает, что это вызов оператора / макроса

Дайте ассемблеру z / OS шанс - через 20 или 30 лет вы полюбите его.

1 голос
/ 10 октября 2011

Хорошо для отсутствующего макроса DSORG = PS ... потому что у вас нет продолжения в первой строке вашего вызова макроса OUTFILE DCB.Вызов макроса выполняется от OUTFILE DCB до MACRF = PM несколькими строками позже, поэтому вам нужно продолжение на всех строках, кроме последней, чтобы сказать ассемблеру, что это всего лишь один оператор.Я знаю, что синтаксические вещи - боль в заднице, но если вы будете продолжать работать с ассемблером и, в частности, с макропроцессором, вы обнаружите, что он обладает очень гибкими и элегантными возможностями.

Что касается отсутствующего базового регистра ...может быть несколько вещей.Как я уже сказал, я не знаю эмулятора, но похоже, что он жалуется на отсутствие базового регистра для литерала ORECORD или = CL133 ''.Я предполагаю, что это последнее.Литералы обычно располагаются в коде в зависимости от расположения инструкции LTORG в вашем коде или в конце CSECT.Из списка, который у вас есть, я не могу сказать, есть ли сгенерированная инструкция LTORG или нет (может быть сгенерирована SUBENTRY или SUBEXIT, но это макросы / тетради, специфичные для вашей установки, поэтому у меня нет возможности узнать, что они делают, кромеугадывание).Странно смотреть на это, хотя у вас есть 2 оператора SUBENTRY и 2 SUBEXITS.От угадывания того, что обычно делают эти макросы, я бы ожидал 1 каждого.Так что попробуйте вынуть COPY2 SUBENTRY и один из SUBEXITS и посмотреть, будет ли он лучше.В противном случае, посмотрите, можете ли вы получить полный список сгенерированных операторов с какой-либо опцией в z390 (для начала измените PRINT NOGEN на PRINT GEN), и это может помочь.

Я только что закончил помогать своим детям сесть домашнее задание и вот это!Удачи.

...