微機(jī)原理第四章1_第1頁
微機(jī)原理第四章1_第2頁
微機(jī)原理第四章1_第3頁
微機(jī)原理第四章1_第4頁
微機(jī)原理第四章1_第5頁
已閱讀5頁,還剩45頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第四章 匯編語言程序設(shè)計(jì)微型計(jì)算機(jī)系統(tǒng)原理及應(yīng)用微型計(jì)算機(jī)系統(tǒng)原理及應(yīng)用Institute of Electrical Engineering第第4章章 匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì) 本章介紹以下內(nèi)容本章介紹以下內(nèi)容 匯編語言源程序的結(jié)構(gòu)匯編語言源程序的結(jié)構(gòu) 語句行的構(gòu)成(匯編語言語句格式)語句行的構(gòu)成(匯編語言語句格式) 指示性語句(偽指令)指示性語句(偽指令) 匯編語言程序設(shè)計(jì)及舉例匯編語言程序設(shè)計(jì)及舉例4.1 匯編語言源程序匯編語言源程序 用指令助記符、符號地址、標(biāo)號和偽指令等用指令助記符、符號地址、標(biāo)號和偽指令等符號書寫程序的語言稱為符號書寫程序的語言稱為匯編語言匯編語言。用匯編。

2、用匯編語言編寫的程序稱為語言編寫的程序稱為匯編語言源程序匯編語言源程序。 把源程序翻譯成機(jī)器語言程序把源程序翻譯成機(jī)器語言程序(目標(biāo)程序目標(biāo)程序)的的過程叫做過程叫做匯編匯編。 完成匯編任務(wù)的程序叫做完成匯編任務(wù)的程序叫做匯編程序匯編程序,常用的,常用的有有ASM、MASM等。等。 MASM稱為稱為宏匯編程序。宏匯編程序。 匯編語言源程序匯編程序用助記符編寫用助記符編寫匯編程序匯編程序匯編語言匯編語言源程序源程序機(jī)器語言機(jī)器語言目標(biāo)程序目標(biāo)程序源程序的編譯程序源程序的編譯程序4.1.1 匯編語言源程序的結(jié)構(gòu) 8086匯編語言的源程序是分段的,每匯編語言的源程序是分段的,每一段都有名字,以符號一

