七部分宏匯編初步_第1頁
七部分宏匯編初步_第2頁
七部分宏匯編初步_第3頁
七部分宏匯編初步_第4頁
七部分宏匯編初步_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第七部分 宏匯編初步Assembly Language Programming1概要結(jié)構(gòu)記錄宏指令條件宏匯編2結(jié)構(gòu)結(jié)構(gòu):邏輯上相互關(guān)聯(lián)的一組數(shù)據(jù)變量組合在一起模板或者模式。字段:包含數(shù)據(jù)的結(jié)構(gòu)成員程序?qū)σ粋€(gè)結(jié)構(gòu)的訪問:整個(gè)結(jié)構(gòu)作為一個(gè)整體進(jìn)行單個(gè)的域注意:這和C/C+中的結(jié)構(gòu)體相似3結(jié)構(gòu)的定義name STRUCfield-declarationsname ENDS其中,字段為組成結(jié)構(gòu)的各個(gè)內(nèi)部變量,和普通DB/DW等變量的聲明是一樣的4結(jié)構(gòu)的使用結(jié)構(gòu)的使用涉及到三個(gè)步驟:1. 定義結(jié)構(gòu)2. 聲明所定義的結(jié)構(gòu)變量3. 程序?qū)Y(jié)構(gòu)變量進(jìn)行相關(guān)的操作5例:?jiǎn)T工結(jié)構(gòu)Employee STRUCIdN

2、um DB 000000000LastName DB 30 DUP(0)Years DW 0SalaryHistory DW 4 DUP(0)Employee ENDS6例:坐標(biāo)結(jié)構(gòu)COORD 結(jié)構(gòu)定義了x, y坐標(biāo)值COORD STRUCTX DW ? ; offset 00Y DW ? ; offset 02COORD ENDS7結(jié)構(gòu)變量的聲明結(jié)構(gòu)變量名是用戶自定義的名稱變量名 結(jié)構(gòu)名 在中插入各個(gè)字段的值,以逗號(hào)間隔空 保留結(jié)構(gòu)的初始缺省值例如:.datapoint1 COORD point2 COORD worker Employee 8初始化使用 DUP 操作符初始化一個(gè)或者多個(gè)數(shù)組

3、字段元素:emp Employee 9結(jié)構(gòu)數(shù)組結(jié)構(gòu)對(duì)象的數(shù)組使用DUP初始化NumPoints = 3AllPoints COORD NumPoints DUP()CS_Dept Employee 20 DUP()accounting Employee 10 DUP()10結(jié)構(gòu)變量的操作.dataworker Employee mov AX,TYPE Employee ; 49mov AX,SIZE Employee ; 49mov AX,SIZE worker ; 49mov AX,TYPE Employee.SalaryHistory ; 2mov AX,LENGTH Employee.S

4、alaryHistory ; 4mov AX,SIZE Employee.SalaryHistory ; 8Employee STRUC; bytesIdNum DB 000000000; 9LastName DB 30 DUP(0); 30Years DW 0; 2SalaryHistory DW 4 DUP(0); 8Employee ENDS; 4911mov dx,worker.Yearsmov worker.SalaryHistory,2000 ; first salarymov worker.SalaryHistory+4,3000 ; second salarymov dx,OF

5、FSET worker.LastNamemov si,OFFSET workermov ax,(Employee PTR si).Yearsmov ax,si.Years ; invalid operand (ambiguous)12例1:p164學(xué)生成績(jī)的結(jié)構(gòu)數(shù)組30名學(xué)生7門課程的平均成績(jī)編寫子程序完成各個(gè)學(xué)生的平均成績(jī)計(jì)算13記錄記錄的概念與定義記錄的存儲(chǔ)分配和初始化對(duì)記錄的相關(guān)操作14概念記錄和結(jié)構(gòu)類似,但不同之處是以二進(jìn)制數(shù)的位數(shù) bit 為字段的基本單位。15記錄的定義格式記錄名 RECORD 字段名:寬度,字段名:寬度,其中寬度是所在字段的二進(jìn)制數(shù)的位數(shù)分配空間的規(guī)則:記錄的所有

6、字段位數(shù)之和不超過16。不足8位,分配8位;大于8位,不足16位,分配16位。數(shù)據(jù)各位填充按右對(duì)齊進(jìn)行。從第一個(gè)字段開始,依次對(duì)各個(gè)字段從高位到低位分配位數(shù)。16舉例REC1 RECORD F1:4, F2:2, F3:6, F4:4REC2 RECORD FE1:2, F2E:4, FE3:1, FE4:1REC3 RECORD FF1:3, FF2:4, FF3:3, FF4:3REC4 RECORD FD1:3 =100B, FD2:2 = 2, FD3:1=1其中表達(dá)式是設(shè)定的初值17記錄變量的聲明格式記錄變量名 記錄名 舉例DA1 REC1 DA2 REC2 DA3 REC3 5 D

