• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > Visual C++中調用匯編語言的研究與實現

    Visual C++中調用匯編語言的研究與實現

    作者: 時間:2011-08-18 來源:網絡 收藏

    1 引言

    本文引用地址:http://www.czjhyjcfj.com/article/150333.htm

       C++ 是當今最流行的軟件開發(fā)工具之一,它可以可視化編程和支持面向對象的編程技術。人們在開發(fā)的過程中將兩種語言進行混合編程,這種方法使兩種語言相互,進行參數傳遞,共享數據結構和數據信息,充分發(fā)揮了各種語言的特點和優(yōu)勢,大大提高了應用軟件的效率。因此,正確掌握 C++與的接口技術對軟件開發(fā)是十分必要的。

      2 C++的常用方法

      通常有兩種方法可以Visual C++。一種方法是在從C++語言中直接使用匯編語句,即嵌入式匯編;另一種方法是用兩種語言分別編寫獨立的程序模塊,匯編語言編寫的源代碼匯編產生目標代碼OBJ文件,將C++源程序和OBJ文件組建工程文件,然后進行編譯和連接,生成可執(zhí)行文件.EXE。

      2.1 VC++中嵌入匯編語句的方法

      嵌入式匯編又稱行內匯編,Visual C++提供了嵌入式匯編功能,允許在C++源程序中直接插入匯編語言指令的語句,可以直接訪問C++語言程序中定義的常量、變量和函數,而不用考慮二者之間的接口,從而避免了匯編語言和C++語言之間復雜的接口問題,提高了程序設計效率。

      嵌入匯編語言指令采用__asm關鍵字,嵌入匯編格式:__asm{ 指令 },采用花括號的匯編語言程序段形式。具體應用通常采用兩種方式,第一種方式:__asm { 匯編程序段 }, 如下所示:__asm

      {

      mov eax,5h

      mov ecx,7h

      add eax,ecx

      }

      另一種方式:每一條匯編語句前添加“__asm”標記,格式:__asm 匯編語句,如下所示:

      __asm mov eax,5h

      __asm mov ecx,7h

      __asm add eax,ecx

      在Turbo C環(huán)境中C語言程序含有嵌入式匯編語言語句時,C編譯器首先將C代碼的源程序(.c)編譯成匯編語言源程序(.asm)。然后激活匯編程序Turbo Assembler將產生的匯編語言源文件編譯成目標文件(.obj),最后激活Tlink將目標文件鏈接成可執(zhí)行文件(.exe)。Visual C++ 中嵌入匯編語句的編譯沒有Turbo C那樣復雜,它直接支持嵌入匯編方式,不需要獨立的匯編系統(tǒng)和另外的連接步驟。因此Visual C++中嵌入匯編比Turbo C中嵌入匯編進行編譯連接更為簡單方便。

      2.2 采用模塊調用的方法

      采用模塊調用方式,要協(xié)調命名、調用、參數傳遞和返回等進行約定。

      (1) 采用一致的調用協(xié)議

      Visual C++語言具有三種調用協(xié)議:_cdecl、_stdcall和_fastcall。MASM匯編語言利用“語言類型”確定調用協(xié)議和命名約定,支持的語言類型有:C、SYSCALL、STDCALL、PASCAL、BASIC和FORTRAN。

      Visual C++與匯編語言混合編程通常利用堆棧進行參數傳遞,調用協(xié)議決定利用堆棧的方法和命名約定,兩者要一致,通常Visual C++采用_cdecl調用協(xié)議,MASN匯編語言采用C語言調用協(xié)議。

      (2) 入口參數和返回參數的約定

      不論何種整數類型進行參數傳遞時都擴展成32位,Visual C++中沒有遠、近調用之分,所有調用都是32位的偏移地址,所有的地址參數也都是32位偏移地址,在堆棧中占4個字節(jié)。圖1給出了采用C++語言調用協(xié)議的堆棧示意圖。參數返回時,對于小于等于32位的數據擴展為32位,存放在EAX寄存器中返回;4-8個字節(jié)的返回值存放在EDX、.EAX寄存器中返回;更大字節(jié)數據則將它們的地址指針存放在EAX中返回。

      

    c++相關文章:c++教程



    上一頁 1 2 下一頁

    評論


    相關推薦

    技術專區(qū)

    關閉
    主站蜘蛛池模板: 竹北市| 五大连池市| 昌宁县| 赫章县| 疏附县| 清徐县| 望城县| 南丰县| 象山县| 隆子县| 宜良县| 枣阳市| 弋阳县| 融水| 民丰县| 博爱县| 白银市| 扬州市| 健康| 黄大仙区| 紫阳县| 武义县| 滦平县| 辽阳县| 宁海县| 瑞安市| 新民市| 阿拉善右旗| 长宁区| 永福县| 汾西县| 甘泉县| 东阿县| 香港| 会理县| 古交市| 巴南区| 繁峙县| 蓝田县| 东乌| 盐池县|