3、段都有名字,以符號SEGMENT作作為段開始,以語句為段開始,以語句ENDS作為段的結(jié)束。作為段的結(jié)束。兩者都必須有名字,而且名字必須相兩者都必須有名字,而且名字必須相同。同。 由若干段組成一個(gè)源程序,整個(gè)源程由若干段組成一個(gè)源程序,整個(gè)源程序以語句序以語句END作為結(jié)束。作為結(jié)束。 name length_of_stringdata segmentstring db abcduvwxyz,0dh ;0DH為回車(為回車(CR)cr equ 0dhdata endsstack segment para stackstack db 100 dup(?)stack endscode segment

4、 assume cs:code,ds:data, ss:stack,es:datastart proc farbegin: push ds ;DS中包含程序段前綴起始地址中包含程序段前綴起始地址 mov ax, 0 push ax start endp code ends end begin常用的術(shù)語常用的術(shù)語 匯編語言語句可分為三種基本語句:匯編語言語句可分為三種基本語句:指令語句指令語句、偽指偽指令語句令語句和和宏指令語句宏指令語句。 每一個(gè)每一個(gè)指令語句指令語句在匯編時(shí)產(chǎn)生目標(biāo)代碼,對應(yīng)著機(jī)器在匯編時(shí)產(chǎn)生目標(biāo)代碼,對應(yīng)著機(jī)器的一種操作。如:的一種操作。如:MOV BX, 0 與與ADD

5、SI, AX 等,即等,即每一條指令語句對應(yīng)著機(jī)器的一條或幾條指令。每一條指令語句對應(yīng)著機(jī)器的一條或幾條指令。 偽指令語句偽指令語句沒有目標(biāo)代碼與之對應(yīng),主要是為匯編程沒有目標(biāo)代碼與之對應(yīng),主要是為匯編程序服務(wù)的。序服務(wù)的。 宏指令宏指令主要是為了簡化程序的書寫而設(shè)計(jì)的。若在匯主要是為了簡化程序的書寫而設(shè)計(jì)的。若在匯編語言源程序中某個(gè)程序段要多次使用,為了使在源編語言源程序中某個(gè)程序段要多次使用,為了使在源程序中不重復(fù)書寫這個(gè)程序段,可以用一條宏指令來程序中不重復(fù)書寫這個(gè)程序段,可以用一條宏指令來代替。由匯編程序在匯編時(shí)產(chǎn)生所需的代碼。代替。由匯編程序在匯編時(shí)產(chǎn)生所需的代碼。1. 匯編語言語句

6、類型匯編語言語句類型指令性語句指示性語句(偽指令)CPU執(zhí)行的語句,執(zhí)行的語句,能夠生成目標(biāo)代碼能夠生成目標(biāo)代碼CPU不執(zhí)行,而由匯不執(zhí)行,而由匯編程序執(zhí)行的語句,編程序執(zhí)行的語句,不生成目標(biāo)代碼不生成目標(biāo)代碼4.1.24.1.2 匯編語言語句類型及格式指令語句指令語句 格式:格式: 標(biāo)號標(biāo)號: : 前綴前綴 指令助記符指令助記符 操作數(shù)操作數(shù),操作數(shù)操作數(shù) ; ;注釋注釋 CYCLE: CMP SUM,100 ;SUM單元與單元與100比較比較2 匯編語言語句格式匯編語言語句格式指令的符號地址指令的符號地址標(biāo)號后要有冒號標(biāo)號后要有冒號操作碼操作碼注釋前加分號注釋前加分號偽指令語句偽指令語句

7、格式:格式:名字名字 偽指令指示符偽指令指示符 操作數(shù)操作數(shù),操作數(shù),操作數(shù) ;注釋注釋THING DB ? ;定義一個(gè)字節(jié)定義一個(gè)字節(jié)變量的符號地址變量的符號地址其后不加冒號其后不加冒號指示性語句中至指示性語句中至少有一個(gè)操作數(shù)少有一個(gè)操作數(shù)1.1.常常 量量 數(shù)字常量 字符串常量 例:A MOV AL,A 例:ABCD匯編時(shí)被譯成對應(yīng)的匯編時(shí)被譯成對應(yīng)的ASCII碼碼用單引號引起的字符或字符串用單引號引起的字符或字符串4.1.34.1.3 數(shù)據(jù)項(xiàng)及表達(dá)式不同進(jìn)制數(shù)表示的常量不同進(jìn)制數(shù)表示的常量122. 2. 標(biāo)號標(biāo)號 標(biāo)號后有冒號,在指令性語句前標(biāo)號后有冒號,在指令性語句前 英文字母、數(shù)字

8、及專用字符組成英文字母、數(shù)字及專用字符組成, ,最大長度不最大長度不能超過能超過3131個(gè)個(gè), ,且不能由數(shù)字打頭且不能由數(shù)字打頭, ,不能用保留字不能用保留字( (如寄存器名如寄存器名, ,指令助記符指令助記符, ,偽指令偽指令) )。 3.3.變變 量量 代表內(nèi)存中的數(shù)據(jù)區(qū),程序中視為存儲(chǔ)器操作數(shù) 變量的屬性: 變量所在段的段地址 變量單元地址與段首地址之 間的位移量。 字節(jié)型、字型和雙字型段段 值值偏移量偏移量類類 型型變量和標(biāo)號變量和標(biāo)號 變量變量 存儲(chǔ)單元中的操作數(shù)是變量,值可以改變。在程存儲(chǔ)單元中的操作數(shù)是變量,值可以改變。在程序中出現(xiàn)的是存儲(chǔ)單元地址的符號,即它們的名字序中出現(xiàn)的

9、是存儲(chǔ)單元地址的符號,即它們的名字 段屬性段屬性 段的起始地址的高段的起始地址的高16位,低位,低4位始終為位始終為0 偏移量屬性偏移量屬性 變量單元與段地址的偏移量變量單元與段地址的偏移量16位位 類型屬性類型屬性 字節(jié)、字、雙字字節(jié)、字、雙字 標(biāo)號標(biāo)號 是指令存放單元的符號地址,是轉(zhuǎn)移指令或調(diào)用是指令存放單元的符號地址,是轉(zhuǎn)移指令或調(diào)用(CALL)指令的目標(biāo)操作數(shù)。)指令的目標(biāo)操作數(shù)。 段屬性段屬性 偏移量屬性偏移量屬性 類型(距離)屬性類型(距離)屬性 NEAR和和FAR 對于匯編程序來說,標(biāo)號和變量是類似的,都對于匯編程序來說,標(biāo)號和變量是類似的,都是存儲(chǔ)單元的符號地址。只是是存儲(chǔ)單元

