首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 組合語言

組合語言與 C 語言混合程式設計介面技術詳解

     編輯:組合語言

混合編程核心課題

  1. 符號連結:被呼叫端用 PUBLIC 公開,呼叫端用 EXTERN 宣告
  2. 參數傳遞:組語間常用暫存器;高級語言統一用堆疊。關鍵差異:Pascal/BASIC/Fortran 參數由左至右入堆疊;C 語言由右至左 (最後參數最靠近堆疊頂)

C 語言呼叫組語副程式 (Small Model 範例)

; C 端
extern void REVSTR(char far *str);
char MESSAGE[] = "MESSAGE";
REVSTR(MESSAGE);

; ASM 端 (REVSTR.asm)
PUBLIC _REVSTR
_REVSTR PROC
    PUSH BP
    MOV  BP, SP
    PUSH DS
    PUSH SI
    PUSH DI
    ; ... 處理字串反轉 ...
    POP  DI
    POP  SI
    POP  DS
    POP  BP
    RET
_REVSTR ENDP
  • 小模型:近呼叫,返回位址 2 位元組,BP+4 為第一參數
  • 大模型:遠呼叫,返回位址 4 位元組,BP+6 為第一參數
  • 暫存器保存:Turbo C 允許副程式自由使用 SI/DI 存放區域變數,其餘需自行保存
  • 返回值:AX (char/short/int/enum) 或 DX:AX (long/pointer),置於 RET 前

C 語言內嵌組語

asm mov ax, dx        ; 單行,無分號
asm {                 ; 多行
    push ax
    mov  ax, bx
}

允許四類指令:一般、字串、跳轉、資料定義。優點:無呼叫開銷、直接存取 C 變數;缺點:非完整組語模組,部分錯誤延至連結/執行期才發現。

總結

混合編程結合高級語言開發效率與組語執行效能,善用現有函式庫縮短開發週期,是系統程式設計的重要技術。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved