版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) 第第14章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) 14.1 段間調(diào)用段間調(diào)用 14.2 定義外部標(biāo)識(shí)符偽指令定義外部標(biāo)識(shí)符偽指令 14.3 使用使用extrn和和public的范例的范例 14.4 在指令段使用在指令段使用public 14.5 在數(shù)據(jù)段使用在數(shù)據(jù)段使用public 14.6 參數(shù)傳送參數(shù)傳送 14.7 c語(yǔ)言與匯編語(yǔ)言的鏈接語(yǔ)言與匯編語(yǔ)言的鏈接 第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) 14.1 段段 間間 調(diào)調(diào) 用用 前面介紹的call 指令都是段內(nèi)的調(diào)用,即在同一個(gè)指令段內(nèi)。段內(nèi)調(diào)用的call指令范圍為0000hffffh。
2、一條段內(nèi)調(diào)用指令(call) 的目的碼是3個(gè)字節(jié)長(zhǎng)度,例如: e8 2000 (0020) ;十六進(jìn)制第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) 十六進(jìn)制e8是段內(nèi)調(diào)用指令(call)機(jī)器指令的操作碼,其操作是先把當(dāng)前ip指令指針寄存器的值壓入堆棧保存,這個(gè)值是call的下一條指令地址;然后,再把被調(diào)用的子程序的偏移地址(2000逆序)值送入ip 寄存器,ip0020。微處理器把當(dāng)前cs的值和ip的值相結(jié)合形成物理地址,此地址指向被調(diào)用子程序的第1字節(jié)。當(dāng)子程序的執(zhí)行中,遇到ret指令離開子程序返回時(shí),ret指令會(huì)從堆棧中彈出ip的保留值,并把它裝入ip,使程序返回到call的下一條指令繼
3、續(xù)執(zhí)行,這個(gè)過(guò)程是段內(nèi)調(diào)用。 第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) 其特點(diǎn)是在子程序調(diào)用、返回過(guò)程中段寄存器cs不變化,只有指令指針寄存器ip發(fā)生變化。主程序與被調(diào)用的子程序同在一個(gè)段內(nèi)。 模塊化程序設(shè)計(jì)必然涉及到模塊間的調(diào)用問題。模塊間的調(diào)用是通過(guò)段間的調(diào)用來(lái)實(shí)現(xiàn)的。若被調(diào)用的子程序是在現(xiàn)指令段之外,則稱為段間調(diào)用。一條段間調(diào)用指令(call)的機(jī)器指令碼共有5個(gè)字節(jié)。例如: 9a 0002 af04 (04af 0200) ;十六進(jìn)制第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) 十六進(jìn)制9a是段間調(diào)用指令(call)機(jī)器指令的操作碼。操作是:首先將cs段寄存器的值壓入堆棧,并把
4、被調(diào)用子程序所在段的段值(af04逆序)裝入cs段寄存器,cs04af;然后把ip指令指針寄存器的值壓入堆棧,并將被調(diào)用子程序相應(yīng)的偏移地址(0002逆序)裝入ip,ip0200。第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) 這些操作建立了被調(diào)用子程序的第一條待執(zhí)行指令的地址: 十六進(jìn)制 段 值: cs 04af0 偏移地址: ip + 0200 物理地址: 04cf0第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) 當(dāng)離開子程序返回時(shí),段間調(diào)用的ret指令會(huì)從堆棧中依序彈出ip和cs兩個(gè)寄存器的原值,返回到call的下一條指令。其特點(diǎn)是在子程序調(diào)用、返回過(guò)程中,段寄存器cs和指令指針寄存器i
5、p均發(fā)生變化。主程序與被調(diào)用的子程序不在同一個(gè)段內(nèi)。 第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) 14.2 定義外部標(biāo)識(shí)符偽指令定義外部標(biāo)識(shí)符偽指令 當(dāng)進(jìn)行模塊化程序設(shè)計(jì)時(shí),首先應(yīng)考慮的問題是模塊間控制的耦合和數(shù)據(jù)的耦合??刂岂詈暇褪悄K在怎樣的環(huán)境下如何進(jìn)入又如何退出。數(shù)據(jù)耦合就是諸模塊間如何進(jìn)行數(shù)據(jù)通訊。例如,有一個(gè)主模塊(mainprog)調(diào)用一個(gè)子模塊(subprog),它要用到一個(gè)段間調(diào)用(call),如圖14-1所示。第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) extrn subprog:farmainprog: call subprog public subprogsub
6、prog: ret圖14-1 段間調(diào)用第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) 主模塊mainprog內(nèi)的call指令,必須知道子模塊subprog是位于本段之外的標(biāo)號(hào)。否則匯編過(guò)程中會(huì)產(chǎn)生一個(gè)錯(cuò)誤信息指出subprog是一個(gè)未定義的符號(hào)。extrn偽指令就是執(zhí)行此功能的,它告訴匯編程序subprog是一個(gè)遠(yuǎn)程的標(biāo)號(hào)(far label),是定義在另一個(gè)模塊里的。因?yàn)閰R編程序無(wú)法知道真是如此,所以就產(chǎn)生“空的”目的操作數(shù)0000,即先空出;而由鏈接程序在鏈接時(shí)再填入確定值。例如(參考例14.4主模塊程序清單): 0011 9a0000-e 第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì)
7、子模塊subprog內(nèi)含有一個(gè)public偽指令,它告訴匯編程序和鏈接程序,其他模塊需要知道subprog的地址。當(dāng)mainprog與subprog都已匯編成目的模塊文件后,它們可以下列的方式來(lái)鏈接: link mainprog+subprog run file mainprog.exe: list file nul.map: con libraries .lib:第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) 鏈接程序?qū)⒁粋€(gè)目的模塊內(nèi)的extrn匹配上另一個(gè)模塊內(nèi)的public,并將插入所有需要的偏移地址,然后把兩個(gè)目的模塊組合成一個(gè)可執(zhí)行的文件。若有不匹配的情況,鏈接程序會(huì)給出錯(cuò)誤信息。
8、利用extrn和public這兩條偽指令,一個(gè)模塊可以訪問其他模塊的標(biāo)識(shí)符(變量或者標(biāo)號(hào))。如果一個(gè)標(biāo)識(shí)符只在這一個(gè)模塊中定義過(guò),那么它相對(duì)這個(gè)模塊就是一個(gè)內(nèi)部的標(biāo)識(shí)符或局部標(biāo)識(shí)符。如果它沒有在這一個(gè)模塊中定義過(guò),而是在其他一個(gè)模塊中定義過(guò),那么它相對(duì)于該模塊就稱為外部標(biāo)識(shí)符。 第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) 對(duì)于只產(chǎn)生一個(gè)單一目標(biāo)模塊的匯編語(yǔ)言程序而言,它所訪問的所有標(biāo)識(shí)符必須是局部(內(nèi)部)定義的,否則就會(huì)產(chǎn)生一個(gè)錯(cuò)誤信息匯編程序會(huì)查出有一個(gè)未定義的標(biāo)識(shí)符(標(biāo)號(hào)或變量)存在。對(duì)于多模塊程序來(lái)說(shuō),必須給匯編程序一個(gè)信息以說(shuō)明其間的有些標(biāo)識(shí)符是外部的,而不至于匯編程序把它們理解為
9、一些無(wú)效的標(biāo)識(shí)符。此外為了允許其他模塊訪問本給定模塊中的標(biāo)識(shí)符,該給定模塊必須包含一個(gè)標(biāo)識(shí)符清單,以說(shuō)明其中的標(biāo)識(shí)符可以讓其他模塊訪問。因此,每個(gè)模塊可含有(不一定絕對(duì)含有)兩個(gè)清單,一個(gè)清單表明它所訪問其他模塊的外部標(biāo)識(shí)符(extrn),而另一個(gè)則列出它所定義的且讓其他模塊訪問的標(biāo)識(shí)符(public); 第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) 這兩個(gè)清單靠extrn和public這兩條偽指令來(lái)列出。 extrn和public偽指令的格式如下: extrn 標(biāo)識(shí)符:類型, public 標(biāo)識(shí)符, extrn偽指令里的標(biāo)識(shí)符是被申明的外部的變量或標(biāo)號(hào),而public偽指令里的標(biāo)識(shí)符是供其
10、他模塊使用的變量或標(biāo)號(hào)。由于在產(chǎn)生相應(yīng)的機(jī)器代碼之前,匯編語(yǔ)言必須要知道所有標(biāo)識(shí)符的類型,以便確定指令的字節(jié)數(shù)(長(zhǎng)度),故在extrn偽指令里的每一個(gè)標(biāo)識(shí)符都伴有類型符出現(xiàn)。 第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) 對(duì)于變量來(lái)說(shuō),類型有byte、word、dword等,對(duì)于標(biāo)號(hào)來(lái)說(shuō)類型則有near或far。注意:標(biāo)識(shí)符可以是變量、符號(hào)常量、標(biāo)號(hào)和過(guò)程名。 例如:inc var1 語(yǔ)句,如果var1是外部變量,并且是一字變量,那么在含有這個(gè)語(yǔ)句的模塊中必須使用下列偽指令: extrn ,var1:word 而在定義var1的模塊中則一定要有下面的偽指令: public ,var1第第14
11、14章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) 鏈接程序的主要任務(wù)之一,就是檢測(cè)并證實(shí)extrn語(yǔ)句里的每一個(gè)標(biāo)識(shí)符是否與public語(yǔ)句的標(biāo)識(shí)符相匹配,如果不相匹配,鏈接程序就會(huì)給出出錯(cuò)信息。下面給出三個(gè)模塊,說(shuō)明鏈接程序是怎樣查找匹配,并指出其中錯(cuò)誤。第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) 模塊1:extrn var2:word,lab2:farpublic var1,lab1; data1 segment var1 db 2 var3 db ? var4 dw ?data1 ends; 第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) lab1: 模塊2:extrn var1:byte,v
12、ar4:wordpublic var2 鏈接錯(cuò)誤,原因是模塊1中public ; 沒有申明匹配 data2 segment var2 dw 0 var3 db 5 dup(?)data2 ends ; 第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) 模塊3:extrn lab1:farpublic lab2,lab3 ; 其他模塊未使用lab2: 不需申明 lab3: 第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) 14.3 使用使用extrn和和public的范例的范例 下面的例子中含有兩個(gè)模塊:主模塊callmul1和一個(gè)子模塊submul1。主模塊定義了堆棧段、數(shù)據(jù)段和指令段。數(shù)據(jù)段定義
13、了兩個(gè)數(shù)據(jù)項(xiàng)price和qty。指令段分別把price和qty裝入ax和bx寄存器,然后調(diào)用子模塊。主模塊內(nèi)的偽指令extrn指明了本模塊使用的外部模塊submul1。 第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) 子模塊內(nèi)有一條偽指令public,它告訴鏈接程序sumul1是由其他模塊調(diào)用的,同時(shí)指明此處是鏈接的進(jìn)入點(diǎn)。子模塊的功能是把a(bǔ)x寄存器的內(nèi)容乘以bx寄存器的內(nèi)容,所得乘積放入dx:ax這一對(duì)寄存器內(nèi)。 子模塊內(nèi)沒有定義任何數(shù)據(jù),所以它沒有數(shù)據(jù)段;也可以定義數(shù)據(jù)段,但只能在子模塊中使用。 在子模塊內(nèi)也沒有定義堆棧段,它與主模塊共同使用一個(gè)堆棧。所以,在主模塊中定義的堆棧,子模塊也可
14、以使用。鏈接程序要求至少有一個(gè)堆棧段,在主模塊內(nèi)定義的堆棧段就可以滿足要求。第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) 例14.1 extrn和public應(yīng)用。 主模塊程序清單如下:; 主模塊:; filename:callmul1.asmextrn submul1:far; stack segment para stack stack dw 64 dup (?)stack ends第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) ; datasgsegment para dataqty dw 0140hprice dw 2500hdatasgends; codesg segment pa
15、ra codebegin proc far assume cs:codesg,ds:datasg,ss:stack第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) push ds sub ax,ax push ax movax,datasg mov ds,ax mov ax,price mov bx,qty call submul1 retbegin endpcodesg ends end begin第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) 子模塊程序清單如下:; filename:submul1.asm;子模塊:codesg segment para codesubmul1 proc f
16、ar assume cs:codesg public submul1 mul bx ret第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) submul1 endpcodesg ends end submul1主模塊和子模塊分別匯編正確無(wú)誤后,參考上節(jié)內(nèi)容鏈接,產(chǎn)生一個(gè)exe文件。c:masmlink callmul1+submul1run file callmul1.exe:enter(回車)list file nul.map: enterlibraries .lib: enter第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) 14.4 在指令段使用在指令段使用public 在主模塊的指令段和
17、子模塊的指令段使用public偽指令,鏈接程序會(huì)把兩個(gè)邏輯指令區(qū)段結(jié)合成一個(gè)實(shí)際的指令段。在例14.1的主模塊和子模塊中各有一處修改,均是在指令段的segment偽指令內(nèi)使用public,用法如下:cod esg segment para public code第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) 例14.2 在指令段使用public。主模塊程序清單如下:; 主模塊:; filename:callmul.asmextrn submul:far; stack segment para stack stack dw 64 dup (?)stack ends第第1414章章 模塊化程序設(shè)計(jì)
18、模塊化程序設(shè)計(jì) ; datasgsegment para dataqty dw 0140hprice dw 2500hdatasg ends第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) ; codesg segment para public codebegin proc far assume cs:codesg,ds:datasg,ss:stack push ds sub ax,ax push ax mov ax,datasg mov ds,ax第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) mov ax,price mov bx,qty call submul retbegin endp
19、codesg ends end begin第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) 子模塊程序清單如下:; filename:submul.asm; 子模塊:codesg segment para public codesubmul proc far assume cs:codesg public submul mul bx第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) retsubmul endpcodesg ends end submul第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) 當(dāng)兩個(gè)段使用同一個(gè)名稱(codesg)、同樣的類型(code)以及同樣段的組合類型(public)時(shí)
20、,鏈接程序會(huì)把這樣的兩個(gè)邏輯段組合成一個(gè)實(shí)際的物理指令區(qū)。通過(guò)匯編時(shí)產(chǎn)生的lst文件中的符號(hào)表,可以了解到一個(gè)指令段的情況;也可利用debug程序觀察到一個(gè)指令段的情況。第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) 14.5 在數(shù)據(jù)段使用在數(shù)據(jù)段使用public 你可能會(huì)有這樣的需求,在一個(gè)模塊內(nèi)要處理另外一個(gè)模塊的數(shù)據(jù)。例如前面的例題中,主模塊仍然定義數(shù)據(jù)price和qty;但是由子模塊使用它們,把它們的值放入ax和bx。程序修改如下: 第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) 例14.3 在數(shù)據(jù)段使用public。主模塊程序清單如下:; 主模塊:; filename:callmul
21、.asmextrn submul:farpublic qty,price; stack segment para stack stack第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) dw 64 dup (?)stack ends; datasgsegment para public dataqty dw 0140hprice dw 2500hdatasgends; 第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) codesg segment para public codebegin proc far assume cs:codesg,ds:datasg,ss:stack push ds s
22、ub ax,ax push ax mov ax,datasg mov ds,ax call submul ret第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) begin endpcodesg ends end begin 子模塊程序清單如下:; filename:submul.asm; 子模塊: extrn qty:word,price:word; codesg segment para public code第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) submul proc far assume cs:codesg public submul mov ax,price第第1414章章
23、模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) mov bx,qty mul bx retsubmul endpcodesg ends end submul第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) public qty,price ;聲明主模塊的qty和price為外部引用extrn qty:word,price:word;聲明qty 和price是外部標(biāo)識(shí)符 子模塊中使用了主模塊的變量,所以兩個(gè)模塊中都應(yīng)進(jìn)行聲明:第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) 14.6 參參 數(shù)數(shù) 傳傳 送送 主模塊調(diào)用子模塊,通常也稱為主程序調(diào)用子程序,主程序經(jīng)常要傳送一些參數(shù)給子程序,子程序運(yùn)行完成后一般都要返回一
24、些信息給主程序。這種主程序和子程序間的信息傳送稱為參數(shù)傳送或過(guò)程間的數(shù)據(jù)通信。參數(shù)傳送的方法有三種:第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) (1) 利用寄存器傳遞參數(shù):適用參數(shù)較少時(shí);(2) 利用存儲(chǔ)器傳遞參數(shù):適用參數(shù)較多時(shí);(3) 利用堆棧傳遞參數(shù):適用嵌套、遞歸情況。數(shù)據(jù)傳送根據(jù)范圍可分為以下幾種:(1) 同一個(gè)模塊內(nèi)的段內(nèi)參數(shù)傳送。(2) 同一個(gè)模塊內(nèi)的段間參數(shù)傳送。(3) 不同模塊間的參數(shù)傳送。(4) 不同語(yǔ)言間的參數(shù)傳送第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) 例14.4 利用堆棧傳送參數(shù)。 主模塊程序清單如下:; 主模塊:; filename:callmul.asm
25、 extrn submul:far ; 0000 stack segment para stack stack 0000 0040 dw 64 dup (?) ? 第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) 0080stack ends ; 0000datasgsegment para data 0000 0140qty dw 0140h 0002 2500price dw 2500h 0004datasg ends ; 第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) 0000 codesg segment para public code 0000 begin proc far assu
26、me cs:codesg,ds:datasg,ss:stack 0000 1epush ds 0001 2b c0 sub ax,ax 0003 50 push ax 0004 b8 - rmov ax,datasg 第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) 0007 8e d8 mov ds,ax 0009 ff 36 0002 r push price 000d ff 36 0000 r push qty 0011 9a 0000 e call submul 0016 cbret 0017begin endp 0017codesg ends end begin 第第1414章章 模塊
27、化程序設(shè)計(jì)模塊化程序設(shè)計(jì) 子模塊程序清單如下:; filename:submul.asm ;子模塊: 0000 codesg segment para public code 0000 submul proc far assume cs:codesg public submul 0000 55push bp 第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) 0001 8b ecmov bp,sp 0003 8b 46 08mov ax,bp+8 0006 8b 5e 06mov bx,bp+6 0009 f7 e3mul bx 000b 5dpop bp 000c ca 0004ret 4 00
28、0fsubmul endp 000fcodesg ends end 第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) 主模塊程序在調(diào)用子模塊程序submul之前,把 price和 qty都?jí)喝攵褩!?堆棧的變化如下: 16 00 xx xx 40 01 00 25 00 00 xx xx 6 5 4 3 2 1第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) (1) push ds 將ds中的段地址壓入堆棧。(2) push ax 把偏移地址0壓入堆棧。(3) push price 把2500壓入堆棧。(4) push qty 把0140壓入堆棧。(5) call 把cs寄存器的內(nèi)容壓入堆棧。(6
29、) ip 指令指針寄存器的內(nèi)容0016 也被壓入堆棧。 第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) 被調(diào)用的子模塊程序submul要用bp來(lái)取得堆棧內(nèi)的參數(shù)。它的第一個(gè)操作是把bp的內(nèi)容壓入到堆棧保存起來(lái)。本例中bp的內(nèi)容正好是0,然后把sp的內(nèi)容送入bp。因?yàn)閎p可以作為尋址寄存器,而sp則不行。此操作使bp的值為0072,因?yàn)閟p的初值應(yīng)是堆棧的大小十六進(jìn)制80,每次壓入堆棧一個(gè)字sp減2。堆棧指針的變化應(yīng)是: 00 00 16 00 xx xx 40 01 00 25 00 00 xx xx . sp: 72 74 76 78 7a 7c 7e 80第第1414章章 模塊化程序設(shè)計(jì)模
30、塊化程序設(shè)計(jì) 因?yàn)楝F(xiàn)在bp的內(nèi)容是0072,所以price在bp+8位置,而qty在bp+6位置。下面兩條指令把這些值分別搬入ax和bx,然后作乘法。要從子模塊程序回到調(diào)用程序時(shí),先恢復(fù)bp的值0000并將sp加2,從72變成74。 最后一條指令ret,是一條子程序返回指令,它執(zhí)行下列操作:第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) (1) 彈出當(dāng)前堆棧頂端的字1600送入ip。 (2) 把sp+2,sp從74增為76。 (3) 取出目前堆棧頂端的字(xxxx),存入cs。 (4) 把sp+2,sp從76增為78。 子程序返回指令帶有參數(shù)即ret 4,指令中的4的作用是保證正確返回,將sp的值加4修正為7c。這是因?yàn)槎褩?nèi)的參數(shù)已不再需要,故予以舍棄。使用堆棧傳送參數(shù)時(shí)應(yīng)特別小心,sp的值弄錯(cuò)的話會(huì)產(chǎn)生預(yù)想不到的結(jié)果。第第1414章章 模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì) 14.7 c語(yǔ)言與匯編語(yǔ)言的鏈接語(yǔ)言與匯編語(yǔ)言的鏈接 c語(yǔ)言與匯編語(yǔ)言的鏈接是指c語(yǔ)言與匯編語(yǔ)言的互相調(diào)用。通常只是指從c語(yǔ)言調(diào)用匯編語(yǔ)言程序。這是因?yàn)閏語(yǔ)言不但編程容易,而且效率高。但是,匯編語(yǔ)言效率最高,特別是適合對(duì)硬件的直接控制。因此,采用c語(yǔ)言與匯編語(yǔ)言混合編程的方法,能得到高質(zhì)量的程序
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年上網(wǎng)課學(xué)習(xí)心得體會(huì)(3篇)
- 課題申報(bào)參考:教育數(shù)字化轉(zhuǎn)型下高校輔導(dǎo)員數(shù)字素養(yǎng)測(cè)評(píng)及提升路徑研究
- 2025年度個(gè)人商鋪長(zhǎng)期租賃合同標(biāo)的物詳細(xì)清單3篇
- 2025年度個(gè)人肖像權(quán)授權(quán)使用協(xié)議書個(gè)人肖像權(quán)體育賽事推廣授權(quán)3篇
- 二零二五年度出租房屋消防安全設(shè)施改造施工合同4篇
- 二零二五年度假離婚法律風(fēng)險(xiǎn)評(píng)估及解決方案合同3篇
- 2025年度無(wú)人機(jī)租賃合同協(xié)議書8篇
- 2025版木工預(yù)制構(gòu)件生產(chǎn)與安裝合同范本4篇
- 個(gè)人合同擔(dān)保書(2024年樣本):教育貸款擔(dān)保2篇
- 2025年個(gè)人挖機(jī)租賃合同續(xù)簽協(xié)議4篇
- 2025水利云播五大員考試題庫(kù)(含答案)
- 老年髖部骨折患者圍術(shù)期下肢深靜脈血栓基礎(chǔ)預(yù)防專家共識(shí)(2024版)解讀
- 中藥飲片驗(yàn)收培訓(xùn)
- 手術(shù)室??谱o(hù)士工作總結(jié)匯報(bào)
- DB34T 1831-2013 油菜收獲與秸稈粉碎機(jī)械化聯(lián)合作業(yè)技術(shù)規(guī)范
- 創(chuàng)傷處理理論知識(shí)考核試題及答案
- (正式版)HG∕T 21633-2024 玻璃鋼管和管件選用規(guī)定
- 《義務(wù)教育數(shù)學(xué)課程標(biāo)準(zhǔn)(2022年版)》測(cè)試題+答案
- 殘疾軍人新退休政策
- 小學(xué)語(yǔ)文教師基本功大賽試卷及答案
- 《鐵路超限超重貨物運(yùn)輸規(guī)則》(2016)260
評(píng)論
0/150
提交評(píng)論