COBLOAD.ASM 是一個連接 COBOL 程式與 DOS 程式載入器 (LOAD) 的組合語言介面模組。它讓 COBOL 程式能透過系統參數區 (SYSPARM) 傳遞檔案規格與命令列參數,動態載入並執行其他程式。這在早期商業應用開發中極為實用。
CL_CODE_SEG SEGMENT PUBLIC 'CODE'
ASSUME CS:CL_CODE_SEG,DS:CL_CODE_SEG,ES:CL_CODE_SEG
STACK_PARM STRUC
PUSHED_SI DW ?
PUSHED_DI DW ?
PUSHED_DS DW ?
PUSHED_ES DW ?
PUSHED_BP DW ?
RETURN_IP DW ?
RETURN_CS DW ?
PARM1_OFFSET DW ?
PARM1_DS DW ?
STACK_PARM ENDS
PUBLIC COBLOAD
COBLOAD PROC FAR
採用 FAR 程序,參數透過堆疊傳遞 (STACK_PARM),第一個參數為指向 COBOL 參數區塊的遠指標 (DS:SI)。
PARM1_DS:PARM1_OFFSET,載入 DS、SI。MOV DX,'dk' ; 驗證開關
INT 77H ; 取得 SYSPARM 區段基址於 AX
MOV ES,AX ; ES 指向 SYSPARM
MOV DI,0 ; DI 指向 LOAD 參數區起始
使用 INT 77h 這個非標準中斷取得系統內部資料結構位址。
使用 REP MOVSB 高效搬移,CLD 確保遞增方向。
RET 4 清除堆疊上 4 位元組參數 (遠指標)。ASSUME CS:CL_CODE_SEG,DS:CL_CODE_SEG,ES:CL_CODE_SEG 簡化定址,但執行期需正確設定段暫存器。INT 77h 為廠商擴展中斷,展示早期軟體對系統內部結構的直接存取。早期 COBOL 編譯器 (如 Microsoft COBOL、Ryan-McFarland COBOL) 常缺乏動態載入功能。COBLOAD 彌補此缺口,讓 COBOL 主程式能載入子程式、覆蓋模組或執行外部命令,構建模組化大型商業系統。這類「語言間橋接器」在多語言混合開發時代扮演關鍵角色。
COBLOAD.ASM 以精簡 100 行程式碼實現 COBOL 與 DOS 核心載入器的無縫串接。其參數轉換邏輯、中斷介面使用、堆疊幀操作,均為經典系統程式設計範例。雖然 COBOL 與 DOS 已淡出主流,但跨語言呼叫慣例、參數封送處理、系統內部介面探勘等核心概念,在現代插件架構、FFI (Foreign Function Interface) 設計中依然閃耀著智慧的光芒。