国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

匯編語言與C語言的混合程序設計技術

2013-04-29 00:44:03康晶晶
計算機時代 2013年6期
關鍵詞:匯編語言C語言

康晶晶

摘 要: 匯編語言作為一種面向機器的語言,具有占用存儲空間小、運行速度快的優(yōu)點,并可直接控制硬件,在某些場合具有重要的作用;然而,匯編語言的編寫和調試卻相對困難和復雜,在進行數(shù)值混合運算與數(shù)據(jù)處理上尤為突出。C語言具有開發(fā)效率高,功能豐富、使用靈活、表達能力強的優(yōu)點。在軟件開發(fā)中,采用匯編語言與C語言混合程序設計技術,能有效提高運行效率。筆者結合自身工作經驗,具體探討了這一混合程序設計技術,希望能為廣大同行提供借鑒。

關鍵詞: 匯編語言; C語言; 混合編程

中圖分類號:TP311.1 文獻標志碼:A 文章編號:1006-8228(2013)06-01-02

Exploration on design technique of hybrid programming of assembly language and C language

Kang Jingjing

(Institute of Information, Shanxi Agricultural University, Jinzhong, Shanxi 030800, China)

Abstract: Assembly language, as a machine-oriented language, has advantages of less storage space and faster processing, and can directly control hardware. It plays an important role in some occasions. However, writing and debugging in assembly language are relatively difficult and complicated, especially when conducting numerical hybrid computing and data processing. C language shows strengths of high efficiency of development, abundant feature, flexibility, strong expression abilities. During developing software, hybrid programming of assembly language and C language can effectively improve operational efficiency. Combined with author's own work experience, the technique is discussed in detail, in order to provide a reference for the peers.

Key words: assembly language; C language; hybrid programming

0 引言

在大型程序的設計中,如果將匯編語言程序和高級語言程序結合使用,能充分發(fā)揮其各自的優(yōu)點,實現(xiàn)兩種語言的混合編程。在程序設計中,C語言可以調用匯編語言的子程序,而匯編語言也可調用C語言的子程序,還可在C語言程序中嵌入?yún)R編語句,具有極大的優(yōu)點[1]。同時,在混合編程中,模塊的連接、參數(shù)的傳遞和調用關系的確定等都是應當引起編程者注意的重要問題。

1 匯編語言與C語言混合編程的方法

匯編語言與C語言混合編程的方法主要包括以下幾種:

⑴ 在C語言程序中使用匯編程序定義的常量與變量[2];

⑵ 在C語言程序中內嵌匯編語句,實現(xiàn)C語言不能做到的對硬件的控制功能;

⑶ 在C語言程序中使用內部函數(shù)調用匯編語句;

⑷ 混合編程時,單個任務可被分成若干個功能模塊,每個功能模塊均以子程序或函數(shù)的形式存在,根據(jù)各單一模塊的特點,選擇合適的編程語言進行獨立編程,然后通過對應的語言編譯系統(tǒng)編譯成目標文件,最后將諸多目標文件集合在一起成為一個可執(zhí)行文件。

1.1 C語言程序嵌入?yún)R編語句

在C語言中,可直接編寫匯編語言代碼,在C語言中嵌入?yún)R編語句時不需要分號,具體語法為:

asm

如果要嵌入一組語句,則需要用大括號{}將其括起來:

asm {

mov ax,data1

xchg ax,data2

mov data1,ax

}

C語言允許嵌入的匯編命令包括四類:一般指令、跳轉指令和數(shù)據(jù)定義、串操作指令、分配指令。

1.2 C語言調用匯編語言子程序

為了實現(xiàn)C語言對匯編語言子程序的調用,匯編語言源程序一定要嚴格依據(jù)編譯系統(tǒng)要求或約定的段組合和段順序。

⑴ 匯編語言子程序格式

匯編語言子程序的格式通常為:

MYCODE SEGMENT PARA PUBLIC ‘CODE

PUBLIC_函數(shù)名;公共符號說明

DGROUP GROUP MYDATA,MYBBS

MYDATA SEGMENT WORD PUBLIC ‘CODE

...定義變量,初始化數(shù)據(jù)

MYDATA ENDS

MYBBS SEGMENT WORD PUBLIC ‘CODE

...非初始化數(shù)據(jù),開辟內存區(qū)

MY BBS END

ASSUME

CS:MYCODE,DS:DGROUP,SS:DGROUP

...

_函數(shù)名 PROC NEAR/FAR

PUSH BP

MOV BP,SP

PUSH SI

PUSH DI

...程序主體語句

POP DI

POP SI

POP BP

RET

_函數(shù)名 END UP

...

MYCODE ENDS

END

⑵ 被調用匯編語言的子程序格式

將被調用的程序的格式與一般匯編語言程序的格式相對比,可得以下結論:

第一,由于匯編語言子程序與C語言程序共用一個堆棧段,因此,匯編語言子程序的開頭必須運行以下兩個命令:

PUSH BP

MOVE BO,SP

第二,將要被C語言程序調用的子程序必須要以PUBLIC偽操作來說明該子程序是外部調用的。

第三,C語言程序允許子程序使用DI和SI存放局部變量,當變量超過兩個時才可存放在堆棧中,因此,模式中出現(xiàn)了PUSH DI與PUSH SI語句[3]。

第四,在整個程序中,定義了MYCODE代碼段、MYDATA初始化數(shù)據(jù)段、MYBBS費初始化數(shù)據(jù)段,并將MYBBS與MYDATA合成為DGROUP段組,且同一段組中各段共享基址。

第五,程序主體語句部分要有函數(shù)值返回語句,該返回值必須在RET語句前。

第六,被調用過程要以RET命令返回。

第七,結束處的END只表示程序的結束,未標示啟動位置。

1.3 匯編語言調用C語言子程序

匯編語言具有C語言難以比擬的優(yōu)勢,如:輸入時可采用任意進制的數(shù)據(jù),并可直接對其讀取。因此,可以在匯編程序中調用C語言子程序。

匯編語言主程序的格式與其子程序相同,只需在程序開始處添加語句:

EXTERN 函數(shù)名

用以說明該函數(shù)是被調用的C語言子程序,是外部的。

在主過程語句中,可通過CALL語句調用外部函數(shù),格式為:

CALL NEAR PTR 函數(shù)名

當C語言子程序作為子程序時,其中可只含有C函數(shù),無需EXTERN說明。

2 C語言與匯編語言的連接

2.1 參數(shù)傳遞

C語言和匯編語言在調用時會有參數(shù)傳遞的問題,通常采用堆棧來傳遞,在匯編語言中,將BP作為基址寄存器,先將來源于C語言的參數(shù)壓入堆棧,當使用這些參數(shù)時,再通過BP利用不同的偏移量對堆棧中的數(shù)據(jù)進行存取[4]。

2.2 確定調用關系

對將要調用的函數(shù)或過程,應進行事先說明,建立調用、被調用關系,被調用的函數(shù)或過程應先說明外部類型,調用程序也應說明要引用的外部模塊。

此外,還應依據(jù)存儲模式的不同而確定匯編語言格式,C程序大模式通常對應匯編程序的遠類型過程,而C程序小模式通常對應匯編程序的近類型過程[5]。

2.3 C語言與匯編語句程序的模塊連接

匯編語言與C語言模塊的正確連接有兩點要求:匯編模塊與C模塊的存儲方式須一致;匯編模塊必須遵從與C模塊兼容的命名約定。編譯系統(tǒng)在編譯C源程序時,會在函數(shù)名和變量名前加下劃線,為保持連接前后的一致性,所有被C語言調研的匯編子程序標示符都應加下劃線。同時,為使匯編語言標示符在C語言中可見,必須以PUBLIC定義。匯編語言中的C語言函數(shù)與變量,須在其前加下劃線,匯編程序開始部分調用的C函數(shù)與變量則應以EXTERN說明[6]。

3 結束語

綜上所述,C語言與匯編語言混合編程可互相取長補短,發(fā)揮各自優(yōu)勢,進行參數(shù)傳遞、共享數(shù)據(jù)結構和數(shù)據(jù)信息,從而用以開發(fā)出更安全、實用、可靠的元件,使軟件開發(fā)與編程事半功倍。

參考文獻:

[1] 宋金華.匯編語言和C語言在圖形處理中的綜合應用[J].湖北廣播電

視大學學報,2010.10(12):11-12

[2] 張銀,索旭華,廖建林,郭娟.AOCC應用軟件的快速仿真平臺的研究

與技術實現(xiàn)[J].航天控制,2010.4(2):55-56

[3] 羅南超,向昌成,李唐輝.匯編語言實現(xiàn)多種進制的通用輸入輸出[J].

電腦知識與技術,2008.5(36):120-121

[4] 王文東,李竹林,尚建人.匯編語言與C語言的混合程序設計技術[J].

計算機技術與發(fā)展,2006.8(8):89-90

[5] 左艷麗.C語言和匯編語言混合編程的方法和實現(xiàn)[J].職教與經濟研

究(婁底職業(yè)技術學院學報),2008.6(3):12-13

[6] 王詠寧.高級語言與匯編語言混合編程的實現(xiàn)方法[J].科技信息(學術

研究),2007.10(24):101-102

猜你喜歡
匯編語言C語言
基于Visual Studio Code的C語言程序設計實踐教學探索
計算機教育(2020年5期)2020-07-24 08:52:56
高等學校計算機專業(yè)課程教學改革實踐——以匯編語言與接口技術課程為例
計算機教育(2020年5期)2020-07-24 08:52:50
匯編語言與C語言的混合程序設計技術研究
電子制作(2019年10期)2019-06-17 11:45:16
基于C語言的計算機軟件編程
電子制作(2018年16期)2018-09-26 03:27:08
C語言程序設計課程教學與學科專業(yè)相結合的探索
消費導刊(2017年20期)2018-01-03 06:26:54
提高《匯編語言程序設計》教學效率的思考與實踐
高職高專院校C語言程序設計教學改革探索
試論匯編語言與C語言的混合程序設計技術
電子世界(2015年18期)2015-03-26 22:36:05
論子函數(shù)在C語言數(shù)據(jù)格式輸出中的應用
非計算機專業(yè)C語言教學探討
河南科技(2014年23期)2014-02-27 14:19:16
余庆县| 炎陵县| 英德市| 浦县| 崇义县| 清苑县| 佛坪县| 沿河| 喀喇沁旗| 陆川县| 姚安县| 伽师县| 和林格尔县| 广元市| 贵定县| 噶尔县| 北辰区| 根河市| 孟连| 礼泉县| 凤庆县| 石首市| 安泽县| 犍为县| 巴林右旗| 兴海县| 马山县| 连云港市| 津南区| 澄迈县| 界首市| 大竹县| 阿克苏市| 开平市| 屏东县| 金坛市| 阳谷县| 柳江县| 和平县| 太湖县| 富锦市|