freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

模塊化程序設(shè)計與混合編程-文庫吧

2024-12-23 21:46 本頁面


【正文】 AX, SEG BUF1 MOV DS, AX MOV AL, BUF1 ADD AL, BL MOV BUF1, AL POP DS RET SET ENDP CODE ENDS END 運行顯示: 8 ?第 9章 模塊化程序設(shè)計與混合編程 匯編語 言程序 設(shè)計 高等 教 育出版社 這個例子中模塊 A與模塊 B各有自已的數(shù)據(jù)段,當(dāng)控制從模塊 A轉(zhuǎn)移到模塊 B時, DS仍指向模塊 A的數(shù)據(jù)段,由于模塊 B要使用 DS訪問自已的數(shù)據(jù)段,所以它先將 DS壓棧保存,然后使 DS指向自己的數(shù)據(jù)段,完成數(shù)據(jù)的讀取后,又修改 DS使之指向模塊 A的數(shù)據(jù)段,從而訪問模塊 A的 BUF1變量 。最后,在返回模塊 A前通過出棧將 DS恢復(fù)為進入時的初值(本例中由于在訪問模塊 A的變量 BUF1時已使 DS指向了模塊 A的數(shù)據(jù)段,保存恢復(fù) DS的工作可以省略)。 這個例子的關(guān)鍵是訪問外部模塊的變量前事先要調(diào)整 DS使之保存外部變量所在段的段地址。由于訪問內(nèi)存并不一定非要用 DS,若用其它段寄存器(如 ES),則除了要事先調(diào)整該段寄存器使之存儲被訪問外部變量所在段的段值外,還要在使用變量時在前面加上段超越標(biāo)記,如可將模塊 B修改如下: ?第 9章 模塊化程序設(shè)計與混合編程 匯編語 言程序 設(shè)計 高等 教 育出版社 EXTRN BUF1: BYTE PUBLIC SET DATA SEGMENT BUF2 DB 39。539。 DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA SET PROC FAR PUSH DS MOV AX, DATA MOV DS, AX MOV BL, BUF2 MOV AX, SEG BUF1 MOV ES, AX MOV AL, ES: BUF1 ;使用段超越標(biāo)記 ADD AL, BL MOV ES: BUF1, AL POP DS RET SET ENDP CODE ENDS END ?第 9章 模塊化程序設(shè)計與混合編程 匯編語 言程序 設(shè)計 高等 教 育出版社 模塊間信息傳遞的另一個方法是利用 COMMON段,只要二個模塊中都定義一個同名同類別的數(shù)據(jù)段,且組合類型都為 COMMON,由于這二個段在鏈接時要重合為一個段,只要在這二個段內(nèi)將變量安排在相同的位置上,那么它們對應(yīng)的是相同的存儲區(qū)。 【 例 】 利用 COMMON段訪問另一個模塊的數(shù)據(jù)區(qū)。 將上例進行修改,如下: ?第 9章 模塊化程序設(shè)計與混合編程 匯編語 言程序 設(shè)計 高等 教 育出版社 模塊 A: EXTRN SET: FAR DATA SEGMENT COMMON BUF1 DB 3 BUF2 DB 39。039。 DATA ENDS CODE1 SEGMENT ASSUME CS: CODE1, DS: DATA START: MOV AX, DATA MOV DS, AX CALL SET MOV DL, BUF2 MOV AH, 2 INT 21H MOV AH, 4CH INT 21H CODE1 ENDS END START ?第 9章 模塊化程序設(shè)計與混合編程 匯編語 言程序 設(shè)計 高等 教 育出版社 模塊 B: PUBLIC SET DATA SEGMENT BUF1 DB ? BUF2 DB ? DATA ENDS CODE2 SEGMENT ASSUME CS: CODE2, DS: DATA SET PROC FAR MOV AL, BUF1 ADD BUF2, AL RET SET ENDP CODE2 ENDS END 返回本章首頁 返回本節(jié)首頁 ?第 9章 模塊化程序設(shè)計與混合編程 匯編語 言程序 設(shè)計 高等 教 育出版社 匯編語言與高級語言的接口 概述 嵌入式匯編 匯編語言與 C語言的接口 ?第 9章 模塊化程序設(shè)計與混合編程 匯編語 言程序 設(shè)計 高等 教 育出版社 對于一項軟件工程而言,首要目標(biāo)是保證達到軟件所需質(zhì)量,其次是盡可能降低開發(fā)成本。匯編語言與高級語言在語言表達能力、表達的方便程度、編程效率和運行效率方面各有特點,這就需要它們相互“取長補短”,即混合編程,以便取得最大的綜合效益。高級語言與匯編語言的混合編程通常發(fā)生在下列情況下: ① 需要訪問機器的硬件特征,這些特征用高級語言表達比較困難。 ② 某些程序段需要頻煩運行,單次運行速度的提高可顯著提高整個系統(tǒng)運行效率。 ③ 有現(xiàn)成的匯編語言程序段可用。 ?第 9章 模塊化程序設(shè)計與混合編程 匯編語 言程序 設(shè)計 高等 教 育出版社 高級語言種類較多,本章主要討論與 C語言的混合編程問題,流行的 C編譯器主要有 Turbo C和 MS C,本書主要以 Turbo C為例。 C語言的目標(biāo)是追求效率,因而它與匯編語言與較多的“血源關(guān)系”。 C語言提供了三種調(diào)用匯編語言功能的方法:( 1)嵌入?yún)R編 (2)寄存器偽變量與 bdos()、 intdos()、 int86()等系列 DOS、 BIOS服務(wù)調(diào)用函數(shù) (3)C語言與匯編語言的混合編程。其中第二種方法因主要涉及 C語言的編程問題,本書不作討論,請讀者參考相關(guān) C語言書籍。 返回本章首頁 返回上一節(jié) 返回本節(jié)首頁 ?第 9章 模塊化程序設(shè)計與混合編程 匯編語 言程序 設(shè)計 高等 教 育出版社 在 C程序中可以直接插入?yún)R編語言語句,稱為嵌入式匯編。 asm [標(biāo)號 ] 匯編指令或偽指令 參數(shù) ;或新行 說明: asm 是嵌入?yún)R編語句的關(guān)鍵字 匯編指令或偽指令 可是任何有效的匯編指令或偽指令 標(biāo)號 是可選的。 參數(shù) 是匯編指令或偽指令的操作數(shù),它可引用 C語言中的常量、變量和標(biāo)號。 ;或新行 都表示 asm語句的結(jié)束,一行內(nèi)可寫多條嵌入式匯編語句,它們以“;”分隔。一行內(nèi)如果只有一個 asm語句,則后面不需要“;”, asm 語句是 C語言中唯一的依靠換行的語句。 asm語句如需要注釋,必須采用 C格式的注釋,即“ /* 注釋內(nèi)容 */” 編譯后,函數(shù)外的匯編語句放在數(shù)據(jù)段內(nèi),函數(shù)內(nèi)的匯編語句放在代碼段內(nèi)。 ?第 9章 模塊化程序設(shè)計與混合編程 匯編語 言程序 設(shè)計 高等 教 育出版社 含有嵌入式匯編的程序不能在 Turbo C集成開發(fā)環(huán)境下進行編譯,因為集成開發(fā)環(huán)境不支持這一功能。這樣的程序必須使用 Turbo C的命令行編譯器 ,而 TASM.EXE,所以當(dāng)前目錄下必須保證有匯編程序 。 : 其中 file[s]需要編譯或連接的文件,可有一個或多個。 [ options ]為各個參數(shù)選項,常用的有“ B” 用于指示源程序中使用了嵌入?yún)R編,“ – S” 能使 。若程序中使用了嵌入?yún)R編,調(diào)用 TCC時必須選擇 B參數(shù),或者是在程序中使用偽指令“ pragma inline” ,此偽指令功能與“ B” 參數(shù)等效。 TCC [ options ] file[s] ?第 9章 模塊化程序設(shè)計與混合編程 匯編語 言程序 設(shè)計 高等 教 育出版社 【 例 】 嵌入式匯編的編譯連接 有如下程序: asm BUF DB “this is a test $” main() { asm MOV AH, 9 asm MOV DX, OFFSET BUF asm INT 21H } 在 TC的集成開發(fā)環(huán)境下編輯完以上程序后,存盤(假設(shè)文件名為 ),然后以如下命令行進行編譯連接: tcc – B . (注意: tcc的參數(shù)是區(qū)分大小寫的,不要將“ B” 寫成“ b” ) 則可生成 ,在 DOS下運行之,即可在屏幕上顯示“ this is a test” 。 ?第 9章 模塊化程序設(shè)計與混合編程 匯編語 言程序 設(shè)計 高等 教 育出版社 【 例 】 從嵌入?yún)R編語句中訪問 C定義的局部及全局變量。分析如下程序: include int i=3; main() { char j=39。a39。; struct s{ int x; int y; }stru; =50; =20; printf(\nj=%c, j); asm inc byte ptr j printf(\nj=%c, j); printf(\ni=%d, i); asm mov ax, asm sub ax, asm mov i, ax printf(\ni=%d, i); } 該程序的運行結(jié)果如下: j=a j=b i=3 i=30 ?第 9章 模塊化程序設(shè)計與混合編程 匯編語 言程序 設(shè)計 高等 教 育出版社 嵌入?yún)R編碼中的轉(zhuǎn)移指令只能引用 C中定義的標(biāo)號,而嵌入?yún)R編碼中的非轉(zhuǎn)移指令則可引用除標(biāo)號以外的任何 C元素。 在嵌入?yún)R編碼的末尾,下列寄存器的值必須與進入嵌入?yún)R編碼時的值保持一致: BP、 SP、 CS、 DS、 SS。如果 C程序中用到了寄存器變量,還需再保證 SI、 DI的值不變,其它寄存器的值可自由改變。 返回本章首頁 返回本節(jié)首頁 ?第 9章 模塊化程序設(shè)計與混合編程 匯編語 言程序 設(shè)計 高等 教 育出版社 匯編語言與C語言的混合編程 1. 調(diào)用約定 在混合編程中,雙方在如下方面必須遵循相同的接口約定,才可使雙方的代碼協(xié)同工作。 ① 內(nèi)存模式: 即對內(nèi)存的使用,主要是段、組的劃分,以及段名、組名的約定等。若二種語言對段的劃分情況不同,則雙方指針或地址的使用便不同,這時極易發(fā)生運行錯誤。如在函數(shù)調(diào)用中,一方將四節(jié)地址壓棧,而另一方則只將二字節(jié)地址出棧,可能造成程序崩潰。 ② 命名約定: 即標(biāo)識符的命名規(guī)則,以及是否區(qū)分大小寫等。 ③ 調(diào)用約定: 調(diào)用者以什么順序?qū)?shù)壓棧,被調(diào)用者以什么順序提取參數(shù),由誰負責(zé)最后清除堆棧中的參數(shù)等。 ④ 參數(shù)傳遞約定: 調(diào)用參數(shù)以什么方式傳遞的,例如傳遞的是參數(shù)的值還是參數(shù)的地址等。 ?第 9章 模塊化程序設(shè)計與混合編程 匯編語 言程序 設(shè)計 高等 教 育出版社 2. Tucbo C的六種存儲模式 為允許程序員決定內(nèi)存布局結(jié)構(gòu),以便更合理高效地使用內(nèi)存, Tucbo C提供了六種存儲模式( MS C相同),如下: ① 極小模式: 程序的所有代碼和數(shù)據(jù)限制在 64K內(nèi),即程序只有一個段, CS=DS=ES=SS,所有指針全部為 near指針。 ② 小模式: 代碼和數(shù)據(jù)各占一個段,因而代碼和數(shù)據(jù)分別不能超過 64K。DS=SS=ES,所有指針都為 near指針。 ③ 中模式:
點擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1