Optimizer-Optionen

Wenn der Natural Optimizer aktiviert wurde, können Sie Prüfungen angeben, indem Sie die in diesem Abschnitt erklärten Optionen einstellen.

Die Optionen können nicht benutzt werden, um Statements anzugeben, die optimiert werden sollen.

Dieser Abschnitt behandelt folgende Themen:


Liste der Optionen

Die folgende Tabelle enthält eine Liste mit den Beschreibungen der Natural Optimizer Compiler-Optionen. Unterstrichene Werte sind Standardwerte (Default Values), d.h. dieser Wert wird angenommen, wenn die Option nicht vorhanden ist.

Eine Natural Optimizer Compiler-Option besteht aus einer Zeichenkette, die von Klammern oder einzelnen Ausrufungszeichen umschlossen ist (Ausnahme: im Natural-Statement OPTIONS), wobei die Optionen durch Kommas voneinander abgetrennt sind. Einige Optionen haben Werte, während die bloße Existenz einiger Optionen in der Optionszeichenfolge ausreicht, um die Umgebung zu ändern.

Es gelten folgende Regeln:

  • Optionale Klauseln sind von rechteckigen Klammern [ ] umgeben.

  • Wahlmöglichkeiten sind von geschweiften Klammern { } umgeben.

  • Wahlmöglichkeiten sind voneinander durch senkrechte Linien |abgetrennt.

  • Es kann nur eine dieser Wahlmöglichkeiten angegeben werden.

    ON ist gleichbedeutend mit Y (Yes),

    OFF ist gleichbedeutend mit N (No).

  • Optionen, die ohne die optionale Klausel ON oder OFF (falls zutreffend) oder deren Äquivalenzwerte angegeben werden, werden so interpretiert, als ob sie auf ON gesetzt sind. Beispiel: OVFLW ist identisch zu OVFLW=ON.

  • Mit Ausnahme der Option OFF gelten alle beim Optimieren angegebenen Optionsschalter (als ob ON angegeben wäre) und der Standardwert. Beispiel: INDEX ist identisch zu ON,INDEX.

Option Erklärung
ABEND Zwingt den Natural Optimizer Compiler, Code zu generieren, der bewirkt, dass Natural sofort abnormal beendet wird, wenn der Natural Optimizer Compiler während des Kompilierens die Option ABEND antrifft. Die Option muss selbständig erscheinen, sonst wird sie ignoriert. Andere Parameter werden durch diese Option nicht geändert oder zurückgesetzt. Diese Option kann für Debugging-Zwecke nützlich sein.
CACHE[={ON| OFF |Y|N}] Schaltet die Variablen-Zwischenspeicherung (Variable Caching) ein oder aus. Siehe auch Variablen-Zwischenspeicherung (Caching) im Abschnitt Performance-Überlegungen.
CPU= /370 Gibt die Ziel-Architektur an.
DIGTCHCK[={ON| OFF |Y|N}] Gibt an, ob die Ziffern von gepackten oder ungepackten Feldern (Formate P und N) geprüft werden sollen, wenn sie in eine andere Variable gleichen Typs und gleicher Genauigkeit verschoben werden. Wenn beispielsweise DIGTCHCK auf ON gesetzt ist und eine ungepackte Variable (Format N) eine ungültige Ziffer enthält, z.B. X'FA', dann generiert das Verschieben in eine andere ungepackte numerische Variable gleichen Typs den Fehler S0C7 (oder NAT0954). Wenn DIGTCHCK auf OFF gesetzt ist, wird kein Fehler generiert, aber der generierte Code ist viel schneller.
ERRDUMP[={ON| OFF |Y|N}] Gibt an, ob der Natural Optimizer Compiler abbrechen soll, wenn während der Kompilierungsphase ein Fehler festgestellt wird. Dies ist nützlich, um am Natural Optimizer Compiler selbst eine Fehlerbehebung (Debugging) durchzuführen.
INDEX[={ON| OFF |Y|N}] Gibt an, ob Array-Indizes auf Out-of-Bound-Werte im optimierten Code überprüft werden.

Siehe auch die folgende Anmerkung.

INDX[={ON| OFF |Y|N}] Gibt an, ob Array-Indizes auf Out-of-Bound-Werte im optimierten Code überprüft werden.

