版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第7章 復(fù)雜匯編程序設(shè)計(jì),7.1 結(jié)構(gòu) 7.2 記錄 7.3 聯(lián)合 7.4 應(yīng)用舉例,7.1 結(jié) 構(gòu),7.1.1 結(jié)構(gòu)的定義 用STURC和ENDS把一系列數(shù)據(jù)定義語(yǔ)句括起來(lái)就成了一個(gè)結(jié)構(gòu)。 格式: 結(jié)構(gòu)名 STRUC 結(jié)構(gòu)名 ENDS 功能:定義結(jié)構(gòu)類(lèi)型的數(shù)據(jù),但并不真正給結(jié)構(gòu)分配存儲(chǔ)空間,只是說(shuō)明包括結(jié)構(gòu)名、域名及其數(shù)據(jù)類(lèi)型在內(nèi)的結(jié)構(gòu)的類(lèi)型。,說(shuō)明: 結(jié)構(gòu)名由用戶(hù)定義,結(jié)構(gòu)內(nèi)數(shù)據(jù)定義語(yǔ)句中的變量名稱(chēng)為結(jié)構(gòu)字段名,簡(jiǎn)稱(chēng)為字段名; 結(jié)構(gòu)的使用應(yīng)是先定義后使用,即應(yīng)在為結(jié)構(gòu)數(shù)據(jù)分配空間之前定義; 結(jié)構(gòu)定義中的結(jié)構(gòu)名必須有且STURC和ENDS前的結(jié)構(gòu)名必須一致。,例7-1 SAFY STRUC
2、NO DB ? NAME DB ABCDEFG SAGE DW ? DEP DB COMPUTER SAFY ENDS 在結(jié)構(gòu)SAFY中,定義了4個(gè)字段,分別是NO、NAME、DEP和SAGE字段,字段NO、NAME和DEP是字節(jié)型數(shù)據(jù),SAGE是字型數(shù)據(jù)。,7.1.2 結(jié)構(gòu)的存儲(chǔ)分配和預(yù)置 結(jié)構(gòu)定義僅僅是告訴匯編程序存在這樣一種形式的變量,只有進(jìn)行結(jié)構(gòu)的存儲(chǔ)分配和預(yù)置后,才使結(jié)構(gòu)變量真正占有內(nèi)存,也才能使用結(jié)構(gòu)變量。 格式: 結(jié)構(gòu)變量名 結(jié)構(gòu)名 功能:為結(jié)構(gòu)變量分配存儲(chǔ)空間及初始化。,說(shuō)明: (1) 結(jié)構(gòu)名是結(jié)構(gòu)定義時(shí)用的名字,結(jié)構(gòu)變量名與具體的存儲(chǔ)空間及數(shù)據(jù)相聯(lián)系,程序中可以直接引用它;
3、(2) 字段值表用來(lái)給結(jié)構(gòu)變量賦初值。規(guī)定如下: 各字段值的排列順序及類(lèi)型應(yīng)與結(jié)構(gòu)定義時(shí)相一致,中間以逗號(hào)分隔; 如果采用在結(jié)構(gòu)定義時(shí)的初值,僅寫(xiě)一個(gè)逗號(hào)即可,若所有字段均采用在結(jié)構(gòu)定義時(shí)的初值,僅寫(xiě)一個(gè)尖括號(hào)即可; 只有在結(jié)構(gòu)定義中具有一項(xiàng)數(shù)據(jù)的字段(包括字符串字段)才可重新賦初值; 在結(jié)構(gòu)預(yù)置中,若分配給結(jié)構(gòu)的數(shù)據(jù)有多個(gè)且相同,可以使用DUP操作符; 尖括號(hào)什么時(shí)侯也不可省略。,例7-2 A1 SAFY A2 SAFY 其中,A1 SAFY僅對(duì)SAFY結(jié)構(gòu)中的NO、NAME和SAGE這3個(gè)字段賦初值,第4個(gè)字段采用結(jié)構(gòu)定義時(shí)的值;對(duì)A2 SAFY而言,是采用結(jié)構(gòu)定義時(shí)的初值。 已經(jīng)定義了一
4、個(gè)結(jié)構(gòu)之后,就可以通過(guò)結(jié)構(gòu)的存儲(chǔ)分配和預(yù)置得到多個(gè)結(jié)構(gòu)變量。如前所述,可將學(xué)生簡(jiǎn)歷定義為一個(gè)結(jié)構(gòu),根據(jù)每個(gè)學(xué)生的情況組成多個(gè)字段值表,再用多條結(jié)構(gòu)預(yù)置語(yǔ)句就可以產(chǎn)生每個(gè)學(xué)生的登記表。,7.1.3 結(jié)構(gòu)及其字段的引用 要訪(fǎng)問(wèn)結(jié)構(gòu)變量,可以直接寫(xiě)結(jié)構(gòu)變量名。要訪(fǎng)問(wèn)結(jié)構(gòu)變量中某一字段,可采用兩種方法: (1) 結(jié)構(gòu)變量名結(jié)構(gòu)字段名; (2) 預(yù)先將結(jié)構(gòu)變量的起始地址、偏移量送往某個(gè)地址寄存器,再用地址寄存器名代替結(jié)構(gòu)變量名。,例7-3 MOV AL,A1.NO ;結(jié)構(gòu)變量的訪(fǎng)問(wèn)采用“結(jié)構(gòu)變量名結(jié)構(gòu)字段名”的方法 或 MOV BX,OFFSET A1 ;結(jié)構(gòu)變量的訪(fǎng)問(wèn)采用預(yù)先將結(jié)構(gòu)變量的起始地址, M
5、OV AL,BX.NO ;偏移量送BX地址寄存器,再用BX代替A1的方法,例7-4 引用結(jié)構(gòu),在數(shù)據(jù)段定義和預(yù)置結(jié)構(gòu),在代碼段引用結(jié)構(gòu)。 ;定義結(jié)構(gòu) LIKE STRUC TO DW 0 FRM DW ? INO DB 99 DUP(?) LIKE ENDS ;存儲(chǔ)分配和預(yù)置結(jié)構(gòu) MAS LIKE TXN LIKE CHA LIKE 500 DUP();預(yù)置500個(gè)結(jié)構(gòu)變量 ;將CHA中所有FRM字段預(yù)置0,MOV BX,OFFSET CHA MOV BX.FRM,0 MOV SI,TYPE CHA ;SI一個(gè)結(jié)構(gòu)的字節(jié)數(shù) MOV CX,LENGTH CHA-1 ;CX結(jié)構(gòu)變量個(gè)數(shù)-1 PLG
6、:MOV BX*SIFRM,0 ADD BX,SI LOOP PLG ;將MAS中FRM字段改為T(mén)XN中TO字段的值 MOV AX,TXN.TO MOV MAS.FRH,AX,結(jié)構(gòu)在以下幾種場(chǎng)合特別適用: 多次定位同樣的存儲(chǔ)格式; 單個(gè)文件多重緩沖; 列表處理; 棧尋址。,7.2 記 錄,7.2.1 記錄的概念和定義 格式: 記錄名 RECORD字段名:寬度=表達(dá)式, 功能:定義記錄類(lèi)型的數(shù)據(jù)。,說(shuō)明: 記錄名和字段名必須具有惟一性。 寬度表示相應(yīng)字段所占的位數(shù)(116位)。如果各字段的寬度和大于8位,那么匯編程序按字處理,否則按字節(jié)處理。若所定義的總位數(shù)少于8位或16位,那么所有字段就靠右對(duì)
7、齊到字節(jié)或字的最低有效位位置。 表達(dá)式是賦給相應(yīng)字段的初值,可以省略。 若某字段的位數(shù)為7時(shí),可定義為一字符。如FID:7=A。,例7-5 使用記錄類(lèi)型變量描述工作人員的情況。其中工齡占6位,性別占1位(0表示男,1表示女),健康狀況占1位(0表示健康,1表示不健康)。 定義的記錄如下: STATUS RECORD AGE:635,SEX:1,STAU:10 該記錄定義了一個(gè)占1個(gè)字節(jié),有3個(gè)位域的記錄類(lèi)型。AGE位域初值為35,STAU位域初值為0,SEX位域初值未指出,被認(rèn)為是0。該記錄各位域在這1個(gè)字節(jié)中的分配形式為,7.2.2 記錄的存儲(chǔ)分配和預(yù)置 與結(jié)構(gòu)定義一樣,記錄定義只提供一個(gè)記
8、錄的模板,只有經(jīng)過(guò)存儲(chǔ)分配和預(yù)置后,才真正占有內(nèi)存。 格式: 記錄變量名 記錄名 功能:為記錄變量分配存儲(chǔ)空間及初始化。 說(shuō)明: 字段值表是賦給各字段的初值,用尖括號(hào)括起,各項(xiàng)間用逗號(hào)分隔; 各項(xiàng)的順序應(yīng)與記錄定義時(shí)相一致,若某一或某幾個(gè)字段都采用記錄定義時(shí)的初值,對(duì)應(yīng)項(xiàng)可省略,僅寫(xiě)逗號(hào)即可,若僅寫(xiě)尖括號(hào),表示全部采用定義時(shí)的初值。,例7-6 ZHA STATUS WAN STATUS 將在存儲(chǔ)器中分配兩個(gè)記錄變量ZHA(其值為22H)和WAN(其值為43H)。,7.2.3 記錄操作符 對(duì)記錄進(jìn)行操作的專(zhuān)用操作符有3個(gè):WIDTH、記錄字段名、MASK。 1) WIDTH 格式:WIDTH 記
9、錄名或記錄字段名 功能:返回記錄或記錄字段所占的位數(shù)。 例7-7 MOV DH,WIDTH STATUS ;DH 8 MOV AL,WIDTH AGE ;AL 6,2) 記錄字段名 格式:這個(gè)操作符直接引用,不帶操作數(shù)。 功能:返回一個(gè)立即數(shù),表示該字段移到所在記錄的最右邊所需的移位次數(shù)。 例7-8 MOV CL,YER ;CL 2,3) MASK 格式:MASK記錄字段名 功能:返回一個(gè)8位或16位的二進(jìn)制數(shù),這個(gè)二進(jìn)制數(shù)中相應(yīng)于該字段的各位為1,其余各位為0。 例7-9 MOV BL,MASK SEX ;BL 00000010B MOV BH,MASK AGE ;BH 11111100B
10、記錄操作符可以與運(yùn)算符NOT、OR、AND及操作符SHL(左移)、SHR(右移)配合使用。,例7-10 MOV CH,NOT MASK SEX ;CH 11111101B MOV CL,12 SHL SEX ;CL 12左移1位,7.2.4 記錄及其字段的引用 利用各種記錄操作符,可對(duì)記錄及其字段進(jìn)行操作。 例7-11 下述程序可根據(jù)工作人員的條件做不同的安排,條件是: 工齡10年,女性和健康。 WAN DB ? BTRC RECORD YER:6,SEX:1,STAU:1 ;判斷工作人員是否滿(mǎn)足指定的條件 MOV AL,WAN TEST AL,MASK SEX,7.2.5 記錄與結(jié)構(gòu)的比較
11、(1) 不同之處:結(jié)構(gòu)用于處理按字節(jié)計(jì)算的數(shù)據(jù)信息集合,而記錄用于處理按二進(jìn)制位計(jì)算的數(shù)據(jù)信息集合。記錄可用于定義一個(gè)字節(jié)、字或雙字的記錄變量集合,在這些集合中,同一字節(jié)、字或雙字的不同位可能代表不同的意義;結(jié)構(gòu)也是一個(gè)字節(jié)、字或雙字的記錄變量集合,在這些集合中,同一字節(jié)、字或雙字的不同位代表的意義相同,且同一字節(jié)、字或雙字是作為一個(gè)整體使用的。 (2) 相同之處:記錄與結(jié)構(gòu)都是匯編語(yǔ)言提供給用戶(hù)自定義的數(shù)據(jù)結(jié)構(gòu),無(wú)論是定義結(jié)構(gòu),還是定義記錄,應(yīng)分別使用結(jié)構(gòu)定義偽指令語(yǔ)句和記錄定義偽指令語(yǔ)句。,7.3 聯(lián) 合,7.3.1 聯(lián)合的概念和定義 聯(lián)合也是一種結(jié)構(gòu)性數(shù)據(jù),是對(duì)結(jié)構(gòu)定義的一個(gè)補(bǔ)充,它與結(jié)
12、構(gòu)可同時(shí)使用,是MASM 6.0新增的一種結(jié)構(gòu)性數(shù)據(jù),可嵌套使用。同結(jié)構(gòu)數(shù)據(jù)語(yǔ)句一樣,聯(lián)合數(shù)據(jù)語(yǔ)句也必須先定義內(nèi)存數(shù)據(jù)結(jié)構(gòu)形式,然后按數(shù)據(jù)定義偽指令的使用方式,用它定義聯(lián)合變量并賦初值。,說(shuō)明:UNION/ENDS為系統(tǒng)規(guī)定的保留字,聯(lián)合名和域?yàn)橛脩?hù)定義的名字。每個(gè)域用一條數(shù)據(jù)偽指令定義,一般不應(yīng)有初值。從格式可看出,UNION與STRUC的定義類(lèi)似,只是域的偏移地址不同:STRUC中的域是相對(duì)于結(jié)構(gòu)順序分配的;而UNION中的域則是相對(duì)于聯(lián)合重疊分配的,其偏移地址均為0,所以域中不應(yīng)有初值,如果有初值,匯編時(shí)只保留第一個(gè)域的初值。,例7-12 一個(gè)聯(lián)合類(lèi)型的說(shuō)明。 UNINAME UNION
13、 XX DB ? YY DW ? ZZ DD ? UNINAME ENDS,7.3.3 聯(lián)合變量的說(shuō)明與賦初值 格式:變量名 聯(lián)合名 功能:定義一個(gè)聯(lián)合變量,分配存儲(chǔ)空間并給它的各域變量賦初值。 說(shuō)明:聯(lián)合變量及域值表的說(shuō)明與結(jié)構(gòu)變量的一樣,賦值規(guī)定也一致。,例7-13 使用例7-12定義的聯(lián)合“UNINAME”,再定義下列聯(lián)合變量: VAR UNINAME 其中各個(gè)域的變量為:VAR.XX、VAR.YY、VAR.ZZ,并賦給了如下初值: (VAR.XX)21H (VAR.YY)2143H (VAR.ZZ)21436587H,7.4 應(yīng) 用 舉 例,例7-14 描述學(xué)生基本情況的結(jié)構(gòu)的定義和引
14、用。 STUDENT STRUC ;定義數(shù)據(jù)結(jié)構(gòu) STU_NO DD 9703001H ;學(xué)號(hào) SNAME DB 王美云 ;姓名 SEX DB 0 ;性別:0,女;1,男 AGE DB 20 ;年齡 POLITICA DB 團(tuán)員 ;政治面貌 CREDIT DW 120 ;成績(jī),STU1 STUDENT ;定義6個(gè)結(jié)構(gòu)變量 STT2 STUDENT STU3 STUDENT STU4 STUDENT STU5 STUDENT STU6 STUDENT DSEG ENDS CODE SEGMENT PARA PUBLIC CODE ASSUME CS:CODE,DS:DSEG START: MOV
15、 AX,STU1.CREDIT ;比較王美云和張皋笠的成績(jī) CMP AX,STU6.CREDIT CODE ENDS END START,例7-15 日期結(jié)構(gòu)的定義和引用。 DATE STRUC ;定義一個(gè)日期的數(shù)據(jù)結(jié)構(gòu) MONTH DB ? ;月 DAY DB ? ;日 YEAR DW ? ;年 DATE ENDS .DATA YESTERDAY DATE ;定義結(jié)構(gòu)變量 TODAY DATE TOMORROW DATE ,.CODE MOV AL,YESTERDAY.DAY ;取結(jié)構(gòu)中的一個(gè)域 MOV AH,TODAY.MONTH MOV DX,2003 MOV TODAY.YEAR,DX
16、 ;改寫(xiě)結(jié)構(gòu)中的一個(gè)域 MOV BX,OFFSET YESTERDAY ;取結(jié)構(gòu)的基地址 MOV AX,BX.YEAR ;YEAR是相對(duì)于結(jié)構(gòu)基址的偏移量 需要特別說(shuō)明的是,聯(lián)合和結(jié)構(gòu)均可以嵌套,既可以結(jié)構(gòu)套結(jié)構(gòu),聯(lián)合套聯(lián)合,又可以結(jié)構(gòu)和聯(lián)合相互嵌套。,例7-16 結(jié)構(gòu)定義的嵌套,即一個(gè)結(jié)構(gòu)域中可有另一結(jié)構(gòu)的變量。 FUN STRUC X DW ? Y DW 200 FUN ENDS EXTRSTRUC EXX FUN EYY FUN MN DB 5678 EXTRENDS,例7-17 聯(lián)合定義的嵌套,即一個(gè)聯(lián)合中的域可有另一聯(lián)合的變量。設(shè)UNNAME是一個(gè)已定義的聯(lián)合。 UNNAME UNI
17、ON UBYTE DB ? UDD UNINAME UZL DW ? UNNAME ENDS,例7-18 結(jié)構(gòu)和聯(lián)合定義的相互嵌套,即結(jié)構(gòu)或聯(lián)合的定義中的域可以是聯(lián)合變量或結(jié)構(gòu)變量,甚至可以是結(jié)構(gòu)或聯(lián)合的定義。 UNASUNION ;定義聯(lián)合UNAS STRUC ;UNAS中的域?yàn)閮蓚€(gè)結(jié)構(gòu)定義 M1 DW ? M2 DD ? ENDS STRUC N1 DB ?,N2 DD ? ENDS UNAS ENDS LABA UNAS ;定義聯(lián)合變量LABA,其中,M1和M2的偏移地址不同,N1和N2的偏移地址也不同。但是M1與N1的偏移地址相同,即M1、M2與N1、N2共享同一存儲(chǔ)空間。該定義適用于
18、面向?qū)ο蟪绦蛟O(shè)計(jì)的結(jié)構(gòu),還常用于I/O端口的描述。對(duì)域變量的訪(fǎng)問(wèn)可用下面形式: LABA.M1,LABA.M2,LABA.N1,LABA.N2 或用間接存儲(chǔ)器變量形式: MOV BX,OFFSET TLABA MOV AX,BX.M1,例7-19 用STRUC偽指令定義的參數(shù)表NAMELIST如下: NAMELIST STRUC MAXLEN DB 100 ACTLEN DB ? NAMEIN DB 100 DUP NAMELIST ENDS,(1) 請(qǐng)用結(jié)構(gòu)預(yù)置語(yǔ)句分配此結(jié)構(gòu)的存儲(chǔ)區(qū)。 (2) 編寫(xiě)一段指令,從鍵盤(pán)輸入字符存入結(jié)構(gòu)中,然后將輸入的字符數(shù)送入DISPFILE單元中。 解:(1)
19、 用結(jié)構(gòu)預(yù)置語(yǔ)句分配結(jié)構(gòu)存儲(chǔ)區(qū)為 STUDENTS NAMELIST 其中STUDENTS為假設(shè)的變量名。,(2) 按照要求編寫(xiě)程序段如下: MOV AH,0AH ;從鍵盤(pán)輸入字符 LEA DX,STUDENTS INT 21H MOV AL,STUDENTS.ACTLEN ;將字符送DISPFILE MOV DISPFILE,AL,習(xí) 題 七,7.1 為結(jié)構(gòu)類(lèi)型PARAMS分配存儲(chǔ)空間,并采用原缺省值,結(jié)構(gòu)變量名為APROC;為結(jié)構(gòu)類(lèi)型POLAR分配存儲(chǔ)空間,并賦初值。,7.2 結(jié)構(gòu)類(lèi)型OVERRIDABLE的定義如下: OVERRIDABLE STRUC ASTRING DB DONTCARE DW AREAL DD OVERRIDABLE ENDS VARO是OVERRIDABLE類(lèi)型變量,試給出OVERRIDABLE每個(gè)域的初始值,并為VARO變量賦值,使其域的缺省值可以被替換。,7.3 結(jié)構(gòu)類(lèi)型NONOVERRIDE的定義如下: NONOVERRIDE STRUC ALIST DB
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 安徽省宣城市皖東南第二次聯(lián)考2026屆九年級(jí)上學(xué)期12月月考語(yǔ)文試卷(含答案)
- 維修考試題及答案
- 2022秋人教版六年級(jí)上冊(cè)數(shù)學(xué)期末測(cè)試卷含答案(模擬題)
- 2022~2023醫(yī)院三基考試考試題庫(kù)及答案第192期
- 復(fù)工復(fù)產(chǎn)安全生產(chǎn)工作方案
- 鋼結(jié)構(gòu)邊緣加工技術(shù)要領(lǐng)
- 地下室施工技術(shù)要點(diǎn)
- 2026屆遼寧省丹東市高三上學(xué)期期末教學(xué)質(zhì)量監(jiān)測(cè)歷史試題(含答案)
- 市監(jiān)局防疫知識(shí)考試題及答案
- 上師大免疫學(xué)試題及答案
- 2025年新疆師范大學(xué)輔導(dǎo)員招聘考試真題及答案
- 電梯更新改造方案
- GB/T 3098.5-2025緊固件機(jī)械性能第5部分:自攻螺釘
- GB/T 70.4-2025緊固件內(nèi)六角螺釘?shù)?部分:降低承載能力內(nèi)六角平圓頭凸緣螺釘
- 2026年電商年貨節(jié)活動(dòng)運(yùn)營(yíng)方案
- 譯林版英語(yǔ)六年級(jí)上冊(cè)專(zhuān)題05 首字母填詞100題專(zhuān)項(xiàng)訓(xùn)練含答案
- 耳穴壓豆治療失眠
- 2025至2030全球及中國(guó)航空航天閉模鍛件行業(yè)調(diào)研及市場(chǎng)前景預(yù)測(cè)評(píng)估報(bào)告
- 天興洲現(xiàn)狀條件分析
- 醫(yī)院安全生產(chǎn)培訓(xùn)教育制度
- 臨時(shí)道路施工臨時(shí)設(shè)施施工方案
評(píng)論
0/150
提交評(píng)論