10、的符號地址。只是標(biāo)號對應(yīng)的存儲(chǔ)單元標(biāo)號對應(yīng)的存儲(chǔ)單元中存放的是指令,而變量所對應(yīng)的存儲(chǔ)單元中存放中存放的是指令,而變量所對應(yīng)的存儲(chǔ)單元中存放的是數(shù)據(jù)。的是數(shù)據(jù)?!纠緼RRAY DW 12H,13H,14HXT DW ?MOV CX, (XT-ARRAY)/2因XT與ARRAY是順序存放, (XT-ARRAY)/2即為數(shù)組字長度數(shù)4 4 表達(dá)式表達(dá)式 匯編語言中使用了運(yùn)算符有以下幾種,即:匯編語言中使用了運(yùn)算符有以下幾種,即: 算術(shù)運(yùn)算符算術(shù)運(yùn)算符 邏輯運(yùn)算符邏輯運(yùn)算符 關(guān)系運(yùn)算符關(guān)系運(yùn)算符 取值和屬性運(yùn)算符取值和屬性運(yùn)算符 其它運(yùn)算符其它運(yùn)算符 1)算術(shù)運(yùn)算符)算術(shù)運(yùn)算符q共有共有7種算術(shù)運(yùn)

11、算符種算術(shù)運(yùn)算符 +, -, * , /, MOD, SHL, SHRq說明:說明: / (除,只取除法運(yùn)算結(jié)果之商除,只取除法運(yùn)算結(jié)果之商)、MOD(模,只模,只取除法運(yùn)算結(jié)果之余數(shù)取除法運(yùn)算結(jié)果之余數(shù))、SHL(左移,左移左移,左移1位相當(dāng)位相當(dāng)于乘于乘2)、SHR(右移,右移右移,右移1位相當(dāng)于除位相當(dāng)于除2)。 所有的算術(shù)運(yùn)算符均可以對數(shù)據(jù)進(jìn)行運(yùn)算,運(yùn)算所有的算術(shù)運(yùn)算符均可以對數(shù)據(jù)進(jìn)行運(yùn)算,運(yùn)算對象與運(yùn)算結(jié)果都是整數(shù)。若對地址運(yùn)算,通常是對象與運(yùn)算結(jié)果都是整數(shù)。若對地址運(yùn)算,通常是在標(biāo)號上加減某一個(gè)數(shù)字量,例如在標(biāo)號上加減某一個(gè)數(shù)字量,例如SUM+2、CYCLE-3各表示一個(gè)存儲(chǔ)單元的

12、地址,對地址乘是各表示一個(gè)存儲(chǔ)單元的地址,對地址乘是沒有意義的。沒有意義的。例例 源程序指令如下:源程序指令如下: DA EQU 300 MOV AX, DA-80 MOV BX, DA MOD 100 MOV CX, DA/100 MOV DH, 01100100B SHR 1 匯編時(shí),計(jì)算表達(dá)式形成指令為:匯編時(shí),計(jì)算表達(dá)式形成指令為:DA EQU 300MOV AX, 220MOV BX, 0MOV CX, 3MOV DH, 32H2)邏輯運(yùn)算符)邏輯運(yùn)算符q共有共有4種邏輯運(yùn)算符種邏輯運(yùn)算符 AND, OR, NOT, XORq說明:說明: 邏輯運(yùn)算符與邏輯運(yùn)算符與8086指令系統(tǒng)中的

13、指令助記符指令系統(tǒng)中的指令助記符AND、OR、NOT、XOR符號完全相同,但符號完全相同,但二者是不會(huì)混淆的。作為二者是不會(huì)混淆的。作為MASM的運(yùn)算符是的運(yùn)算符是在匯編過程中進(jìn)行計(jì)算的,而指令助記符是在匯編過程中進(jìn)行計(jì)算的,而指令助記符是在程序執(zhí)行時(shí)進(jìn)行運(yùn)算的。在程序執(zhí)行時(shí)進(jìn)行運(yùn)算的。例例 源程序指令如下:源程序指令如下: MOV AH, NOT 0FFH MOV BH, 8CH AND 77H MOV AL, 8CH OR 73H MOV BL, 0FFH XOR 44H 匯編時(shí),計(jì)算表達(dá)式形成指令為:匯編時(shí),計(jì)算表達(dá)式形成指令為:MOV AH, 00HMOV BH, 04HMOV AL,

