




已閱讀5頁(yè),還剩53頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
本章主要教學(xué)內(nèi)容 l 匯編語(yǔ)言和匯編程序的基本概念 l 匯編語(yǔ)言源程序書(shū)寫(xiě)規(guī)則、語(yǔ)句格式及程序分段 l 偽指令語(yǔ)句的格式、功能及應(yīng)用 l 匯編語(yǔ)言源程序的建立、匯編、連接、調(diào)試及運(yùn)行,第5章 匯編語(yǔ)言的基本表達(dá)及其運(yùn)行,5.1 匯編語(yǔ)言和匯編程序的基本概念 5.1.1 匯編語(yǔ)言 匯編語(yǔ)言是一種面向CPU指令系統(tǒng)的程序設(shè)計(jì)語(yǔ)言,它采用指令系統(tǒng)的助記符來(lái)表示操作碼和操作數(shù),用符號(hào)地址表示操作數(shù)地址。,5.1.2 匯編程序 用匯編語(yǔ)言編寫(xiě)的源程序在輸入計(jì)算機(jī)后,需要將其翻譯成目標(biāo)程序,計(jì)算機(jī)才能執(zhí)行相應(yīng)指令,這個(gè)翻譯過(guò)程稱為匯編,完成匯編任務(wù)的程序稱為匯編程序。 有基本匯編ASM(Assembler)和宏匯編MASM(MacroAssembler)兩種。 匯編程序以匯編語(yǔ)言源程序文件作為輸入,并由它產(chǎn)生兩種輸出文件:目標(biāo)程序文件和源程序列表文件。 目標(biāo)程序文件經(jīng)連接定位后由計(jì)算機(jī)執(zhí)行; 源程序列表文件將列出源程序、目標(biāo)程序的機(jī)器語(yǔ)言代碼及符號(hào)表。,5.2 匯編語(yǔ)言源程序書(shū)寫(xiě)格式 5.2.1 匯編語(yǔ)言源程序的分段結(jié)構(gòu) 匯編源程序一般由3個(gè)邏輯段組成,即數(shù)據(jù)段、堆棧段和代碼段。每個(gè)邏輯段以SEGMENT語(yǔ)句開(kāi)始,以ENDS語(yǔ)句結(jié)束。整個(gè)源程序以END語(yǔ)句結(jié)束。 數(shù)據(jù)段用來(lái)在內(nèi)存中建立一個(gè)適當(dāng)容量的工作區(qū),以存放常數(shù)、變量等操作數(shù)據(jù)。 堆棧段用來(lái)在內(nèi)存中建立一個(gè)適當(dāng)?shù)亩褩^(qū),以便在中斷、子程序調(diào)用時(shí)使用。 代碼段包括了許多以符號(hào)表示的指令,其內(nèi)容就是程序要執(zhí)行的指令。,注:必須用ASSUME偽指令告訴匯編程序,哪一段和哪一個(gè)段寄存器相對(duì)應(yīng),即某一段地址應(yīng)該放入哪一個(gè)段寄存器 在DOS環(huán)境下,通常采用DOS的4CH號(hào)中斷功能調(diào)用使匯編語(yǔ)言返回DOS。 不需要再對(duì)CS和SS進(jìn)行初始化,5.2.2 匯編語(yǔ)言源程序的語(yǔ)句類型和語(yǔ)句格式 1語(yǔ)句類型 8086宏匯編MASM使用的語(yǔ)句可以分成3種類型: 指令語(yǔ)句:這類指令能夠產(chǎn)生目標(biāo)代碼,是CPU可以執(zhí)行的能夠完成特定功能的語(yǔ)句,主要由機(jī)器指令組成。在匯編時(shí)一條指令語(yǔ)句被翻譯成對(duì)應(yīng)的機(jī)器碼,對(duì)應(yīng)著特定的操作。 偽指令語(yǔ)句:偽指令語(yǔ)句是為匯編程序和連接程序提供一些必要控制的管理性語(yǔ)句,它不產(chǎn)生目標(biāo)代碼,僅僅在匯編過(guò)程中告訴匯編程序應(yīng)如何匯編,并完成相應(yīng)的偽操作。 例如:告訴匯編程序源程序 有幾個(gè)段,段名,定義變量和定義過(guò)程,給變量分配存儲(chǔ)單元,給符號(hào)賦值,給數(shù)字或表達(dá)式命名。 宏指令語(yǔ)句:可包括多條指令或偽指令 。在匯編時(shí),按照宏指令的定義,在出現(xiàn)宏指令的地方將其展開(kāi)還原。,2語(yǔ)句格式 一般情況下,匯編語(yǔ)言的語(yǔ)句可以由以下幾部分組成: 名字 操作符 操作數(shù) ;注釋 1)名字是一個(gè)符號(hào),它表示本條語(yǔ)句的符號(hào)地址。一般來(lái)說(shuō),名字可以是標(biāo)號(hào)和變量,統(tǒng)稱為標(biāo)識(shí)符。 名字的組成 字母A-Z,a-z;數(shù)字0-9;專用字符?. - $ 注:數(shù)字不能為名字的第一個(gè)位置 .只能出現(xiàn)在名字的第一個(gè)位置 名字最長(zhǎng)31個(gè)字符組成 2)指令語(yǔ)句和偽指令語(yǔ)句中名字的區(qū)別 指令語(yǔ)句的名字之后要用冒號(hào),而偽指令語(yǔ)句名字后不用 例:LAB1:MOV AX,2050H;指令語(yǔ)句,LAB1是名字,也是指令第一字節(jié)的符號(hào)地址 VAR1 DW 1200H;偽指令語(yǔ)句,VAR1是名字,也是符號(hào)地址,VAR1和VAR1+1存放00 12,指令語(yǔ)句中的名字一般采用標(biāo)號(hào) NEXT:MOV AX,1234H 一個(gè)標(biāo)號(hào)與一條指令的地址相聯(lián)系,因此標(biāo)號(hào)可以作為JMP和CALL指令的操作數(shù) JNZ NEXT CALL APAR 偽指令語(yǔ)句中的名字可以是變量名、段名、過(guò)程名、符號(hào)名等 BUF DW 1234H CODE SEGMENT APAR PROC,3)標(biāo)號(hào)和變量的屬性 標(biāo)號(hào)和變量都具備3種屬性:段屬性、偏移屬性及類型屬性。 段屬性:該屬性定義了標(biāo)號(hào)和變量的段起始地址 標(biāo)號(hào)的段由CS指示 變量的段通常由DS或ES指示 偏移屬性:表示標(biāo)號(hào)和變量相距段起始地址的字節(jié)數(shù),16位 類型屬性:標(biāo)號(hào)是在本段內(nèi)引用NEAR還是在其他段中引用FAR。 變量有幾個(gè)字節(jié)長(zhǎng)度。由定義變量的偽指令DB、DW和 DD等決定。,2.操作符字段 操作符可以是機(jī)器指令、偽指令和宏指令的助記符。 操作數(shù)字段是操作符的操作對(duì)象。當(dāng)有兩個(gè)及以上的操作數(shù)時(shí),用逗號(hào)隔開(kāi)。 注釋字段是以“;”開(kāi)頭的說(shuō)明部分,可以用英文或者中文書(shū)寫(xiě)。注釋字段是語(yǔ)句的非執(zhí)行部分 。,5.3 8086匯編語(yǔ)言中的標(biāo)識(shí)符、表達(dá)式和運(yùn)算符 5.3.1 標(biāo)識(shí)符 匯編語(yǔ)言每條語(yǔ)句的第一個(gè)字段是它的名字字段,名字可以是標(biāo)號(hào)或變量,這兩者又稱為標(biāo)識(shí)符。 重點(diǎn)是要掌握其組成規(guī)則和它的3個(gè)屬性。 5.3.2 表達(dá)式和運(yùn)算符 在表達(dá)式中,運(yùn)算符充當(dāng)著重要的角色。 8086宏匯編有算術(shù)運(yùn)算符、邏輯運(yùn)算符、關(guān)系運(yùn)算符、分析運(yùn)算符和綜合運(yùn)算符共5種。 下面分別討論5種運(yùn)算符的作用:,(1)算術(shù)運(yùn)算符用于完成算術(shù)運(yùn)算,有(加法)、(減法)、(乘法)、(除法)、MOD(求余)、SHL(左移)、SHR(右移)共7種運(yùn)算。 例如,將字?jǐn)?shù)組B1的長(zhǎng)度值 (字?jǐn)?shù)) 存入AX寄存器,可以寫(xiě)作: B1 DW 11,22,33,44,55,66 LB1 DW ? MOV AX,(LB1B1)/2 匯編后指令成為 MOV AX,6,(2)邏輯運(yùn)算符的作用是對(duì)其操作數(shù)進(jìn)行按位操作。邏輯運(yùn)算符有AND(與)、OR(或)、XOR(異或)和NOT(非)。 例如: PORT_VAL EQU 20H OUT AL,PORT_VAL OR 5 匯編后指令成為 OUT AL,25H,(3)關(guān)系運(yùn)算符的運(yùn)算對(duì)象是兩個(gè)性質(zhì)相同的項(xiàng)目。其結(jié)果為:關(guān)系成立或不成立。有EQ(相等)、NE(不相等)、LT(小于)、GT(大于)、LE(小于或等于)、GE(大于或等于)共6種。結(jié)果為真,表示為0FFFFH,否則為0.,(4)分析運(yùn)算符是對(duì)存儲(chǔ)器地址進(jìn)行運(yùn)算的。有5個(gè):SEG(求段基值)、OFFSET(求偏移量)、TYPE(求變量類型)、LENGTH(求變量長(zhǎng)度)和SIZE(求字節(jié)數(shù))。,(1) SEG操作符格式為: SEG 變量名或 標(biāo)號(hào)名 回送變量或標(biāo)號(hào)的段地址值。 例如:若DATA1是從存儲(chǔ)器06000H物理地址開(kāi)始的一個(gè)數(shù)據(jù)段的段名,PADD是該段中的一個(gè)變量名。則 MOV BX,SEG PADD 相當(dāng)于MOV BX,0600H,(3) TYPE操作符格式為: TYPE 變量名 或 標(biāo)號(hào)名 存儲(chǔ)器操作數(shù)類型 TYPE返回值 BYTE 1 WORD 2 DWORD 4 NEAR -1 FAR -2 TYPE運(yùn)算符加在變量前面,返回的是這個(gè)變量所對(duì)應(yīng)的TYPE返回值,如TYPE VAR1=1 TYPE運(yùn)算符加在結(jié)構(gòu)前面,返回的是結(jié)構(gòu)包含的字節(jié)數(shù) 如 STUDENT STRUC NAME DB WANG NUMBER DB ? STUDENT ENDS 則:TYPE STUDENT=5 TYPE運(yùn)算符加在標(biāo)號(hào)前面,返回標(biāo)號(hào)的屬性是NEAR還是FAR,(4) LENGTH操作符格式為: LENGTH 變量名 LENGTH和SIZE操作符只能和數(shù)據(jù)存儲(chǔ)器地址操作數(shù)(BYTE、WORD或者DWORD)一起使用。LENGTH對(duì)于變量中使用DUP時(shí), 回送分配給該變量的單元數(shù); 其它情況則回送1。 例如: MULTI_WORDS DW 50 DUP(20) WORDS1 DW 20,30,40,50 則 MOV CX,LENGTH MULTE_WORDS 相當(dāng)于 MOV CX,50 而 MOV CX,LENGTH WORDS1 相當(dāng)于 MOV CX,1,(5) SIZE操作符格式為:SIZE 變量名 SIZE操作符回送分配給該變量的字節(jié)數(shù)相當(dāng)于 LENGTH值和TYPE值的乘積。 例如: MOV CX,SIZE MULTI_WORD 相當(dāng)于MOV CX,100 MOV CX,SIZE WORDS1 相當(dāng)于MOV CX,2,5)屬性操作符 屬性操作符主要有PTR、段操作符、SHORT、THIS、HIGH、LOW六種。 (1) PTR操作符格式為: 類型 PTR 存儲(chǔ)器地址表達(dá)式 PTR將它左邊的類型指定給右邊的表達(dá)式 類型可以是BYTE WORD DWORD NEAR FAR,它 本身并不實(shí)際分配存儲(chǔ)器。 VAR1 DB 30H,40H VAR2 DW 2050H MOV AX,WORD PTR VAR1;將4030HAX MOV BL,BYTE PTR VAR2;將50HBL,有時(shí)匯編程序分不清所存入的數(shù)據(jù)是字節(jié)還是字, 此時(shí)必須用PTR來(lái)說(shuō)明屬性。 例如: MOV DX,20 格式是錯(cuò)誤的,必須寫(xiě)成 MOV BYTE PTR DX,20或者M(jìn)OV WORD PTR DX,20,(2) 段操作符 段操作符用來(lái)明確表示變量或地址表達(dá)式的段 屬性, 取消了它們?cè)瓉?lái)的默認(rèn)組合。也稱為段跨 越前綴。例如:MOV DX,ES:BP+DI 表示源操作數(shù)在ES段,不是與BP原來(lái)的默認(rèn)的 SS段。 (3) SHORT操作符,用來(lái)指示JMP指令中轉(zhuǎn)向地址的屬性。如: JMP SHORT PROG1 ;短轉(zhuǎn)移 NEXT:. NEXT與JMP指令距離不能大于127個(gè)字節(jié),(4)THIS操作符格式為: THIS 類型或?qū)傩?THIS和PTR有共同之處,建立一個(gè)特殊類型的存儲(chǔ)器地址操 作數(shù),而不實(shí)際為它分配新的存儲(chǔ)單元。例如: ARRAY1 EQU THIS BYTE ARRAY2 DW 30 DUP(?) 此時(shí), ARRAY1的段地址和偏移地址與ARRAY2相同,但類 型不同,ARRAY1是字節(jié)類型,ARRAY2是字類型。 另外也可以按如下方法使用: BEGIN EQU THIS FAR START: MOV AX,0 此時(shí), MOV指令有一個(gè)FAR屬性的地址BEGIN,允許其它 段的JMP指令直接跳轉(zhuǎn)到BEGIN來(lái),同時(shí)允許本段指令 JMP NEAR START 或者JMP SHORT START轉(zhuǎn)移到MOV指令處,(5)HIGH和LOW操作符 HIGH和LOW操作符是字節(jié)分離操作符, 它接收 一個(gè)數(shù)或地址表達(dá)式,HIGH取其高字節(jié), LOW取 其低位字節(jié)。例如: MEMOFFADD EQU 0123H 指令 MOV CL, HIGH MEMOFFADD 匯編成MOV CL,01H MOV BH, LOW MEMOFFADD 匯編成MOV BH,23H,5.4 偽指令語(yǔ)句 在匯編語(yǔ)言中,偽指令是給匯編程序的命令,在匯編過(guò)程中由匯編程序進(jìn)行處理。 例如定義數(shù)據(jù)、分配存儲(chǔ)區(qū)、定義段及定義過(guò)程等都采用偽指令表示。 5.4.1 數(shù)據(jù)定義偽指令 數(shù)據(jù)定義偽指令用來(lái)定義一個(gè)變量的類型,并將所需要的數(shù)據(jù)放入指定的存儲(chǔ)單元中,也可以只給變量分配存儲(chǔ)單元,而不賦予特定的值。,1. 數(shù)據(jù)定義偽指令的一般格式為: 變量名 偽指令 操作數(shù) ,操作數(shù) ;注釋 2. 常用的數(shù)據(jù)定義偽指令 定義字節(jié)變量偽指令DB 定義字變量偽指令DW 定義雙字變量偽指令DD 定義四字變量偽指令DQ 定義十字節(jié)變量偽指令DT,例 DATA SEGMENT ;定義數(shù)據(jù)段 B1 DB 10H,30H;存入兩個(gè)字節(jié)10h,30h B2 DB 2*3+5 ;存入表達(dá)式的值0BH S1 DB good! ;存入5個(gè)字符 W1 DW 1000H,2030H;存入兩個(gè)字 W2 DD 12345678H;存入雙字 S2 DB AB ;存入41H,42H S3 DW AB ;存入42H,41H DATA ENDS ;數(shù)據(jù)段結(jié)束,除了常數(shù)、表達(dá)式和字符串外,問(wèn)號(hào)也可以作為數(shù)據(jù)定義偽指令的操作數(shù),此時(shí)僅給變量保留相應(yīng)的存儲(chǔ)單元,而不賦予變量某個(gè)確定的初值。 格式為:n DUP (初值) n為重復(fù)次數(shù),圓括號(hào)中為重復(fù)內(nèi)容 例 DATA SEGMENT BUF1 DB ? BUF2 DB 8 DUP(0);給字節(jié)變量BUF2分配8個(gè)存儲(chǔ)單元,初值為0 BUF3 DW 5 DUP(?);給BUF3分配5個(gè)字單元 BUF4 DW 10 DUP(0,1,?);10個(gè)0,1,? BUF5 DB 50 DUP(2,2 DUP(4),6);50個(gè)2 4 4 6 DATA ENDS,例如: D1 DB 01,30,10H D2 DW 01,2*3,100 D3 DB AB D4 DW AB 字符串可以看成串常數(shù),用單或雙引號(hào)引住,得到的是字符串的ASCII碼值。 在匯編期間存儲(chǔ)器中存入數(shù)據(jù)情況如圖3.8所示。,例如:A1 DB 2 DUP(0,2 DUP(1,2),3),4,5,以下指令使用變量B1和B2的方法是合法的: B1 DB 11H,22H,33H,44H B2 DW 55H,66H,77H MOV AL,B1 ;取字節(jié),(AL)=11H MOV BL,B1+2 ;取字節(jié),(BL)=33H MOV AX,B2 ;取字,(AX)=0055H MOV CX,B2+4 ;取字,(CX)=0077H 對(duì)于同樣的變量B1和B2,以下使用是非法的: MOV AL,B2 ;AL是1字節(jié),B2類型屬性為2字節(jié),不匹配 MOV CX,B1 ;CX是2字節(jié),B1類型屬性為1字節(jié),不匹配,5.4.2 符號(hào)定義偽指令 符號(hào)定義偽指令的用途是給一個(gè)符號(hào)重新命名,或定義新的類型屬性等。這些符號(hào)可以包括匯編語(yǔ)言的變量名、標(biāo)號(hào)名、過(guò)程名、寄存器名以及指令助記符等。 常用的符號(hào)定義偽指令有EQU、LABLE。,1.EQU偽指令,作用:將表達(dá)式的值賦于一個(gè)名字,表達(dá)式可以是常 數(shù)、變量、寄存器名、指令助記符、數(shù)值表達(dá)式或地址 表達(dá)式等。 例: COUNT EQU 100 ;COUNT代替常數(shù) VAL EQU ASCII_TABLE ;代替變量 SUM EQU 30*25 ;代替數(shù)值表達(dá)式 ADR EQU ES:BP+DI+10 ;代替地址表達(dá)式 C EQU CX ;代替寄存器 M EQU MOV ;代替指令助記符,2.等號(hào)偽指令,格式: 名字=表達(dá)式 =與EQU偽指令區(qū)別:等號(hào)可以對(duì)同一個(gè)名字重復(fù)定義。 例 COUNT EQU 10 ;代替常數(shù) COUNT EQU 10+20;不能再次定義 但 COUNT=10 ;代替常數(shù) COUNT=10+20 ;可以重復(fù)定義,3.LABLE偽指令,用途:在原來(lái)標(biāo)號(hào)或變量的基礎(chǔ)上定義一個(gè)類型不 同的新的標(biāo)號(hào)或變量。 格式:變量名或標(biāo)號(hào)名 LABLE 類型符 LABEL偽操作使同一個(gè)變量具有不同的類型 LABEL偽操作的格式為: name LABEL type 數(shù)據(jù)項(xiàng)表示法中type 為 BYTE,WORD DWORD 例如: ARR_BYTE LABEL BYTE ARR_WORD DW 1122H,3344H,5566H,7788H,9900H,對(duì)于以ARR_WORD變量名為開(kāi)始的存儲(chǔ)器中 同一個(gè)單元,同時(shí)定義了字節(jié)屬性和字屬性, 使用ARR_BYTE變量名時(shí),為字節(jié)屬性; 使用ARR_WORD變量名時(shí),為字屬性。 如果指令中寫(xiě)作: MOV AL,ARR_BYTE 那么讀一字節(jié)數(shù)據(jù)22H到AL; 如果寫(xiě)作: MOV AX,ARR_WORD 那么讀一個(gè)字?jǐn)?shù)據(jù)1122H到AX。,4. 程序開(kāi)始和結(jié)束偽操作 程序開(kāi)始可用NAME和TITLE為模塊取名字, 并不是必要的。格式為: NAME module-name module-name是程序員給出的模塊名, 如果沒(méi)使用NAME偽操作.,也可以使用TITLE 偽操作,格式為: TITLE text TITLE可指定列表文件每一頁(yè)上打印的標(biāo)題,text最多 可有60個(gè)字符。若程序中無(wú)NAME偽操作, 則匯編程序 將用text中的前六個(gè)字符作為模塊名。,5. 對(duì)準(zhǔn)偽操作 EVEN 偽操作使下一個(gè)字節(jié)地址從偶數(shù)開(kāi)始,一個(gè)字的地址最好從偶地址開(kāi)始,所以對(duì)于字?jǐn)?shù)組,為保證其從偶地址開(kāi)始, 可以在它前面用EVEN偽操作來(lái)達(dá)到這一目的。格式為: EVEN 例如: EVEN WORD_ ARRAY DW 100dup(?),ORG偽操作指定其后的偏移地址,格式為: ORG constant expression 如常數(shù)表達(dá)式的值為n,則ORG偽操作可以使下 一字節(jié)的地址為n。 例如: ORG 100H V0 DW 2233H,4455H 則V0的偏移地址為100H。,匯編程序?qū)υ闯绦騾R編的過(guò)程中, 使用地址計(jì)數(shù)器計(jì)數(shù)器的值用來(lái)$表示, 匯編語(yǔ)言允許用戶直接用$來(lái)引用地址計(jì)數(shù)器的值。 例如: JNE $+6 轉(zhuǎn)向地址是JNE指令的首地址加上6。 例如: ORG 0010H ARRAY1 DW 1,2,$+4,3,4,$+5 匯編后的存儲(chǔ)區(qū)將如圖3.10所,圖3.10 ARRAY1占用存儲(chǔ)空間圖,6. 基數(shù)控制偽操作 匯編程序默認(rèn)的數(shù)為十進(jìn)制數(shù), 因而除非專門指定, 否則匯編程序把程序中出現(xiàn)的數(shù)均看成十進(jìn)制數(shù), 當(dāng)使用其它基數(shù)表示常數(shù)時(shí), 需要專門給以標(biāo)記,例如: 二進(jìn)制數(shù)由B表示,如:00110100B 十進(jìn)制數(shù)由D表示,如:165D 八進(jìn)制數(shù)由O或Q表示,如:1677Q 十六進(jìn)制數(shù)由H表示,如:0ABCDH,當(dāng)?shù)谝粋€(gè)符是字母時(shí),前面必須加0。 可用RADIX偽操作將默認(rèn)的基數(shù)改變?yōu)?16范圍的基數(shù)。,如默認(rèn)的基數(shù)為10時(shí),指令 MOV BX,0FFH MOV BX,178 用RADIX偽操作將基數(shù)改為16時(shí),指令可以寫(xiě)作 RADIX 16 MOV BX,0FF MOV BX,178D 此時(shí)十進(jìn)制數(shù)后須跟標(biāo)記D,十六進(jìn)制數(shù)后一般 不標(biāo)記H,但是一個(gè)16進(jìn)制數(shù),例如2D,為了與十進(jìn)制數(shù) 2D區(qū)別,十六進(jìn)制數(shù)要標(biāo)記H。,5.4.3 段定義偽指令,用途: 在匯編語(yǔ)言程序中定義邏輯段,用它來(lái)指定段的名稱和范 圍,并指明段的定位類型、組合類型及類別。 常用的段定義偽指令有SEGMENT、ENDS和ASSUME等。 1.SEGMENT/ENDS偽指令 SEGMENT用于定義一個(gè)邏輯段,給邏輯段賦予一個(gè)段名 SEGMENT位于一個(gè)邏輯段的開(kāi)始,ENDS表示一個(gè)邏輯段結(jié)束,代碼段以外的其他段段定義格式如下: segment name SEGMENT ;行1 ; ; segment name ENDS ;行n 代碼段段定義格式如下: segment name SEGMENT ;行1 ASSUME assignment, , assignment ;行2 ; ; segment name ENDS ;行n,ASSUME是偽操作,ASSUME操作只能指定某個(gè)段名與某個(gè)段寄存器聯(lián)系,提供給匯編程序把源程序翻譯成目標(biāo)程序時(shí)使用,它并不能把段地址裝入段寄存器中,所以在代碼段中,還必須把代碼段以外的段地址裝入相應(yīng)的段寄存器中。,一個(gè)程序可以由多個(gè)段組成。 例如: ;-定義DATA1段 DATA1 SEGMENT ARRAY DB 1,2,3,4,5,A,B TABLE DW 0FFFFH,0000H DATA1 ENDS ;-定義DATA2段 DATA2 SEGMENT BUFFER DB 20 DUP(?,?,?) DATA2 ENDS,;-定義代碼段 CODE SEGMENT ASSUME CS:CODE,DS:DATA1,ES:DATA2 START: ;程序員自己把段地址裝入相應(yīng)的段寄存器中。 MOV AX,DATA1 ;DATA1段地址送AX MOV DS,AX ;DATA1段地址經(jīng)AX送DS MOV AX,DATA2 ;DATA2段地址送AX MOV ES,AX ;DATA2段地址經(jīng)AX送ES CODE ENDS END START ;行n,如果需要用連接程序把本程序與其他程序模塊連接時(shí), 就需要使用SEGMENT的類型及屬性 說(shuō)明格式: 段名 定位類型 組合類型 類別 (段內(nèi)語(yǔ)句系列) 段名 ENDS 類型及屬性說(shuō)明如下:,定位類型,主要有: BYTE:邏輯段從字節(jié)的邊界開(kāi)始,該段可以從任何地址開(kāi)始。 WORD:該段必須從字的邊界開(kāi)始,即段地址必須為偶數(shù)。 PARA:邏輯段從一個(gè)節(jié)的邊界開(kāi)始,通常16個(gè)字節(jié)為一個(gè)節(jié)。默認(rèn) PAGE: 邏輯段從頁(yè)邊界開(kāi)始。256個(gè)字節(jié)為一頁(yè),故本段的起始地址最低8為必須為0 組合類型,主要有: PRIVATE:每段都有自己的基地址。默認(rèn)組合類型。 PUBLIC:連接時(shí)將具有相同類別名的其它分段連接在一起,其連接次序由連接命令指定。 COMMON:該段在連接時(shí)與其它同名分段有相同的起始地址。連接長(zhǎng)度是各分段中的最大長(zhǎng)度。,STACK:指定該段在運(yùn)行時(shí)為堆棧段的一部分。同PUBLIC,不同程序中的邏輯段,如果類別名相同,則順序連接成為一個(gè)邏輯段。 MEMORY :連接程序?qū)驯径味ㄎ辉诒贿B接在一起的其他所有段之上。 AT expression:使段的起始地址是表達(dá)式所計(jì)算出來(lái)的16位段地址, 但它不能用來(lái)指定代碼段. 例AT 5300H 則本段從存儲(chǔ)器的物理地址53000H開(kāi)始裝入。 (3)類別:必須放在單引號(hào)內(nèi) 作用:在連接時(shí)決定各邏輯段的裝入順序。類別名相同的邏輯段,按出現(xiàn)的先后順序排列,沒(méi)有類別名的邏輯段,與其他無(wú)類別名的邏輯段一起連續(xù)裝入內(nèi)存。,5.4.4 過(guò)程定義偽指令 在程序設(shè)計(jì)中,經(jīng)常將一些重復(fù)出現(xiàn)的語(yǔ)句組定義為子程序。子程序又稱為過(guò)程,可以采用CALL指令來(lái)調(diào)用。 使用格式: 過(guò)程名 PROC NEAR/FAR (語(yǔ)句系列) RET (語(yǔ)句系列) 過(guò)程名 ENDP 調(diào)用一個(gè)過(guò)程的格式為: CALL 過(guò)程名,5.4.5 結(jié)構(gòu)定義偽指令 結(jié)構(gòu)就是相互關(guān)聯(lián)的一組數(shù)據(jù)的某種組合形式。 用偽指令STRUC和ENDS把相關(guān)數(shù)據(jù)定義語(yǔ)句組合起來(lái),便構(gòu)成一個(gè)完整的結(jié)構(gòu)。 使用格式: 結(jié)構(gòu)名 STRUC (數(shù)據(jù)定義語(yǔ)句序列) 結(jié)構(gòu)名 ENDS,5.4.6 模塊定義與連接偽指令 在編
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 北京匯佳職業(yè)學(xué)院《體育游戲與創(chuàng)編》2023-2024學(xué)年第二學(xué)期期末試卷
- 《財(cái)商素養(yǎng)》課件情境四 合理配置資產(chǎn)啟動(dòng)財(cái)富之鍵
- 2025年項(xiàng)目股權(quán)協(xié)議
- 2025年紋繡合同協(xié)議書(shū)
- 保定幼兒師范高等專科學(xué)?!吨袊?guó)傳統(tǒng)文化評(píng)析》2023-2024學(xué)年第二學(xué)期期末試卷
- 包頭鐵道職業(yè)技術(shù)學(xué)院《水滸文化概論》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025至2031年中國(guó)糖衣蜜餞冰果行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025至2031年中國(guó)電腦全自動(dòng)分切機(jī)行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025至2031年中國(guó)環(huán)形螺紋墻釘行業(yè)投資前景及策略咨詢研究報(bào)告
- 蚌埠工商學(xué)院《食品生物技術(shù)A》2023-2024學(xué)年第二學(xué)期期末試卷
- 大學(xué)英語(yǔ)六級(jí)詞匯表(全)含音標(biāo)
- 土木工程施工組織課程設(shè)計(jì)
- 農(nóng)業(yè)項(xiàng)目投資計(jì)劃書(shū)的范文(6篇)
- 設(shè)計(jì)成果確認(rèn)單
- 2022年上海市閔行區(qū)第二輪事業(yè)單位招聘47人筆試備考題庫(kù)及答案解析
- 拆除設(shè)備安全技術(shù)措施
- 市政排水施工方案
- 《電子商務(wù)概論》試題庫(kù)20套
- 進(jìn)氣歧管工藝編制與典型工序夾具設(shè)計(jì)
- 2023-2024學(xué)年浙江省余姚市小學(xué)語(yǔ)文 2023-2024學(xué)年六年級(jí)語(yǔ)文期末試卷期末自我評(píng)估考試題
- GB/T 9576-2013橡膠和塑料軟管及軟管組合件選擇、貯存、使用和維護(hù)指南
評(píng)論
0/150
提交評(píng)論