版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第6章 匯編語言程序設(shè)計 第6章 匯編語言程序設(shè)計 6.1 匯編語言語法匯編語言語法 6.2 匯編語言程序設(shè)計匯編語言程序設(shè)計 6.3 匯編程序及上機過程匯編程序及上機過程 6.4 DOS及及BIOS功能調(diào)用功能調(diào)用 6.5 任務(wù)切換與混合語言編程任務(wù)切換與混合語言編程 第6章 匯編語言程序設(shè)計 6.1 匯編語言語法匯編語言語法6.1.1 計算機程序設(shè)計語言的演變計算機程序設(shè)計語言的演變 1. 機器語言機器語言(Machine Language) 任何計算機實際上只能直接識別設(shè)計微處理器時所規(guī)定好的, 一整套用“0”、 “1”數(shù)字代碼表示的機器指令。這些機器指令的全體是指令系統(tǒng)。不同類型的CP
2、U, 其機器語言必然是不同的。 這種直接用機器指令來編制計算機程序的方法就稱為機器語言程序設(shè)計。教學(xué)用的單板計算機一般都直接采用機器語言編程。 這種直接用機器語言編程的方法難度大,閱讀、查錯和修改程序也很不方便。通常, 只有當(dāng)編程者對CPU指令系統(tǒng)比較熟悉, 編寫的程序較短時,才有可能直接用機器語言來寫。人們?yōu)榱藬[脫編程中這種原始而低級的狀態(tài),就設(shè)法采用一組字母、數(shù)字或字符來代替機器指令,這樣就產(chǎn)生了匯編語言的概念和方法。 第6章 匯編語言程序設(shè)計 2. 匯編語言匯編語言(Assembly Language) 和機器語言相比,使用匯編語言來編寫程序可以用助記符來表示指令的操作碼和操作數(shù),也可以
3、用標(biāo)號和符號來代替地址、常量和變量。但由于不同CPU的指令系統(tǒng)的指令編碼不同, 因此與之相應(yīng)的匯編語言亦不相同。由于這種符號化的語言使用了用英文字母縮寫表示的助記符,便于識別與記憶。另外, 匯編程序還引入了新的匯編指令偽指令和宏指令,使得采用匯編語言進行程序設(shè)計更為方便靈活。 第6章 匯編語言程序設(shè)計 圖 6.1 匯編程序的“翻譯”作用 匯編語言源程序匯編程序Assembler機器語言目標(biāo)程序第6章 匯編語言程序設(shè)計 3. 高級語言高級語言(Highlevel language) 低級語言編程方式阻礙了計算機在國民經(jīng)濟及日常生活中的推廣應(yīng)用。 隨著計算機科學(xué)的發(fā)展,軟件、硬件技術(shù)在相輔相成、
4、相互支持中不斷改進與完善,逐步創(chuàng)造出許多適用于不同應(yīng)用場合的計算機高級語言,如BASIC、 FORTRAN、COBOL、 PASCAL、FORTH、C語言等。這些高級的程序設(shè)計語言,使用了更接近于人們的自然語言(英語)和習(xí)慣的教學(xué)語言來描述算法的執(zhí)行過程,從而使編寫的程序更加直觀和簡練。 這些高級語言通常都包含有各種函數(shù)計算、字符串處理、數(shù)據(jù)I/O等功能。 所以程序的編寫、 閱讀和修改變得相當(dāng)容易掌握和使用。 第6章 匯編語言程序設(shè)計 高級語言無論是面向問題或面向過程,一般總是獨立于具體機器的。 程序員可不必了解機器的指令系統(tǒng)和內(nèi)部的具體結(jié)構(gòu), 而把精力集中在正確掌握語言的語法規(guī)則和算法的程序
5、實現(xiàn)上。 同樣,高級語言也必須借助于更強有力的翻譯系統(tǒng)編譯程序(Compiler)才能將源程序轉(zhuǎn)換成相應(yīng)的機器語言目標(biāo)程序。與匯編程序不同,此處一條最簡單的高級語言語句,可能對應(yīng)著一組機器指令。 第6章 匯編語言程序設(shè)計 6.1.2 為什么要用匯編語言編寫程序為什么要用匯編語言編寫程序 為什么還要學(xué)習(xí)和使用匯編語言呢? 主要有以下幾點: (1) 匯編語言非常接近機器語言程序, 通過編制匯編語言程序, 可以更清楚地了解計算機的工作過程。 (2) 現(xiàn)在的微機系統(tǒng)中, 底層的一些功能仍然靠匯編語言程序來實現(xiàn)。 (3) 匯編語言程序的效率通常高于高級語言程序。 第6章 匯編語言程序設(shè)計 6.1.3 匯
6、編語言的語句種類及其格式匯編語言的語句種類及其格式 1. 指令語句指令語句 每一條指令語句在匯編時都要產(chǎn)生一個可供機器執(zhí)行的機器目標(biāo)代碼, 所以這種語句又叫可執(zhí)行語句。 指令語句的格式如下: 標(biāo)號: (前綴指令) 助記符(操作符) ; (注釋) (1) 標(biāo)號。 這是一個任選字段。 標(biāo)號是指令語句的標(biāo)識符, 在語句之首, 必須以“:”作為結(jié)束符。第6章 匯編語言程序設(shè)計 標(biāo)號的組成規(guī)則如下: 必須由字母、 數(shù)字(0, , 9)及特殊符號(?, , , -, $)組成, 且必須以字母打頭。 字符總數(shù)限制在31個以內(nèi)。 不能使用屬于系統(tǒng)專用保留字(Reserved word)。 保留字主要有CPU中
7、各寄存器名(如AX, CS);指令助記符(如MOV, ADD); 偽指令(SEGMENT, DB); 表達式中的運算符(如GE,EQ)和屬性操作符(如PTR, OFFSET, SEG等)。 語句格式中帶( )的項, 是可有可無的項。 如果有此項時, 書寫時不能加( )括號。 在有些指令語句中,需要在助記符前加前綴指令(例如LOCK或REP),中間應(yīng)用空格使兩者分開,如REP MOVSB。 第6章 匯編語言程序設(shè)計 (2) 指令助記符。這是為指令操作碼規(guī)定的符號。任何指令語句都需要此部分,它表示了指令語句的基本操作功能。 如MOV是傳送指令的助記符, ADD是加法指令的助記符。 (3) 操作數(shù)。
8、 操作數(shù)可以根據(jù)指令的功能需要, 可不帶操作數(shù), 帶1個操作數(shù)或2個操作數(shù),若有兩個操作數(shù)時,中間用“,”號分開。 例如, NOP; STD; INCSI; ADD BL,30H。而操作數(shù)與助記符之間必須以空格分隔。 (4) 注釋。注釋是為方便程序人員閱讀程序而加的說明。 它既不影響源程序的匯編,也不會出現(xiàn)在目標(biāo)程序中。通常并不要求每個匯編語句都應(yīng)加注釋。 第6章 匯編語言程序設(shè)計 6.1.4 常數(shù)、標(biāo)號、變量及表達式常數(shù)、標(biāo)號、變量及表達式 1. 常數(shù)常數(shù) 常數(shù)就是指令中出現(xiàn)的那些固定值,可以分為數(shù)值常數(shù)和字符串常數(shù)兩類。例如,立即數(shù)尋址時所用的立即數(shù),直接尋址時所用的地址,ASCII字符等
9、都是常數(shù)。常數(shù)除了自身的值以外, 沒有其它屬性的數(shù)值。在源程序中,數(shù)值常數(shù)按其基數(shù)的不同,可有二進制數(shù)、八進制數(shù)、十進制數(shù)、十六進制數(shù)等幾種不同的表示形式。匯編語句中用不同的后綴加以區(qū)別。 二進制數(shù): 數(shù)字后面跟字母B。 如:00101101B第6章 匯編語言程序設(shè)計 八進制數(shù):用數(shù)字07表示, 數(shù)字后跟字母Q或字母O。 例如: 177567 Q (或177567O)263 Q (或263O) 十 進 制 數(shù) : 數(shù)字后 跟 字 母 D 或 不 跟 字 母 。 例 如 : 17893D(或17893)。 十六進制數(shù): 十六進制數(shù)用09及AF表示。 后面跟字母H。 如: B7H, 2031H。
10、還應(yīng)指出,匯編語句中的數(shù)值常數(shù)的第一位必須是數(shù)字, 否則匯編時將被看成是標(biāo)識符。如常數(shù)B7H在語句中應(yīng)寫成0B7H, FFH應(yīng)寫成0FFH。第6章 匯編語言程序設(shè)計 字符串常數(shù)是由單引號 括起來的一串字符。 例如: ABCDEFG和179。單引號內(nèi)的字符在匯編時都以ASCII的代碼形式存放在存儲單元中。 如上述兩字符串其ASCII代碼分別為41H、 42H、 43H、 44H,4BH和31H、 37H、 39H。 字符串最長允許有255個字符。 第6章 匯編語言程序設(shè)計 2. 標(biāo)號 標(biāo)號是用符號表示的地址,稱為符號地址,用以指示此指令語句所在的地址。標(biāo)號有3個屬性:段地址、偏移地址和類型。 標(biāo)
11、號的段地址和偏移地址屬性是指標(biāo)號對應(yīng)的指令首字節(jié)所在的段地址和段內(nèi)的偏移地址。 標(biāo)號的類型屬性有兩種: NEAR和FAR類型。標(biāo)號如定義成NEAR類型,表示標(biāo)號僅在本段內(nèi)被引用; 如定義成FAR類型,表示標(biāo)號可以在段間使用。 在轉(zhuǎn)移和調(diào)用指令中常將標(biāo)號作為轉(zhuǎn)移目標(biāo)地址使用。 第6章 匯編語言程序設(shè)計 3. 變量變量 變量是與一個數(shù)據(jù)項的第一字節(jié)相對應(yīng)的標(biāo)識符, 它表示該數(shù)據(jù)項第一字節(jié)在現(xiàn)行段中的偏移量。變量的值在程序運行期間可隨時修改。變量具有3個屬性: 段地址(SEG): 變量所在段的段地址; 偏移地址(OFFSET): 變量所在段內(nèi)的偏移地址; 類型(TYPE): 變量的類型是所定義的每個
12、變量所占據(jù)的字節(jié)數(shù)。第6章 匯編語言程序設(shè)計 在匯編語言中, 變量是通過偽指令來定義的, 其格式如下:變量名 DB 表達式 ; 定義字節(jié)變量。變量名 DW 表達式 ; 定義字變量。變量名 DD 表達式 ; 定義雙字變量。變量名 DQ 表達式 ; 定義長字變量。變量名 DT 表達式 ; 定義一個十字節(jié)變量。 第6章 匯編語言程序設(shè)計 上述偽指令的格式中的表達式可以有以下幾種情況: (1) 一個或多個常數(shù)或某個運算公式(其值應(yīng)為常數(shù))。 當(dāng)為多個常數(shù)或運算式時,其間用逗號隔開。在這種情況下,DB將給定常數(shù)定義為字節(jié)。 DW將給定常數(shù)定義為字(兩個字節(jié)), 并給它分配兩個存儲單元, 低位字節(jié)數(shù)占低地
13、址單元, 高位字節(jié)數(shù)占高地址單元。DD將給定常數(shù)定義為雙字,分配4個存儲單元。 同理, DQ則分配8個存儲單元,DT分配10個存儲單元。 當(dāng)定義的變量有幾個操作數(shù)時,則應(yīng)從左到右由低地址向高地址順序排列所定義的常數(shù)。 第6章 匯編語言程序設(shè)計 (2) 帶引號的字符串。字符串必須用單引號括住,字符串的字符不超過255個。DB對每一個字符分配一個存儲單元,字符是由左向右按地址遞增的順序排列。 例如 KF DB ABC; 按41H、 42H、 43H的順序由低地址到高地址分配存儲地址。當(dāng)操作數(shù)有多個字符串時,也是從左到右按地址遞增順序分配各字符串的存放單元。 第6章 匯編語言程序設(shè)計 (3) 用問號
14、作為表達式。不帶引號的問號是一個保留字, 它可用作數(shù)據(jù)類型偽指令DB、 DW、 DD語句中的表達式。用它告訴匯編程序, 留出DB、 DW、 DD所分配的存儲單元,原先內(nèi)存內(nèi)容不改變。 例如:SUR DW ? ; 預(yù)留一個字(二個字節(jié))。 SUM DB ? ; 預(yù)留一個字節(jié)。 第6章 匯編語言程序設(shè)計 (4) 帶DUP(重復(fù)方式)表達式。 DUP是表達式中的一個操作符。 此時表達式的格式為 重復(fù)次數(shù) DUP(表達式) DUP操作符的后面為一個加圓括號的表達式。 DUP表示的功能是把表達式重復(fù)預(yù)置,重復(fù)的次數(shù)由DUP前面的常數(shù)決定。 例如:TABA DB 120 DUP (0) ;分配120個字節(jié)
15、, 并預(yù)置為零。TABB DW 1000 DUP (?) ;分配1000個字,不改變原先內(nèi)容。TABC DB 10 DUP (WELCOME, 0AH, 0BH);表達式由一個字符串 WELCOME 和兩個常數(shù)0AH, 0BH組成, 并重復(fù)預(yù)置;10次。 第6章 匯編語言程序設(shè)計 還應(yīng)指出, DUP可以重疊使用, 例如:TABD DB 2 DUP (0, 3 DUP (1) DW 100 DUP (5 DUP (5), 38FBH) 第一句是用DB定義的,表達式的外括號中的3 DUP(1)表示把由DB定義的預(yù)置為1的字節(jié)數(shù)重復(fù)3次。這樣,2DUP(0, 3DUP(1)=2 DUP (0, 1,
16、 1, 1)。 再根據(jù)定義, 把(0, 1, 1, 1)重復(fù)2次,這樣2 DUP(0, 3DUP (1)=0, 1, 1, 1, 0, 1, 1, 1。 整個語句的意思是: 給命名為TABD的數(shù)組分配8個字節(jié)單元,并由低地址到高地址順序放置0, 1, 1, 1,0, 1, 1, 1。 第二個語句中(5 DUP (5), 38FBH)=(5, 5, 5, 5, 5, 38FBH)。 然后再把括號內(nèi)由6個元素組成的數(shù)組重復(fù)100次。 第6章 匯編語言程序設(shè)計 (5) 地址表達式(只能用于DW或DD)。 操作數(shù)為地址表達式時,應(yīng)遵循下列規(guī)則: 當(dāng)用DW定義地址表達式時, 地址表達式中的變量名稱表示該
17、變量的第一個存儲單元的偏移地址, 地址表達式中的標(biāo)號表示它所代表的指令(或偽指令)的第一個字節(jié)的偏移地址。 當(dāng)用DD定義地址表達式時,低位字用于預(yù)置偏移地址, 高位字用于預(yù)置段地址,這些數(shù)值都是在定位時裝入的。 地址表達式中的變量或標(biāo)號可與常數(shù)值相加減。 對于變量來說,運算結(jié)果的類型不變;對標(biāo)號來說,運算結(jié)果仍表示原標(biāo)號所在段中的偏移地址。 第6章 匯編語言程序設(shè)計 變量或標(biāo)號不能與變量或標(biāo)號相加, 但可相減, 結(jié)果是沒有屬性的純數(shù)值。定義地址表達式舉例如下:A1 DW VALUE ; 定義變量A1為VALUE的偏移地址。A2 DW VALUE+5 ; 定義變量A2為VALUE第6個字節(jié)的偏移
18、地址。 A3 DW VALUE-3 ; 定義變量A3為VALUE前3個字節(jié)的偏移地址。 A4 DD VALUE ; 高位字為VALUE所在段的段地址,低位字為VALUE的 偏移地址。 第6章 匯編語言程序設(shè)計 定義變量的偽指令的功能是在變量名所對應(yīng)的地址開始的內(nèi)存區(qū)依次存入各項值。當(dāng)同時有幾個變量定義語句時,將按照由上到下書寫順序,由低地址到高地址給每個變量語句中的表達式分配存儲單元。 例如:DATA1 DB 20H DATA2 DW 0204H, 100H DATA3 DB (-1*3), (15/3) DATA4 DD 12345H DATA5 DB 0123 DATA6 DW Ab, C
19、, D DATA7 DB ? DATA8 DD ? DATA9 DB 5 DUP (00) DATA10 DW 3 DUP (?) 第6章 匯編語言程序設(shè)計 圖 6.2 各變量在內(nèi)存中分配的單元 20H04H02H00H01HFDH05H45H23H01H00H30H31H32H33H42H41H43H00H44H00H?00H00H00H00H00H?DATA1DATA2DATA3DATA4DATA5DATA6DATA7DATA8DATA9DATA1043210100:0020HFEDCBA9876543210100:0010HFEDCBA9876543 0002H 0001H0100:00
20、00H段地址:偏移地址第6章 匯編語言程序設(shè)計 4. 表達式表達式 (1) 操作數(shù)。一個操作數(shù)在內(nèi)容上可能代表一個數(shù)據(jù),也可能代表一個存儲單元的地址。對于數(shù)據(jù),最簡單的表達方式就是用常數(shù)形式表示,如20H,1234H,0FDH。匯編語言源程序中也常用標(biāo)號來表示數(shù)據(jù),如可用PORTA表示一個端口地址號,而在源程序中應(yīng)對PORTA作出定義,使它等于某個常數(shù)。 在源程序中,存儲器地址常用標(biāo)識符(也稱標(biāo)號)來表示。如規(guī)范程序中常用START、 MOVE、CLOSE作為標(biāo)號。源程序中的地址標(biāo)號常常作為轉(zhuǎn)移指令的轉(zhuǎn)移地址或調(diào)用指令的調(diào)用地址。 這些標(biāo)號所代表的具體的地址值應(yīng)由段地址和偏移地址兩部分組成。
21、第6章 匯編語言程序設(shè)計 (2) 運算符。用一個運算符可以對一個或幾個操作數(shù)進行運算, 構(gòu)成一個表達式。源程序中表達式經(jīng)匯編后為一個值。 匯編語言中有5類運算符,即算術(shù)運算符(Arithmetic Operators); 邏輯運算符(Logical Operators); 關(guān)系運算符(Relational Operators); 分析運算符(Analytic Operators); 綜合運算符(Synthetic Operators)。 算術(shù)運算符包括加(+)、減(-)、乘(*)、除(/)和取模運算(MOD)。取模運算是取兩數(shù)相除的余數(shù),但兩操作數(shù)必須為正整數(shù)。 例如 82 MOD 16 結(jié)果
22、為2 (相當(dāng)于取低4位的值)。 B5H MOD 20H 結(jié)果為21 (相當(dāng)于取低5位的值)。 20H MOD 7 結(jié)果為4。第6章 匯編語言程序設(shè)計 邏輯運算符。 邏輯運算符包括與(AND)、 或(OR)、 非(NOT)和異或(XOR)。 邏輯運算符又能對常數(shù)進行運算, 所得的結(jié)果也是常數(shù)。 兩數(shù)進行邏輯運算是兩數(shù)的對應(yīng)位按位進行相應(yīng)的邏輯運算。例如:11001100B AND 11110000B ;結(jié)果為 11000000B。11001100B OR 11110000B ;結(jié)果為 11111100B。 NOT FFH ;結(jié)果為 00H。11001100B XOR 11110000B ;結(jié)果為
23、 00111100B。 第6章 匯編語言程序設(shè)計 應(yīng)注意的是,邏輯操作符和邏輯運算指令的操作助記符是相同的。 只有當(dāng)它們出現(xiàn)在指令的操作數(shù)部分時,匯編程序才將它看成是邏輯運算符。 例如:ANDDX, PORTA AND0FEH AND操作助記符 邏輯運算符 第6章 匯編語言程序設(shè)計 關(guān)系運算符。關(guān)系運算符有:相等EQ(Equal)、不等NE(No Equal)、 小于LT(Less Than)、大于GT(Greater Than)、小于或等于LE(Less than or Equal)、大于或等于GE(Greater than or Equal)。 參加關(guān)系運算的兩個操作數(shù)必須都是操作數(shù)或者是
24、同一段中的存儲單元地址, 結(jié)果總是一個數(shù)值。當(dāng)關(guān)系成立時, 其結(jié)果為全1, 當(dāng)關(guān)系不成立時, 其結(jié)果為全0。 例如: MOV BX, PORT LT 5 表示如果PORT的值確實小于5,則匯編后得到的代碼等效于指令MOV BX, 0FFFFH。 第6章 匯編語言程序設(shè)計 如果PORT的值大于或等于5, 等效于指令MOV BX, 0。 所以關(guān)系運算符一般不單獨使用,往往和邏輯運算符組合起來使用。 例如: MOV BX, (PORT LT 5) AND 20) OR (PORT GE 5) AND 30) 表示當(dāng)PORT小于5時, 上述指令等效于 MOV BX, 20 當(dāng)PORT大于或等于5時,
25、上述指令等效于 MOV BX, 30 第6章 匯編語言程序設(shè)計 分析運算符和綜合運算符。利用分析運算符可以把一個存儲單元地址分解為段地址和偏移量。利用綜合運算符可以規(guī)定存儲單元的性質(zhì)。 ASM匯編語言的分析運算符有OFFSET、 SEG、 TYPE、 SIZE和LENGTH。 如表6.1所示。 例如: MOV DX, OFFSET DATA1 ; 取出標(biāo)號DATA1的偏移量到DX中。 MOV AX, SEG DATA1 ; 取出DATA1的段地址送到DS中。 MOV DS, AX 第6章 匯編語言程序設(shè)計 表表6.1 分析運算符表達式分析運算符表達式 帶分析運算符的表達式 表達式的意義 OFF
26、SET 變量名或標(biāo)號 取出變量名或標(biāo)號所在段的偏移地址 SEG 變量名或標(biāo)號 取出變量名或標(biāo)號所在段的段地址 TYPE 變量名或標(biāo)號 取出變量名或標(biāo)號的類型 SIZE 變量名 取出變量的大小 LENGTH 變量名 取出變量的長度 第6章 匯編語言程序設(shè)計 類型TYPE運算符用來說明變量名或標(biāo)號分配存儲單元的類型,如是字節(jié)分配類型,對應(yīng)值為1; 如是字分配類型, 對應(yīng)值為2; 如是雙字分配類型, 對應(yīng)值為4。 如表6.2所示。 表6.2 存儲單元分配類型和對應(yīng)值 存儲單元分配類型 對應(yīng)值 字節(jié) 1字 2雙字 4第6章 匯編語言程序設(shè)計 變量的類型是由偽指令DB、 DW和DD來定義的。 比如: D
27、ATA3 DB(-1*3), (15*3) ; 定義DATA3為字節(jié)變量。 此時TYPE DATA3對應(yīng)的值為1,以字節(jié)分配存儲單元。又如TABA DB 20 DUP(?), 那么TYPE TABA也等于1。 運算符LENGTH對于變量中使用DUP的情況,匯編程序?qū)⒔o出分配給該變量的單元數(shù)(分配單元可以以字節(jié)、字或雙字為單位計算), 而對于其它情況則給出值1。 例如: DATA6 DW Ab, C, D 此時LENGTH DATA6等于1。 又如:ABC DW 100 DUP (?) 此時LENGTH ABC等于100。 第6章 匯編語言程序設(shè)計 運算符SIZE用來計算一個變量存儲區(qū)所占用的字
28、節(jié)數(shù)。 同樣,以ABC變量為例, SIZE ABC等于200,因它占用的字節(jié)為200(100個字)。 由上可知,SIZE、 LENGTH和TYPE之間有如下關(guān)系: SIZE=LENGTH*TYPE ASM的綜合運算符有PTR和THIS。 PTR用來對存儲單元規(guī)定類型。PRT運算符所表示操作數(shù)的格式為 類型 PTR 表達式 格式中的類型可以是:BYTE、WORD、DWORD、NEAR和FAR。前3個類型是變量類型,后兩個是標(biāo)號類型。格式中的表達式可以是變量名、 標(biāo)號或其它地址表達式。 第6章 匯編語言程序設(shè)計 PTR運算符的功能是用來重新定義已定義過的變量或標(biāo)號的類型。 例如: MOV BYTE
29、 PTR1000, 0 此語句是用BYTE和PTR規(guī)定地址號為1000存儲單元為字節(jié)單元。 所以執(zhí)行結(jié)果是將1000單元清零。 如使用下列語句: MOV WORD PRT1000, 0此語句是規(guī)定地址號1000存儲單元為字單元, 所以執(zhí)行結(jié)果應(yīng)將1000及1001兩單元清零。 第6章 匯編語言程序設(shè)計 又如,若已定義DATA3是字變量, 則程序中需將它作為字節(jié)變量使用時,必須用PTR來重新定義其類型??梢杂萌缦抡Z句: MOV BYTE PTR DATA3, AL 它的功能是將(AL)送至DATA3對應(yīng)的一個字節(jié)中。 應(yīng)指出變量DATA3僅在此語句中臨時被定義成字節(jié)變量,DATA3原先定義的字變
30、量類型沒有修改。 THIS綜合運算符也可以用來改變存儲區(qū)的類型, 稱類型指定運算符。THIS運算符的運算對象是類型(BYTE、 WORD、 DWORD)或距離(NEAR、 FAR),用于規(guī)定所指變量或標(biāo)號類型屬性或距離屬性。 例如: XYZ EQU THIS BYTE 第6章 匯編語言程序設(shè)計 此等價語句的功能是把字節(jié)類型BYTE屬性賦予變量XYZ。 它等效于下述表達式: BYTE PTR XYZ THIS可提高訪問標(biāo)號的靈活性, 如: FAR OUT EQU THIS FAR此語句的功能是把段間距離屬性FAR賦予標(biāo)號FAR-OUT。 第6章 匯編語言程序設(shè)計 6.1.5 偽指令偽指令 1.
31、方式偽指令方式偽指令 (1) .8086。 在這條偽指令后, 匯編程序?qū)⒃?086/8088方式下操作, 實際上這是微處理器的默認操作狀態(tài)。 (2) .386。 在這條偽指令后, 匯編程序?qū)⒃?0386方式下操作。 如果想利用32位寄存器,必須加上這條偽指令。 第6章 匯編語言程序設(shè)計 2. 賦值偽指令賦值偽指令EQU 在匯編語言程序中,當(dāng)某個表達式被多次引用時,常采用給這個表達式賦予一個名稱,這樣源程序中就可以以名稱代替表達式; 另外常使用標(biāo)號來代表數(shù)據(jù)、 數(shù)據(jù)地址或程序地址。 這種賦予表達式或數(shù)據(jù)/地址以名稱/標(biāo)號的偽指令EQU有兩種格式, 即 表達式名稱 EQU 表達式 新標(biāo)號 EQU
32、老標(biāo)號 第6章 匯編語言程序設(shè)計 在種格式中, 表達式可以是常數(shù)或者地址表達式, 例如: ABC EQU 2000H ; 表示名稱ABC就是等價于數(shù)值2000H。 XYZ EQU BP+5 ; 名稱XYZ就代表地址表達式BP+5。 ECON EQU E7H MOD 10 ; ECON是代表取模運算后的余 第6章 匯編語言程序設(shè)計 在種格式中, 可以對以前已經(jīng)賦過值的標(biāo)號以新的標(biāo)號, 例如: AAD EQU PAR-3 ; 新標(biāo)號AAD等價于老標(biāo)號PAR-3的值。 COUNT EQU CX ; 使COUNT和寄存器CX具有相同的意義。如果有了上列語句, 則指令語句 MOV AL, AAD 等價于
33、 MOV AL, PAR-3 MOV AX, COUNT等價于 MOV AX, CX第6章 匯編語言程序設(shè)計 3. 定義變量偽指令定義變量偽指令 前面已經(jīng)提及定義變量的偽指令, 就是給變量分配存儲單元。這些偽指令是DB、 DW、 DD、 DQ、 DT。 DB用來定義字節(jié),DW定義字,DD定義雙字,DQ定義4個字, DT定義10個字。這些偽指令的格式及用法見前述。 第6章 匯編語言程序設(shè)計 4. 定義存儲單元類型的偽指令定義存儲單元類型的偽指令BYTE、WORD、DWORD 定義存儲單元的偽指令并不是單獨使用, 而是和指令結(jié)合起來使用的。 利用這些偽指令,對存儲單元類型進行規(guī)定。 例如: MOV
34、 BYTE PTR DI, 00 MOV WORD PTR 1000, 00 INC BYTE PTR DI JMP DWORD PTR 2000 第6章 匯編語言程序設(shè)計 5. LABEL 本條偽指令用于定義標(biāo)號名稱和屬性, 它和下一條指令共享存儲器單元。 格式: 名字 LABEL 類型例如: BYTE-ARRAY LABEL BYTE WORD-ARRAY DW 100 DUP(?) 在第二條語句中指明了有100個字存儲單元,它們的符號地址名為WORD-ARRAY, 但在第一行說明這100個字存儲單元可以看成200個字節(jié)存儲單元。符號地址名為BYTE-ARRAY。 第6章 匯編語言程序設(shè)計
35、 這樣, 當(dāng)我們訪問存儲器操作時, 就可以有兩種觀點: (1) MOV WORD-ARRAY, 0 ; 是把第一個字置為0。 (2) MOV BYTE-ARRAY, 0 ; 是把第一個字節(jié)置為0。 利用LABEL偽指令,對存儲器單元就可以有不同的劃分, 這為訪問存儲器單元提供了較大的靈活性。 第6章 匯編語言程序設(shè)計 6. SEG和和OFFSET SEG操作符返回存儲器地址操作數(shù)的段地址部分,而OFFSET返回存儲器地址操作數(shù)的段內(nèi)偏移地址部分。例如: NUMBER-1 DD ? MOV AX, SEG NUMBER-1 MOV DS, AX ; 段地址進入DS。 MOV SI, OFFSET
36、 NUMBER-1 ; 偏移地址進入SI。 第6章 匯編語言程序設(shè)計 7. TYPE、 SIZE和和LENGTH 表表6.3 存儲器地址操作數(shù)類型值存儲器地址操作數(shù)類型值 存儲器操作數(shù)存儲器操作數(shù) 類型值類型值 (DB) 字節(jié)數(shù)據(jù)字節(jié)數(shù)據(jù) 1(DW) 字數(shù)據(jù)字數(shù)據(jù) 2(DD) 雙字數(shù)據(jù)雙字數(shù)據(jù) 4(DF) 三字數(shù)據(jù)三字數(shù)據(jù) 6(DQ) 四字數(shù)據(jù)四字數(shù)據(jù) 8(DT) 五字數(shù)據(jù)五字數(shù)據(jù) 10NEAR 指令單元指令單元 -1FAR 指令單元指令單元 12第6章 匯編語言程序設(shè)計 這里,字節(jié)、字等的類型就是它們所占用的字節(jié)數(shù),而NEAR和FAR指令單元的類型值沒有物理意義。 SIZE和LENGTH只應(yīng)
37、用于存儲器地址操作數(shù)。 LENGTH返回一個你定義的數(shù)的尺寸的單元數(shù)。 SIZE則返回存儲器地址操作數(shù)占用的字節(jié)數(shù)。 例如: LARGE-NUM DD 40 DUP (0) 這里是按雙字尺寸分配存儲單元的,所以LENGTH(LARGE-NUM)是40,而SIZE(LARGE-NUM)是160。可以看出,如果X是地址操作數(shù),則 SIZE(X) = (LENGTH(X)*(TYPE(X) 第6章 匯編語言程序設(shè)計 8. 段定義偽指令段定義偽指令 (1) SEGMENT/ENDS偽指令。偽指令SEGMENT和ENDS總是成對使用的。用這對偽指令來指定段的名稱和范圍,還可指明段的定位類型(align
38、type)、 組合類型(combine type)和分類名。 段定義偽指令的格式為 段名 SEGMENT定位類型組合類型分類名 本段程序內(nèi)容(指令語句或偽指令語句) 段名 ENDS 從SEGMENT偽指令之后出現(xiàn)的指令和偽指令都被認為是在該段之內(nèi), 直至ENDS出現(xiàn)為止。 第6章 匯編語言程序設(shè)計 段定義格式中, 帶有 部分根據(jù)需要可有可無。還應(yīng)指出,當(dāng)用于定義數(shù)據(jù)段、附加數(shù)據(jù)段和堆棧段時,處于SEGMENT/ENDS偽指令中間的語句, 只能包括偽指令語句,不能包括指令語句, 一般格式為 段名 SEGMENT 數(shù)據(jù)定義, 存儲單元分配等偽指令語句 段名 ENDS 當(dāng)由SEGMENT/ENDS定
39、義代碼段時, 中間的語句可包括指令語句和與指令有關(guān)的偽指令語句。一般格式為 段名 SEGMENT 指令語句和與偽指令有關(guān)的偽指令語句 段名 ENDS 第6章 匯編語言程序設(shè)計 段定義格式中, 各部分的用法說明如下: 段名:所定義段的名稱。段名是標(biāo)識符,同一段的SEGMENT/ENDS偽指令前的段名必須一致。 一個段一經(jīng)定義, 其中指令的標(biāo)號、 變量等在段內(nèi)的偏移地址就已排定,它們都在同一個段地址控制之下,整個段占用的存儲空間大小也就確定。 由SEGMENT/ENDS偽指令所定義的段,通常小于64 K單元, 而且經(jīng)過匯編和連接, 定義的各段不互相覆蓋。一個源程序模塊的典型結(jié)構(gòu)如下: STACK-
40、SEG SEGMENT;STACK-SEG ENDS ; 定義堆棧段 第6章 匯編語言程序設(shè)計 DATA-SEG SEGMENT; DATA-SEG ENDS ; EXTRA-SEG SEGMENT; EXTRA-SEG ENDS ; CODE-SEG SEGMENT; START: CODE-SEG ENDS ; END START ; 源程序模塊結(jié)束 定義數(shù)據(jù)段定義附加數(shù)據(jù)段定義代碼(即指令)段第6章 匯編語言程序設(shè)計 段定義格式中SEGMENT偽指令后,用 括起來的不是規(guī)定的語法符號,而是表示該項是可選的,有時可以全部省略。當(dāng)它們存在時,用于指明段間的聯(lián)系形態(tài),說明段定義的輔助屬性。現(xiàn)說
41、明如下: 定位類型。定位類型給出實際段起點的類型。它有PAGE、 PARA、 WORD、 BYTE四種類型。 PAGE: 表示相應(yīng)的段必須從某一頁(256個字節(jié))的邊界開始。 即段的起始地址能為256整除。此時20位的段地址為PAGE=B 第6章 匯編語言程序設(shè)計 PARA: 表示段的起點是從存儲器中的某一個節(jié)(一節(jié)等于16個字節(jié))的邊界開始。 也即段的起始地址能被16整除。此時20位的段起始地址為PARA=BWORD: 表示段的起點可以從任何一個字的邊界(偶地址)開始。 即地址能被2整除。段起始地址為WORD=BBYTE: 表示段的地址可以從存儲器的任何地址開始。段起始地址為BYTE=B對于
42、PAGE和PARA類型其段內(nèi)的偏移地址都是從0開始的。 而對WORD類型,段內(nèi)偏移地址不一定從0開始, 合理選擇定位類型, 能夠使得在進行段和模塊的定位連接時,可充分地利用存儲器空間。 第6章 匯編語言程序設(shè)計 組合類型。組合類型在模塊式程序設(shè)計中表示該段和其它同名段間的組合連接方法。 如果在SEGMENT偽指令后面沒有指明組合類型, 則匯編程序ASM認為這個段是不準(zhǔn)備與別的段相連接的。組合類型有以下5種選擇: PUBLIC: 表示該段可與模塊連接時所遇到的其它同名段在滿足定位類型的前提下依次連接起來。連接的順序由連接程序LINK確定。 COMMON:表示該段與別的模塊中的所有其它同名同類別段
43、共享相同的存儲空間。即各段都是從相同的地址開始,具有同樣的段地址,且互相覆蓋。連接后,段的長度等于最長的COMMON段的長度。 第6章 匯編語言程序設(shè)計 AT表達式: 表示相應(yīng)段定位在由表達式求值得到的節(jié)邊界地址上。 表達式也可以是一個常數(shù)。 例如, AT 2345H表示該段定位在實際物理地址23450H處。 STACK: 與PUBLIC組合類型的處理方式相同,即把不同模塊中帶有STACK組合類型的同名段連接起來,使這些同名段都從同一基地址開始。 但STACK組合方式僅用于堆棧段。 MEMORY:表示在連接時,本段應(yīng)裝在被連接的其它段之上,即在同名段中具有最高的地址。若連接時具有MEMORY組
44、合類型的段不止一個,則只有第一段才當(dāng)成MEMORY組合類型來處理,其它的段將重疊,即按COMMON組合類型來處理。 第6章 匯編語言程序設(shè)計 類名。類名是程序員任選的一個字符串,使用時必須用單引號括起來類名。連接時,將把不同模塊中相同類名的各段在物理地址上相鄰的連接在一起,其順序則與LINK時提供的各模塊順序一致。 第6章 匯編語言程序設(shè)計 (2) ORG偽指令。偽指令ORG用來規(guī)定目標(biāo)程序存放單元的偏移量。它的格式如下: ORG 表達式其中表達式以65536(216)為模進行計算,計算結(jié)果應(yīng)是一個不為負的常數(shù)。若表達式中有標(biāo)識符,則標(biāo)識符必須是已經(jīng)定義過的。 匯編程序ASM規(guī)定ORG偽指令不
45、能帶標(biāo)識符。例如: START: ORG 2000H是非法語句。 第6章 匯編語言程序設(shè)計 如果在源程序中的第一條指令用了如下偽指令:ORG 2000H,則匯編程序?qū)阎噶钪羔業(yè)P的值置成2000H,目標(biāo)程序的第一個字節(jié)將放置在2000H單元,后面的程序就會依次順序存放。當(dāng)遇上另一個ORG語句時,目標(biāo)程序的存放地址才會從新的ORG語句指定的地址單元存放。例如,若當(dāng)前的(IP)=2400H, 這時若又遇到如下ORG語句: ORG 2464H 則匯編程序會修改IP內(nèi)容,使(IP)=2464H, 并以此存儲單元開始存放目標(biāo)程序。這樣就保留了100個字節(jié)的存儲空間。ORG偽指令可以放置在源程序中的任何
46、位置。 第6章 匯編語言程序設(shè)計 (3) ASSUME偽指令。ASSUME偽指令語句用來告訴匯編程序在指令執(zhí)行期間內(nèi)存的哪一段是數(shù)據(jù)段,哪一段是堆棧段, 哪一段是代碼段。 ASSUME偽指令語句的格式如下: ASSUME 段寄存器名:段名符, 段寄存器名: 段名符, 上述格式中 內(nèi)的內(nèi)容可有可無。 例如: ASSUME CS: MYCODE, DS: MYDATA ASSUME ES: MYEXTRA, SS: MYSTACK 第6章 匯編語言程序設(shè)計 這兩個語句是將所定義的段MYCODE、MYDATA、 MYEXTRA和MYSTACK分別置于段寄存器CS、DS、ES和SS的控制之下。ASSU
47、ME語句只能安排在代碼段內(nèi),一般應(yīng)排在代碼段作為首始指令。 ASSUME語句中的段寄存器名: 段名符可以有一項,也可以有多項, 如果一行寫不下,可分成兩個ASSUME語句。一個源程序模式至少包括一個段,當(dāng)指令(即代碼)、數(shù)據(jù)及堆棧區(qū)都將集中在一個段內(nèi)時, ASSUME語句的格式應(yīng)該是為 ASSUME CS: MYCODE, DS: MYCODE, ES: MYCODE, SS: YCODE 第6章 匯編語言程序設(shè)計 除了CS以外,各個段寄存器的實際值,還要用MOV指令來賦值。 例如: MYCODE SEGMENT ASSUME CS: MYCOED, DS: MYDATA, ES: MYEXT
48、RA, SS: MYSTACK START: MOV AX, MYDATA MOV DS, AX MOV AX, MYEXTRA MOV ES, AX MOV AX, MYSTACK MOV SS, AX MYCODE ENDS 第6章 匯編語言程序設(shè)計 9. 過程定義偽指令過程定義偽指令PROC, ENDP, NEAR, FAR 在ASM語言中, 過程的含義和子程序是一樣的。 一個過程可以被其它程序所調(diào)用, 它的最后一條指令總是返回指令, 用以控制此過程在執(zhí)行完畢后, 返回到主程序。 定義過程的偽指令PROC/ENDP總是成對出現(xiàn)的,在這兩條偽指令間的內(nèi)容就作為一個過程,即一個子程序。有關(guān)P
49、ROC/ENDP偽指令的格式定義在第4章中已作了介紹,現(xiàn)僅舉例說明PROC/ENDP等一組偽指令的用法。 下面是實現(xiàn)多字節(jié)BCD碼相加的完整的程序片段: 第6章 匯編語言程序設(shè)計 DATA SEGMENT ; 定義數(shù)據(jù)段。 FIRST DB 11, 22, 33, 44 ; 第一個加數(shù)。 SECOND DB 55, 66, 77, 88 ; 第二個加數(shù)。 SUM DB 4 DUP (?) ; 存放結(jié)果單元。 DATA ENDS STACK SEGMENT ; 定義堆棧段。 STA DB 20 DUP (?) ; 設(shè)置堆棧長度為20個字節(jié)。 TOP EQU LENGTH STA STACK EN
50、DS CODE SEGMENT ; 定義代碼段。 ASSUME CS: CODE, DS: DATA, SS: STACK 第6章 匯編語言程序設(shè)計 START: MOV AX, DATA ; 裝入段寄存器實際值數(shù)據(jù)。 MOV DS, AX MOV AX, STACK ; 裝入段寄存器實際值堆棧。MOV SS, AX MOV AX, TOP ; 設(shè)置堆棧指針。 MOV SP, AX MOV SI, OFFSET FIRST ; SI指向第一個加數(shù)。 MOV DI, OFFSET SUM ; DI指向結(jié)果單元。 MOV BX, OFFSET SECOND ; BX指向第二加數(shù)。 MOV CX,
51、04 ; 共4個字節(jié)長。 CLD ; 清方向標(biāo)志。 CLC ; 清進位標(biāo)志。 第6章 匯編語言程序設(shè)計 ADITI: CALL AAA ; 調(diào)用多字節(jié)加法子程序。 LOOP ADITI ; 繼續(xù)后面主程序。 AAA 1 PROC NEAR ; 單字節(jié)加法子程序。 LODSB ; 取第一個加數(shù)。 ADC AL, BX ; 相加。 DAA ; 十進制調(diào)整。 STOSB ; 結(jié)果送DI所指單元。 INC BX ; 修改指針。 RET ; 返回。 AAA ENDP ; 子程序結(jié)束。 CODE ENDS ; 程序段結(jié)束。 END START ; 程序結(jié)束。 第6章 匯編語言程序設(shè)計 10. 定義結(jié)構(gòu)的偽
52、指令定義結(jié)構(gòu)的偽指令STRUC/ENDS (1) 結(jié)構(gòu)的定義。結(jié)構(gòu)偽指令的格式如下: 結(jié)構(gòu)名稱 STRUC 結(jié)構(gòu)名稱 ENDS 如果DB、DW或DD語句包括變量標(biāo)識符, 則該標(biāo)識符表示一個字段的開始, 稱為字段標(biāo)識符。例如,對上述所說的學(xué)生學(xué)業(yè)管理可采用以下所示的結(jié)構(gòu)形式: 由DB、DW、DD偽指令所組成的語句序列第6章 匯編語言程序設(shè)計 STUDENT-RECORD STRUC NAME DB Li Ping SEX DB 0, 0 for male, 1 for female AGE DB 25H NUMBER DB ? MATH DB 91H PHYSICAL DB 85H CIRCUI
53、T DB 95H STUDENT-RECORD ENDS 第6章 匯編語言程序設(shè)計 (2) 結(jié)構(gòu)的存儲分配和預(yù)置。為了給結(jié)構(gòu)分配存儲空間或預(yù)置,必須有一個援用該結(jié)構(gòu)的語句,其格式如下: 變量 結(jié)構(gòu)名稱賦值說明其中結(jié)構(gòu)名稱是指STRUC偽指令中的結(jié)構(gòu)名稱(在前面的例子中為STUDENT-RECORD), 變量與結(jié)構(gòu)的起始點相對應(yīng), 另外變量名要與字段標(biāo)識符一起使用方可訪問結(jié)構(gòu)中的各個字段(對上述的例子, 變量名可用所管理的學(xué)生名表示, 也可以用其它方法為變量命名)。 第6章 匯編語言程序設(shè)計 賦值說明必須寫在尖括號 內(nèi),它由一系列常數(shù)表達式組成,一個字段一個表達式,由逗號分開;如果某個字段有某n
54、個字段使用結(jié)構(gòu)定義中的預(yù)賦值,則相應(yīng)的表達式可省缺,但應(yīng)保留逗號; 如果全部表達式都省缺,則只要寫一對尖括號;如果省缺的是最后面的一些字段,則可以省去逗號。 此外, 對字符串常量所表示的字段要替換的話, 若替換的字符長度大于原來形式參數(shù)的長度,匯編程序?qū)⒆詣咏厝ザ喑龅淖址蝗籼鎿Q字符長度小,則用最后的那個字符填滿剩余的存儲空間。例如,對上述的例子援用語句可以是: Li Ping STUDENT-RECORD ,891011 Lui Yi STUDENT-RECORD Lui Yi, 1, 891011, 80H 第6章 匯編語言程序設(shè)計 (3) 對結(jié)構(gòu)的訪問。通過援用語句對結(jié)構(gòu)進行存儲空間分配
55、和預(yù)置之后,結(jié)構(gòu)及其字段就以變量的形式出現(xiàn),可以像使用其它變量一樣使用。但對結(jié)構(gòu)的訪問必須用變量路徑名的方法進行, 路徑名的格式為 變量名字段名 例如,對于前面的例子,若需要將學(xué)生A的年齡傳送到寄存器AL,則可以使用下列指令語句: MOV AL, Li PingAGE 如果BX中存有變量Li Ping的偏移地址, 則下列語句與上述語句是等效的: MOV AL, BXAGE第6章 匯編語言程序設(shè)計 11. IF ELSE ENDIF條件匯編偽指令條件匯編偽指令MASM提供了功能強大的條件匯編偽指令,使用它的一般格式是:IF ; 如果條件成立 ELSE ; 否則 ENDIF ; 結(jié)束條件匯編語句
56、第6章 匯編語言程序設(shè)計 其中IF有多種形式, 它們是:IF操作數(shù) ; 如果操作數(shù)不等于0時。IFE操作數(shù) ; 如果操作數(shù)等于0時。IFDEF標(biāo)號或變量 ; 如果標(biāo)號或變量已被定義時。IFNDEF標(biāo)號或變量 ; 如果標(biāo)號或變量還沒被定義時。IFB變量 ; 如果變量為空時。IFNB變量 ; 如果變量不為空時。IFIDN操作數(shù)1,操作數(shù)2 ;如果操作數(shù)1等于操作數(shù)2時。IFDIF操作數(shù)1,操作數(shù)2 ;如果操作數(shù)1不等于操作數(shù)2時。IF1 ; 如果匯編程序在第一遍掃描時。IF2 ; 如果匯編程序在第二遍掃描時。 在IF的形式中, 尖括號“ ”中內(nèi)容是必需的。 第6章 匯編語言程序設(shè)計 12. 邏輯運
57、算偽指令邏輯運算偽指令A(yù)ND、 OR、 XOR、 NOT 按位操作,運算規(guī)則與它們作為指令時一樣, 但只能用于算術(shù)表達式中。 與指令A(yù)ND、 OR、 XOR、 NOT區(qū)別如下: 作為指令時它們用在最前面,且目的操作數(shù)必須為寄存器或存儲器操作數(shù);作為偽指令時它們用在數(shù)學(xué)表達式中, 操作數(shù)在它們的兩邊,可以都是立即數(shù)。 例如: AND AX, CX ; AND作為指令。 MOV AX, OFEH AND 145H ; AND作為偽指令。 AND DX, CX AND OFA4CH ; 第一個作為指令, 第二個是偽指令。 第6章 匯編語言程序設(shè)計 13. 訪問外部標(biāo)識符的偽指令訪問外部標(biāo)識符的偽指令
58、EXTRN、 PUBLIC 當(dāng)把若干個模塊連接在一起時,必須解決其中的任一模塊能夠引用其它模塊中的某些變量或標(biāo)號的問題,這里引入的定義訪問外部標(biāo)識偽指令EXTRN和PUBLIC就是提供解決這個問題的方法。如果一個標(biāo)識符只在一個模塊中定義過,那么就說它相對這個模塊是一個內(nèi)部標(biāo)識符或局部標(biāo)識符;如果一個標(biāo)識符在其模塊內(nèi)未定義過, 而是在其它模塊中定義,那么它就被稱為相對該模塊的外部標(biāo)識符。 第6章 匯編語言程序設(shè)計 對于只產(chǎn)生一個單一目標(biāo)模塊的匯編語言程序, 它所訪問的所有標(biāo)識符必須是局部定義的,對于多模塊程序來說,必須給匯編程序一個信息以說明其間的有些標(biāo)識符是外部的,而不致被匯編程序把它們處理為
59、一些無效的標(biāo)識符。此外,為了允許其它模塊訪問一給定模塊中的標(biāo)識符,該給定模塊必須包含一個標(biāo)識符清單以說明其中的標(biāo)識符可為其它模塊訪問。因此, 每個模塊可含有兩個清單:一個清單標(biāo)明它所要訪問的其它模塊的標(biāo)識符;另一個清單是列出它所定義的,且為其它模塊所訪問的標(biāo)識符。這兩個清單依靠偽指令EXTRN和PUBLIC列出。 第6章 匯編語言程序設(shè)計 EXTRN和PUBLIC偽指令語句的格式如下: EXTRN 標(biāo)識符: 類型, ,標(biāo)識符: 類型 PUBLIC 標(biāo)識符, , 標(biāo)識符 EXTRN偽指令語句中的標(biāo)識符表示是外部的變量或標(biāo)號, 而PUBLIC偽指令語句中的標(biāo)識符表示可供其它模塊引用的變量或標(biāo)號。在
60、EXTRN偽指令中,若標(biāo)識符為標(biāo)號,則類型有NEAR或FAR;若標(biāo)識符為變量,則類型有BYTE,WORD或DWORD。 第6章 匯編語言程序設(shè)計 在語句INC VAR1中,若VAR1是外部變量,且對應(yīng)于一個字,則含有該語句的模塊中就必須有如下所示的一條偽指令語句: EXTRN , VAR1: WORD, 而在定義VAR1模塊中就必須含有下列語句: PUBLIC, , VAR1, 第6章 匯編語言程序設(shè)計 14. 源程序結(jié)束偽指令源程序結(jié)束偽指令END 偽指令END用來表明END語句處是源程序的終結(jié)。 其格式如下: END 表達式 這里的表達式通常就是程序第一條指令的語句標(biāo)號。這樣, 程序在匯編、連接后
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年五年級班主任工作總結(jié)下模版(三篇)
- 2025年二手房中介購房合同標(biāo)準(zhǔn)版本(三篇)
- 2025年中外來料加工或來件裝配合同樣本(三篇)
- 住宅小區(qū)石材裝修合同模板
- 2025年度安全風(fēng)險評估與費用預(yù)算合同
- 民航器材物流承攬合同模板
- 貴州球場塑膠跑道施工方案
- 保險公司單項裝修合同
- 寵物醫(yī)院裝飾協(xié)議
- 藝術(shù)顧問提成方案
- 國開行政管理論文行政組織的變革及其現(xiàn)實性研究
- 運動技能學(xué)習(xí)中的追加反饋
- 高中體育與健康-足球-腳內(nèi)側(cè)傳球射門技術(shù)(第二課時)教學(xué)課件設(shè)計
- 《淄博張店區(qū)停車問題治理現(xiàn)狀及優(yōu)化對策分析【開題報告+正文】15000字 》
- 常用電子元器件基礎(chǔ)知識演示
- GB/T 32918.4-2016信息安全技術(shù)SM2橢圓曲線公鑰密碼算法第4部分:公鑰加密算法
- 2023年藥事法規(guī)教學(xué)案例庫及案例分析
- 北京市水務(wù)安全生產(chǎn)風(fēng)險評估指南
- 吸引器教學(xué)講解課件
- 醫(yī)學(xué)心理學(xué)人衛(wèi)八版66張課件
- 仿古建筑施工常見質(zhì)量通病及防治措施
評論
0/150
提交評論