Zusätzlich wird RANGE auf ON gesetzt. Deshalb ist die Option gleichbedeutend mit INDEX=ON,RANGE=ON.

Siehe auch die folgende Anmerkung.

IO[={ON| OFF|Y|N}] Nur aus Kompatibilitätsgründen vorhanden. Keine Wirkung.
LOOPS[={ON| OFF |Y|N}] Nur aus Kompatibilitätsgründen vorhanden. Keine Wirkung.
MIX[={ON| OFF |Y|N}] Nur aus Kompatibilitätsgründen vorhanden. Keine Wirkung.
NODBG[={ON| OFF|Y|N}] Wenn NODBG=OFF/N (Standardeinstellung) gesetzt ist, kann der Natural Debugger benutzt werden, um Fehler im optimierten Code zu beheben (dann wird zusätzlicher Code generiert, um zu prüfen, ob der Test-Modus eingeschaltet worden ist (TEST ON).

Bei NODBG=ON/Y wird weniger Code generiert, das Programm läuft schneller und verbraucht weniger CPU-Zeit. Anderseits wird die Funktionalität des Natural Debugger eingeschränkt, weil der Natural Debugger möglicherweise keine Steuerungsmöglichkeit bei optimierten Statements erhält.

Siehe auch NODBG im Abschnitt Performance-Überlegungen.

NOSGNTR[={ON| OFF |Y|N}] Gilt nur bei gepackten Zahlen.

Bei NOSGNTR=OFF (Standardeinstellung) werden Vorzeichen von gepackten Zahlen, die das Ergebnis einer arithmetischen Operation oder das Ziel einer Zuweisung sind, gemäß dem Subparameter PSIGNF (Interne Darstellung des positiven Vorzeichens bei gepackten Zahlen) des Systemkommandos COMPOPT gesetzt.

Bei NOSGNTR=ON werden die aus der Ausführung der generierten Maschineninstruktion resultierenden Vorzeichen unverändert gelassen. Siehe auch Einfluss anderer Natural-Parameter.

ON Schaltet die Optimierung ein.

Wenn keine zusätzliche Option angegeben wird, gilt der für jede Option definierte Standardwert. Wie in der folgenden Anmerkung mitgeteilt, kann dies unerwünschte Ergebnisse zur Folge haben. Dies gilt insbesondere für die Optionen INDEX, INDX, OVFLW und RANGE.

OFF Schaltet die Optimierung aus.
OPTLEV={ 2|3} Gibt die Optimierungsstufe an - entspricht in etwa der Anzahl der Durchläufe durch das Programm.

OPTLEV=3 ist nützlich, wenn PGEN angegeben ist, da einige Verzweigungsziele beim ersten Durchlauf nicht ermittelt werden können und die PGEN-Ausgabe während des letzten Durchgangs erfolgt. Daher können einige Werte möglicherweise nicht korrekt angezeigt werden.

OVFLW[={ON| OFF |Y|N}] Gibt an, ob Überlaufprüfungen bei arithmetischen Operationen oder Zuweisungen in den optimierten Code aufgenommen werden.

Siehe auch die folgende Anmerkung.

PGEN[={ON| OFF |Y|N}] Gibt an, ob eine Disassemblierung des optimierten Code ausgegeben werden soll. Mit dieser Option werden auch alle anderen Nachverfolgungsoptionen aktiviert, siehe PGEN Option im folgenden Abschnitt.
RANGE[={ON| OFF |Y|N}] Gibt an, ob bei Operationen mit Arrays Bereichsprüfungen durchgeführt werden. Dadurch wird sichergestellt, dass Array-Bereiche eine gleiche Anzahl an Elementen in allen entsprechenden Dimensionen aller Operanden haben.

Siehe auch die folgende Anmerkung.

SIGNCHCK[={ ON|OFF|Y|N}] Gibt an, ob das Ergebnis einer Multiplikation mit einem gepackten oder nicht gepackten Multiplikator auf eine negative Null geprüft werden soll. Wenn Null mit einer negativen Zahl multipliziert wird, generiert die Maschineninstruktion MP ein negatives Null-Ergebnis. Wenn SIGNCHCK auf ON gesetzt ist, wird diese negative Null in eine positive Null umgewandelt. Die Prüfung auf eine negative Null erfolgt bei jeder Multiplikation mit einem gepackten oder nicht gepackten Multiplikator.
TRENTRY Nur für den internen Gebrauch durch Software AG bestimmt. Die Einstellung dieses Parameters nicht ändern.
UNICC Gibt an, ob optimierter Code für IF- und DECIDE-Statements mit Unicode-Operanden generiert wird, siehe UNICC Option im folgenden Abschnitt.
ZD[={ ON|OFF|Y|N}] Gibt an, ob Divisoren auf Null geprüft werden sollen.

Ist diese Option angegeben, dann wird Code eingefügt, damit sich das Programm gemäß dem Natural-Profilparameter ZD verhält, d.h., es wird der Natural-Fehler NAT1302 ausgegeben oder das Ergebnis ist Null.

Ist diese Option nicht angegeben, tritt der Natural-Fehler NAT0954 auf, wenn der Divisor Null ist.

Siehe auch ZD - Division durch Null in der Natural Parameter-Referenz-Dokumentation.

Anmerkung zu INDEX, INDX, OVFLW und RANGE

Wenn die Option INDEX, INDX, OVFLW oder RANGE gesetzt ist, werden zusätzliche Instruktionen zu dem generierten Code hinzugefügt, um Datenüberlauf- und Index-außerhalb-Bereich-Situationen zu entdecken, falls solche während der Programmausführung auftreten sollten. Zwar vergrößert die Benutzung dieser Optionen den generierten Code, sie wird aber empfohlen, um sicherzustellen, dass fehlerhafte Programme aufgespürt werden und nicht zu unvorhersehbaren Ergebnissen, Speicherbeschädigungen oder abnormalen Programmabbrüchen führen können.

Folgende Themen werden behandelt:

Beispiel für INDEX und OVFLW

DEFINE DATA LOCAL
...
1 P1 (P1/9)
...
1 P3 (P3/9)
...
1 I (I4)
1 J (I4)
1 K (I4)
1 L (I4) 
END-DEFINE
...
P1(I:J) := P3(K:L)
...
END

Erklärung des Beispiels:

Bei INDX=ON oder INDEX=ON wird Code generiert, um zu überprüfen, dass I, J, K und L innerhalb der für P1 bzw. P3 definierten Bereiche sind.

Bei INDX=ON oder RANGE=ON wird Code generiert, um zu überprüfen, dass I:J und K:L Bereiche gleicher Länge bezeichnen.

Bei OVFLW=ON wird Code generiert, um zu überprüfen, dass der Wert von P3 in die entsprechende P1-Variable passt.

Zum Beispiel: Der Wert 100 würde hier einen Überlauf verursachen.

Beispiel-Fehlersituation:

Wenn bei gesetztem OVFLW=OFF eine der Ausprägungen von P3 den Wert 100 enthält, ist der Wert, der der entsprechenden P1-Ausprägung zugewiesen wird, Null. Ist bei gesetztem INDX=OFF die Index-Variable I Null oder größer als 9, werden Speicherbereiche, die nicht zu Array P1 gehören, beschädigt. Sind diese Optionen (OVFLW und INDX) auf ON gesetzt, tritt ein Natural-Fehler auf, so wie es in der Standard-Natural-Laufzeit der Fall ist.

Für die oben angegebenen NOC-Optionen wird zusätzlicher Code generiert. Dies wird jedoch durch den Vorteil einer Prüfung gut kompensiert, die z. B. vor schwer zu entdeckenden und bereinigenden Fehlern schützt. Unentdeckte Fehler können natürlich zu unvorhersehbaren Ergebnissen führen.

Optimale Code-Generierung

Um sicherzustellen, dass die geringste Menge an Code generiert wird, und somit optimale Leistung zu erreichen, verwenden Sie:

OPT='NODBG,NOSGNTR,SIGNCHCK=OFF,ZD=OFF'

Wenden Sie diese Einstellung jedoch nur auf Objekte an, die gründlich mit dem Debugger fehlerbereinigt wurden, siehe auch Anmerkung zu INDEX, INDX, OVFLW und RANGE.

ARROPT-Option

Die Option ARROPT bestimmt den Generierungsalgorithmus, der für Array-Zuweisungen des Typs A(*):=scalar verwendet werden soll.

Gültige Werte für ARROPT:

Value Explanation
ON Empfohlene Einstellung für Arrays mit einem Minimum von 50 Ausprägungen.

ON ist die Standardeinstellung.

OFF Empfohlene Einstellung für Arrays mit weniger als 50 Ausprägungen.

PGEN-Option

Die PGEN-Option bewirkt, dass der Natural Optimizer Compiler den generierten Code und interne Natural-Strukturen ausgibt. Dies ermöglicht es, Code und Strukturen zu untersuchen, z.B. zur Fehlerbehebung, Performance-Überprüfung und für Support-Fragen.

Um die von der PGEN-Option gelieferten Ergebnisse interpretieren zu können, ist ein Verständnis der Arbeitsweise des /370-Assemblers von IBM erforderlich.

Wir empfehlen Ihnen, diese Option mit Unterstützung durch Ihren lokalen Software AG-Vertreter zu benutzen.

Folgende Themen werden behandelt:

PGEN setzen

Um die PGEN-Funktion zu benutzen, müssen Sie die PGEN-Option setzen, wenn Sie den Optimizer Compiler aktivieren.

Da der Pufferbereich im Speicher vorgehalten wird, kann es vorkommen, dass der Benutzer-Thread nicht groß genug ist, um die Trace-Informationen aufzunehmen. In diesem Fall sollten Sie versuchen, PGEN nur für den Teil des Programms zu setzen, dessen Ablauf verfolgt werden soll, zum Beispiel:

OPTIONS MCG=(PGEN=ON,TRGPT=ON)
oder
OPTIONS MCG=+PGEN,TRGPT
Schaltet die Ablaufverfolgung (Tracing) ein, einschließlich der Ablaufverfolgung der GPT-Einträge.
OPTIONS MCG=(PGEN=OFF)
oder
OPTIONS MCG=-PGEN
Schaltet die Ablaufverfolgung aus.

Es sind verschiedene Optionen verfügbar, die den Inhalt der Ausgabe beeinflussen. In ihrer Grundform bewirkt die PGEN-Option eine formatierte Auflistung von Natural-Quellcode-Zeilen und eine Disassemblierung des entsprechenden Codes, der generiert und im Speicher abgelegt werden soll, um von dort mittels der NOCSHOW-Utility extrahiert zu werden, siehe Beschreibung in Ausgabe der PGEN-Option.

Die Optionen TRSTMT, TRGPT, TRMPT und TRVDT bewirken, dass Hex-Dumps von internen Datenstrukturen, die mit jeder Zeile verbunden sind, ausgegeben werden.

Die Optionen TRBASES und TRCACHE bewirken, dass Informationen über Basisregister und Cache-Variablen ausgedruckt werden.

Sub-Optionen der PGEN-Option

In der folgenden Tabelle werden die Optionen beschrieben, die bei PGEN=ON verfügbar sind. Die Erklärung der verwendeten Syntax finden Sie in der Einleitung zum Abschnitt Liste der Optionen weiter oben.

Option Erklärung
LPP={5|..| 55 |..|255} Zeilen pro Seite für die Trace-Ausgabe. Nur bei TREXT=ON benutzt.
NOsrcE[={ON| OFF |Y|N}] Bei NOsrcE=OFF wird das Natural-Quellcode-Statement in die Ausgabe aufgenommen.
TRACELEV={ 0 |..|255} Gibt den Trace Level an. Jedes Bit in diesem Ein-Byte-Wert gibt einen Puffertyp für die Verfolgung an; diese Bits können mit den Optionen TRxxx ebenfalls eingeschaltet werden.
TRBASES[={ON| OFF |Y|N}] Gibt an, ob Basisregisterzuweisungen verfolgt werden.
TRCACHE[={ON| OFF|Y|N}] Gibt an, ob CACHE-Einträge verfolgt werden.
TREXT[={ON| OFF |Y|N}]

Bei TREXT=ON wird die Ablaufverfolgung an den User Exit NOCPRINT geleitet, Beschreibung siehe unten.

TRGPT[={ON| OFF |Y|N}] Gibt an, ob GPT-Einträge verfolgt werden.
TRMPT[=ON| OFF |Y|N}] Gibt an, ob MPT-Einträge verfolgt werden.
TRSTMT[={ON| OFF |Y|N}] Gibt an, ob STMT-Einträge verfolgt werden.
TRVDT[={ON| OFF |Y|N}] Gibt an, ob VDT-Einträge verfolgt werden.

