中文久久久字幕|亚洲精品成人 在线|视频精品5区|韩国国产一区

歡迎來(lái)到優(yōu)發(fā)表網(wǎng),期刊支持:400-888-9411 訂閱咨詢(xún):400-888-1571股權(quán)代碼(211862)

購(gòu)物車(chē)(0)

期刊大全 雜志訂閱 SCI期刊 期刊投稿 出版社 公文范文 精品范文

匯編語(yǔ)言范文

時(shí)間:2022-10-24 03:41:53

序論:在您撰寫(xiě)匯編語(yǔ)言時(shí),參考他人的優(yōu)秀作品可以開(kāi)闊視野,小編為您整理的7篇范文,希望這些建議能夠激發(fā)您的創(chuàng)作熱情,引導(dǎo)您走向新的創(chuàng)作高度。

匯編語(yǔ)言

第1篇

Abstract: Assembly language is machine language, which is difficult to understand because it is far from natural language. In order to improve the teaching effectiveness of assembly language programming, this article gives the interpreted analysis which is confused and difficult to understand.

關(guān)鍵詞: 指令;偽指令;中斷;尋址方式

Key words: instructions;pseudoinstruction;interrupts;addressing mode

中圖分類(lèi)號(hào):TP312 文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1006-4311(2014)23-0227-02

1概述

匯編語(yǔ)言不同于其它高級(jí)語(yǔ)言,必須要求編程人員有一定的硬件基礎(chǔ),如對(duì)CPU的結(jié)構(gòu)、CPU與存儲(chǔ)器等部件的數(shù)據(jù)傳送過(guò)程必須要有基本的了解,這樣才能學(xué)好這門(mén)課程。在教學(xué)過(guò)程中,教師發(fā)現(xiàn)學(xué)生對(duì)高級(jí)語(yǔ)言編程學(xué)習(xí)積極性高,對(duì)匯編語(yǔ)言課程缺乏興趣,但因?yàn)檎n程本身指令復(fù)雜,規(guī)定繁多,再加上學(xué)習(xí)匯編指令前對(duì)CPU的相關(guān)工作過(guò)程理解不透,導(dǎo)致學(xué)生厭學(xué),又由于本課程面對(duì)的低年級(jí)學(xué)生只有高級(jí)語(yǔ)言的基礎(chǔ),習(xí)慣于高級(jí)語(yǔ)言的自然表達(dá),初次接觸計(jì)算機(jī)硬件知識(shí)心理上有恐懼感,更難以適應(yīng)繁雜的低級(jí)語(yǔ)言。本文用比較的辦法,通俗易懂的自然比喻對(duì)這門(mén)課中易混淆的,較難理解的概念予以解釋分析。

2指令性語(yǔ)句與偽指令語(yǔ)句的區(qū)別

例如:ADD AX,10+5經(jīng)過(guò)匯編變成ADD AX,15,10+5的運(yùn)算匯編階段完成,AX和15的加法運(yùn)算要等到運(yùn)行階段才能完成,匯編階段能實(shí)現(xiàn)的運(yùn)行階段一定能實(shí)現(xiàn),上述+運(yùn)算可變?yōu)锳DD AX,10;ADD AX,5兩句實(shí)現(xiàn)。運(yùn)行階段能實(shí)現(xiàn)的,匯編階段不一定能實(shí)現(xiàn),如 ADDAX,BX+CX;程序還沒(méi)有運(yùn)行,匯編階段不可能知道BX,CX的值,更談不上計(jì)算二者之和。

再如以下用漢語(yǔ)表示的程序,要翻譯成英語(yǔ),看看偽指令語(yǔ)句如何指導(dǎo)匯編過(guò)程:

以下是黑體,2號(hào)字,居中 ;指導(dǎo)匯編

通知 ;翻譯

以下是宋體,3號(hào)字,首行縮進(jìn) ;指導(dǎo)匯編

今天下午開(kāi)會(huì)…… ;翻譯

以下是楷體,4號(hào)字,右對(duì)齊 ;指導(dǎo)匯編