14、 0FFHMOV BL, 0BBH 例例 IN AL, PORT ;PORT為輸入端口號為輸入端口號 AND DX, PORT AND 0FEH OUT DX, AX ;DX為輸出端口號為輸出端口號 第第2條指令說明:條指令說明: 后一個(gè)后一個(gè)AND(運(yùn)算符運(yùn)算符),匯編時(shí)計(jì)算表達(dá)式,匯編時(shí)計(jì)算表達(dá)式,得到一個(gè)端口號,如原輸入端口號得到一個(gè)端口號,如原輸入端口號PORT為為80H,則表達(dá)式則表達(dá)式PORT AND 0FEH的值為的值為80H,若原輸,若原輸入端口號入端口號PORT為為81H,則計(jì)算表達(dá)式值也得到,則計(jì)算表達(dá)式值也得到80H。前一個(gè)。前一個(gè)AND(指令助記符指令助記符),在運(yùn)行程

15、序時(shí),在運(yùn)行程序時(shí)將將DX內(nèi)容與計(jì)算出的表達(dá)式值相內(nèi)容與計(jì)算出的表達(dá)式值相與與,結(jié)果送,結(jié)果送到到DX中,中,DX為輸出端口號。為輸出端口號。3)關(guān)系運(yùn)算符)關(guān)系運(yùn)算符q關(guān)系運(yùn)算符包括關(guān)系運(yùn)算符包括EQ(相等)、(相等)、NE(不等)、(不等)、LT(小于)、(小于)、GT(大于)、(大于)、LE(小于或等(小于或等于)、于)、GE(大于或等于)(大于或等于)6種。種。q關(guān)系運(yùn)算符的兩個(gè)操作數(shù)必須是數(shù)據(jù),或是同關(guān)系運(yùn)算符的兩個(gè)操作數(shù)必須是數(shù)據(jù),或是同一段內(nèi)的兩個(gè)存儲(chǔ)單元的地址。進(jìn)行關(guān)系運(yùn)算一段內(nèi)的兩個(gè)存儲(chǔ)單元的地址。進(jìn)行關(guān)系運(yùn)算的比較操作后,結(jié)果是一個(gè)數(shù)值。若結(jié)果為真,的比較操作后,結(jié)果是一個(gè)

16、數(shù)值。若結(jié)果為真,輸出全是輸出全是1,即,即0FFH或或0FFFFH。若結(jié)果為假,。若結(jié)果為假,輸出全是輸出全是0。關(guān)系運(yùn)算符一般與邏輯運(yùn)算符組。關(guān)系運(yùn)算符一般與邏輯運(yùn)算符組合起來使用。合起來使用。例例:MOV AX, 5 EQ 0101B MOV AX,0FFFFH MOV BX, 10H GT 16 MOV BX, 0000H4)取值運(yùn)算符和屬性運(yùn)算符)取值運(yùn)算符和屬性運(yùn)算符 取值運(yùn)算符取值運(yùn)算符OFFSET、SEG 它們加在變量或標(biāo)號前,返回運(yùn)算對象的它們加在變量或標(biāo)號前,返回運(yùn)算對象的某個(gè)參數(shù)值。例如偏移地址值、段地址值某個(gè)參數(shù)值。例如偏移地址值、段地址值SEG和和OFFSET SEG

17、返回一個(gè)存儲(chǔ)單元的段地址。返回一個(gè)存儲(chǔ)單元的段地址。 OFFSET返回每一個(gè)存儲(chǔ)單元的段內(nèi)偏移量。返回每一個(gè)存儲(chǔ)單元的段內(nèi)偏移量。例:例:DATA-SEG 是從存儲(chǔ)器是從存儲(chǔ)器0500H處開始的處開始的一個(gè)數(shù)據(jù)段。一個(gè)數(shù)據(jù)段。OP1是其中一個(gè)變量名,偏是其中一個(gè)變量名,偏移地址為移地址為1000H。 MOV AX, SEG OP1 MOV BX, OFFSET OP1 則則 (AX)=0500H, (BX)=1000H屬性運(yùn)算符屬性運(yùn)算符 PTR 格式:格式: 類型類型/距離距離 PTR 變量或標(biāo)號變量或標(biāo)號 功能:將功能:將PTR左邊的類型屬性賦給右邊左邊的類型屬性賦給右邊的變量或標(biāo)號。的變

