www.467cc.cn-无人在线观看高清电影电视剧,无码少妇一区二区三区免费,午夜福利视频,欧美爆乳乱妇高清免费888

<sup id="a8eos"><samp id="a8eos"></samp></sup>
  • <strike id="a8eos"></strike>
  • <strike id="a8eos"><menu id="a8eos"></menu></strike>
  • <fieldset id="a8eos"><input id="a8eos"></input></fieldset>
  • <fieldset id="a8eos"><input id="a8eos"></input></fieldset>
    產(chǎn)品展廳收藏該商鋪

    您好 登錄 注冊(cè)

    當(dāng)前位置:
    東莞市宇匠數(shù)控設(shè)備有限公司>技術(shù)文章>淺淡匯編語(yǔ)言在Visual C++ 中常用編程方法及設(shè)計(jì)優(yōu)化

    技術(shù)文章

    淺淡匯編語(yǔ)言在Visual C++ 中常用編程方法及設(shè)計(jì)優(yōu)化

    閱讀:146          發(fā)布時(shí)間:2020-8-10

    0 引言

    在平常編寫(xiě)程序時(shí), 一般都希望選擇VC++ Visual Basic 等這樣的可視化高級(jí)語(yǔ)言來(lái)編寫(xiě), 這些語(yǔ)言工具可以實(shí)現(xiàn)可視化編程和支持面向?qū)ο蟮木幊碳夹g(shù),同時(shí)它們的語(yǔ)法更接近于自然語(yǔ)言, 表達(dá)能力強(qiáng), 使用靈活,具有強(qiáng)大的庫(kù)函數(shù), 更重要的是與機(jī)器無(wú)關(guān), 可移植性好, 這樣程序開(kāi)發(fā)周期比較短,省時(shí)省力。但在某些部分,例如程序的關(guān)鍵部分、 運(yùn)行次數(shù)很多的部分、 運(yùn)行速度要求很高的部分或直接訪問(wèn)硬件的部分等利用匯編語(yǔ)言編寫(xiě), 可以提高程序的運(yùn)行效率和速度, 但如果只用匯編語(yǔ)言編程的話是比較繁瑣的, 對(duì)于一個(gè)比較大的程序來(lái)說(shuō)編寫(xiě)起來(lái)將非常耗時(shí), 開(kāi)發(fā)周期較長(zhǎng)。為了滿足既能縮短程序開(kāi)發(fā)周期, 又能保證程序的執(zhí)行效率兩方面的要求, 采用VC++ 語(yǔ)言和匯編語(yǔ)言混合編程的技術(shù),即程序的框架或主體部分用Visual C++ 語(yǔ)言編寫(xiě),而要求執(zhí)行效率高的部分用匯編語(yǔ)言編寫(xiě)。

    加工中心請(qǐng)選擇 伯特利數(shù)控

    1 Visual C++ 調(diào)用匯編語(yǔ)言的常用方法

    混合編程的關(guān)鍵是解決好高級(jí)語(yǔ)言與匯編語(yǔ)言的接口問(wèn)題, 可采用兩種方法: 一是使用嵌入式匯編, 即在高級(jí)語(yǔ)言的語(yǔ)句中直接使用匯編語(yǔ)句, 這種方法比較簡(jiǎn)潔直觀,但功能較弱; 另一種方法是獨(dú)立編程,分別產(chǎn)生各自的目標(biāo)文件,然后經(jīng)過(guò)連接, 形成一個(gè)完整的程序。采用這種方法比較靈活而且還具有很強(qiáng)的功能, 其關(guān)鍵是如何解決好匯編語(yǔ)言與高級(jí)語(yǔ)言的數(shù)據(jù)通訊。本文就以在凌陽(yáng) 16 位單片機(jī)SPCE061A ,采用Visual C++ 與匯編語(yǔ)言獨(dú)立編程的方式實(shí)現(xiàn)混合編程的具體方法并給出實(shí)例。

    鉆攻中心請(qǐng)選擇 伯特利數(shù)控

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

    嵌入式匯編又稱(chēng)行內(nèi)匯編, Visual C++ 提供了嵌入式匯編功能, 允許在VC++ 源程序中直接插入?yún)R編語(yǔ)言指令的語(yǔ)句, 可以直接訪問(wèn)VC++ 語(yǔ)言程序中定義的常量、 變量和函數(shù),而不用考慮二者之間的接口,從而避免了匯編語(yǔ)言和VC++ 語(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 ea x, 5h

    mov ec x, 7h

    add eax, ecx

    }

    另一種方式:每一條匯編語(yǔ)句前添加/ - - asm0

    標(biāo)記,格式: - - asm 匯編語(yǔ)句,如下所示:

    - - asm mov ea x, 5h

    - - asm mov ec x, 7h

    - - asm add eax, ec x

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

    以下是在VC++ 中調(diào)用匯編程序的實(shí)例:

    // Visual C++ 語(yǔ)言主函數(shù)main ( )

    void F- Sub ( void) ; // 聲明要調(diào)用的函數(shù)的函數(shù)原型,此函數(shù)無(wú)參數(shù)傳遞

    intmain ( void) {

    while ( 1)

    F- Sub ( ) ; // 調(diào)用匯編函數(shù)

    return 0;

    }

    // 匯編子函數(shù)F- Sub( )

    . CODE

    . PUBL IC- F- Sub

    - F- Sub:

    NOP

    RETF

    以上程序在凌陽(yáng)公司提供的集成開(kāi)發(fā)環(huán)境下編譯連接后即可運(yùn)行。

    1. 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- fastcal lMASM 匯編語(yǔ)言利用/ 語(yǔ)言類(lèi)型0確定調(diào)用協(xié)議和命名約定, 支持的語(yǔ)言類(lèi)型有:C, SYSCALL, STDCALL,PASCAL, BASIC FOR TRAN

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

    調(diào)用協(xié)議, MASN 匯編語(yǔ)言采用Visual 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 給出了采用Visual C++ 語(yǔ)言調(diào)用協(xié)議的堆棧示意圖。參數(shù)返回時(shí),對(duì)于小于等于32 位的數(shù)據(jù)擴(kuò)展為32 ,存放在EAX 寄存器中返回; 4- 8 個(gè)字節(jié)的返回值存放在EDX, EAX 寄存器中返回;更大字節(jié)數(shù)據(jù)則將它們的地址指針存放在EAX 中返回。

    ( 3) 聲明公用函數(shù)名和變量名

    對(duì)Visual C++ 和匯編語(yǔ)言使用的公用函數(shù)和變量應(yīng)該進(jìn)行聲明, 并且標(biāo)識(shí)符應(yīng)該一致, C++ 語(yǔ)言對(duì)標(biāo)識(shí)符區(qū)分字母的大小寫(xiě),而匯編不區(qū)分大小寫(xiě)。在Visual C++ 語(yǔ)言程序中, 采用extern / C0{ }對(duì)所調(diào)用的函數(shù)和變量給予說(shuō)明。說(shuō)明形式如下:

    對(duì)函數(shù)的說(shuō)明: extern / C0 { 返回值類(lèi)型 調(diào)用協(xié)議 函數(shù)名稱(chēng)(參數(shù)類(lèi)型表) ; }

    對(duì)變量的說(shuō)明: extern / C0 { 變量類(lèi)型變量名; }

    匯編語(yǔ)言程序中供外部使用的標(biāo)識(shí)符應(yīng)該標(biāo)識(shí)P UBLIC 屬性,使用外部標(biāo)識(shí)符應(yīng)該用 e xtern 說(shuō)明。

    CNC加工中心 請(qǐng)選擇 伯特利數(shù)控

    1. 3 模塊調(diào)用混合編程的實(shí)現(xiàn)步驟

    采用模塊調(diào)用方式進(jìn)行混合編程一般執(zhí)行的步驟如下: ( 1)建立Visual C++ 源程序( . cpp) ; ( 2)建立匯編語(yǔ)言源程序, 并把匯編語(yǔ)言匯編成. obj 文件;( 3)建立工程文件. prj, Visual C++ 源程序和. obj文件放入該工程項(xiàng)目; ( 4) 對(duì)工程文件進(jìn)行編譯、 連接, 生成可執(zhí)行文件. exe

    在與Visual C++ 混合編程的匯編語(yǔ)言過(guò)程中,編程環(huán)境是32位的,應(yīng)該注意與16 MS -DOS 環(huán)境的區(qū)別。在這種環(huán)境下的寄存器是32位的,因此匯編語(yǔ)言過(guò)程存取堆棧應(yīng)該使用32 位寄存器EBP 進(jìn)行相對(duì)尋址, 而不是采用 BP。匯編語(yǔ)言簡(jiǎn)化段定義的格式應(yīng)該采用flat 模式, 并且匯編時(shí)采用選項(xiàng)P coff, ML命令的選項(xiàng)P coff 使得產(chǎn)生的. obj 文件采用32位的格式。

    2 Visual C++ 中調(diào)用匯編語(yǔ)言的第三種方法

    通常以上兩種方法就能夠?qū)崿F(xiàn) Visual C++ 語(yǔ)言與匯編語(yǔ)言混合編程, 但是在一些特殊的情況下,用這兩種方法卻不能滿足功能的需要, 本文提出了一種新的方法) ) ) 通過(guò)數(shù)組借助指針實(shí)現(xiàn)二者的混合編程。下面結(jié)合所開(kāi)發(fā)的課題) ) ) 數(shù)控系統(tǒng)邏輯控制系統(tǒng)軟件開(kāi)發(fā), 來(lái)進(jìn)行具體說(shuō)明。

    該課題是在Visual C++ 6. 0 的環(huán)境下進(jìn)行開(kāi)發(fā)的,上層采用VC++ 語(yǔ)言, 層采用了匯編語(yǔ)言,VC++ 語(yǔ)言中要調(diào)用匯編語(yǔ)言的編譯結(jié)果, 并進(jìn)行回填,用通用的混合編程方法無(wú)法實(shí)現(xiàn)二者的調(diào)用,因?yàn)榈讓訁R編語(yǔ)言是把所有的邏輯運(yùn)算功能指令匯編在一起, 而在VC++ 語(yǔ)言中根據(jù)需要在需要的地方調(diào)用匯編語(yǔ)言中的某一功能模塊, 因此對(duì)匯編語(yǔ)言編譯后的. obj 文件無(wú)法進(jìn)行控制。具體實(shí)現(xiàn)方法如下:

    ( 1)把包括所有的邏輯指令的匯編語(yǔ)句編成一個(gè)匯編模塊程序,在匯編編譯器(masm 6. x)中將匯編程序編譯成. obj文件。

    (2) 將匯編生成的機(jī)代碼放在一個(gè)數(shù)組中, 例如定義一個(gè)數(shù)組變量unsigned char OBJMOD[ 1241]

    ( 3)定義多個(gè)指針類(lèi)型變量指向OBJMOD 數(shù)組元素的地址,該地址對(duì)應(yīng)每個(gè)匯編功能模塊的首地址,如定義一個(gè)指針變量 unsigned char * LIBC21=&OBJMOD[ 869]

    ( 4) 通過(guò)函數(shù)COPILE( * pModal) 模塊, 例如編譯匯編 LIBC21 功能模塊時(shí), 通過(guò)調(diào)用 COPI LE( LIBC21)函數(shù),把匯編編譯生成的機(jī)代碼分別傳遞到工作區(qū)域WKAREA , 通過(guò) WKAREA[ POSIRR]= BUFRIS[ PTRIS] 來(lái)實(shí)現(xiàn)二次填充,把匯編機(jī)代碼中改寫(xiě)的內(nèi)容改寫(xiě)成需要的地址或值,后通過(guò)調(diào)用一系列函數(shù), 把結(jié)果保存到文件中[ 4 ]

    高速加工中心 請(qǐng)選擇 伯特利數(shù)控

    3 寄存器的使用約定

    在所有寄存器中, BP 應(yīng)首先引起注意,因?yàn)橐坏┻M(jìn)入?yún)R編程序, BP 的內(nèi)容在子程序入口處被壓入棧內(nèi),并且棧指針( SP)的當(dāng)前值必須放在BP ,在子程序出口處BP 被彈出,恢復(fù)原來(lái)的值。

    4 結(jié)束語(yǔ)

    采用兩種或兩種以上的編程語(yǔ)言混合編程, 彼此相互調(diào)用,進(jìn)行參數(shù)傳遞, 是一種有效的程序設(shè)計(jì)方法。這種方法可以充分發(fā)揮各種語(yǔ)言的優(yōu)勢(shì),充分利用現(xiàn)有的實(shí)用程序,是當(dāng)前編程技術(shù)的一個(gè)重要研究和應(yīng)用領(lǐng)域。

    本課題采用該方法實(shí)現(xiàn)了Visual C++ 和匯編語(yǔ)言的混合編程,從而實(shí)現(xiàn)Visual C++ 語(yǔ)言與匯編語(yǔ)言的無(wú)縫結(jié)合。

    本文由 伯特利數(shù)控 整理發(fā)表,文章來(lái)自網(wǎng)絡(luò)僅參考學(xué)習(xí),本站不承擔(dān)任何法律責(zé)任。

    /

    加工中心 高速加工中心 鉆攻中心 CNC加工中心 請(qǐng)選擇 伯特利數(shù)控

    收藏該商鋪

    請(qǐng) 登錄 后再收藏

    提示

    您的留言已提交成功!我們將在第一時(shí)間回復(fù)您~

    對(duì)比框

    產(chǎn)品對(duì)比 二維碼 意見(jiàn)反饋

    掃一掃訪問(wèn)手機(jī)商鋪
    在線留言
    玩弄人妻少妇500系列视频| 四川小少妇bbaabbaa| 中文字幕乱妇无码AV在线| GOGOGO免费高清看中国国语| 成全视频在线观看大全腾讯地图| 久久精品一区| 国产激情久久久久影院小草| 老熟女 露脸 嗷嗷叫| 国产又大又粗又爽| 久久精品不卡一区国产|