一般情況下,寫一個嵌有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