<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Visual C++中調(diào)用匯編語(yǔ)言的研究與實(shí)現(xiàn)

          Visual C++中調(diào)用匯編語(yǔ)言的研究與實(shí)現(xiàn)

          作者: 時(shí)間:2011-08-18 來(lái)源:網(wǎng)絡(luò) 收藏

          1 引言

          本文引用地址:http://www.ex-cimer.com/article/150333.htm

             C++ 是當(dāng)今最流行的軟件開(kāi)發(fā)工具之一,它可以可視化編程和支持面向?qū)ο蟮木幊碳夹g(shù)。人們?cè)陂_(kāi)發(fā)的過(guò)程中將兩種語(yǔ)言進(jìn)行混合編程,這種方法使兩種語(yǔ)言相互,進(jìn)行參數(shù)傳遞,共享數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)信息,充分發(fā)揮了各種語(yǔ)言的特點(diǎn)和優(yōu)勢(shì),大大提高了應(yīng)用軟件的效率。因此,正確掌握 C++與的接口技術(shù)對(duì)軟件開(kāi)發(fā)是十分必要的。

            2 C++的常用方法

            通常有兩種方法可以Visual C++。一種方法是在從C++語(yǔ)言中直接使用匯編語(yǔ)句,即嵌入式匯編;另一種方法是用兩種語(yǔ)言分別編寫(xiě)?yīng)毩⒌某绦蚰K,匯編語(yǔ)言編寫(xiě)的源代碼匯編產(chǎn)生目標(biāo)代碼OBJ文件,將C++源程序和OBJ文件組建工程文件,然后進(jìn)行編譯和連接,生成可執(zhí)行文件.EXE。

            2.1 VC++中嵌入?yún)R編語(yǔ)句的方法

            嵌入式匯編又稱(chēng)行內(nèi)匯編,Visual C++提供了嵌入式匯編功能,允許在C++源程序中直接插入?yún)R編語(yǔ)言指令的語(yǔ)句,可以直接訪問(wèn)C++語(yǔ)言程序中定義的常量、變量和函數(shù),而不用考慮二者之間的接口,從而避免了匯編語(yǔ)言和C++語(yǔ)言之間復(fù)雜的接口問(wèn)題,提高了程序設(shè)計(jì)效率。

            嵌入?yún)R編語(yǔ)言指令采用__asm關(guān)鍵字,嵌入?yún)R編格式:__asm{ 指令 },采用花括號(hào)的匯編語(yǔ)言程序段形式。具體應(yīng)用通常采用兩種方式,第一種方式:__asm { 匯編程序段 }, 如下所示:__asm

            {

            mov eax,5h

            mov ecx,7h

            add eax,ecx

            }

            另一種方式:每一條匯編語(yǔ)句前添加“__asm”標(biāo)記,格式:__asm 匯編語(yǔ)句,如下所示:

            __asm mov eax,5h

            __asm mov ecx,7h

            __asm add eax,ecx

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

            2.2 采用模塊調(diào)用的方法

            采用模塊調(diào)用方式,要協(xié)調(diào)命名、調(diào)用、參數(shù)傳遞和返回等進(jìn)行約定。

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

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

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

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

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

            

          c++相關(guān)文章:c++教程



          上一頁(yè) 1 2 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();