7、UP ()DA4 REC4 DA5 REC4 DA6 REC4 10 DUP ()18記錄的運(yùn)算符寬度運(yùn)算符WIDTH 記錄名或記錄的字段名MOV AL, WIDTH F3MOV AL, WIDTH REC1移位值運(yùn)算記錄字段名作為操作數(shù), 表示該字段處于記錄中的位置(015)MOV BL, F1記錄屏蔽運(yùn)算MASK 記錄的字段名將所在記錄的相應(yīng)字段的各位設(shè)置為1,其他為0MOV AX, MASK F119對(duì)記錄和字段的操作(1/2)對(duì)記錄變量的操作MOV AX, DA1MOV BL, DA2MOV DA3+4, CX作為常數(shù)的記錄操作數(shù)MOV AX, REC1MOV CL, REC420對(duì)記

8、錄和字段的操作(2/2)對(duì)記錄字段的操作例1:提取字段1MOV AX, DA1MOV CL, F1SHR AX, CL例2:提取字段2MOV AX, DA1AND AX, MASK F2MOV CL, F2SHR AX, CL21宏概念宏定義宏調(diào)用舉例22宏的引入例如:經(jīng)常需要顯示單個(gè)字符 mov ah,2 mov dl,c int 21h若使用過程實(shí)現(xiàn),太短了開銷過大若定義了OUTPUT宏,則使用 OUTPUT c好處:代碼簡(jiǎn)潔清晰、減少重復(fù)代碼23宏的概念宏使用過程:定義、調(diào)用和展開宏指的是具有命名的匯編語言語句的指令塊,一次定義,可以被多次調(diào)用。在匯編器預(yù)處理的過程中,將各個(gè)宏展開拷貝到

9、程序中。展開后的代碼在匯編過程中處理。24宏定義定義格式無參數(shù)和有參數(shù)macroname MACRO parameter-1, parameter-2,.statement-listENDM25例1:INPUT宏INPUT MACRO MOV AH, 01H INT 21H AND AL, 0FH ENDM定義:.codeINPUT調(diào)用:從鍵盤輸入09數(shù)字,保存在AL中26例2:OUTPUT宏OUTPUT MACRO charPUSH AXMOV AL,charMOV AH,02HINT 21HPOP AXENDM定義:.codeOUTPUT A調(diào)用:從屏幕輸出一個(gè)字符27例3:顯示字符串的宏

10、,需要保存寄存器 display macrostring pushax push dx mov ah,9 mov dx, offset string int 21h pop dx pop ax endm msg1 db“begin of test”,0Dh,0Ah,$ msg2db “end of test”,0Dh,0Ah,$ 調(diào)用 displaymsg1display msg228宏調(diào)用 (1 of 2)當(dāng)調(diào)用宏時(shí),各個(gè)實(shí)參和形參要對(duì)應(yīng)當(dāng)宏展開時(shí),各個(gè)形參以對(duì)應(yīng)的實(shí)參替換當(dāng)宏展開時(shí),產(chǎn)生匯編語言的源代碼舉例:P170,其中+為展開部分29宏調(diào)用 (2 of 2)宏、形參和實(shí)參的關(guān)系:30&

11、與&當(dāng)實(shí)參需要和其它的字符連接起來,需要&連接起來。當(dāng)一個(gè)實(shí)參包含空格,逗號(hào)等時(shí),用包裝起來作為整體傳遞替換31LOCAL為了防止宏中所使用的標(biāo)號(hào)或變量名和程序中定義的其它標(biāo)識(shí)符沖突,解決的方法:在宏的開始,利用LOCAL聲明所用的局部標(biāo)識(shí)符舉例:p17232宏庫把一些常用的宏集中在相應(yīng)的文件中,稱為庫文件使用時(shí),只需在開始處利用INCLUDE包含庫文件進(jìn)來即可。例:p17433重復(fù)匯編REPT偽指令I(lǐng)RP偽指令I(lǐng)RPC偽指令34REPT 偽指令REPT 偽指令重復(fù)執(zhí)行指定次數(shù)的語句塊語法:REPT constExpressionstatementsENDMConstExpression 為無

12、符號(hào)整數(shù)表達(dá)式,決定了重復(fù)的次數(shù)35例1例1:X = 0REPT 10 ; generate db 1 through db 10X = X + 1 DB XENDM36例2iVal = 0REPT 100DW iValiVal = iVal + 10ENDM以下的代碼產(chǎn)生 100 個(gè)DW數(shù)據(jù)序列:10, 20, 30, . . . 37不定重復(fù)重復(fù)的次數(shù)由實(shí)參的個(gè)數(shù)決定,每次循環(huán)時(shí)以相應(yīng)的實(shí)參代替形參IRP 形參, statementsENDM38例例1NUM = 5IRP M, DB NUM*MENDM例2PUSHREG MACROIRP REG, PUSH REGENDMENDM39不定

13、重復(fù)字符重復(fù)的次數(shù)由string的字符個(gè)數(shù)決定,每次循環(huán)時(shí)以相應(yīng)的字符依次代替形參IRPC 形參, stringstatementsENDM40例例1:IRPC CHR, ABCDEFHDB &CHR&ENDM例2:POPREG MACROIRPC REG, CBAPOP REG&XENDMENDM41條件匯編IF/IFE, ELSE, 和 ENDIF 42IF, ELSE, 和 ENDIF 偽指令I(lǐng)F boolean-expressionstatementsELSEstatementsENDIFIF若布爾表達(dá)式不為0時(shí),相應(yīng)的語句塊被匯編;否則,匯編其它的語句塊。IFE若布爾表達(dá)式為0時(shí),則匯編舉例:p17643例:Write

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論