text: IEFBR14是IBM大型計算機的應用程式。運行於的所有後繼作業系統中，包括z/OS等。該程式是一個僅會返回返回碼0的佔位程式，類似於類Unix系統中的true命令。作用.分配檔案空間.在OS/360及其派生的大型機作業系統中，大多數程式並不會直接指定檔案引數，以表明該檔案應該被怎樣管理——是要建立一個新檔案或重用一箇舊的檔案；以及檔案在使用完畢後是應該刪除還是保留等等。儘管DD語句可以很方便地用來建立或者刪除檔案，但此操作的前提是必須要執行一個程式。因為作業管理系統的特性，它要求作業的發起人必須執行一個程式，哪怕這個程式只是執行一條空指令。這個條件促生了IEFBR14的產生。在JCL中所執行的程式並不一定要透過使用這個檔案，來達到建立或刪除檔案的目的，因為DD DISP=...宣告完成了這一系列工作。因此，就需要一個簡單的，什麼都不做的程式，來填補被執行程式的這個角色。因此IEFBR14可以用於透過JCL來建立或刪除一個數據集。回收.另一個需要IEFBR14的原因是，由於作業的JCL出現錯誤，或者作業以錯誤的狀態結束，導致某些裝置在上一個作業結束後，仍然保留了被掛載的狀態。在這種情況下，系統操作員經常需要解除安裝這些裝置。有一個名為DEALLOC的started task往往是為此目的而提供的。只需要在系統控制檯中輸入命令：S DEALLOC就可以執行這個任務。然而，由於作業管理的設計，DEALLOC必須實際存在於系統的程式庫SYS1.PROCLIB中，以免啟動命令失敗。同時，所有這類started task必須是單個作業步。作業管理系統的“started task 控制器”模組僅接受只有一個作業步的作業，而當它遇到一個多步的作業時，它就會執行失敗，並且不會丟擲任何異常。// STEP01 EXEC PGM=IEFBR14解析和驗證.至少在z/OS上，分支執行另一個程式會導致呼叫程式被評估為語法錯誤。命名.“IEF”的名稱如下命名規則，即由IBM提供的程式，都會按照其功能或者創作者而分類，每組程式共享一個三個字元組成的字首。在OS/360中，第一個字母是幾乎總是“I”。同時，由作業管理模組所產生的程式，都使用“IEF”這個字首。其他常見的字首包括資料集實用程式的“IEB”，系統實用程式的“IEH”，和程式連結和載入的“IEW”。其他主要元件則使用“IEA”作為作業系統主管程式的字首，以及“IEC”作為輸入/輸出主管程式的字首。如下解釋，“BR 14”是程式的基本功能，就是簡單地返回到作業系統。這部分程式的名字往往是能輔助記憶的——例如，IEBUPDTE資料集實用程式的程式名中，IEB的含義為資料集實用程式，用來更新(UPDTE)原始碼檔案，以及IEHINITT系統實用程式的名稱中，IEH代表這是一個系統工具，用來初始化(INIT)磁帶的標籤(T)。就如下面“使用”部分所解釋的，名字中的“BR14”來自於IBM組合語言的分支指令，含義為“分支到暫存器14”，按照慣例，該操作的含義為“從子程式中返回”。很多OS/360的早期使用者都很熟悉IBM組合語言，所以他們可以馬上意識到這個含義。使用.示例JCL：//IEFBR14 JOB ACCT,'DELETE DATASET',MSGCLASS=J,CLASS=A//STEP0001 EXEC PGM=IEFBR14//DELDD DD DSN=xxxxx.yyyyy.zzzzz,// DISP=(MOD,DELETE,DELETE),UNIT=DASD建立一個分割槽資料集：//TZZZ84R JOB NOTIFY=&amp;SYSUID,MSGCLASS=X//STEP01 EXEC PGM=IEFBR14//DD1 DD DSN=TKOL084.DEMO,DISP=(NEW,CATLG,DELETE),// DCB=(RECFM=FB,LRECL=80,BLKSIZE=80,DSORG=PO),// SPACE=(TRK,(1,1,1),RLSE),// UNIT=SYSDA實現.IEFBR14最初只是由一個“分支到暫存器14”指令組成。該指令在IBM組合語言中使用的助記符是BR,因此得名：IEF BR 14。BR 14相當於BCR 15, 14。BR是指令BCR 15的偽指令。系統彙編程式接受很多這樣子的偽指令，其邏輯上等同於原來的System/360指令。BR 14的典型例項是BCR 15, 14。OS/360及其後續系統的連線規範規定，當程式被呼叫的時候，暫存器14儲存程式結束後控制權應交回到的地址，暫存器15儲存被呼叫程式在記憶體中的地址；在結束時，程式從暫存器15中讀取返回值，然後分支到暫存器14所指向的地址。但是在編寫初期，IEFBR14的這些特性並未被留意，因為其最初只是用作一個無用的控制段，以返回到呼叫者，而不是作為一個可執行的模組。最初版本的IEFBR14並沒有修改暫存器15的值，因為其原型程式只是在Sysgen時期生成的一個程式中的一個佔位符，並不是一個可執行的程式。IEFBR14曾經只會被一個等同於BALR 14,15的功能呼叫，所以在暫存器15中的返回值總不為0。隨後加入了一個用來清除返回碼的指令，這樣就可以使其返回一個指定好的返回碼——0。早期的程式設計師並沒有使用所有的JCL引數，所以在當時，返回一個不確定的返回碼並非什麼問題。然而，隨著程式設計師們使用的引數越來越多，返回一個確定的返回碼這一問題就變得重要了起來。這一改版的IEFBR14也並沒有影響到其最初充當佔位符的作用。修改過的程式的機器碼如下：SR R15,R15 put zero completion code into register 15BR R14 branch to the address in register 14 (which is actually an SVC 3 instruction in the Communications Vector Table)簡明起見，將BR指令排除，機器碼如下：SR R15,R15 put zero completion code into register 15SVC 3 issue EXIT SVC to terminate the jobstep這麼做很有道理，因為OS/360的Initiator在執行初期會使用ATTACH宏指令。
metadata: erhwenkuo/wikipedia-zhtw
metadata: IEFBR14
metadata: https://zh.wikipedia.org/wiki?curid=6258591