特此通知 ;翻譯

3宏指令與子程序的區(qū)別

4子程序和中斷服務(wù)程序的區(qū)別

5CALL、INT、硬中斷的區(qū)別

可以看出,INT既有CALL的特點(diǎn)(可預(yù)知),又有硬中斷的特點(diǎn)(中斷類(lèi)型碼轉(zhuǎn)換成入口地址),介于二者之間,故稱(chēng)INT指令為軟中斷指令(由軟件指令I(lǐng)NT發(fā)出的中斷)。

6=與EQU的區(qū)別

7LABEL、THIS、PTR的區(qū)別(見(jiàn)表6)

8段地址、段內(nèi)地址、物理地址的關(guān)系解析

為了說(shuō)明段地址、段內(nèi)地址、物理地址三者之間的關(guān)系,下面舉例說(shuō)明(表7)。

9SF􀱇OF=1表示兩個(gè)有符號(hào)數(shù)是小于關(guān)系解析

溢出,就是放不下,一旦溢出結(jié)果一定是錯(cuò)的。例如兩個(gè)瓶子容量各是5斤,一個(gè)裝了3斤水,一個(gè)裝了4斤水,理論上講,倒在一個(gè)瓶子應(yīng)該是7斤,但全部倒在一個(gè)瓶子后,成了5斤,2斤溢出,不能說(shuō)3+4=5,所以一旦溢出結(jié)果一定是錯(cuò)的。異號(hào)相加,越加越少,原來(lái)放得下,加了之后一定放得下,故絕對(duì)不溢出。同號(hào)相加,越加越多,原來(lái)放得下,加了之后不一定放得下,故有可能溢出。若溢出OF=1,正數(shù)加正數(shù)應(yīng)該是正數(shù),應(yīng)該SF=0,但若結(jié)果SF=1,正數(shù)加正數(shù)是負(fù)數(shù),SF=1是錯(cuò)的(假的符號(hào)位)。同樣道理,負(fù)數(shù)加負(fù)數(shù)應(yīng)該是負(fù)數(shù),應(yīng)該SF=1,但若結(jié)果SF=0,負(fù)數(shù)加負(fù)數(shù)是正數(shù),SF=0是錯(cuò)的(假的符號(hào)位)。

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

總之,匯編語(yǔ)言是計(jì)算機(jī)程序編寫(xiě)中最經(jīng)常用的一種必要程序語(yǔ)言,投入?yún)R編語(yǔ)言領(lǐng)域更多的研究與開(kāi)發(fā)關(guān)注也是十分必要和有益的。

參考文獻(xiàn):

[1](美)布魯姆著.編語(yǔ)言程序設(shè)計(jì)[M].馬朝暉,譯.北京:機(jī)械工業(yè)出版社,2006.

第2篇

關(guān)鍵詞:加密算法DES匯編語(yǔ)言

目前在金融界及非金融界的保密通信中,越來(lái)越多地用到了DES算法。DES(DataEncryptionStandard)即數(shù)據(jù)加密算法,是IBM公司于1977年研究成功并公開(kāi)發(fā)表的。隨著我國(guó)三金工程尤其是金卡工程的啟動(dòng),DES算法在POS、ATM、磁卡及智能卡(IC卡)中被廣泛應(yīng)用,以此來(lái)實(shí)現(xiàn)關(guān)鍵數(shù)據(jù)的保密。如信用卡持卡人的PIN的加密傳輸、IC卡與POS間的雙向認(rèn)證、金融交易中的密碼鍵盤(pán)等,均用到DES算法。由于密碼鍵盤(pán)不可能使用高級(jí)語(yǔ)言,所以用匯編語(yǔ)言實(shí)現(xiàn)DES就非常實(shí)用。

1DES算法的簡(jiǎn)單原理

DES是一種分組密碼。假定明文m是由0和1組成的長(zhǎng)度為64位的符號(hào)串,密鑰k也是64位的0、1符號(hào)串。

設(shè):M=m1m2m3…m64

K=k1k2k3…k64

加密過(guò)程可表達(dá)如下:

DES(m)=IP-1·T16·T15…T2·T1·IP(m)

其中:IP(m)是初始置換,IP-1是逆置換,T16~T1是16次迭代。

(1)初始置換IP

功能是把輸入的明文m按位重新組合,并把輸出分為L(zhǎng)0、R0兩部分,每部分各長(zhǎng)32位,其置換規(guī)則如下:

58,50,42,34,26,18,10,2,

60,52,44,36,28,20,12,4,

62,54,46,38,30,22,14,6,

64,56,48,40,32,24,16,8,

57,49,41,33,25,17,9,1,

59,51,43,35,27,19,11,3,

61,53,45,37,29,21,13,5,

63,55,47,39,31,23,15,7

(2)逆置換IP-1

經(jīng)過(guò)16次迭代運(yùn)算后,得到L16、R16,將此作為輸入,進(jìn)行逆置換。逆置換滿(mǎn)足:

IP·IP-1=IP-1·IP=I

逆置換正好是初始置換的逆運(yùn)算。

(3)T16~T1的迭代計(jì)算

DES的迭代算法采用模2加法。

在通信網(wǎng)絡(luò)的兩端,雙方約定了一致的密鑰。在通信的源點(diǎn)用密鑰對(duì)核心數(shù)據(jù)進(jìn)行加密并形成密文,然后,以密文的形式在公共通信網(wǎng)中傳輸?shù)酵ㄐ啪W(wǎng)絡(luò)的終點(diǎn)。數(shù)據(jù)到達(dá)終點(diǎn)后,用同樣的密鑰對(duì)密文數(shù)據(jù)進(jìn)行解密,便再現(xiàn)了明文形式的核心數(shù)據(jù)。這樣,便保證了核心數(shù)據(jù)(如PIN、MAC等)在公共通信網(wǎng)中傳輸?shù)陌踩院涂煽啃浴?/p>

2匯編語(yǔ)言的實(shí)現(xiàn)

用匯編語(yǔ)言實(shí)現(xiàn)DES算法有它的優(yōu)勢(shì)也有它的難點(diǎn)。優(yōu)勢(shì)是51匯編的位操作可以方便地實(shí)現(xiàn)置換功能。但用匯編語(yǔ)言實(shí)現(xiàn)算法的迭代運(yùn)算及循環(huán)功能比較煩瑣。在用51匯編實(shí)現(xiàn)DES的過(guò)程中,我編寫(xiě)了幾個(gè)子程序,組合起來(lái)可實(shí)現(xiàn)DES算法加密。在這里寫(xiě)出一些思路,有需要的同行可與我聯(lián)系(E-mail:zhoubin@)。

8031有16個(gè)可以位尋址的寄存器,可放置128位的數(shù)據(jù),利用它可實(shí)現(xiàn)DES的轉(zhuǎn)置功能。將明文m放入寄存器27H~20H中,即位地址00H對(duì)應(yīng)m64,3FH對(duì)應(yīng)m1。利用標(biāo)志寄存器C可實(shí)現(xiàn)置換與逆置換程序。在DES的16次迭代過(guò)程中,要實(shí)現(xiàn)公式:

Li=Ri-1;Ri=Li-1f(Ri-1,ki)

的運(yùn)算過(guò)程,其關(guān)鍵在于f(Ri-1,ki)的功能。f是將32位的輸入轉(zhuǎn)化為32位的輸出。其中含3項(xiàng)技術(shù):

①將32位膨脹為48位的E功能。該項(xiàng)功能可用類(lèi)似于置換功能的子程序編寫(xiě)。

②48位子密鑰的生成。為了便于51匯編生成子密鑰,可以使用主機(jī)用串口下傳的方式,由主機(jī)將16個(gè)子密鑰傳給89C52為核心的單片機(jī),然后存入80H~FFH中。如果密鑰是固定的,則可直接將子密鑰固化在89C52的Flash中。

③S盒的功能是將48位的輸入再次縮為32位。具體實(shí)現(xiàn)是將S盒表存入89C52的Flash中,每次通過(guò)查表求得S輸出的結(jié)果。

下面列舉其中的幾個(gè)子程序。

(1)IP置換子程序

;入口寄存器:(MSB)2726252423222120(LSB),出口寄存器:(MSB)2F2E2D2C2B2A2928(LSB)

;功能:將入口寄存器的數(shù)據(jù)按置換表?yè)Q位。

IP:MOVC,06H;將m58送到進(jìn)位標(biāo)志中

MOV7FH,C;將進(jìn)位標(biāo)志送m1中

MOVC,0EH;將m50送到進(jìn)位標(biāo)志中

MOV7EH,C;將進(jìn)位標(biāo)志送m2中

;重復(fù),按表編寫(xiě)MOVC,31H;將m15送到進(jìn)位標(biāo)志中

MOV41H,C;將進(jìn)位標(biāo)志送m63中

MOVC,39H;將m7送到進(jìn)位標(biāo)志中

MOV40H,C;將進(jìn)位標(biāo)志送m64中

RET

(2)逆置換子程序

;入口寄存器:(MSB)2726252423222120(LSB),出口寄存器:(MSB)2F2E2D2C2B2A2928(LSB)

;功能:將入口寄存器的數(shù)據(jù)按逆置換表?yè)Q位。

IPRVS:MOVC,18H;將m40送到進(jìn)位標(biāo)志中

MOV7FH,C;將進(jìn)位標(biāo)志送m1中

MOVC,38H

.

.

.

RET

(3)異或子程序

;入口寄存器:272625243F3E3D3C,出口寄存器:2B2A2928

;功能:將寄存器27262524的內(nèi)容和寄存器3F3E3D3C的內(nèi)容異或。結(jié)果保存在2B2A2928寄存器中。

XORLF:MOVA,3FH;將高8位異或

XRLA,27H

MOV2BH,A;放入出口處

MOVA,3EH

XRLA,26H

MOV2AH,A

MOVA,3DH

XRLA,25H

MOV29H,A

MOVA,3CH

XRLA,24H

MOV28H,A

RET

(4)S盒子程序

;入口寄存器:(MSB)2F2E2D2C2B2A2928,出口寄存器:(MSB)27262524

;功能:48位32位

S6TO4:MOV20h,2FH;取出高位數(shù)據(jù)

LCALLS162345;調(diào)用實(shí)現(xiàn)Si(b1b6,b2b3b4b5)

;的功能子程序

MOVDPTR,#S1TAB;S盒表的首址

MOVA,21H;取出第幾個(gè)S盒

LCALLDPTRADD

CLRA

MOVCA,@A+DPTR;求出S盒的表地址及S結(jié)果

SWAPA

MOV27H,A;保存高位結(jié)果

MOV20H,2EH

LCALLS162345

;重復(fù)

第3篇

匯編語(yǔ)言傳送指令是匯編語(yǔ)言中使用的一些操作符和助記符,還包括一些偽指令。

用于告訴匯編程序如何進(jìn)行匯編的指令,它既不控制機(jī)器的操作也不被匯編成機(jī)器代碼,只能為匯編程序所識(shí)別并指導(dǎo)匯編如何進(jìn)行。

(來(lái)源:文章屋網(wǎng) )

第4篇

棧是限定僅在表尾進(jìn)行插入和刪除操作的線(xiàn)性表?!皸!闭?,存儲(chǔ)貨物或供旅客住宿的地方,可引申為倉(cāng)庫(kù)、中轉(zhuǎn)站,引入到計(jì)算機(jī)領(lǐng)域里,就是指數(shù)據(jù)暫時(shí)存儲(chǔ)的地方,所以才有進(jìn)棧、出棧的說(shuō)法。

棧是計(jì)算機(jī)中經(jīng)典的數(shù)據(jù)結(jié)構(gòu),棧就是限制在一端進(jìn)行插入刪除操作的線(xiàn)性表。棧有兩種最重要的操作,即pop和push。

(來(lái)源:文章屋網(wǎng) )

第5篇

一、變量與函數(shù)的相互調(diào)用

c語(yǔ)言可以調(diào)用匯編子程序和匯編語(yǔ)言中定義的變量。但要注意由于。編譯后的目標(biāo)文件自動(dòng)地在函數(shù)名和變量名前加一個(gè)下劃線(xiàn),所以在匯編語(yǔ)言中調(diào)用C語(yǔ)言的函數(shù)和變量時(shí),應(yīng)在函數(shù)名和變量名前加一下劃線(xiàn)。在匯編語(yǔ)言程序開(kāi)始部分,應(yīng)對(duì)調(diào)用的函數(shù)和變量用EXTERN加以說(shuō)明。

二、調(diào)用者與被調(diào)用者的參數(shù)傳遞

這種數(shù)據(jù)傳遞通過(guò)堆棧完成,在執(zhí)行調(diào)用時(shí)從調(diào)用程序參數(shù)表中的最后一個(gè)參數(shù)開(kāi)始,即從右到左自動(dòng)依次壓人堆棧;將所有參數(shù)壓人堆棧后,再自動(dòng)將被調(diào)用程序執(zhí)行結(jié)束后的返回地址(斷點(diǎn))壓人堆棧,以使被調(diào)程序結(jié)束后能返回主調(diào)程序的正確位置而繼續(xù)執(zhí)行。進(jìn)人匯編子程序后,為了能正確獲取主調(diào)程序并存人堆棧中的數(shù)據(jù),被調(diào)的匯編子程序先后要做如下一些工作:

l、保存sp的副本進(jìn)人匯編子程序后,子程序中免不了要有壓棧和出棧的操作,故sP時(shí)刻在變化。為了能用SP訪(fǎng)問(wèn)堆棧中的參數(shù),安全辦法是一進(jìn)人子程序后,先為SP制副本,以后對(duì)傳遞參數(shù)的訪(fǎng)問(wèn)都用副本進(jìn)行。一般可用BP保存SP,如:pushbPmovbP,sp

2、保留數(shù)據(jù)空間如果匯編子程序中需要一些局部數(shù)據(jù),可以簡(jiǎn)單地減小SP的值,以便在??臻g中保留出一段存貯區(qū),用于存放局部數(shù)據(jù),該區(qū)域須在子程序結(jié)束后恢復(fù)。如下語(yǔ)句可以保留一個(gè)局部數(shù)據(jù)區(qū):pushbPmovbP,spsubsp,spaee;設(shè)spaee=4如上語(yǔ)句段中,SPACE是局部數(shù)據(jù)的總字節(jié)數(shù)。在以后的應(yīng)用中,由于SP是變化的,而B(niǎo)P是固定的,用負(fù)偏移量可以存取局部變量。上例利用BP及偏移量,將兩個(gè)字的局部數(shù)據(jù)初始化為0。

3、保留寄存器值如果在被調(diào)子程序中用到sI、DI等其它寄存器,則應(yīng)先把它們壓人堆棧,以保留寄存器原值。例如,下例就是將SI和DI寄存器的值壓棧:pushbpmoybp,SpsubSp,sPaeePush51Pushdi