18、量或標(biāo)號。PTR本身并不分配存儲(chǔ)本身并不分配存儲(chǔ)單元,僅給已分配的存儲(chǔ)單元賦予新的單元,僅給已分配的存儲(chǔ)單元賦予新的屬性,這樣可以保證運(yùn)算時(shí)操作數(shù)類型屬性,這樣可以保證運(yùn)算時(shí)操作數(shù)類型的匹配,常與類型的匹配,常與類型BYTE、WORD、NEAR、FAR等連用。等連用。 PTR運(yùn)算符僅對當(dāng)前指令有效。運(yùn)算符僅對當(dāng)前指令有效。 例例: N1 DB 15H, 36H N2 DW 1122H, 3344H LO: MOV AX, WORD PTR N1 ;使使N1類型轉(zhuǎn)換成字與類型轉(zhuǎn)換成字與AX類型匹配類型匹配 MOV BL, BYTE PTR N2 ;使使N2類型轉(zhuǎn)換成字節(jié)與類型轉(zhuǎn)換成字節(jié)與BL類型

19、匹配類型匹配 方括號方括號 。 指令中用方括號表示存儲(chǔ)器操作數(shù),方括號里的內(nèi)容表示操作數(shù)的偏移地址。 段重設(shè)運(yùn)算符段重設(shè)運(yùn)算符“:”。 運(yùn)算符“:”跟在某個(gè)段寄存器名(DS、ES、SS)之后表示段重設(shè)。 MOV AX, ES:DI5)其它運(yùn)算符)其它運(yùn)算符4.2 指示性(偽指令)語句指示性(偽指令)語句 偽指令語句沒有對應(yīng)的機(jī)器代碼,并不偽指令語句沒有對應(yīng)的機(jī)器代碼,并不像指令語句那樣由像指令語句那樣由CPU來執(zhí)行,它是由來執(zhí)行,它是由MASM匯編程序?qū)υ闯绦騾R編期間進(jìn)行匯編程序?qū)υ闯绦騾R編期間進(jìn)行處理的。主要完成變量定義,存儲(chǔ)器分處理的。主要完成變量定義,存儲(chǔ)器分配,指示程序開始和結(jié)束,段定

20、義,段配,指示程序開始和結(jié)束,段定義,段分配等。分配等。偽指令的類型偽指令的類型 偽指令語句有如下幾種類型:偽指令語句有如下幾種類型: 數(shù)據(jù)定義偽指令數(shù)據(jù)定義偽指令 DB,DW,DD 符號定義偽指令符號定義偽指令 EQU, 段定義偽指令段定義偽指令 SEGMENTENDS 設(shè)定段寄存器偽指令設(shè)定段寄存器偽指令 ASSUME 過程定義偽指令過程定義偽指令 PROCENDP 模塊定義與連接偽指令模塊定義與連接偽指令 END,NAME4.2.1 數(shù)據(jù)定義偽指令數(shù)據(jù)定義偽指令 為一個(gè)數(shù)據(jù)項(xiàng)或數(shù)據(jù)表分配存儲(chǔ)單元,用為一個(gè)數(shù)據(jù)項(xiàng)或數(shù)據(jù)表分配存儲(chǔ)單元,用一個(gè)符號名與這個(gè)或這些存儲(chǔ)單元相聯(lián)系,并為一個(gè)符號名與