Siehe auch die folgenden Beispiele.

Ausgabe der PGEN-Option

Es gibt zwei Stellen, an die der Natural Optimizer Compiler die Ausgabe von PGEN leiten kann.

Interner Pufferspeicher

Der Inhalt dieses Pufferspeichers wird jedes Mal überschrieben, wenn eines der Kommandos CHECK, CAT, STOW oder RUN ausgeführt wird.

Es wird ein Systemdienstprogramm (Utility) NOCSHOW bereitgestellt, mit dem der Inhalt dieses Puffers angesehen, durchsucht oder gedruckt werden kann.

Beginn der AnweisungslisteUm die Utility NOCSHOW aufzurufen:

  • Geben Sie das Direktkommando NOCSHOW ein, nachdem eines der Kommandos CHECK, STOW, CAT oder RUN ausgeführt worden ist, während der Natural Optimizer Compiler aktiv gewesen ist.

Im Bildschirm sind folgenden PF-Tasten belegt:

PF-Taste Funktion
PF2 Position am oberen Rand der Ausgabe.
PF4 Position eine Zeile zurück
PF5 Position eine Zeile vor
PF6 In Report (1) drucken
PF7 Position eine Seite zurück
PF8 Position eine Seite vorwärts
PF9 Via Entire Connection in Report (7) drucken
PF10 Nach Zeichenkette durchsuchen
PF11 Suche wiederholen

