




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、13 35 5 控制匯編語言程序語句控制匯編語言程序語句 MASM6.X版本提供了控制程序流程的三種匯編語句: IF語句 DOWHILE語句 REPEAT UNTIL語句其表達式常用的運算符見表3.9 (P96)。 該類偽指令的書寫格式與高級語言的書寫方式相類似,匯編程序在匯編時會自動增加轉(zhuǎn)移指令和相應的標號。理解并掌握該知識,對將來學習編譯原理課程也有一定的幫助。 2351 IF語句語句 對IF后面的表達式進行計算后再作為條件進行判斷。 一般形式IF語句: 嵌套形式IF語句: 格式1:IF表達式 格式2: IF表達式 語句l 語句1 ELSE ELSEIF表達式 語句2 語句2 ENDIF
2、ELSE 語句n ENDIF3 例3.52 編程實現(xiàn)將鍵盤輸入的字符、數(shù)字轉(zhuǎn)換成十六進制數(shù)。 MODEL TINY CODE STARTUP MOV AH,1 ; 鍵盤輸入 INT 21H IF ALA&ALF ; 4146H SUB AL,37H ELSE IF ALa&ALf ; 61 66H SUB AL,57H ELSE SUB AL,30H ; 30 39H ENDIF EXIT END 4 352 DOWHILE語句語句 對WHILE、BREAK、CONTINUE后面的表達式進行計算后再作為條件進行判斷。 格式1:WHILE 表達式 語句 ENDW 是一種先判斷后執(zhí)
3、行的循環(huán)語句。 控制流程:先計算表達式的值并判斷。 5 格式2: BREAK IF表達式 控制程序當表達式條件成立時,退出本層循環(huán)體。可用于在程序中設置斷點。 例3.53 BREAK IF EAX=0 ;當測試到EAX=0,則終止循環(huán)。 6 格式3: CONTINUE IF表達式 控制程序當表達式條件成立時,循環(huán)繼續(xù)進行。否則跳過剩余語句到與它最近的循環(huán)條件判斷語句。 在BREAK、 CONTINUE后面的IF表達式不需要ENDIF來結(jié)束。 與C語言的相應功能一致。 例3.54 CONTINUE IF AL=6 ;測試到AL=6時,繼續(xù)進行循環(huán)。 7 例3.55 編程實現(xiàn)從BUF緩沖區(qū)10個字
4、符中尋找$字符,如找到顯示$字符,否則顯示0。 IF AL$ MOV DL,AL ELSE MOV DL,0 ENDIF MOV AH,2 ;顯示字符 INT 21H EXIT END(用REPNZ SCASB指令) MODEL SMALL DATA BUF DB ABCDEFGI$K CODE STARTUP MOV CX,10 LEA BX,BUF MOV AL,0 WHILE AL!$ MOV AL,BX INC BX DEC CX BREAK IF CX0 ENDW8 353 REPEATUNTIL語句語句 對 UNTIL后面的表達式進行計算后再作為條件進行判斷。循環(huán)至少執(zhí)行一次。 格
5、式:REPEAT 語句 UNTIL 表達式 例3.56 編程實現(xiàn)將BUF緩沖區(qū)100個字節(jié)數(shù)據(jù)傳到BLOCK緩沖區(qū)。 MODEL SMALL DATA BUF DB 10,20,88 ;(100個字節(jié))BLOCK DB 100DUP(?) CODE STARTUP MOV CX,100 LEA BX,BUF LEA SI,BLOCK REPEAT MOV AL,BX MOV SI,AL INC SI INC BX UNTILCXZ ;CXCX1, 并判斷CX0 EXIT END(用REP MOVSB指令)9 36 結(jié)構(gòu)和記錄 匯編語言還提供了用于說明復雜數(shù)據(jù)類型的偽指令,利用這些偽指令能夠描述
6、復雜數(shù)據(jù)類型,本節(jié)介紹結(jié)構(gòu)、聯(lián)合和記錄。 原則:原則:先說明、后定義、再訪問 3 36 61 1 結(jié)構(gòu)和聯(lián)合結(jié)構(gòu)和聯(lián)合 結(jié)構(gòu)是不同數(shù)據(jù)類型和不同長度數(shù)據(jù)區(qū)間的數(shù)據(jù)的集合。除了聯(lián)合中的數(shù)據(jù)區(qū)間可以在內(nèi)存重疊外,聯(lián)合和結(jié)構(gòu)是相同的。 10 結(jié)構(gòu)中的任何一個數(shù)據(jù)區(qū)間,都具有相對于結(jié)構(gòu)首地址的偏移地址的屬性,結(jié)構(gòu)的長度是所有數(shù)據(jù)區(qū)間長度的總和。 聯(lián)合中的任何一個數(shù)據(jù)區(qū)間,其首地址均相同,因此,聯(lián)合的長度是所有數(shù)據(jù)區(qū)間長度中最長區(qū)間的長度。所以聯(lián)合允許在相同的區(qū)間定義不同的數(shù)據(jù)類型。換句話說,可以在程序中根據(jù)需要,改變同一區(qū)間的數(shù)據(jù)類型。 原則:先說明、后定義、再訪問 11 1結(jié)構(gòu)與聯(lián)合結(jié)構(gòu)與聯(lián)合類型說
7、明類型說明 在描述結(jié)構(gòu)與聯(lián)合類型數(shù)據(jù)或使用結(jié)構(gòu)與聯(lián)合型變量之前,需要說明結(jié)構(gòu)與聯(lián)合類型。 一般格式如下: 結(jié)構(gòu)名 STRUC|UNION 屬性 數(shù)據(jù)定義語句序列 結(jié)構(gòu)名 ENDS 屬性:對齊屬性,非獨立屬性 對齊屬性:定義起始邊界值,可以是1、2和4,缺省值是1。 12例3.57 下列語句說明了一個名為PERSON的結(jié)構(gòu)類型: PERSON STRUC ID DD 0 ;偏移量為0 SCORE DW 60 ;偏移量為4 YEAR DB 10 ;偏移量為6 PERSON ENDS 結(jié)構(gòu)中不同數(shù)據(jù)區(qū)間用不同數(shù)據(jù)類型來定義變量,數(shù)據(jù)區(qū)間稱為結(jié)構(gòu)的字段,相應的變量名稱為字段名。一個結(jié)構(gòu)中可以含有多個字
8、段,各字段可以有不同的長度(以字節(jié)為基本單位),可以獨立地存取任一字段。13 2結(jié)構(gòu)與聯(lián)合結(jié)構(gòu)與聯(lián)合變量的定義變量的定義 字段名必須唯一。它代表了從結(jié)構(gòu)的開始到相應字段的偏移。 變量的定義變量的定義: 變量名 結(jié)構(gòu)類型名 變量名 結(jié)構(gòu)類型名 初值 , 初值 變量名 結(jié)構(gòu)類型名 常數(shù)DUP( 初值 , 初值 ) ;(同時定義多個結(jié)構(gòu)變量,并賦初值,建立結(jié)構(gòu)數(shù)組) 在說明結(jié)構(gòu)類型時,可以給字段賦初值,也可以不賦初值。 14 例3.58 設已說明了上述結(jié)構(gòu)PERSON,那么可定義如下結(jié)構(gòu)變量: STUDENT1 PERSON ;三個字段都重賦初值 STUDENT2 PERSON ;字段SCORE、Y
9、EAR用缺省初值 STUDENT3 PERSON ;三個字段均用缺省初值 PERSON 99DUP(?) ;定義99個結(jié)構(gòu)變量,初值不變 15例3.59 DISP STRUC ;結(jié)構(gòu)類型說明 A DB ? B DB ? C DB ? DISP ENDS PLAY STRUC ;結(jié)構(gòu)類型說明 ONE DB 100DUP(?) TWO DB NAME THREE DISP ;結(jié)構(gòu)類型說明中定義結(jié)構(gòu)變量 PLAY ENDS PLAY1 PLAY ,TOM,0,0,0 ;字段ONE用缺省初值 16 4結(jié)構(gòu)或聯(lián)合類型結(jié)構(gòu)或聯(lián)合類型變量及其字段的訪問變量及其字段的訪問 通過結(jié)構(gòu)變量名可直接存取結(jié)構(gòu)變量。
10、若要存取結(jié)構(gòu)變量中的某一字段,則可采用如下形式: 結(jié)構(gòu)變量名 . 結(jié)構(gòu)字段名 結(jié)構(gòu)字段的地址偏移值是結(jié)構(gòu)起始地址的偏移值與相應字段偏移值之和。 17例3.62 程序?qū)崿F(xiàn)對結(jié)構(gòu)字段的訪問 DATE STRUC ;說明結(jié)構(gòu)類型 YEAR DW ? MONTH DB ? DAY DB ? DATE ENDS SOMEDAY DATE ;定義結(jié)構(gòu)變量 TODAY DATE NEXTDAY DATE MOV AL,SOMEDAYMONTH ;訪問結(jié)構(gòu)變量, AL=3 MOV AH,TODAYDAY ;AH=18 MOV CX ,NEXTDAYYEAR ;CX=2002 MOV SI,OFFSET SOM
11、EDAY MOV AX,SIYEAR ;AL=2000 18 例:有關(guān)結(jié)構(gòu) PERSON STRUC ;說明結(jié)構(gòu)類型ID DD 0 ;偏移量為0SCORE DW 60 ;偏移量為4YEAR DB 10 ;偏移量為6PERSON ENDS STUDENT1 PERSON ;定義結(jié)構(gòu)變量 STUDENT2 PERSON STUDENT3 PERSON PERSON 99DUP(?) ;訪問結(jié)構(gòu)變量及其字段MOV EAX,STUDENT1 ID ;EAX=100 MOV AX,STUDENT2 SCORE ;AX=60MOV EAX,STUDENT3 YEAR ;AL=10MOV SI,OFFSET
12、 STUDENT1MOV AL,SIYEAR ;AL=2019 362 記錄記錄 記錄和結(jié)構(gòu)相似,記錄的字段是位字符串,可以作為常數(shù)或者表達式使用。可以使用位操作指令進行二進制位數(shù)據(jù)的存取。 1記錄類型的說明記錄類型的說明 記錄名 RECORD 字段 ,字段 字段格式如下: 字段名:寬度=表達式 寬度是常數(shù)(8位、16位或者32位),表示相應的字段所占的位數(shù); 表達式的值將作為相應字段的缺省初值,若不設置默認為0。 20例如:COLOR RECORD RED:2,BLUE:4,YELLOW:2 三個字段總寬度正好是8位,所以也稱為字節(jié)記錄類型。如果不正好是8位、16位或32位,那么向右對齊,記
13、錄未說明高端用0填充。例如: ABCD RECORD A1:5=11,A2:3=6,A3:2=3 21 2記錄變量的定義記錄變量的定義 一般格式如下: 變量名 記錄名 變量名 記錄名 變量名 記錄名 常數(shù) DUP(初值 ,初值 ) 記錄變量名可以省略,如果省略,那么就不能直接通過符號名訪問該記錄變量。 22例3.64 設已定了記錄類型COLOR, COLOR RECORD RED:2,BLUE:4,YELLOW:2 那么可定義如下記錄變量: WARNING COLOR ;該字節(jié)的值是41H COLOR ;該字節(jié)的值是2FH COLORLST COLOR 32DUP () ;32個字節(jié)23 4記
14、錄專用操作符WIDTH和MASK (1)操作符WIDTH 返回記錄或記錄字段的位數(shù)。一般格式如下: WIDTH 記錄名 或者 WIDTH 記錄字段名設記錄COLOR如前面說明,那么: MOV AL,WIDTH COLOR ;AL=8 MOV AL,WIDTH RED ;AL=2 MOV AL,WIDTH BLUE ;AL=4 24(2)操作符MASK MASK 記錄名 或者 MASK 記錄字段名 返回記錄或記錄字段位的位置狀態(tài),返回的二進制數(shù)( 8位或16位)中相應于指定字段的各位為1,其余各位為0。 設記錄COLOR如前面說明,那么: 例3.66 MOV AL,MASK RED ; AL=1
15、1000000B MOV AL,MASK BLUE ; AL=00111100B25 (3)記錄字段 記錄字段名也可作為一個特殊的操作符,直接返回該字段移到所在記錄的最右端所需移動的位數(shù)。 設記錄COLOR如前面說明,那么: 例3.67 MOV CL,RED ;CL=6 MOV CL,BLUE ;CL=226 3 37 7 宏宏 宏是宏匯編語言的主要特征之一。 在匯編語言源程序中,若某程序片段需要多次使用,為了避免重復書寫,則可把它定義為一條宏指令(宏定義) 。 在寫源程序時,程序員用宏指令來表示某個程序片段(宏調(diào)用);在匯編時,匯編程序會掃描源程序,檢查是否有已說明的宏指令應用在程序中,如果
16、有則將宏指令所代表的內(nèi)容插入該宏指令位置處(宏展開)。 273 37 71 1 宏指令的定義和使用宏指令的定義和使用 (包括:(包括:宏定義、宏調(diào)用、宏展開) 宏指令在使用之前要先定義。一般格式如下: 宏指令名 MACRO 形式參數(shù)表 宏定義體(由指令、偽指令和宏指令構(gòu)成的程序片段) ENDM 宏指令名 宏指令名的指定和一般標號命名規(guī)則一致。形式參數(shù)表為可選項,由若干參數(shù)組成,各形式參數(shù)間用逗號分隔。 28 在定義宏指令后,可使用宏指令來表示對應的程序片段,這稱為宏調(diào)用。 宏調(diào)用的一般格式如下: 宏指令名 實參數(shù)表 其中,實參數(shù)表中的實參數(shù)應該與宏定義時的形式參數(shù)表中的形式參數(shù)相對應。 29
17、例3.68(宏定義) 定義一個宏將AL寄存器內(nèi)的低4位轉(zhuǎn)換為對應的十六進制數(shù)ASCII碼: CHANGE MACRO AND AL,0FH ADD AL,90H DAA ADC AL,40H DAA ENDM 30例3.69 (宏調(diào)用)下面的程序片段調(diào)用了剛定義的宏。 MOV AL,BL ;轉(zhuǎn)換并顯示高4位 SHR AL,4 CHANGE MOV DL,AL MOV AH,2 INT 21H MOV AL,BL ;轉(zhuǎn)換低4位 CHANGE 31 宏展開:在對源程序匯編時,匯編程序把源程序中的宏指令替換成對應的宏定義體。 上述程序片段在匯編時得到的指令如下: MOV AL,BL SHR AL,4
18、 1 AND AL,0FH 1 ADD AL,90H 1 DAA 1 ADC AL,40H 1 DAA MOV DL,AL MOV AH,2 INT 21H MOV AL,BL 1 AND AL,0FH 1 ADD AL,90H 1 DAA 1 ADC AL,40H 1 DAA MOV DL,AL MOV AH,2 INT 21H 32 372 宏指令中參數(shù)的使用宏指令中參數(shù)的使用 帶參數(shù)使宏指令更具靈活性。 宏指令的參數(shù)可以是常數(shù)、寄存器、存儲單元和操作碼,還可以是表達式。 例3.70 定義一條宏指令CHAN,實現(xiàn)對指定寄存器的運算。 CHAN MACRO REG,COM,NUM AND R
19、EG,0FH COM REG,NUM ENDM 此后,可有如下格式的各種宏調(diào)用: CHAN BL,OR,30H CHAN AL,SUB,5 在匯編時,宏指令 CHAN BL,OR,30H 擴展成如下的代碼: 1 AND BL,0FH 1 OR BL,30H33 373 宏與子程序的區(qū)別宏與子程序的區(qū)別 兩種方法均能達到簡化源程序的目的,但有質(zhì)的不同。 兩者的區(qū)別: 1關(guān)于目標程序。 2關(guān)于參數(shù)傳遞。宏調(diào)用時的參數(shù)由匯編程序通過實參替換形參的方式實現(xiàn)傳遞,所以參數(shù)很靈話。子程序調(diào)用時的參數(shù)須通過寄存器、堆棧或約定的內(nèi)存單元傳遞。 3關(guān)于時間開銷。宏調(diào)用是在匯編時完成,所以不需要額外的時間開銷。子程序調(diào)用和子程序返回均需要時間,且還涉及堆棧。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 付費團課營銷活動方案
- 代號英雄活動方案
- 代表委員+活動方案
- 代賬公司部門策劃方案
- 以文會友活動方案
- 仲景文化宣傳周活動方案
- 企業(yè)義務植樹活動方案
- 企業(yè)會客廳活動策劃方案
- 企業(yè)公司內(nèi)部團建活動方案
- 企業(yè)參訪園區(qū)活動方案
- 2024年國家知識產(chǎn)權(quán)局知識產(chǎn)權(quán)發(fā)展研究中心招聘考試真題
- 酒店工傷事故預防
- 保險公司迎檢工作方案
- 2025年廣東省深圳市31校聯(lián)考中考二模化學試題(含答案)
- 2025年安全管理員安全培訓考試試題(典型題)
- 電商運營崗位技能測試卷
- 語言習得神經(jīng)機制探究-深度研究
- 中國海洋生態(tài)環(huán)境監(jiān)測市場調(diào)查研究及行業(yè)投資潛力預測報告
- 安全環(huán)保專業(yè)試題庫
- 機房動力系統(tǒng)綜合實訓知到智慧樹章節(jié)測試課后答案2024年秋四川郵電職業(yè)技術(shù)學院
- GB 45184-2024眼視光產(chǎn)品元件安全技術(shù)規(guī)范
評論
0/150
提交評論