21、這個(gè)或這些存儲(chǔ)單元相聯(lián)系,并為這個(gè)數(shù)據(jù)項(xiàng)提供一個(gè)任選的初始值。這個(gè)數(shù)據(jù)項(xiàng)提供一個(gè)任選的初始值。 語句格式:語句格式: 變量名變量名 DB/DW/DD/DQ/DT 數(shù)據(jù)項(xiàng)表數(shù)據(jù)項(xiàng)表例例如:如: THING DB ? ;定義一個(gè)字節(jié);定義一個(gè)字節(jié) BIG-THING DW ? ;定義一個(gè)字;定義一個(gè)字 (兩個(gè)字節(jié)兩個(gè)字節(jié)) BIGGEST-THING DD ? ;定義一個(gè)雙字;定義一個(gè)雙字 (四個(gè)字節(jié)四個(gè)字節(jié)) BUFFER DB 30 DUP(?) ;定義連續(xù);定義連續(xù)30個(gè)字節(jié)個(gè)字節(jié)321.1. 數(shù)據(jù)定義偽指令助記符 DB 定義的變量為字節(jié)型定義的變量為字節(jié)型 DW 定義的變量為字類型(雙字節(jié)

22、)定義的變量為字類型(雙字節(jié)) DD 定義的變量為雙字型(定義的變量為雙字型(4字節(jié))字節(jié)) DQ 定義的變量為定義的變量為4字型(字型(8字節(jié))字節(jié)) DT 定義的變量為定義的變量為10字節(jié)型字節(jié)型33數(shù)據(jù)定義偽指令例 DATA1 DB 11H,22H,33H,44H DATA2 DW 11H,22H,3344H DATA3 DD 11H*2,22H,33445566H以上變量在內(nèi)存以上變量在內(nèi)存中的存放形式中的存放形式34數(shù)據(jù)定義偽指令例_變量在內(nèi)存中的分布變量在內(nèi)存中的分布DATA111223344DATA2224411000033DATA3220000 2200000000 66554

23、43335數(shù)據(jù)定義偽指令的幾點(diǎn)說明 偽指令的性質(zhì)決定所定義變量的類型; 定義字符串必須用DB偽指令 例: DATA1 DB ABCD,66HABCD41H42H43H44H66H 數(shù)據(jù)定義偽指令例: 數(shù)據(jù)段起始 M1 DW 10H,20H M2 DB 11H,Hello! 數(shù)據(jù)段結(jié)束36M110002000M2656C11486C6F21H0000Hllo!e0004H4.2.2 符號定義偽指令符號定義偽指令 1賦值偽指令賦值偽指令EQU 賦值偽指令是為表達(dá)式賦予一個(gè)符號名,其后賦值偽指令是為表達(dá)式賦予一個(gè)符號名,其后指令中凡需要用到該表達(dá)式的地方均可以用此指令中凡需要用到該表達(dá)式的地方均可以

24、用此名字來代替。編寫程序時(shí),通過使用賦值偽指名字來代替。編寫程序時(shí),通過使用賦值偽指令可以使匯編語言簡明易懂,便于程序的調(diào)試令可以使匯編語言簡明易懂,便于程序的調(diào)試和修改。賦值偽指令的格式如下:和修改。賦值偽指令的格式如下: 符號名符號名 EQU 表達(dá)式表達(dá)式 必須用必須用PURGE(解除語句)來解除定義的(解除語句)來解除定義的符號符號例:例:BUFFER_SIZE EQU 32 NEW_PORT EQU PORT_VAL+1 PURGE BUFFER_SIZE, NEW_PORT 2等號偽指令等號偽指令 語句格式如下:語句格式如下: 符號名符號名=表達(dá)式表達(dá)式 可以對符號再定義可以對符號再

25、定義例:例:EMP=6 EMP=7 EMP=EMP+1數(shù)據(jù)的初始值確定數(shù)據(jù)的初始值確定 例如例如 THING DB 25 ONE DB 5 DUP (0) ;重復(fù);重復(fù)5個(gè)個(gè)0存入存入ONE起始的存起始的存 儲(chǔ)單元儲(chǔ)單元 TWO DW 10 DUP (?) ;保留;保留10個(gè)字的儲(chǔ)存單元空間個(gè)字的儲(chǔ)存單元空間 THREE DB 4 DUP (1, 2 DUP(20H) ;DUP嵌套嵌套 通常,初始值可用一個(gè)表達(dá)式來規(guī)定,因?yàn)楸磉_(dá)式通常,初始值可用一個(gè)表達(dá)式來規(guī)定,因?yàn)楸磉_(dá)式是在匯編時(shí)計(jì)算的,所以有如下的合法的語句:是在匯編時(shí)計(jì)算的,所以有如下的合法的語句: PORT_VAL EQU 2 IN-

26、PORT DB PORT_VAL OUT-PORT DB PORT_VAL +1 SEGMENT/ENDS 段定義偽指令的功能就是把源程序劃分為邏輯段定義偽指令的功能就是把源程序劃分為邏輯段,便于匯編程序在相應(yīng)段名下生成目標(biāo)碼,段,便于匯編程序在相應(yīng)段名下生成目標(biāo)碼,同時(shí)也便于連接程序組合、定位、生成可執(zhí)行同時(shí)也便于連接程序組合、定位、生成可執(zhí)行的目標(biāo)程序。利用段定義偽指令可以定義一個(gè)的目標(biāo)程序。利用段定義偽指令可以定義一個(gè)邏輯段的名稱和范圍,其指令格式如下:邏輯段的名稱和范圍,其指令格式如下: 段名段名 SEGMENT (本段語句序列本段語句序列) (本段語句序列本段語句序列) 段名段名 E

