第4章 匯編語(yǔ)言程序設(shè)計(jì)11_免費(fèi)下載.ppt.ppt 免費(fèi)下載
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1,第4章 匯編語(yǔ)言程序設(shè)計(jì),2,主要內(nèi)容:,匯編語(yǔ)言源程序的結(jié)構(gòu) 匯編語(yǔ)言語(yǔ)句格式 偽指令 功能調(diào)用 匯編語(yǔ)言程序設(shè)計(jì),3,4.1匯編語(yǔ)言源程序 (1)機(jī)器語(yǔ)言二進(jìn)制數(shù)形式的指令和數(shù)據(jù)。 B0 64 是什么意思?這就是機(jī)器語(yǔ)言。既不直觀,又不易理解和記憶. MOV AL,64H ;很容易記憶理解,這就是助記符。 (2)助記符用便于記憶的英語(yǔ)單詞表示的指令操作碼。它反映了指令的功能和主要特征,便于人們理解和記憶。,4,操作數(shù)可能放在存儲(chǔ)器中,這就涉及操作數(shù)的地址。程序中遇到轉(zhuǎn)移指令或調(diào)用指令,也需要知道轉(zhuǎn)移地址,若采用具體地址就很不方便,一旦有錯(cuò),改動(dòng)也很麻煩。于是人們采用標(biāo)號(hào)或符號(hào)來(lái)代替地址
2、,例: LP1: MOV AX,VAR LOOP LP1 (3)匯編語(yǔ)言指令助記符,符號(hào)地址,標(biāo)號(hào),偽指令等語(yǔ)言元素的集合以及這些元素使用的規(guī)則。 用匯編語(yǔ)言編寫(xiě)的程序叫匯編語(yǔ)言源程序。,指令除了操作碼以外,還有一個(gè)操作數(shù)問(wèn)題。,5,匯編程序(翻譯程序),源程序的編譯程序,匯編程序,匯編語(yǔ)言源程序,機(jī)器語(yǔ)言目標(biāo)程序,匯編源程序需翻譯成機(jī)器語(yǔ)言,變成可執(zhí)行文件,機(jī)器才能執(zhí)行,這個(gè)翻譯過(guò)程叫匯編。高級(jí)語(yǔ)言中稱該過(guò)程為“解釋”或“編譯”。執(zhí)行翻譯的程序稱為“匯編程序”。,6,匯編語(yǔ)言程序設(shè)計(jì)與執(zhí)行過(guò)程,輸入?yún)R編語(yǔ)言源程序 EDIT/NOTEPAD等 源文件 .ASM 匯編(編譯) MASM /ASM
3、等 目標(biāo)文件 .OBJ 鏈接 LINK等 可執(zhí)行文件 .EXE 調(diào)試 DEBUG/TD等 最終正確的程序.EXE,目前都把上述的軟件集成在統(tǒng)一的環(huán)境下,以方便用戶使用。,建立、編輯 匯編 連接 運(yùn)行 調(diào)試,7,4.1.1 匯編語(yǔ)言源程序的結(jié)構(gòu),匯編語(yǔ)言源程序通常由一個(gè)或幾個(gè)程序模塊組成,每個(gè)模塊一般由3個(gè)(或4個(gè))邏輯段組成: 數(shù)據(jù)段存放數(shù)據(jù)、變量 (附加數(shù)據(jù)段存放數(shù)據(jù)、變量) 堆棧段堆棧區(qū)域 代碼段存放程序指令,8,一個(gè)基本的匯編語(yǔ)言程序框架如下: stack SEGMENT PARA stack DB 100 DUP(stack) stack ENDS data SEGMENT data
4、ENDS code SEGMENT ASSUME CS:code, DS:data, ES:data, SS:stack start: MOV AX, data MOV DS, AX MOV ES, AX MOV AL, 4CH INT 21H code ENDS END start,堆棧段,數(shù)據(jù)段,代碼段,真指令,9,0000:03FF,環(huán)境與代碼運(yùn)行,FFFF:0,堆棧段,數(shù)據(jù)段,代碼段,CS:IP,DS,SS:SP,系統(tǒng)起始運(yùn)行程序,中斷向量區(qū) (系統(tǒng)專用),棧底,最多4個(gè)活動(dòng)段,分段結(jié)構(gòu),ES,10,4.1.2 匯編語(yǔ)言的語(yǔ)句類型與格式,匯編語(yǔ)言的語(yǔ)句有兩種: 指令性語(yǔ)句由8086指令
5、助記符(真指令)構(gòu)成的語(yǔ)句 指示性語(yǔ)句由偽指令構(gòu)成的語(yǔ)句 指令性語(yǔ)句的格式為: 標(biāo)號(hào): 指令助記符 目的操作數(shù),源操作數(shù);注釋 指示性語(yǔ)句的格式為: 名字 偽指令 操作數(shù)1, 操作數(shù)2, ;注釋 注:各部分之間至少要用一個(gè)空格(或逗號(hào)、分號(hào))作為分隔符。,11,指示性語(yǔ)句(偽指令)由匯編程序執(zhí)行。它指出匯編程序應(yīng)如何對(duì)源程序進(jìn)行匯編,如何定義變量、分配存儲(chǔ)單元以及指示程序開(kāi)始和結(jié)束等。指示性語(yǔ)句無(wú)機(jī)器碼指令與其相對(duì)應(yīng)。,指令性語(yǔ)句(真指令)由CPU執(zhí)行,每一條 指令性語(yǔ)句都有一條機(jī)器碼指令與其對(duì)應(yīng);,注意: 指令性語(yǔ)句匯編時(shí)生成機(jī)器碼; 指示性語(yǔ)句匯編時(shí)不生成機(jī)器碼。,12,語(yǔ)句的構(gòu)成元素:
6、1.標(biāo)號(hào)指令的符號(hào)地址,用來(lái)代表指令在存儲(chǔ)器中的地址。只能出現(xiàn)在指令性語(yǔ)句中,標(biāo)號(hào)后應(yīng)加上冒號(hào)。 2.名字段、過(guò)程、變量或宏的名字,用來(lái)代表它們?cè)诖鎯?chǔ)器中的地址。只能出現(xiàn)在指示性語(yǔ)句中,名字后不加冒號(hào)。 標(biāo)號(hào)與名字統(tǒng)稱為標(biāo)識(shí)符一般最多由31個(gè)字母、數(shù)字及規(guī)定的特殊符號(hào)(如 _、$、?、)組成,不能以數(shù)字開(kāi)頭。默認(rèn)情況下,匯編程序不區(qū)別標(biāo)識(shí)符中的字母大小寫(xiě) 一個(gè)程序中,每個(gè)標(biāo)識(shí)符的定義是唯一的,還不能是匯編語(yǔ)言采用的保留字 保留字是匯編程序已經(jīng)利用的標(biāo)識(shí)符,主要有: 真指令助記符例如:MOV、ADD 偽指令助記符例如:DB、EQU 操作符例如:OFFSET、PTR 寄存器名例如:AX、CS,13
7、,3.指令助記符8086真指令、偽指令助記符 4.操作數(shù)即指令的操作對(duì)象 對(duì)指令性語(yǔ)句(真指令)0,1,2個(gè) 對(duì)指示性語(yǔ)句(偽指令)根據(jù)需要而定 操作數(shù)之間以逗號(hào)分隔 操作數(shù)可以是:寄存器、存儲(chǔ)單元、常數(shù)或表達(dá)式 例如:AX,DI+BX+10,200,16*8+TABLE,等等,14,例如:以下為同一條指令寫(xiě)的注釋 1)MOV CX,100 ;傳送100到CX 2)MOV CX,100 ;循環(huán)計(jì)數(shù)器置初值 顯然,第二種寫(xiě)法要比第一種寫(xiě)法要好。,5.注釋以分號(hào)開(kāi)頭,可放在指令后,也可單獨(dú)一行。,注意注解的寫(xiě)法。要寫(xiě)指令(段)在程序中的作用,而不要寫(xiě)指令的操作。,注釋不能加程序的匯編,不生成目標(biāo)程
8、序,只為閱讀方便。,15,匯編語(yǔ)言的一個(gè)實(shí)例: hello.asm data SEGMENT Hello DB Hello, world!,0DH,0AH data ENDS prog SEGMENT ASSUME CS:prog,DS:data start: MOV AX,data MOV DS,AX LEA DX,hello;取字符串首地址 MOV AH,9 INT 21H;顯示字符串 MOV AH,4CH INT 21H;退回DOS prog ENDS END start,名字,標(biāo)號(hào),16,4.1.3 數(shù)據(jù)項(xiàng)與表達(dá)式,1常量 二進(jìn)制數(shù),以B或b結(jié)尾。如01001101B。 十進(jìn)制數(shù),以字
9、母D或d結(jié)尾,缺省情況下,后綴D或d可以省略如85。 十六進(jìn)制數(shù),以H結(jié)尾。以字母AF開(kāi)頭的十六進(jìn)制數(shù),前面要用0表達(dá),以避免與其他符號(hào)混淆,如0F160H。 字符串:用引號(hào)括起來(lái)的1個(gè)或多個(gè)字符。 如ERROR!, a,匯編時(shí)被翻譯成對(duì)應(yīng)的ASCII碼45H,52H,52H,4FH,52H,21H, 61H。,數(shù)據(jù)項(xiàng)(操作數(shù)的形式)包括常量、標(biāo)號(hào)/名字、 變量及表達(dá)式。,17,有三個(gè)屬性: 段地址:即標(biāo)號(hào)所在段的段地址; 偏移量:標(biāo)號(hào)所代表存儲(chǔ)單元的段內(nèi)偏移地址; 類 型:NEAR或FAR NEAR表示標(biāo)號(hào)所在語(yǔ)句與轉(zhuǎn)移指令/調(diào)用指令在同一碼段內(nèi),跳轉(zhuǎn)時(shí)只需改變IP即可。 FAR 標(biāo)號(hào)所在語(yǔ)
10、句與轉(zhuǎn)移指令/調(diào)用指令不在同一代碼段內(nèi)。跳轉(zhuǎn)時(shí)需改變CS和IP即可。 若沒(méi)有對(duì)類型進(jìn)行說(shuō)明,默認(rèn)為NEAR。 標(biāo)號(hào)通常作為轉(zhuǎn)移指令或CALL指令的轉(zhuǎn)移地址。,2.標(biāo)號(hào)/名字指令或數(shù)據(jù)所在內(nèi)存單元的符號(hào)地址,如 Start : MOV AX, data JMP/CALL Start Hello DB 06H,45H,44H,PTR,18,變量也有三個(gè)屬性: 段地址變量所在段的段地址 偏移量變量單元地址與段首地址之間的位移量。 類 型有BYTE、WORD 、DWORD三種之一。 變量在程序中作為存儲(chǔ)器操作數(shù)被引用。,3.變量,如 Start : MOV AX, data,PTR,變量即內(nèi)存中的存儲(chǔ)
11、單元或數(shù)據(jù)區(qū)。 變量名是存儲(chǔ)單元(數(shù)據(jù)區(qū))的符號(hào)地址 或 名字。,19,例如: 正確的:LP1, AGAIN, NEXT, _GO, OK_1 錯(cuò)誤的:4M, LOOP, AAA, #HELP, +ONE,標(biāo)號(hào)和變量名的使用規(guī)則:,組成:A-Z(不分大小寫(xiě)), 0-9, ? . _ $ 不能以數(shù)字開(kāi)頭,以免與十六進(jìn)制數(shù)相混。 長(zhǎng)度小于31個(gè)字符 不能與保留字(指令助記符、偽指令、預(yù)定義符號(hào)等)重名 對(duì)定義的符號(hào)不區(qū)分大小寫(xiě)。,20,注: 變量要事先定義才能使用 變量類型應(yīng)與指令要求的操作數(shù)類型相符。例: MOV BL,V1; 要求V1應(yīng)該是字節(jié)屬性的變量。 變量定義后,變量名只對(duì)應(yīng)這個(gè)數(shù)據(jù)區(qū)的
12、首地址,若有這個(gè)數(shù)據(jù)區(qū)有若干個(gè)數(shù)據(jù)項(xiàng)時(shí),其地址要改變。 指令中的操作數(shù)的段基地址不直接表示出來(lái),是默認(rèn)的。在使用變量時(shí),其段屬性應(yīng)與其所指的段寄存器相符,若不相符,要加上段超越。,21,4.表達(dá)式,表達(dá)式是常數(shù)、寄存器、標(biāo)號(hào)、變量與運(yùn)算符的組合。 有數(shù)字表達(dá)式和地址表達(dá)式兩種。 匯編時(shí)按優(yōu)先規(guī)則對(duì)表達(dá)式進(jìn)行計(jì)算,計(jì)算出具體的數(shù)值或地址。運(yùn)行時(shí)不能改變。 表達(dá)式中的運(yùn)算符有6類:算術(shù)、邏輯、關(guān)系、取地址、屬性、雜類。,如 Start : MOV AX, 16*8+TABLE,22,用于地址表達(dá)式, 例:LEA SI,TAB+3 若TAB的偏移地址為1000H,則匯編后的形式為: LEA SI,1
13、003H,(1)算術(shù)運(yùn)算符 +、-、*、/,MOD,用于數(shù)字表達(dá)式, 例:MOV AX,4*1024 匯編后的形式為: MOV AX,4096,23,注意: 不要把邏輯運(yùn)算符與邏輯運(yùn)算指令混淆: 例:AND AX, 3FC0H AND 0FF00H 匯編后源操作數(shù)被翻譯為:3F00H,所以上述指令與 AND AX, 3F00H等價(jià)。,(2)邏輯運(yùn)算符 AND、OR、XOR、NOT,邏輯運(yùn)算符只能用于數(shù)字表達(dá)式中。 例: MOV CL,36H AND 0FH 經(jīng)匯編后:MOV CL,06H,24,例: MOV BX, PORT GT 300H 若PORT的值大于300H為真,則匯編后為: MOV
14、 BX, 0FFFFH 若為假,則匯編后為: MOV BX, 0,(3)關(guān)系運(yùn)算符EQ、NE、LT、GT、LE、GE,關(guān)系運(yùn)算的結(jié)果是一個(gè)邏輯值:真或假 關(guān)系為真,結(jié)果為全1 關(guān)系為假,結(jié)果為全0,25,(4)取地址運(yùn)算符SEG、OFFSET,SEG: 取變量/標(biāo)號(hào)的段地址 OFFSET:取變量/標(biāo)號(hào)的偏移地址,例:VAR DB 12H MOV BX,OFFSET VAR ;取變量VAR的偏移地址 MOV AX,SEG VAR ;取變量VAR的段地址,注意:SEG、OFFSET只能對(duì)符號(hào)地址操作 MOV AX , SEG BX MOV BX , OFFSET SI,26,例:VAR DW 1,
15、2,3,4,5 則 TYPE VAR = 2 LENGTH VAR = 1 SIZE VAR = 2,(5)取值運(yùn)算符TYPE、LENGTH、SIZE,TYPE 取變量的類型(1,2,4) LENGTH 取所定義變量的長(zhǎng)度 (無(wú)DUP時(shí)為1,有時(shí)為DUP前面的值) SIZE 取所定義存儲(chǔ)區(qū)的字節(jié)數(shù) (=TYPE * LENGTH),27,LENGTH和SIZE運(yùn)算符的具體運(yùn)算規(guī)則是:如果變量是用重復(fù)操作符DUP定義的,那么運(yùn)算符LENGTH的運(yùn)算結(jié)果是外層DUP的給定值 (即外層重復(fù)次數(shù)),如果沒(méi)有用DUP定義的變量,運(yùn)算結(jié)果總是1。 而運(yùn)算符SIZE是LENGTH和TYPE兩個(gè)運(yùn)算結(jié)果的乘積
16、。 【例】取出變量占存儲(chǔ)單元個(gè)數(shù)。 DATASEGMENT A DBABCDEF BDW10DUP(1,2DUP(2) DATAENDS MOVAX,LENGTH A;1AX MOVBX,LENGTHB;10BX,28,SIZE A = LENGTH A*TYPE A = 1 SIZE B = LENGTH B*TYPE B = 20,若BUFFER存儲(chǔ)區(qū)是用如下偽指令定義: BUFFER DW 200 DUP(0) 則: TYPE BUFFER 等于2 LENGTH BUFFER等于200 SIZE BUFFER等于400,29,(6)屬性運(yùn)算符PTR,用來(lái)指定地址操作數(shù)的類型。 格式: P
17、TR 類型BYTE, WORD, DWORD和 NEAR, FAR ,SHORT BYTE、WORD、DWORD 用于描述數(shù)據(jù)存儲(chǔ)單元(變量)地址 NEAR、FAR (SHORT ?) 用于描述轉(zhuǎn)移、調(diào)用的目的地址,30,例:MOVBYTE PTRDI,0 ;字節(jié)類型 MOVWORD PTRDI,0 ;字類型 MOVDI,0B5H ;類型不定 PTR也可用來(lái)進(jìn)行強(qiáng)制類型轉(zhuǎn)換 例:STR1 DW ? ;STR1定義為字類型 MOVAX,STR1 ;合法 MOVAL,STR1 ;非法 MOV AL,BYTE PTR STR1 ;合法,31,7)其它運(yùn)算符 方括號(hào)“ ” 指令中用方括號(hào)表示存儲(chǔ)器操作
18、數(shù),方括號(hào)的內(nèi)容表示操作數(shù)的偏移地址 例:MOV AX,1000H 段重設(shè)運(yùn)算符“:”它跟在段寄存器名之后,表示段重設(shè),用來(lái)指定一個(gè)存儲(chǔ)器操作數(shù)的段屬性而不管其原來(lái)的隱含的段是什么。 例:MOV AX,ES:DI,32,在計(jì)算具有多個(gè)運(yùn)算符的表達(dá)式值時(shí),按以下規(guī)則操作: 優(yōu)先級(jí)高的先運(yùn)算,優(yōu)先級(jí)低的后運(yùn)算。 當(dāng)優(yōu)先級(jí)相同時(shí),按表達(dá)式中從左到右的順序進(jìn)行運(yùn)算 使用括號(hào)可以提高表達(dá)式運(yùn)算的優(yōu)先級(jí)。 表達(dá)式中的運(yùn)算符的優(yōu)先級(jí),33,4.2 偽指令,數(shù)據(jù)定義 偽指令 符號(hào)定義 偽指令 段定義和段寄存器指定 偽指令 過(guò)程定義 偽指令 結(jié)束 偽指令,由匯編程序執(zhí)行的指令,它本身不被匯編成機(jī)器指令。常用的偽
19、指令有:,34,4.2.1 數(shù)據(jù)定義偽指令(變量定義),功能:用于定義變量的類型,給變量賦初值或給變量分配存儲(chǔ)空間。數(shù)據(jù)定義偽指令的格式為: 變量名 數(shù)據(jù)定義偽指令 操作數(shù),操作數(shù), 常用的數(shù)據(jù)定義偽指令有如下幾種: DB 定義字節(jié) DW 定義字 DD 定義雙字 DQ 定義四字 DT 定義十字節(jié),35,變量名為用戶自定義標(biāo)識(shí)符,表示操作數(shù)首元素的邏輯地址;用這個(gè)符號(hào)表示地址,常稱為符號(hào)地址 變量名可以沒(méi)有。這種情況,匯編程序?qū)⒅苯訛槌踔当矸峙淇臻g,無(wú)符號(hào)地址 設(shè)置變量名是為了方便存取它指示的存儲(chǔ)單元,變量名,36,操作數(shù),操作數(shù)是用逗號(hào)分隔的參數(shù) 主要由數(shù)值常數(shù)、字符串、表達(dá)式或?、DUP組成
20、 ?表示初值不確定,即未賦初值; DUP表示重復(fù)初值 DUP的格式為: 重復(fù)次數(shù) DUP(重復(fù)參數(shù)),37,1)定義字節(jié)單元偽指令DB,DB偽指令用于分配一個(gè)或多個(gè)字節(jié)單元,并可以將它們初始化為指定值 初值表中每個(gè)數(shù)據(jù)一定是字節(jié)量(Byte),存放一個(gè)8位數(shù)據(jù): 可以是0255的無(wú)符號(hào)數(shù) 或是128127帶符號(hào)數(shù) 也可以是字符串常數(shù),datasegment;數(shù)據(jù)段 Xdb a,-5 db 2 dup(100),? Ydb ABC dataends,字節(jié)單元定義實(shí)例,38,2)定義字單元偽指令DW,DW偽指令用于分配一個(gè)或多個(gè)字單元,并可以將它們初始化為指定值 初值表中每個(gè)數(shù)據(jù)一定是字量(Wor
21、d),一個(gè)字單元可用于存放任何16位數(shù)據(jù): 一個(gè)段地址 一個(gè)偏移地址 兩個(gè)字符 065535之間的無(wú)符號(hào)數(shù) 3276832767之間的帶符號(hào)數(shù),datasegment;數(shù)據(jù)段 countdw 8000h,?,AB maxintequ 64h numberdw maxint arraydw maxint dup(0) dataends,字單元定義實(shí)例,39,3)定義雙字單元偽指令DD,DD偽指令用于分配一個(gè)或多個(gè)雙字單元,并可以將它們初始化為指定值 初值表中每個(gè)數(shù)據(jù)是一個(gè)32位的雙字量(Double Word): 可以是有符號(hào)或無(wú)符號(hào)的32位整數(shù) 也可以用來(lái)表達(dá)16位段地址(高位字)和16位的偏
22、移地址(低位字)的遠(yuǎn)指針 varddDD 0,?,12345678h farpointDD 00400078h,40,例1: DATA_B DB 10,5,10H DATA_W DW 100H,-4 DATA_D DD 0FFFBH 匯編后的內(nèi)存分配情況 如右圖所示。,Q,DATA_B,DATA_W,DATA_D,100H,-4,0FFFBH,41,例2:操作數(shù)可以是字符串,例如 STR DBHELLO 匯編后的情況如圖:,STR,H,E,L,L,O,注意:下面兩個(gè)定義的不同之處: DBAB ;41H在低字節(jié),42H在高字節(jié)(先A后B) DW AB ;42H在低字節(jié),41H在高字節(jié)(先B后A)
23、,48H,45H,4CH,4CH,4FH,注意:3個(gè)及其以上的字符,只能用DB定義,42,操作數(shù)?用來(lái)保留存儲(chǔ)空間,但不存入數(shù)據(jù). 例3:ABC DB 0,1,2,3,4,OK,$ RSV DW ?,?,?,?,?,?,?,? 復(fù)制操作符DUP: 重復(fù)的數(shù)據(jù)可以使用復(fù)制操作符DUP,如上面RSV亦可寫(xiě)成: RSV DW 8 DUP(?),43,4.2.2 符號(hào)定義偽指令,把一個(gè)表達(dá)式用一個(gè)符號(hào)表示,以后凡出現(xiàn)該表達(dá)式的地方都可用這個(gè)符號(hào)表示。 符號(hào)定義偽指令有兩種:EQU,=,用EQU定義的符號(hào)未清除前,不能重新定義。 用”=”定義的符號(hào)可在任何時(shí)候進(jìn)行重定義。 二者均不占用存儲(chǔ)空間,僅是給符
24、號(hào)賦值,44,1、EQU CR EQU 0DH ;常數(shù) A EQU ASC - TABLE ;變量(事先已定義) STR EQU 64 1024 ;數(shù)值表達(dá)式 ADR EQU ES:BP + DI + 5 ;地址表達(dá)式 EQU不允許對(duì)一個(gè)符號(hào)重復(fù)定義。 2、等號(hào)語(yǔ)句 = 同 EQU ,但可重新定義一個(gè)符號(hào)。 COUNT = 100 同 COUNT EQU 100 CONNT = 57 COUNT重新定義,45,例:FIVE EQU 5 COUNT = 10 DIST = BYTE PTRSI+BP GOTO = JMP MOV AX, TEN MOV CX, COUNT ADD DIST, F
25、IVE DIST = WORD PTRSI+BP+1 ADD DIST, AX GOTO LABEL,定義,引用,46,4.2.3 段定義偽指令,匯編語(yǔ)言程序是按段來(lái)組織程序和數(shù)據(jù)的。 和存儲(chǔ)器的物理段相對(duì)應(yīng),匯編語(yǔ)言程序中的段稱為邏輯段。匯編連接后被映射到物理段中。 3/4類段:代碼(程序)、數(shù)據(jù)/附加數(shù)據(jù)、堆棧 段定義偽指令:SEGMENT、ENDS 定義一個(gè)段的基本格式: 段名 SEGMENT 定位類型組合方式類別 段名 ENDS,47,這兩個(gè)偽指令總是成對(duì)出現(xiàn),二者前面的段名應(yīng)一致,但不能與保留字重名.SEGMENT說(shuō)明了一個(gè)段的開(kāi)始,ENDS說(shuō)明了一個(gè)段的結(jié)束。 對(duì)數(shù)據(jù)段和堆棧段,段
26、中的語(yǔ)句一般是變量定義。 對(duì)代碼段則是指令語(yǔ)句。 如: data SEGMENT data ENDS,SEGMENT和ENDS偽指令,48,SEGMENT語(yǔ)句后可以帶有可選參數(shù),用以規(guī)定邏輯段的其他一些屬性。它的格式為:,1. 定位類型 說(shuō)明如何確定邏輯段的邊界。有4種: PARA(Paragraph): 邏輯段從一個(gè)節(jié) (16個(gè)字節(jié)) 的邊界開(kāi)始。即段的起始地址應(yīng)能被16整除, 或這說(shuō)段起始物理地址應(yīng)為0H。默認(rèn)類型 BYTE : 邏輯段從字節(jié)邊界開(kāi)始,即段可以從任何地址開(kāi)始。 WORD : 邏輯段從字邊界開(kāi)始。即段的起始地址必須是偶數(shù)。 PAGE : 邏輯段從頁(yè)邊界開(kāi)始。256字節(jié)稱為一頁(yè)
27、,故段的起始物理地址應(yīng)為00H。,也即:PAGE(頁(yè)邊界) - 能被256除;PARA(段邊界) -能被16除; WORD(字邊界) - (能被2除);BYTE (字節(jié)邊界),段名 SEGMENT 定位類型 組合類型 類別,49,2.組合類型 功能:用在具有多個(gè)模塊的程序中,用于說(shuō)明不同模塊中同名段的組合方式,共6種: NONE : 本段與其它邏輯段不組合 。 PUBLIC: 所有此類型的同名段組合成一個(gè)邏輯段,公用一個(gè)段地址,運(yùn)行時(shí)裝入同一個(gè)物理段中,構(gòu)成一個(gè)大的邏輯段。 STACK : 專用于說(shuō)明堆棧段,組合方式同PUBLIC COMMON : 所有此類型的同名段具有相同的起始地址(覆蓋)
28、,各個(gè)邏輯段重疊在一起,共享相同的存儲(chǔ)區(qū)域。 MEMORY :本邏輯段置于地址最高處,多個(gè)時(shí)取第一個(gè),其余作為COMMON AT :使段地址是表達(dá)式所計(jì)算出來(lái)的16位值,CS除外。,50,【例】有兩個(gè)模塊,各模塊段定義如下 模塊1: DATA1SEGMENT PARA PUBLIC DATA1 M1DB 45H DUP(0) DATA1ENDS DATA2SEGMENT PARA COMMON DATA2 N1 DB 102H DUP(0) DATA2ENDS END,模塊2: DATA1SEGMENT PARA PUBLIC DATA1 M2DB 104H DUP(11H) DATA1END
29、S DATA2SEGMENT PARA COMMON DATA2 N2DB 105H DUP(0) DATA2ENDS DATA3SEGMENT T1DB 50 DUP(20H) DATA3ENDS END,51,該段的定位組合方式示意圖如圖所示。,52,3.類別 用單引號(hào) 括起來(lái)的字符串。如代碼段CODE”所有同類別的段被安排在連續(xù)的存儲(chǔ)區(qū)域中。類別名相同的邏輯段按出現(xiàn)的先后順序排列. 如:在模塊1中有段定義: seg1 SEGMENT PARA STACK stack seg1 ENDS 在模塊2中有段定義: seg2 SEGMENT PARA STACK stack seg2 ENDS
30、則連接時(shí)這兩個(gè)段被安排在一起。,53,4.2.4設(shè)定段寄存器偽指令,ASSUME偽指令用于指明已定義的段與段寄存器之間關(guān)系。 格式為:ASSUME 段寄存器:段名 ,段寄存器:段名. 其中段寄存器名必須是CS ,DS,ES 和SS中的一個(gè)。段名必須是由SEGMENT定義的段中的段名。 也就是說(shuō)ASSUME指令是告訴匯編程序用SEGMENT指令定義過(guò)的段的段地址將放在哪個(gè)段寄存器中.,例: DATA1SEGMENT ADB 1,2,3 DATA1ENDS CODE SEGMENT ASSUME DS:DATA1,CS:CODE . CODE ENDS,54,注意: ASSUME偽指令只是告知匯編
31、程序有關(guān)段寄存器與段的關(guān)系,并沒(méi)有給段寄存器賦予實(shí)際的初值。故下面的語(yǔ)句 MOVAX,data MOVDS,AX MOVES,AX MOVAX,stack MOVSS,AX 將段基址裝入段寄存器。如果程序中用到堆棧段,則SS也需裝入實(shí)際的初值。 代碼段基地址不需要程序員裝入CS寄存器,而由操作系統(tǒng)(OS)負(fù)責(zé)裝入。,55, 段定義偽操作:,完整的段定義格式舉例,data segment ; 定義數(shù)據(jù)段 data ends ;- extra segment ; 定義附加段 extra ends ;- code segment ; 定義代碼段 assume cs:code, ds:data, es
32、:extra start: mov ax, data mov ds, ax ; 段地址 段寄存器 code ends end start,注:匯編時(shí),系統(tǒng)自動(dòng)將代碼段的段地址裝入CS,不用在程序中初始化,其它的段則要用指令把其初始化.,56,結(jié)論: 1. ASSUME語(yǔ)句只起指示作用, 沒(méi)有賦值作用 2. 程序中用到內(nèi)存操作數(shù)時(shí), 應(yīng)按操作數(shù)的尋址方式, 給相應(yīng)的段寄存器賦值。,57,4.2.5 過(guò)程定義偽指令PROC、ENDP,過(guò)程就是子程序。一個(gè)過(guò)程可以被其它程序所調(diào)用(用CALL指令),過(guò)程的最后一條指令一般是返回指令(RET)。 過(guò)程定義偽指令的格式為 PROC NEAR/FAR 類型
33、 RET ENDP 注意:PROC和ENDP必須成對(duì)出現(xiàn)且同一過(guò)程的名字必須相同。,若為近調(diào)用,則類型可省,58,過(guò)程的類型有兩種: NEAR表示段內(nèi)調(diào)用 (默認(rèn)類型) FAR 表示段間調(diào)用 調(diào)用一個(gè)過(guò)程的格式為: CALL ,程序經(jīng)匯編、連接及裝入內(nèi)存后, 過(guò)程名為一具體的 內(nèi)存地址,指示子程序入口。 過(guò)程名常用作CALL調(diào)用指令的操作數(shù),子程的最后安排 RET返回指令,使執(zhí)行完子程后能返回調(diào)用處。,59,例1 display PROC RET ;NEAR 屬性的過(guò)程對(duì)應(yīng)段內(nèi)返回 display ENDP 例2 display PROC FAR RET ;FAR屬性的過(guò)程對(duì)應(yīng)段間返回 dis
34、play ENDP,60,4.2.6 宏定義偽指令,宏指令:是源程序中具有獨(dú)立功能的一段程序代碼,程序員事先根據(jù)需要自定義的“指令“。此后在宏指令出現(xiàn)的地方,匯編程序自動(dòng)把它們替換成相應(yīng)的語(yǔ)句序列。宏指令的使用過(guò)程為宏定義、宏調(diào)用。,1、宏定義 格式:宏指令名 MACRO 形參,形參 ENDM,61,說(shuō)明: 宏指令名是為該宏定義所起的名字,可以象指令助記符一樣出現(xiàn)在源程序中; 形參間用逗號(hào)隔開(kāi),在宏指令調(diào)用時(shí),形參被實(shí)參依次取代,形參為可選項(xiàng); MACRO表示宏定義開(kāi)始,ENDM表示宏定義結(jié)束,二者之間的程序段稱為宏體。,62,2、宏調(diào)用 格式:宏指令名 實(shí)參,實(shí)參 功能:宏指令名的調(diào)用就是宏
35、調(diào)用,它要求 匯編程序把定義的宏體目標(biāo)代碼拷貝到調(diào)用點(diǎn);調(diào)用時(shí)實(shí)參依次替代形參,實(shí)參數(shù)目與形參數(shù)目可以不相同,當(dāng)實(shí)參數(shù)多于形參數(shù)時(shí),忽略多余實(shí)參,當(dāng)實(shí)參數(shù)少于形參數(shù)時(shí),剩余的形參處理為空白。,63,例: 兩個(gè)數(shù)之和的宏定義和宏調(diào)用。 宏定義為: DADD MACRO X,Y,Z MOV AX,X ADD AX,Y MOV Z,AX ENDM,上面宏定義中,X、Y、Z是形式參數(shù)。 調(diào)用宏DADD時(shí)可寫(xiě)為: DADD DATA1,DATA2,SUM 上面宏調(diào)用中,DATA1,DATA2,SUM是實(shí)際參數(shù),由它們替換定義中的X、Y、Z,即形實(shí)結(jié)合。,64,CALL DADD,RET,DADD:,CALL DADD,CALL DADD,DADD yy,DADD MACRO xx,DADD yy,DADD yy,ENDM,相同,=,或,主程序+過(guò)程(子程序),主程序+宏定義,宏擴(kuò)展,
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026福建廈門(mén)市第三幼兒園招聘1人考試備考試題及答案解析
- 2026廣東茂名市信宜市選聘市外教師21人考試參考題庫(kù)及答案解析
- 水下機(jī)器人:探索藍(lán)色疆域的智能裝備革命
- 2026年上海市寶山區(qū)新江灣實(shí)驗(yàn)學(xué)校編內(nèi)教師公開(kāi)招聘筆試備考題庫(kù)及答案解析
- 2026江蘇蘇州東吳財(cái)產(chǎn)保險(xiǎn)股份有限公司重客業(yè)務(wù)部社會(huì)招聘考試備考題庫(kù)及答案解析
- 2026福建廈門(mén)市集美區(qū)海怡實(shí)驗(yàn)幼兒園招聘2人考試備考題庫(kù)及答案解析
- 2026福建廈門(mén)市集美區(qū)西濱小學(xué)非在編教師招聘1人考試備考試題及答案解析
- 2026湖南長(zhǎng)沙農(nóng)村商業(yè)銀行股份有限公司招聘員工2人筆試備考試題及答案解析
- 2026年舟山市志愿服務(wù)聯(lián)合會(huì)公開(kāi)招聘工作人員的備考題庫(kù)參考答案詳解
- 2026年海南師范大學(xué)招聘?jìng)淇碱}庫(kù)及一套答案詳解
- 責(zé)任督學(xué)培訓(xùn)課件
- 關(guān)于安吉物流市場(chǎng)的調(diào)查報(bào)告
- 三年級(jí)科學(xué)上冊(cè)蘇教版教學(xué)工作總結(jié)共3篇(蘇教版三年級(jí)科學(xué)上冊(cè)知識(shí)點(diǎn)整理)
- 抑郁病診斷證明書(shū)
- 心電監(jiān)測(cè)技術(shù)操作考核評(píng)分標(biāo)準(zhǔn)
- 歷史時(shí)空觀念的教學(xué)與評(píng)價(jià)
- 維克多高中英語(yǔ)3500詞匯
- 《LED顯示屏基礎(chǔ)知識(shí)培訓(xùn)》
- 第五屆全國(guó)輔導(dǎo)員職業(yè)能力大賽案例分析與談心談話試題(附答案)
- LY/T 2501-2015野生動(dòng)物及其產(chǎn)品的物種鑒定規(guī)范
- GB/T 6529-2008紡織品調(diào)濕和試驗(yàn)用標(biāo)準(zhǔn)大氣
評(píng)論
0/150
提交評(píng)論