大型機彙編(mainframe assembler/HLASM)之CICS調用

一般情況下,寫一個嵌有CICS調用的HLASM程序,我們只要這樣寫就可以了:
ABC      CSECT
         ...
         EXEC CICS ...
         ...
         END

這樣彙編器/編譯器在編譯的時候就會自動地把諸如DFHEIGBL DFHEISTG DFHEIENT DFHEIRET DFHEIEND這些系統定義的宏給加載上去。

DFHEIGBL--定義全局變量

DFHEISTG--定義動態內存空間,第一個DFHEIEND的爲止就是動態內存空間的開始標誌

DFHEIENT--初始化一些事先準備工作,比如它默認程序基址寄存器(CODEREG)爲R3,動態內存空間基址寄存器(DATAREG)爲R13,EIB地址寄存器(EIBREG)爲R11.等等

DFHEIRET--主要做收尾工作,比如設置返回碼寄存器(CODEREG)釋放內存空間等等

DFHEIEND--動態內存空間的結束標誌。

     聲明:以上都是最基本的general描述,想要詳細瞭解,請參考IBM紅皮書或官方網站.


但是有時候,如果我們的程序足夠大,一個程序基址寄存器無法覆蓋(最大覆蓋範圍爲X'FFF'),這時我們就可以更改DFHEIENT的默認值:

ABC       DFHEIENT CODEREG=(R3,R4),DATAREG=(R13,R5),EIBREG=R11

另外DFHEISTG除了開闢系統定義的動態內存空間(DFHEICAP--commarea的首地址就位於此處),程序員自己還可以添加自己的變量在裏面:
DFHEISTG DSECT
VARI1    DS   P    
...
... 
  

所以,一般情況下,我們看到的一個嵌有CICS的HLASM程序,大致如下:

DFHEISTG DSECT
VARI1    DS   P   
...
...   
ABC      DFHEIENT CODEREG=(R3,R4),DATAREG=(R13,R5),EIBREG=R11
START    DS    0H  

         ...
         ...
         END
  

注:大型機彙編中的DFHEISTG 很類似於COBOL中的WORKING STORAGE SECTION. 所以定義此處的變量,都不需要用GETMAIN來爲其開闢空間。並且其中的變量是局部變量而非全局,只在本程序中有效,這個要和TWA(transaction work area)區分開來,後者在整個transaction內都有效。
   還有一點需要注意的是程序的末尾一定要有END,編譯器就是依次來設置收尾工作的。

   關於動態內存空間的詳細描述,請參考紅皮書或官網。多謝!


有疑問請聯繫QQ349106216

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章