User Exit NOCPRINT

Wenn TREXT=ON angegeben ist, übergibt der Natural Optimizer Compiler jede Ausgabezeile an den User Exit NOCPRINT, anstatt sie im Trace-Pufferspeicher hinzuzufügen.

Der Aufruf von NOCPRINT erfolgt gemäß normalen Betriebssystem-Registerkonventionen. Register 1 zeigt auf ein Vollwort, das die Adresse der 81-Byte-Druckzeile mit ANSI-Vorschubsteuerzeichen in Position 1 enthält. Register 13 zeigt auf einen Bereich von 18*4 Bytes, der als Speicherregister benutzt werden kann. Register 14 enthält die Rückgabeadresse und Register 15 enthält die Eingabeadresse von NOCPRINT.

Der User Exit NOCPRINT kann in einer beliebigen Sprache geschrieben sein, die die oben genannten Registerkonventionen unterstützt. Der User Exit muss zusammen mit dem Natural Optimizer Compiler-Nukleus mit dem Natural-Nukleus verlinkt sein.

Arbeiten mit der PGEN-Ausgabe

Dieser Abschnitt enthält Hinweise und Erläuterungen, wie die mit der PGEN-Option erstellte Ausgabe zu interpretieren ist.

  • Oben in der PGEN-Ausgabe stehen einige disassemblierte Zeilen, die scheinbar nicht zu einer Quellcode-Zeile gehören. Es handelt sich um die Instruktionen, aus denen der Prolog besteht, der immer dann ausgeführt wird, wenn die Steuerung vom nicht-optimierten zum optimierten Code übergeben wird. Permanente Basisregister werden geladen und die Steuerung wird an den korrekten Punkt im Prolog übergeben. Siehe Beispiel Abschnitt A weiter unten.

  • Manchmal werden viele Zeilen ohne Code gedruckt. Dies bedeutet, dass dort kein Code erforderlich war oder das diese Statements von der NOC-Optimierung ausgeschlossen sind. Siehe Beispiel Abschnitt B weiter unten.

    Besteht daraüber hinaus der für ein Natural-Statement generierte Code nur aus Folgendem:

    BAS   R14,RETH                           
    DC    X'....'

    so bedeutes dies eine Rückkehr zur Standardlaufzeit, weil dieses Statement nicht von NOC optimiert werden konnte (siehe Zeile 0170).

  • Wenn NODBG=OFF (Standardeinstellung) angegeben worden ist, wird zu Beginn eines jeden neuen Natural-Statement eine Instruktionsfolge generiert.

    BALR R9,R11
    DC X'....'

    Diese Instruktionsfolge setzt (im Fehlerfall) die Zeilennummer und prüft, ob der Test-Modus eingeschaltet ist (TEST auf ON). Ohne diese Instruktionsfolge ist ein Debugging von NOC-kompilierten Statements durch den Natural Debugger nicht möglich. Siehe Beispiel Abschnitt C weiter unten.

  • Manchmal ist zwischen disassemblierten Zeilen ein Zeilenumbruch vorhanden. Der Umbruch zeigt eine interne Statement-Trennung an. Dies kommt vor, weil ein einzelnes Natural-Statement oft mehrere interne (Pseudo-Code-)Statements generiert.

  • Die bedienten Natural-Variablen werden in den Assembler-Code eingefügt.

  • Die Angaben auf der rechten Seite (z.B. START 8FEC) sind interner Art. Sie dokumentieren den Pfad, wie der Code von den NOC-Modulen generiert wurde.

  • Alle Adressarten innerhalb des Codes werden aufgelöst und in der Form =(00044) zur Verfügung gestellt. Dies dokumentiert den Versatz im Code, an dem die Verzweigung ausgeführt wird.

  • Die erste und die letzte Code-Instruktion enthält die zum Kompilieren dieses Programms benutzte NOC-Version: 4700 8410 bedeutet NOC-Version V841.