4、獲取傳遞參數(shù)BP保留了SP在參數(shù)傳遞完并將BP壓棧后的一個(gè)副本,利用BP可以很方便地訪(fǎng)問(wèn)各參數(shù)?,F(xiàn)假設(shè)調(diào)用了名為funcl匯編程序模塊的主函數(shù):maln(){……fund(pl,pZ,p3);……}。各參數(shù)都是2字節(jié)的整數(shù)值,返回地址retumaddress,在小模式編譯方式共占用2個(gè)字節(jié)。如果要將傳遞的參數(shù)p卜pZ、p3取出,并分別賦給bx、Cx、dx寄存器,可由下列語(yǔ)句完成這一功能:movbx,[bp+4jmovcx,[bp+6]movdx,[bp+8〕

第6篇

一、變量與函數(shù)的相互調(diào)用

c語(yǔ)言可以調(diào)用匯編子程序和匯編語(yǔ)言中定義的變量。但要注意由于。編譯后的目標(biāo)文件自動(dòng)地在函數(shù)名和變量名前加一個(gè)下劃線(xiàn),所以在匯編語(yǔ)言中調(diào)用C語(yǔ)言的函數(shù)和變量時(shí),應(yīng)在函數(shù)名和變量名前加一下劃線(xiàn)。在匯編語(yǔ)言程序開(kāi)始部分,應(yīng)對(duì)調(diào)用的函數(shù)和變量用EXTERN加以說(shuō)明。

二、調(diào)用者與被調(diào)用者的參數(shù)傳遞

這種數(shù)據(jù)傳遞通過(guò)堆棧完成,在執(zhí)行調(diào)用時(shí)從調(diào)用程序參數(shù)表中的最后一個(gè)參數(shù)開(kāi)始,即從右到左自動(dòng)依次壓人堆棧;將所有參數(shù)壓人堆棧后,再自動(dòng)將被調(diào)用程序執(zhí)行結(jié)束后的返回地址(斷點(diǎn))壓人堆棧,以使被調(diào)程序結(jié)束后能返回主調(diào)程序的正確位置而繼續(xù)執(zhí)行。進(jìn)人匯編子程序后,為了能正確獲取主調(diào)程序并存人堆棧中的數(shù)據(jù),被調(diào)的匯編子程序先后要做如下一些工作:

l、保存sp的副本進(jìn)人匯編子程序后,子程序中免不了要有壓棧和出棧的操作,故sP時(shí)刻在變化。為了能用SP訪(fǎng)問(wèn)堆棧中的參數(shù),安全辦法是一進(jìn)人子程序后,先為SP制副本,以后對(duì)傳遞參數(shù)的訪(fǎng)問(wèn)都用副本進(jìn)行。一般可用BP保存SP,如:pushbPmovbP,sp

2、保留數(shù)據(jù)空間如果匯編子程序中需要一些局部數(shù)據(jù),可以簡(jiǎn)單地減小SP的值,以便在棧空間中保留出一段存貯區(qū),用于存放局部數(shù)據(jù),該區(qū)域須在子程序結(jié)束后恢復(fù)。如下語(yǔ)句可以保留一個(gè)局部數(shù)據(jù)區(qū):pushbPmovbP,spsubsp,spaee;設(shè)spaee=4如上語(yǔ)句段中,SPACE是局部數(shù)據(jù)的總字節(jié)數(shù)。在以后的應(yīng)用中,由于SP是變化的,而B(niǎo)P是固定的,用負(fù)偏移量可以存取局部變量。上例利用BP及偏移量,將兩個(gè)字的局部數(shù)據(jù)初始化為0。

3、保留寄存器值如果在被調(diào)子程序中用到sI、DI等其它寄存器,則應(yīng)先把它們壓人堆棧,以保留寄存器原值。例如,下例就是將SI和DI寄存器的值壓棧:pushbpmoybp,SpsubSp,sPaeePush51Pushdi

4、獲取傳遞參數(shù)BP保留了SP在參數(shù)傳遞完并將BP壓棧后的一個(gè)副本,利用BP可以很方便地訪(fǎng)問(wèn)各參數(shù)?,F(xiàn)假設(shè)調(diào)用了名為funcl匯編程序模塊的主函數(shù):maln(){……fund(pl,pZ,p3);……}。各參數(shù)都是2字節(jié)的整數(shù)值,返回地址retumaddress,在小模式編譯方式共占用2個(gè)字節(jié)。如果要將傳遞的參數(shù)p卜pZ、p3取出,并分別賦給bx、Cx、dx寄存器,可由下列語(yǔ)句完成這一功能:movbx,[bp+4jmovcx,[bp+6]movdx,[bp+8〕

第7篇

關(guān)鍵詞: C 語(yǔ)言;匯編語(yǔ)言;混合編程

中圖分類(lèi)號(hào):TP313 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1006-4311(2014)24-0231-02

0 引言

匯編語(yǔ)言是一種面向機(jī)器的語(yǔ)言,其優(yōu)點(diǎn)是運(yùn)行速度快,占用存儲(chǔ)空間小,可直接對(duì)硬件進(jìn)行控制。缺點(diǎn)是編寫(xiě)、調(diào)試?yán)щy、移植性差。C語(yǔ)言簡(jiǎn)潔、靈活、庫(kù)函數(shù)豐富、調(diào)試方便、移植性好,目前已被廣泛地應(yīng)用于系統(tǒng)軟件和應(yīng)用軟件的開(kāi)發(fā)中,為了發(fā)揮各自?xún)?yōu)勢(shì),取長(zhǎng)補(bǔ)短,采用混合編程。大部分程序,如界面、人機(jī)接口(外殼程序)、數(shù)據(jù)處理等用C語(yǔ)言編寫(xiě),以提高程序的開(kāi)發(fā)效率。而某些程序,如需要縮短程序的運(yùn)行時(shí)間,或需要對(duì)硬件進(jìn)行直接操作,或需要利用操作系統(tǒng)的某些功能模塊,或頻繁使用的程序、或需要占用內(nèi)存空間少的程序(內(nèi)核程序),則用匯編編寫(xiě),以提高程序的運(yùn)行效率。

1 嵌入式匯編

嵌入式匯編也稱(chēng)行內(nèi)匯編,源程序中直接插入?yún)R編語(yǔ)句。匯編語(yǔ)句可直接訪(fǎng)問(wèn)C程序中定義的常量、變量、函數(shù)。不必考慮二者之間的接口,方便編程。

