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

正文內(nèi)容

匯編語言程序設(shè)計(jì)(完整版)

2025-09-09 17:41上一頁面

下一頁面
  

【正文】 )=123,顯示: 00123; (BX)=234,顯示: 00234; 解: 見書,略。增加字符串的長度 INC BX 。書寫’ a?的 ASCII碼 61H也可以 JB over CMP AL, ?z? JA over SUB AL, 20H 。近返回指令 RETF 。BX所指內(nèi)存字單元的值是子程序的偏移量 CALL dword ptr [BX] 。 子程序的調(diào)用和返回指令 調(diào)用指令 第 7章 子程序和庫 如果被調(diào)用子程序的屬性是遠(yuǎn)的 , 那么 , CALL指令將產(chǎn)生一個(gè)遠(yuǎn)調(diào)用 。可選項(xiàng),最好采用寄存器的保護(hù)和恢復(fù)方法 ?所用額外存儲(chǔ)單元 。 .STARTUP——在代碼段的開始用于自動(dòng)初始化寄存器 DS、 SS和 SP; .EXIT——用于結(jié)束程序的運(yùn)行,它等價(jià)于下列二條語句: MOV AH, 4CH INT 21h 當(dāng)使用匯編程序 TASM時(shí),以上二條偽指令分別改為: STARTUPCODE和EXITCODE。STACK39。 偽指令“ .FARDATA?”說明下面是一個(gè)未初始化的、獨(dú)立數(shù)據(jù)段的開始。 如果用偽指令來指定程序所遵循的語言類型,那么,將不允許子程序的嵌套定義。在這種模型下,數(shù)據(jù)段寄存器的內(nèi)容保持不變,轉(zhuǎn)移可以是段間轉(zhuǎn)移。 段的基本屬性 第 6章 程序的基本結(jié)構(gòu) 程序存儲(chǔ)模式說明偽指令的格式如下: .MODEL 存儲(chǔ)模式 [,語言類型 ] [,操作系統(tǒng)類型 ] [,堆棧類型 ] 程序可選的存儲(chǔ)模式有: TINY、 SMALL、 COMPACT、 MEDIUM、 LARGE、HUGE和 FLAT。 輔助循環(huán)偽指令 .BREAK和 .CONTINUE只能在偽指令 .WHILE- .ENDW和.REPEAT- .UNTIL的循環(huán)體內(nèi)使用。所以,這時(shí)由“ .REPEAT- .UNTILCXZ condition”所構(gòu)成的循環(huán)就與用 LOOPNE/LOOPE指令所過程的循環(huán)是一致的,它們都是以“ condition || CX=0”為循環(huán)終止條件。另外,還增加兩個(gè)輔助循環(huán)的偽指令。檢測(cè) CF==1且 AX!=BX是否成立 。 第 6章 程序的基本結(jié)構(gòu) 條件表達(dá)式中可用的操作符有: ==(等于 )、 !=(不等 )、 (大于 )、 =(大于等于 )、(小于 )、 =(小于等于 )、 amp。其中:變量 X和 Y是有符號(hào)字變量。 在匯編語言的源程序也同樣有此三大結(jié)構(gòu) , 所不同的是它們的表現(xiàn)形式不同 。定義堆棧段 STACK1 DB 256 DUP(?) STACK1 ENDS DATA1 SEGMENT 。 … ASSUME SS:STACK1 。訪問段 DATA2中的字變量 word2 … ASSUME DS:DATA3, ES:NOTHING 。定義數(shù)據(jù)段 DATA3 byte2 DB ? DATA3 ENDS 第 6章 程序的基本結(jié)構(gòu) CODE1 SEGMENT 。 在 ASSUME語句中,還可以用關(guān)鍵字 NOTHING來說明某個(gè)段寄存器不與任何段相對(duì)應(yīng)。 段的長度是指該段所占的字節(jié)數(shù): ?如果段是數(shù)據(jù)段,則其長度是其所有變量所占字節(jié)數(shù)的總和; ?如果段是代碼段,則其長度是其所有指令所占字節(jié)數(shù)的總和。段定義的一般格式如下: 段名 SEGMENT [對(duì)齊類型 ] [組合類型 ] [類別 ] … 。調(diào)用 DOS功能,結(jié)束程序的運(yùn)行 CODE1 ENDS 第 6章 程序的基本結(jié)構(gòu) 段寄存器的說明語句 在匯編語言源程序中可以定義多個(gè)段,每個(gè)段都要與一個(gè)段寄存器建立一種對(duì)應(yīng)關(guān)系。 DATA1 SEGMENT 。④ MOV ES, AX 。 方法 1: Stack1 SEGMENT DB 256 DUP(?) 。定義一個(gè)堆棧段,其段名為 STACK1 DB 256 DUP(?) STACK1 ENDS 上述段定義說明了該段是堆棧段,系統(tǒng)會(huì)自動(dòng)把段寄存器 SS和棧頂寄存器 SP與該堆棧段之間建立相應(yīng)的關(guān)系,并設(shè)置其初值,而不用在代碼段對(duì)它們進(jìn)行賦值。 偽指令 END后面可附帶一個(gè)在程序中已定義的標(biāo)號(hào),該標(biāo)號(hào)指明程序的啟動(dòng)位置。 A←(X Y+24)/Z的商, B←(X Y+24)/Z的余數(shù) 其中:變量 X和 Y是 32位有符號(hào)數(shù),變量 A, B和 Z是 16位有符號(hào)數(shù)。 else a = 21。例如: .IF CARRY? amp。 第 6章 程序的基本結(jié)構(gòu) 一 、 用循環(huán)指令構(gòu)成循環(huán)結(jié)構(gòu) 例 :分類統(tǒng)計(jì)字?jǐn)?shù)組 data中正數(shù) 、 負(fù)數(shù)和零的個(gè)數(shù) , 并分別存入內(nèi)存字變量Positive、 Negative和 Zero中 , 數(shù)組元素個(gè)數(shù)保存在其第一個(gè)字中 。若該表達(dá)式的值為真,則終止該循環(huán),并將執(zhí)行偽指令 .UNTIL[CXZ]后面的指令,否則,將向上跳轉(zhuǎn)到偽指令 .REPEAT之后的指令,為繼續(xù)執(zhí)行其循環(huán)體作準(zhǔn)備。 .WHILE 1 .REPEAT … … .BREAK .IF condition .BREAK .IF condition … … .ENDW .UNTIL 0 對(duì)于以上二個(gè)循環(huán),如果沒有指令來終止循環(huán)的話,它們都將進(jìn)入死循環(huán)狀態(tài),但如果在該層循環(huán)體內(nèi),存在偽指令“ .BREAK .IF condition”的話,那么,當(dāng)邏輯表達(dá)式 condition為真時(shí),該循環(huán)就會(huì)被終止了。在同一模塊中,如果有二個(gè)段同名,則后者被認(rèn)為是前段的后續(xù),這樣,它們就屬同一段。 ?SMALL 所有的數(shù)據(jù)變量必須在一個(gè)數(shù)據(jù)段之內(nèi),所有的代碼也必須在一個(gè)代碼段之內(nèi)。該程序的文件類型為 EXE。 偽指令“ .DATA?”說明下面是一個(gè)未初始化數(shù)據(jù)段的開始, 偽指令“ .CONST”說明下面是一個(gè)常數(shù)數(shù)據(jù)段的開始。 .FARDATA? FAR_BSS PARA NONE 39。 DGROUP .CONST CONST WORD PUBLIC 39。其段值和偏移量對(duì)應(yīng)于子程序的入口地址,其類型就是該子程序的類型??蛇x項(xiàng),用于確定程序是否是最新版本 這些說明性信息雖然不是子程序功能的一部分,但其他程序員可通過它們對(duì)該子程序的整體信息有一個(gè)較清晰認(rèn)識(shí),為準(zhǔn)確地調(diào)用它們提供直接的幫助,與此同時(shí),也為實(shí)現(xiàn)子程序的共享提供了必要的資料。BX的內(nèi)容是子程序的偏移量 CALL WORD1 。 返回指令 第 7章 子程序和庫 如果返回指令后面帶有立即數(shù) (其值通常為偶數(shù) ),則表示在得到返回地址之后,SP還要增加的偏移量,它不是類似于高級(jí)語言中子程序的返回值。入口參數(shù): AL 。出口參數(shù): CX存放該字符串的長度 。假設(shè)有下列的程序段: … MOV AL, ?b? CALL UPPER 。 解: 見書,略。調(diào)用子程序 SUBPRO … 第 7章 子程序和庫 用堆棧傳遞入口參數(shù)的調(diào)用方法: … PUSH Para1 … PUSH Paran 。 第 7章 子程序和庫 在子程序中,保存和恢復(fù)寄存器內(nèi)容的主要方法是:在子程序的開始把它所用到的寄存器壓進(jìn)棧,在返回前,再把它們彈出棧。 程序員在定義子程序時(shí),最好先說明該子程序的原型 (用偽指令 PROTO)。 子程序的語言類型 第 7章 子程序和庫 子程序的可見性 (Visibility)決定該子程序?qū)ζ渌K是否可用。若有多個(gè)參數(shù),則參數(shù)之間要用逗號(hào)分割。這樣,匯編程序就可以對(duì)其定義進(jìn)行適當(dāng)?shù)臋z查。若需要進(jìn)行參數(shù)類型轉(zhuǎn)換的話,匯編程序則自動(dòng)生成一段代碼來滿足數(shù)據(jù)類型轉(zhuǎn)換的要求。局部變量必須在任何指令之前加以說明,可用多個(gè) LOCAL偽指令來說明局部變量。在 16位段環(huán)境下,該缺省數(shù)據(jù)類型是 WORD,而在 32位段環(huán)境下,該缺省數(shù)據(jù)類型是 DWORD。 如果想查看庫文件 ,可用下列命令: …lib mylib, list 。 庫文件的應(yīng)用 第 7章 子程序和庫 2. 偽指令 EXTRN 偽指令 EXTRN是用來說明:在當(dāng)前模塊所使用的標(biāo)識(shí)符中,哪些標(biāo)識(shí)符是已在其它模塊中被定義為指定類型的標(biāo)識(shí)符。這種情況無疑增加了執(zhí)行文件的字節(jié)數(shù)。 I/O端口地址 輸入輸出的基本概念 I/O端口是 CPU與輸入輸出設(shè)備的交換數(shù)據(jù)的場(chǎng)所 。如果某輸入設(shè)備的端口地址在 0~255范圍之內(nèi),那么,可在指令 IN中直接給出,否則,要把該端口地址先存入寄存器 DX中,然后由 DX來給出其端口地址。把 AL的內(nèi)容輸出到端口 61H中 OUT 20H, AX 。在微機(jī)系統(tǒng)中,該向量表有256個(gè)元素,每個(gè)元素占 4個(gè)字節(jié),總共占 1K個(gè)字節(jié)。該指令格式如下: INTO 該指令影響標(biāo)志位: IF和 TF。 在用戶程序中,若直接通過端口來操作硬件或外設(shè),那么,其處理過程沒有額外的多余工作,處理速度顯然是最快的,但這樣做,無疑使用戶程序具有了很大的局限性。 解: 方法 1 .MODEL SMALL CR EQU 0DH 。 在顯示字符時(shí),用一個(gè)字節(jié)存儲(chǔ)該字符的 ASCII碼,用另一個(gè)字節(jié)存儲(chǔ)的顯示屬性,即:顯示顏色。 解:在文本顯示方式下,每行顯示 80個(gè)字符,每個(gè)字符占 2個(gè)字節(jié),所以,顯示一行需要 160個(gè)字節(jié)。要求用直接操作顯示緩沖區(qū)的方法來畫線。 例 用“霓虹燈”的顯示方式顯示字符串“ Hello”,按 ESC鍵時(shí)結(jié)束程序的運(yùn)行。 第 8章 輸入輸出和中斷 圖形顯示方式 圖形顯示是目前最常用的一種顯示方式,也是 Windows操作系統(tǒng)的默認(rèn)顯示方式。用 BIOS中的中斷功能 .BREAK .IF AL==CR MOV [BX], AL INC BX .UNTILCXZ .EXIT 0 END 第 8章 輸入輸出和中斷 例 用鍵盤最多輸入 10個(gè)字符,并存入內(nèi)存變量 Buff中,“ CR”鍵結(jié)束輸入。 若用戶程序通過調(diào)用 DOS功能來實(shí)現(xiàn)其所需功能,那么,應(yīng)用程序與低層硬件相距較遠(yuǎn),操作最終的對(duì)象需要經(jīng)過中間環(huán)節(jié),處理速度肯定受到一定的損失,但這種應(yīng)用程序適應(yīng)性強(qiáng),應(yīng)用范圍廣,對(duì)硬件的依賴性最小。為實(shí)現(xiàn)此功能,指令系統(tǒng)提供了一條專用的中斷返回指令。從圖中不難看出:若中斷號(hào)為 n,則在中斷向量表中存儲(chǔ)該中斷服務(wù)程序入口地址的單元地址為:4n。把 AL的內(nèi)容輸出到端口 3C0H中 OUT DX, AX 。從端口 60H讀入一個(gè)字節(jié)到 AL中 IN AX, 20H 。 在計(jì)算機(jī)系統(tǒng)中 , 用不同的數(shù)字給各類 I/O端口進(jìn)行編號(hào) , 這種 I/O端口的編號(hào)就稱為 I/O端口地址 。庫文件中存儲(chǔ)著子程序名、子程序的目標(biāo)代碼以及連接所需要的重定位信息。 上面語句說明了標(biāo)識(shí)符 標(biāo)識(shí)符 2等是外部標(biāo)識(shí)符,它們?cè)谄渌K中已被分別定義為類型 類型 2等,該類型說明符可以是: NEAR、 FAR、 BYTE、WORD、 DWORD等之一。各模塊之間無疑會(huì)存在著相互調(diào)用、相互訪問數(shù)據(jù)單元等內(nèi)在聯(lián)系。前者是字節(jié)類型,并有20個(gè)元素,后者是字類型,只有其自身 1個(gè)元素。匯編程序會(huì)把對(duì)它的引用轉(zhuǎn)換成用指針寄存器 BP來訪問其在堆棧中的實(shí)際存儲(chǔ)單元。 例 編寫一個(gè)累加參數(shù)數(shù)值的子程序。使用這種方法對(duì)將來把所有子程序放入自定義的庫文件中是非常方便的。 參數(shù)的數(shù)據(jù)類型可以是任何一個(gè)有效的數(shù)據(jù)類型說明符或 VARARG。 子程序的可見性 當(dāng)程序員想用自己定義的宏來替代缺省的“起始”和“結(jié)束”的代碼段時(shí),可用下列說明語句來實(shí)現(xiàn): OPTION PROLOGUE : MacroName1 OP
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1