Beispiel Abschnitt A:

 000000 4700 8410           NOP   1040(,R8)                         START  8FEC
 000004 5880 D354           L     R8,CONST                                 D9DC
 000008 5870 D370           L     R7,LOCAL                                 D9DC
 00000C 4810 6006           LH    R1,6(,R6)                                90A0
 000010 1F60                SLR   R6,R0                                    90BA
 000012 47F1 A000           B     0(R1,R10)                                90C0
                                                                             
 000016 4DE0 B040           BAS   R14,RETH                           RETN  F0AA
 00001A 0034                DC    X'0034'                                  F0C0

Beispiel Abschnitt B:

 0010 0010 OPTIONS MCG=(PGEN,OVFLW,INDX) 
  0020 DEFINE DATA LOCAL 
  0030 1 I(I4)
  0040 1 P(P7.2)
  0050 1 T(P7.2)
  0060 END-DEFINE
  0070 *
  0080 SETTIME
  0090 *      

Beispiel Abschnitt C:

 0100 FOR I=1 TO 100000                                                                                                                                  

 00001C 0D9B                BASR  R9,R11                             MOVE 1724A
 00001E 004A                DC    X'004A'                                 17278
 000020 D203 7000 8148      MVC   I(4),#KST0148                            97D2
                                                                              
 000026 47F0 A044           B     68(,R10)         =(00044)          GOTO  EF44
                                                                              
 00002A 0D9B                BASR  R9,R11                              ADD 1724A
 00002C 006A                DC    X'006A'                                 17278
 00002E BF0F 7000           ICM   R0,B'1111',I                             BB20
 000032 5A00 8148           A     R0,#KST0148                              1E4E
 000036 0D90                BASR  R9,0                                     F12A
 000038 4710 B15C           BO    NAT1301                                  1E9E
 00003C BE0F 7000           STCM  R0,B'1111',I                             A9CC
                                                                              
 000040 0D9B                BASR  R9,R11                               IF 1724A
 000042 007C                DC    X'007C'                                 17278
 000044 BF0F 7000           ICM   R0,B'1111',I                             BB20
 000048 5900 819B           C     R0,#KST019B                              3FDA
 00004C 47D0 A054           BNH   84(,R10)         =(00054)                EF44
                                                                              
 000050 47F0 A078           B     120(,R10)        =(00078)          GOTO  EF44                                                                              

 0110   ADD 1.00 TO P                                                         
                                                                              
 000054 0D9B                BASR  R9,R11                              ADD 1724A
 000056 0092                DC    X'0092'                                 17278
 000058 FA41 7004 819F      AP    P(5),#KST019F(2)                         20A0
 00005E 0D90                BASR  R9,0                                     F12A
 000060 4710 B15C           BO    NAT1301                                 1071C
 000064 910D 7008           TM    P+4,X'0D'                               120B0
 000068 4710 A070           BO    112(,R10)        =(00070)               120F6
 00006C 960F 7008           OI    P+4,X'0F'                               1210ª
                                                                              
 0120 END-FOR                                                                 
 0130 *                                                                       
                                                                              
 000070 0D9B                BASR  R9,R11                             GOTO 1724A
 000072 00A4                DC    X'00A4'                                 17278
 000074 47F0 A02A           B     42(,R10)         =(0002A)                EF44                                                                              

 0140 T:=*TIMD(0080)                                                          
                                                                              
 000078 0D9B                BASR  R9,R11                             SYFU 1724A
 00007A 00AE                DC    X'00AE'                                 17278
 00007C 4DE0 B0D8           BAS   R14,SYSFUNC                              5F1A
 000080 0190 B881           DC    X'0190B881'                              5F28
                                                                              
 000084 F246 7009 8190      PACK  T(5),#KST0190(7)                   MOVE  AD18
 00008A 910F 700D           TM    T+4,X'0F'                               12130
 00008E 4710 A0A0           BO    160(,R10)        =(000A0)               12176
 000092 17EE                XR    R14,R14                                 1218E
 000094 43E0 700D           IC    R14,T+4                                 12194
 000098 43EE B488           IC    R14,PSGNTR(R14)                         121AA
 00009C 42E0 700D           STC   R14,T+4                                 121B2
 0000A0 F040 7009 0002      SRP   T(5),2,0                                 ACA2
 0000A6 17EE                XR    R14,R14                                 1218E
 0000A8 43E0 700D           IC    R14,T+4                                 12194
 0000AC 43EE B488           IC    R14,PSGNTR(R14)                         121AA
 0000B0 42E0 700D           STC   R14,T+4                                 121B2                                                                              

 0150 T:=T / 10                                                               
 0160 *                                                                       
                                                                              
 0000B4 0D9B                BASR  R9,R11                              DIV 1724A
 0000B6 00C0                DC    X'00C0'                                 17278
 0000B8 F864 D100 7009      ZAP   OP1(7),T(5)                              AC60
 0000BE FD61 D100 81A1      DP    OP1(7),#KST01A1(2)                       327A
 0000C4 F844 7009 D100      ZAP   T(5),OP1(5)                              AC60
 0000CA 910D 700D           TM    T+4,X'0D'                               120B0
 0000CE 4710 A0D6           BO    214(,R10)        =(000D6)               120F6
 0000D2 960F 700D           OI    T+4,X'0F'                               1210A                                                                              

 0170 DISPLAY 'ELAPSED TIME (S)' T                                            
                                                                              
 0000D6 4DE0 B040           BAS   R14,RETH                           RETN  F0AA
 0000DA 00D2                DC    X'00D2'                                  F0C0

 0180 END                                                                     
                                                                              
 0000DC 40D6 D7E3 F844 2000 DC    X'40D6D7E3F8442000'  =' OPT8à..'    END  927E
 0000E4 0000 0000           DC    X'00000000'                                nf
 0000E8 40D5 D6C3 F8F4 F140 DC    X'40D5D6C3F8F4F140'  =' NOC841 '         92E4

Einfluss anderer Natural-Parameter

Der globale Parameter ZD beeinflusst das Verhalten des NOC-Compiler. Siehe Beschreibung der ZD-Option unter Liste der Optionen weiter oben.

Der COMPOPT-Subparameter PSIGNF (siehe auch Systemkommando COMPOPT in der Natural-Systemkommando-Dokumentation) beeinflusst das Verhalten, indem er erzwingt, dass positive gepackte Dezimalzahlen bei ON auf F und bei OFF auf C gesetzt werden. Der Parameter wird angewendet, wenn NOSGNTR=OFF angegeben ist.

Siehe die Tabelle unten für gepackte Daten (Format P):

NOSGNTR=OFF und  PSIGNF=ON Alle Vorzeichen werden auf F normalisiert (Standard).
NOSGNTR=OFF und  PSIGNF=OFF Alle Vorzeichen werden auf C normalisiert.
NOSGNTR=ON   Alle Vorzeichen werden so belassen, wie sie bei der letzten Operation erzeugt wurden.

Für numerische Daten (Format N) werden die Vorzeichen immer auf F normalisiert, unabhängig von den Einstellungen von NOSGNTR und PSIGNF.