27、NDS4.2.3 段定義偽指令段定義偽指令 4.2.4 設(shè)定段寄存器偽指令設(shè)定段寄存器偽指令A(yù)SSUME 設(shè)定段寄存器偽指令設(shè)定段寄存器偽指令A(yù)SSUME,一般出現(xiàn)在,一般出現(xiàn)在代碼段中,它用來告訴匯編程序由代碼段中,它用來告訴匯編程序由 SEGMENTENDS偽指令定義的段和段寄存?zhèn)沃噶疃x的段和段寄存器的對應(yīng)關(guān)系,即設(shè)定已定義段各自屬于哪個(gè)器的對應(yīng)關(guān)系,即設(shè)定已定義段各自屬于哪個(gè)段寄存器。其指令格式為:段寄存器。其指令格式為:ASSUME 段寄存器名:段名段寄存器名:段名 , 段寄存器名:段名段寄存器名:段名 段寄存器名是段寄存器名是CS、DS、SS或或ES,段名必須是由,段名必須是由SE

28、GMENTENDS定義過的段名。定義過的段名。 應(yīng)當(dāng)注意:使用應(yīng)當(dāng)注意:使用ASSUME偽指令,僅僅告訴匯編程偽指令,僅僅告訴匯編程序,關(guān)于段寄存器與定義段之應(yīng)關(guān)系。但它并不意序,關(guān)于段寄存器與定義段之應(yīng)關(guān)系。但它并不意味著匯編后這些段地址已裝入了相應(yīng)的段寄存器中,味著匯編后這些段地址已裝入了相應(yīng)的段寄存器中,這些段地址的真正裝入,仍需要用程序來送入,這些段地址的真正裝入,仍需要用程序來送入,且且這這4個(gè)段寄存器的裝入略有不同個(gè)段寄存器的裝入略有不同。 設(shè)置起始地址偽指令設(shè)置起始地址偽指令ORG ORG偽指令用來指出其后的程序段或數(shù)據(jù)塊偽指令用來指出其后的程序段或數(shù)據(jù)塊的起始地址的偏移量。的起

29、始地址的偏移量。 其指令格式為:其指令格式為:ORG 表達(dá)式表達(dá)式例:例:ORG 0003H 匯編程序把語句中表達(dá)式之值作為起始地址,匯編程序把語句中表達(dá)式之值作為起始地址,連續(xù)存放程序和數(shù)據(jù),直到出現(xiàn)一個(gè)新的連續(xù)存放程序和數(shù)據(jù),直到出現(xiàn)一個(gè)新的 ORG指令。指令。 若省略若省略O(shè)RG,則從本段起始地址開始連續(xù)存,則從本段起始地址開始連續(xù)存放。放。 匯編匯編程序程序例題例題 段寄段寄存器存器設(shè)定設(shè)定 在程序設(shè)計(jì)中,我們把具有一定功能的程在程序設(shè)計(jì)中,我們把具有一定功能的程序段設(shè)計(jì)成一個(gè)子程序序段設(shè)計(jì)成一個(gè)子程序(過程過程)。 過程定義偽指令格式如下:過程定義偽指令格式如下:過程名過程名 PROC 屬性屬性 (過程體序列語句過程體序列語句) (過程體序列語句過程體序列語句)過程名過程名 ENDP 過程以過程以PROC偽指令開始,以偽指令開始,以ENDP偽指令結(jié)束。偽指令結(jié)束。4.2.5 過程定義偽指令過程定義偽指令過程屬性過程屬性 過程名具有三種屬性。(與標(biāo)號相同)過程名具有三種屬性。(與標(biāo)號相同) 段屬性:段屬性: 為該過程所在段的段基址。為該過程所在段的段基址。 偏移地址屬性:偏移地址屬性: 指該過程第一個(gè)字節(jié)與段首址之間距離字節(jié)。指該過程第一個(gè)字節(jié)與段首址之間距離字節(jié)。 距離屬性:距離屬性: NEAR或或FAR 格式中的屬性就指距離屬性,定義格式中的屬性就

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論