1.1 嵌入式匯編語(yǔ)句的格式

格式:asm操作碼 操作數(shù)[;或換行]

其中:操作數(shù)可以是匯編語(yǔ)句中的立即數(shù)、寄存器、表達(dá)式等還可以是C中的常量、變量、標(biāo)號(hào)等。分號(hào);是匯編語(yǔ)句結(jié)束符,并非注解,要用注解,用C的注解。如下例

所示。

1.2 匯編語(yǔ)句訪(fǎng)問(wèn)C的數(shù)據(jù)

嵌入的匯編語(yǔ)句可以訪(fǎng)問(wèn)C語(yǔ)言程序中的任何標(biāo)識(shí)符,包括變量、常量、標(biāo)號(hào)、函數(shù)名、寄存器變量、函數(shù)參數(shù)等。如下例所示。

1.3 匯編語(yǔ)言與C語(yǔ)言接口規(guī)則

1.4 編譯過(guò)程

命令行鍵入命令:TCC-B-Iinclude-Llib 文件名.c即可. TCC會(huì)自動(dòng)調(diào)用TASM.EXE和TLINK.EXE,并且TLINK.EXE能正確的找到需要的.obj和.lib文件,要保證TC目錄下存在TASM.EXE文件。如果單步編譯,可能會(huì)碰到很多的問(wèn)題,主要是TLINK.EXE不會(huì)自己去找.obj和.lib文件。該命令的功能是:.C編譯TCC.ASM匯編TASM.OBJ連接TLINK.EXE。

2 Turbo C模塊連接方式

C、匯編程序各自編程,各自編譯,然后連接在一起。

2.1 匯編語(yǔ)言與C語(yǔ)言接口規(guī)則

①命名約定:匯編的名字前加一個(gè)下劃線(xiàn),C的名字前不加下劃線(xiàn)(編譯后內(nèi)部自動(dòng)加),以確保兩個(gè)模塊內(nèi)部名字一致。

3 結(jié)語(yǔ)

混合編程,主要涉及接口,匯編調(diào)C的函數(shù)、全局變量。C調(diào)匯編的函數(shù)、變量。本文對(duì)此做了淺述。

參考文獻(xiàn):

[1]譚浩強(qiáng).C語(yǔ)言程序設(shè)計(jì)[M].清華大學(xué)出版社,2004.