第四章、匯編語言程序設(shè)計(jì)_第1頁
第四章、匯編語言程序設(shè)計(jì)_第2頁
已閱讀5頁,還剩109頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 第四章、匯編語言程序設(shè)計(jì)第四章、匯編語言程序設(shè)計(jì)計(jì)劃學(xué)時(shí):計(jì)劃學(xué)時(shí):10學(xué)時(shí)學(xué)時(shí)主要內(nèi)容:主要內(nèi)容: 匯編語言程序格式 基本語法和偽指令 DOS功能和BIOS中斷調(diào)用 程序設(shè)計(jì)的基本方法 第一節(jié)第一節(jié) 匯編語言程序格式匯編語言程序格式1匯編語言的基本概念匯編語言的基本概念(1)機(jī)器語言:由)機(jī)器語言:由0、1代碼所組成的語言。面向機(jī)器,代碼所組成的語言。面向機(jī)器,同一組代碼對不同的計(jì)算機(jī)表示不同的含義。同一組代碼對不同的計(jì)算機(jī)表示不同的含義。(2)匯編語言:由助記符表示的語言。面向機(jī)器。)匯編語言:由助記符表示的語言。面向機(jī)器。(3)高級語言:用一些接近人們書寫習(xí)慣的英語和數(shù))高級語言:用一

2、些接近人們書寫習(xí)慣的英語和數(shù)學(xué)表達(dá)式形式的句子編寫程序。這種語言不面向機(jī)器,學(xué)表達(dá)式形式的句子編寫程序。這種語言不面向機(jī)器,而是面向過程、面向?qū)ο?。而是面向過程、面向?qū)ο蟆?匯編語言程序的結(jié)構(gòu)形式匯編語言程序的結(jié)構(gòu)形式(1)完全段結(jié)構(gòu)程序)完全段結(jié)構(gòu)程序 例:在屏幕上顯示字符串例:在屏幕上顯示字符串“Good Morning!”標(biāo)準(zhǔn)結(jié)構(gòu)標(biāo)準(zhǔn)結(jié)構(gòu) DATA SEGMENT MES DB Good Morning! DB 0DH,0AH,$ DATA ENDS STACK SEGMENT ST1 DB 200 DUP(?)(?) STACK ENDS CODE SEGMENT MAIN PROC

3、FAR ASSUME CS:CODE,DS:DATA,SS:STACK START: PUSH DS MOV AX,0 保護(hù)保護(hù)PSP段地址段地址 PUSH AX MOV AX,DATA MOV DS,AX MOV DX,OFFSET MES MOV AH,9 INT 21H RET ;返回到;返回到PSP開始處開始處 MAIN ENDP CODE ENDS END START非標(biāo)準(zhǔn)結(jié)構(gòu)非標(biāo)準(zhǔn)結(jié)構(gòu) CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV DX,OFFSET MES MOV AH,

4、9 INT 21H MOV AH,4CH INT 21H CODE ENDS其余部分與前面相同。其余部分與前面相同。說明:用連接程序?qū)δ繕?biāo)程序(說明:用連接程序?qū)δ繕?biāo)程序(OBJ文件)進(jìn)行連接和文件)進(jìn)行連接和定位時(shí),操作系統(tǒng)為每個(gè)程序建立了一個(gè)程序段前綴定位時(shí),操作系統(tǒng)為每個(gè)程序建立了一個(gè)程序段前綴PSP,其長度為,其長度為256字節(jié)。主要用于存放所要執(zhí)行程序字節(jié)。主要用于存放所要執(zhí)行程序的有關(guān)信息,同時(shí)也提供了程序與操作系統(tǒng)的接口。在的有關(guān)信息,同時(shí)也提供了程序與操作系統(tǒng)的接口。在PSP的開始處(偏移地址的開始處(偏移地址0000H)安排了一條指令)安排了一條指令I(lǐng)NT 20H。執(zhí)行該指令

5、即可返回到。執(zhí)行該指令即可返回到DOS。 DOS在建立了程序段前綴在建立了程序段前綴PSP后,就將要執(zhí)行的程后,就將要執(zhí)行的程序從磁盤裝入內(nèi)存。在定位時(shí),代碼段在序從磁盤裝入內(nèi)存。在定位時(shí),代碼段在PSP之后,然之后,然后是數(shù)據(jù)段、堆棧段。后是數(shù)據(jù)段、堆棧段。 在程序開始時(shí),在程序開始時(shí),DS指向指向PSP所在段。所在段。ES也不指向也不指向用戶的附加段,因此,在程序開始處,用指令將用戶的附加段,因此,在程序開始處,用指令將DS、ES、SS等指向用戶所設(shè)計(jì)的段。(其中等指向用戶所設(shè)計(jì)的段。(其中SS段可省略)段可省略)(2)簡化段程序結(jié)構(gòu))簡化段程序結(jié)構(gòu)DOSSEGMODEL SMALLSTA

6、CK 100HDATA MES DB DB This is a example program. DB 0DH,0AH,$CODE START:MOV AX,DATA MOV DS,AX MOV DX,OFFSET MES MOV AH,9 INT 21H MOV AH,4CH INT 21H END START也可以用標(biāo)準(zhǔn)方式返回也可以用標(biāo)準(zhǔn)方式返回DOS。3、匯編語言的數(shù)據(jù)類型、匯編語言的數(shù)據(jù)類型(1)指令性語句)指令性語句 是執(zhí)行語句,以機(jī)器指令作基礎(chǔ),與機(jī)器指令相對是執(zhí)行語句,以機(jī)器指令作基礎(chǔ),與機(jī)器指令相對應(yīng)。匯編程序可將它翻譯成目標(biāo)代碼(機(jī)器指令)。應(yīng)。匯編程序可將它翻譯成目標(biāo)代碼

7、(機(jī)器指令)。CPU可以執(zhí)行??梢詧?zhí)行。指令性語句只能出現(xiàn)在代碼段中。指令性語句只能出現(xiàn)在代碼段中。語句格式語句格式: 標(biāo)號:指令助記符標(biāo)號:指令助記符 操作數(shù),操作數(shù)操作數(shù),操作數(shù) ;注釋;注釋(2)偽指令語句)偽指令語句 是說明性語句。它沒有對應(yīng)的目標(biāo)代碼。匯編程序是說明性語句。它沒有對應(yīng)的目標(biāo)代碼。匯編程序匯編源程序時(shí)對偽指令語句進(jìn)行處理。它完成對數(shù)據(jù)的匯編源程序時(shí)對偽指令語句進(jìn)行處理。它完成對數(shù)據(jù)的定義、段塊定義、存儲區(qū)分配等操作,完成匯編控制。定義、段塊定義、存儲區(qū)分配等操作,完成匯編控制。語句格式:語句格式: 名字名字 偽指令助記符偽指令助記符 操作數(shù),操作數(shù)操作數(shù),操作數(shù) ;注釋

8、;注釋第二節(jié)第二節(jié) 匯編語言基本語法匯編語言基本語法1語法基礎(chǔ)語法基礎(chǔ)(1)字符集)字符集匯編語言程序中允許出現(xiàn)的字符為:匯編語言程序中允許出現(xiàn)的字符為:英文字母:英文字母:AZ,az數(shù)字字符:數(shù)字字符:09其它字符:其它字符:+ - * / ()() ? (2)保留字)保留字 保留字是由系統(tǒng)規(guī)定的,有特定含義的專用名字。保留字是由系統(tǒng)規(guī)定的,有特定含義的專用名字。匯編語言中的保留字有:匯編語言中的保留字有:寄存器的名字:寄存器的名字:AX、BX、CX、DX、SP、BP、SI、DI、IP、CS、DS、ES、SS指令助記符:指令助記符:MOV、PUSH、POP、ADD、SUB、MUL、偽指令符:

9、偽指令符:DB、DW、ASSUEM、EQU、LABEL、PROC等等一些特殊的運(yùn)算符與操作符:一些特殊的運(yùn)算符與操作符:LT、EQ、OR、HIGH、SEG、OFFSET、PTR等等2語句格式語句格式一般形式:一般形式: 標(biāo)識符標(biāo)識符 助記符助記符 操作數(shù)操作數(shù)1,操作數(shù)理,操作數(shù)理2 :注釋:注釋例:例: START:MOV AX,DATA X DB 1,2(1)助記符)助記符助記符是語句的主體,對指令語句它是機(jī)器指令的助記助記符是語句的主體,對指令語句它是機(jī)器指令的助記符(符(指令的符號指令的符號),對于偽指令它是偽指令符。),對于偽指令它是偽指令符。(2)標(biāo)識符)標(biāo)識符 標(biāo)號:用于指令語句

10、中,代表相應(yīng)語句的符號地址。標(biāo)號:用于指令語句中,代表相應(yīng)語句的符號地址。位于代碼段內(nèi),它具有三個(gè)屬性:位于代碼段內(nèi),它具有三個(gè)屬性: 段值(段值(SEGMENT):標(biāo)號所在的段的段基址。:標(biāo)號所在的段的段基址。 段內(nèi)偏移地址(段內(nèi)偏移地址(OFFSET):標(biāo)號地址與所在段的段:標(biāo)號地址與所在段的段首地址之間的偏移地址的字節(jié)數(shù)。首地址之間的偏移地址的字節(jié)數(shù)。 類型(類型(TYPE):指在轉(zhuǎn)移指令中標(biāo)號可轉(zhuǎn)移的距離。:指在轉(zhuǎn)移指令中標(biāo)號可轉(zhuǎn)移的距離。NEAR:近標(biāo),本段內(nèi)引用,地址指針為:近標(biāo),本段內(nèi)引用,地址指針為2字節(jié);字節(jié);FAR:遠(yuǎn)標(biāo),可在其它段內(nèi)引用,地址指針為遠(yuǎn)標(biāo),可在其它段內(nèi)引用,

11、地址指針為4字節(jié)。字節(jié)。如果定如果定義一個(gè)標(biāo)號緊跟冒號,則表示此標(biāo)號為近標(biāo)。義一個(gè)標(biāo)號緊跟冒號,則表示此標(biāo)號為近標(biāo)。(2)標(biāo)識符)標(biāo)識符 標(biāo)號:用于指令語句中,代表相應(yīng)語句的符號地址。標(biāo)號:用于指令語句中,代表相應(yīng)語句的符號地址。位于代碼段內(nèi),它具有三個(gè)屬性:位于代碼段內(nèi),它具有三個(gè)屬性: 段值(段值(SEGMENT):標(biāo)號所在的段的段基址。:標(biāo)號所在的段的段基址。 段內(nèi)偏移地址(段內(nèi)偏移地址(OFFSET):標(biāo)號地址與所在段的段:標(biāo)號地址與所在段的段首地址之間的偏移地址的字節(jié)數(shù)。首地址之間的偏移地址的字節(jié)數(shù)。 類型(類型(TYPE):指在轉(zhuǎn)移指令中標(biāo)號可轉(zhuǎn)移的距離。:指在轉(zhuǎn)移指令中標(biāo)號可轉(zhuǎn)移

12、的距離。NEAR:近標(biāo),本段內(nèi)引用,地址指針為:近標(biāo),本段內(nèi)引用,地址指針為2字節(jié);字節(jié);FAR:遠(yuǎn)標(biāo),可在其它段內(nèi)引用,地址指針為遠(yuǎn)標(biāo),可在其它段內(nèi)引用,地址指針為4字節(jié)。字節(jié)。如果定如果定義一個(gè)標(biāo)號緊跟冒號,則表示此標(biāo)號為近標(biāo)。義一個(gè)標(biāo)號緊跟冒號,則表示此標(biāo)號為近標(biāo)。(2)標(biāo)識符)標(biāo)識符 標(biāo)號:用于指令語句中,代表相應(yīng)語句的符號地址。標(biāo)號:用于指令語句中,代表相應(yīng)語句的符號地址。位于代碼段內(nèi),它具有三個(gè)屬性:位于代碼段內(nèi),它具有三個(gè)屬性: 段值(段值(SEGMENT):標(biāo)號所在的段的段基址。:標(biāo)號所在的段的段基址。 段內(nèi)偏移地址(段內(nèi)偏移地址(OFFSET):標(biāo)號地址與所在段的段:標(biāo)號地址

13、與所在段的段首地址之間的偏移地址的字節(jié)數(shù)。首地址之間的偏移地址的字節(jié)數(shù)。 類型(類型(TYPE):指在轉(zhuǎn)移指令中標(biāo)號可轉(zhuǎn)移的距離。:指在轉(zhuǎn)移指令中標(biāo)號可轉(zhuǎn)移的距離。NEAR:近標(biāo),本段內(nèi)引用,地址指針為:近標(biāo),本段內(nèi)引用,地址指針為2字節(jié);字節(jié);FAR:遠(yuǎn)標(biāo),可在其它段內(nèi)引用,地址指針為遠(yuǎn)標(biāo),可在其它段內(nèi)引用,地址指針為4字節(jié)。字節(jié)。如果定如果定義一個(gè)標(biāo)號緊跟冒號,則表示此標(biāo)號為近標(biāo)。義一個(gè)標(biāo)號緊跟冒號,則表示此標(biāo)號為近標(biāo)。變量變量 變量是存儲區(qū)中數(shù)據(jù)區(qū)的名字,一方面代表所表示變量是存儲區(qū)中數(shù)據(jù)區(qū)的名字,一方面代表所表示的值,另一方面代表相應(yīng)的存儲空間的地址。用作存儲的值,另一方面代表相應(yīng)的存

14、儲空間的地址。用作存儲器操作數(shù),直接尋址。它位于器操作數(shù),直接尋址。它位于DS、ES段內(nèi)。也具有三段內(nèi)。也具有三種屬性:種屬性: 段值(段值(SEGMENT):標(biāo)號所在的段的段基址。:標(biāo)號所在的段的段基址。段內(nèi)偏移地址(段內(nèi)偏移地址(OFFSET):變量地址與所在段的段:變量地址與所在段的段首地址之間的偏移地址的字節(jié)數(shù)。首地址之間的偏移地址的字節(jié)數(shù)。類型(類型(TYPE):):指變量中每個(gè)元素所包含的字節(jié)數(shù)。指變量中每個(gè)元素所包含的字節(jié)數(shù)。類型有:字節(jié)(類型有:字節(jié)(BYTE)、字()、字(WORD)以及雙字)以及雙字(DWORD)等。)等。常量常量常量在匯編時(shí)已有確定的值。它沒有屬性。常量在

15、匯編時(shí)已有確定的值。它沒有屬性。常量在程序中可以直接出現(xiàn)。二進(jìn)制常量以常量在程序中可以直接出現(xiàn)。二進(jìn)制常量以B結(jié)尾,八結(jié)尾,八進(jìn)制以進(jìn)制以Q結(jié)尾,十六進(jìn)制數(shù)以結(jié)尾,十六進(jìn)制數(shù)以H結(jié)尾。十進(jìn)制以結(jié)尾。十進(jìn)制以D結(jié)尾結(jié)尾(一般不寫)。(一般不寫)。字符串常量用單引號表示。字符串常量用單引號表示。對于經(jīng)常使用的常量,可以定義為符號常量。對于經(jīng)常使用的常量,可以定義為符號常量。如如 PI EQU 3 PORT = 218H(3)操作數(shù))操作數(shù) 操作數(shù)是第三章所講的尋址方式中所允許的數(shù)據(jù)類操作數(shù)是第三章所講的尋址方式中所允許的數(shù)據(jù)類型。包括:常量、變量、標(biāo)號、寄存器名以及表達(dá)式等。型。包括:常量、變量、

16、標(biāo)號、寄存器名以及表達(dá)式等。(4)注釋)注釋 以分號表示,用來說明一條指令或一段程序的功能,以分號表示,用來說明一條指令或一段程序的功能,它可以省略。匯編程序?qū)Ψ痔柡蟮膬?nèi)容不匯編。加注釋它可以省略。匯編程序?qū)Ψ痔柡蟮膬?nèi)容不匯編。加注釋是為了讓程序容易讀懂。是為了讓程序容易讀懂。3、表達(dá)式、表達(dá)式 表達(dá)式由運(yùn)算對象及運(yùn)算符所組成,在匯編時(shí)由匯表達(dá)式由運(yùn)算對象及運(yùn)算符所組成,在匯編時(shí)由匯編程序?qū)λM(jìn)行運(yùn)算。運(yùn)算的結(jié)果作為一個(gè)語句的操作編程序?qū)λM(jìn)行運(yùn)算。運(yùn)算的結(jié)果作為一個(gè)語句的操作數(shù)去使用。運(yùn)算對象可以是常數(shù)、變量或標(biāo)號,運(yùn)算結(jié)數(shù)去使用。運(yùn)算對象可以是常數(shù)、變量或標(biāo)號,運(yùn)算結(jié)果可以是一個(gè)常數(shù)字,也

17、可以是一個(gè)存儲器的地址,在果可以是一個(gè)常數(shù)字,也可以是一個(gè)存儲器的地址,在此地址中存放了數(shù)據(jù)(稱為變量)或指令(稱為標(biāo)號)。此地址中存放了數(shù)據(jù)(稱為變量)或指令(稱為標(biāo)號)。MASM中使用了中使用了6類運(yùn)算符類運(yùn)算符(P129表表4-1)算術(shù)運(yùn)算符算術(shù)運(yùn)算符邏輯運(yùn)算符邏輯運(yùn)算符關(guān)系運(yùn)算符關(guān)系運(yùn)算符數(shù)值返回運(yùn)算符數(shù)值返回運(yùn)算符修改屬性運(yùn)算符修改屬性運(yùn)算符其它運(yùn)算符其它運(yùn)算符(1)算術(shù)運(yùn)算符)算術(shù)運(yùn)算符主要的算術(shù)運(yùn)算有:主要的算術(shù)運(yùn)算有:+、*、/、MOD、SHL、SHR例:源程序指令格式如下:例:源程序指令格式如下: DA EQU 300 MOV AX,DA-80 MOV BX,DA MOD 1

18、00 MOV CX,DA/100 MOV DH,01100100B SHR 2匯編時(shí),計(jì)算表達(dá)式形成指令為:匯編時(shí),計(jì)算表達(dá)式形成指令為: DA EQU 300 MOV AX,220 MOV BX,0 MOV CX,3 MOV DH,19H(2)邏輯運(yùn)算符)邏輯運(yùn)算符邏輯運(yùn)算有邏輯運(yùn)算有AND(與)、(與)、OR(或)、(或)、XOR(異或)、(異或)、NOT(非)(非)4種。邏輯運(yùn)算符與邏輯運(yùn)算指令一樣,也種。邏輯運(yùn)算符與邏輯運(yùn)算指令一樣,也是按位運(yùn)算,它只能對常數(shù)進(jìn)行運(yùn)算,得到的結(jié)果也是是按位運(yùn)算,它只能對常數(shù)進(jìn)行運(yùn)算,得到的結(jié)果也是常數(shù)。常數(shù)。邏輯運(yùn)算符作為操作數(shù),處理是在匯編期間完成的

19、。而邏輯運(yùn)算符作為操作數(shù),處理是在匯編期間完成的。而邏輯指令作為指令助記符,它是在程序執(zhí)行期間完成的。邏輯指令作為指令助記符,它是在程序執(zhí)行期間完成的。例:例:MOV AL,56H AND AL,34H AND 12H (3)關(guān)系運(yùn)算符)關(guān)系運(yùn)算符 關(guān)系運(yùn)算符有:關(guān)系運(yùn)算符有:EQ(等于)、(等于)、NE(不等)、(不等)、LT(小于)、(小于)、GT(大于)、(大于)、LE(小于等于)、(小于等于)、GE(大(大于等于)。于等于)。 關(guān)系運(yùn)算符的兩個(gè)操作數(shù)必須是數(shù)據(jù),或是同一段關(guān)系運(yùn)算符的兩個(gè)操作數(shù)必須是數(shù)據(jù),或是同一段內(nèi)的兩個(gè)存儲單元的地址。進(jìn)行關(guān)系運(yùn)算的比較操作后,內(nèi)的兩個(gè)存儲單元的地址

20、。進(jìn)行關(guān)系運(yùn)算的比較操作后,結(jié)果是一個(gè)數(shù)值,若結(jié)果為真,輸出全是結(jié)果是一個(gè)數(shù)值,若結(jié)果為真,輸出全是1,即,即0FFH或或0FFFFH。若結(jié)果為假,輸出全是。若結(jié)果為假,輸出全是0。關(guān)系運(yùn)算符一般。關(guān)系運(yùn)算符一般與邏輯運(yùn)算符組合起來使用。與邏輯運(yùn)算符組合起來使用。例:例:MOV AX,10H GT 16 ADD BL,6 EQ 0100B相當(dāng)于:相當(dāng)于:MOV AX,0 ADD BL,0FFH以上三種運(yùn)算符也叫做數(shù)值表達(dá)式。以上三種運(yùn)算符也叫做數(shù)值表達(dá)式。(4)數(shù)值返回運(yùn)算符(分析運(yùn)算符)數(shù)值返回運(yùn)算符(分析運(yùn)算符)用于分析一個(gè)存儲器操作數(shù)的屬性,并返回某個(gè)參數(shù)值。用于分析一個(gè)存儲器操作數(shù)的屬

21、性,并返回某個(gè)參數(shù)值。 SEG:獲取變量或標(biāo)號的段地址(段基值)。:獲取變量或標(biāo)號的段地址(段基值)。如:如:MOV AX,SEG DATA1 MOV DS,AX等價(jià)于:等價(jià)于: MOV AX,DATA MOV DS,AX其中其中DATA1為為DATA 段內(nèi)定義的一個(gè)變量名。段內(nèi)定義的一個(gè)變量名。 OFFSET:返回變量或標(biāo)號的偏移地址。:返回變量或標(biāo)號的偏移地址。如:如:MOV BX,OFFSET DA1等價(jià)于:等價(jià)于:LEA BX,DA1在在DOS的的9號功能調(diào)用中經(jīng)常用到此運(yùn)算符。號功能調(diào)用中經(jīng)常用到此運(yùn)算符。 TYPE:取變量或標(biāo)號的類型屬性值。其值與變量或:取變量或標(biāo)號的類型屬性值。

22、其值與變量或標(biāo)號的類型關(guān)系為:標(biāo)號的類型關(guān)系為: 變量或標(biāo)號變量或標(biāo)號返回值返回值變量或標(biāo)號變量或標(biāo)號返回值返回值BYTE1QWORD8WORD2TWORD10DWORD3NEAR-1(0FFH)FWORD4FAR-2(0FEH) LENGTH:取變量相同類型的個(gè)數(shù)。:取變量相同類型的個(gè)數(shù)。依據(jù)數(shù)據(jù)定義偽指令后第一個(gè)表達(dá)式的形式而定。依據(jù)數(shù)據(jù)定義偽指令后第一個(gè)表達(dá)式的形式而定。為為N DUP(?)時(shí),?。??)時(shí),取N;否則??;否則取1 SIZE:取變量所包含的總字節(jié)數(shù)。:取變量所包含的總字節(jié)數(shù)。 SIZE=LENGTH*TYPE例:某數(shù)據(jù)段定義如下:例:某數(shù)據(jù)段定義如下:A DW 100 DU

23、P(?),(?),1200HB DB 1,2,3,100 DUP(0)C DB ABCD指令:指令:MOV AL,TYPE A MOV BL,TYPE B MOV CL,TYPE C MOV AH,LENGTH A MOV BH,LENGTH B MOV CH,LENGTH C MOV DX,SIZE A MOV SI,SIZE B MOV DI,SIZE C執(zhí)行后,執(zhí)行后,AX= BX= CX= DX= SI= DI= (5)修改屬性運(yùn)算符)修改屬性運(yùn)算符修改屬性運(yùn)算符也叫綜合運(yùn)算符、合成運(yùn)算符、屬性定修改屬性運(yùn)算符也叫綜合運(yùn)算符、合成運(yùn)算符、屬性定義符等。義符等。 段操作符:段操作符:用來

24、臨時(shí)給一個(gè)存儲器操作數(shù)指定一個(gè)段屬性(段超越)用來臨時(shí)給一個(gè)存儲器操作數(shù)指定一個(gè)段屬性(段超越)例:例:MOV AX,ES:BXPTR:用來臨時(shí)指定或修改存儲器操作數(shù)的類型。:用來臨時(shí)指定或修改存儲器操作數(shù)的類型。PTR本身不分配存儲單元,僅給已分配的存儲單元賦予本身不分配存儲單元,僅給已分配的存儲單元賦予新的屬性。以保證運(yùn)算時(shí)操作數(shù)類型的匹配。常與類型新的屬性。以保證運(yùn)算時(shí)操作數(shù)類型的匹配。常與類型BYTE、WORD、NEAR、FAR等連用。等連用。例:例:N1 DB 15H,36H N2 DW 1122H,3344H LO:MOV AX,WORD PTR N1 MOV BL,BYTE PT

25、R N2執(zhí)行結(jié)果:執(zhí)行結(jié)果:AX=3645H,BL=22H例:例:MOV BX,10H此指令將立即數(shù)此指令將立即數(shù)10H送入送入BX間址指定的存儲單元,但間址指定的存儲單元,但由于由于10H既可以是既可以是10H,也可以是,也可以是0010H,所以匯編時(shí),所以匯編時(shí)認(rèn)為錯(cuò)誤。一般用認(rèn)為錯(cuò)誤。一般用BYTE 或或WORD指定:指定:MOV BX,BYTE PTR 10HMOV WORD PTR BX,10H THIS:與:與PTR類似,用來指明類型。且常與類似,用來指明類型。且常與EQU連連用。用。例:例:FIRST EQU THIS BYTE TABLE DW 1234H,5678HFIRST

26、的偏移地址與的偏移地址與TABLE的偏移地址相同,區(qū)別在的偏移地址相同,區(qū)別在于于FIRST為字節(jié)類型,而為字節(jié)類型,而TABLE為字類型。為字類型。執(zhí)行下列指令后,執(zhí)行下列指令后,AX=1234H,BL=34H MOV AX,TABLE MOV BL,F(xiàn)IRST SHORT:用來說明轉(zhuǎn)移類指令中轉(zhuǎn)向地址的屬性,:用來說明轉(zhuǎn)移類指令中轉(zhuǎn)向地址的屬性,指出轉(zhuǎn)向的目標(biāo)地址與本指令之間的距離在指出轉(zhuǎn)向的目標(biāo)地址與本指令之間的距離在128+127之間,即限制在短轉(zhuǎn)移范圍內(nèi)。短標(biāo)號可以用在之間,即限制在短轉(zhuǎn)移范圍內(nèi)。短標(biāo)號可以用在條件轉(zhuǎn)移指令中,使用短標(biāo)號的指令比使用近標(biāo)號的指條件轉(zhuǎn)移指令中,使用短標(biāo)號

27、的指令比使用近標(biāo)號的指令少一個(gè)字節(jié)。令少一個(gè)字節(jié)。 HIGH和和LOW字節(jié)分離符,對一個(gè)數(shù)或地址表達(dá)式,字節(jié)分離符,對一個(gè)數(shù)或地址表達(dá)式,HIGH從中分離從中分離出高位字節(jié),出高位字節(jié),LOW從中分離出低位字節(jié)。從中分離出低位字節(jié)。例:例:K1 EQU 0ABCDH K2 EQU 1234H MOV AH,HIGH K1 MOV BL,LOW K2等價(jià)于:等價(jià)于:MOV AH,0ABH MOV BL,34H (6)其它運(yùn)算符)其它運(yùn)算符其它運(yùn)算符有(),其它運(yùn)算符有(), , ,MASK和和WIDTH等等6種。圓括號用來改變運(yùn)算符的優(yōu)先級別,()中的種。圓括號用來改變運(yùn)算符的優(yōu)先級別,()中的

28、運(yùn)算符具有最高優(yōu)先級。余下的幾種運(yùn)算符由于用得不運(yùn)算符具有最高優(yōu)先級。余下的幾種運(yùn)算符由于用得不多,這里不作介紹。多,這里不作介紹。(7)運(yùn)算符的優(yōu)先級)運(yùn)算符的優(yōu)先級如果一個(gè)表達(dá)式同時(shí)具有多個(gè)運(yùn)算符,則按以下規(guī)則運(yùn)如果一個(gè)表達(dá)式同時(shí)具有多個(gè)運(yùn)算符,則按以下規(guī)則運(yùn)算:算:優(yōu)先級高的先運(yùn)算,優(yōu)先級低的后運(yùn)算。優(yōu)先級高的先運(yùn)算,優(yōu)先級低的后運(yùn)算。優(yōu)先級相同時(shí)按表達(dá)式中從左到右的順序運(yùn)算。優(yōu)先級相同時(shí)按表達(dá)式中從左到右的順序運(yùn)算。括號可以提高運(yùn)算符的優(yōu)先級,括號內(nèi)的運(yùn)算總是在括號可以提高運(yùn)算符的優(yōu)先級,括號內(nèi)的運(yùn)算總是在相鄰的運(yùn)算之前進(jìn)行。相鄰的運(yùn)算之前進(jìn)行。各種運(yùn)算符的優(yōu)先級如下表:(數(shù)字越小,優(yōu)

29、先級越高)各種運(yùn)算符的優(yōu)先級如下表:(數(shù)字越小,優(yōu)先級越高) 運(yùn)算符優(yōu)先級次序表運(yùn)算符優(yōu)先級次序表優(yōu)先級運(yùn)算符1() LENGTH,WIDTH,SIZE,MASK2TR,OFFSET,SEG,TYPE,THIS,CS:,DS:,ES:,SS:3HIGH,LOW4*,/,MOD,SHL,SHR5+,-6EQ,NE,LT,LE,GT,GE7NOT8AND9OR,XOR10SHORT第三節(jié)第三節(jié) 偽指令語句偽指令語句1、數(shù)據(jù)定義偽指令、數(shù)據(jù)定義偽指令格式格式1:變量名:變量名 助記符助記符 操作數(shù),操作數(shù),操作數(shù),操作數(shù), ;注釋;注釋格式格式2:變量名:變量名 助記符號助記符號 n DUP(操作數(shù)

30、,操作數(shù)(操作數(shù),操作數(shù)) ;注釋;注釋用來定義一個(gè)變量的類型并分配存儲單元??少x初值也用來定義一個(gè)變量的類型并分配存儲單元??少x初值也可不賦初值(用?代替)??刹毁x初值(用?代替)。常用符號:常用符號:DB DW DD DF DQ DT定義字節(jié):定義字節(jié): 1 2 4 6 8 10 分配原則:低字(節(jié))低地址,高字(節(jié))高地址。分配原則:低字(節(jié))低地址,高字(節(jié))高地址。在格式在格式2中,中,n必須是正整數(shù),表示括號中的操作數(shù)的必須是正整數(shù),表示括號中的操作數(shù)的重復(fù)次數(shù),重復(fù)次數(shù),DUP后面必須帶括號。后面必須帶括號。例:用常數(shù)、表達(dá)式、字符串、?以及例:用常數(shù)、表達(dá)式、字符串、?以及DU

31、P定義變量定義變量 DA1 DB 10H,52H DA2 DW 1122H,34H DA3 DD 5*20H FIRST DB ab SECOND DW ab ;相當(dāng)于相當(dāng)于DW 6162H,此時(shí)只,此時(shí)只能有兩個(gè)字符。能有兩個(gè)字符。 M1 DB ? M2 DW 0D55H,?,? ONE DB 2 DUP(2) TWO DB 2 DUP(?) THREE DB 2 DUP(1,2 DUP(20)存儲區(qū)中的存放形式如下存儲區(qū)中的存放形式如下: DA1 10 M1 XX 52 M2 55 DA2 22 0D 11 XX 34 XX 00 ONE 02 DA3 A0 02 00 TWO XX 00

32、 XX 00 THREE 01 FIRST 61 14 62 14 SECOND 62 01 61 14 用偽指令用偽指令DW和和DD可以將變量或標(biāo)號的偏移地址存可以將變量或標(biāo)號的偏移地址存入存儲器,當(dāng)用入存儲器,當(dāng)用DD來定義時(shí),原變量或標(biāo)號的偏移來定義時(shí),原變量或標(biāo)號的偏移地址存入低位字中,原變量或標(biāo)號的段地址存入高地址存入低位字中,原變量或標(biāo)號的段地址存入高位字中。位字中。例:例:DATA SEGMENT X DW 120 PAR1 DB AB PAR2 DW AB ONE DW PAR1 TWO DW ADR2 THREE DD ADR3 DATA ENDS CODE SEGMENT

33、ASSUME CS:CODE,DS:DAT START:MOV AX,DATA MOV DS,AXADR2:MOV AX,0ADR3:MOV BX,1 HLTCODE ENDS ENDS START 在命令提示符下觀察數(shù)據(jù)定義偽指令的結(jié)果在命令提示符下觀察數(shù)據(jù)定義偽指令的結(jié)果(文件名文件名:DB.ASM)2符號定義偽指令符號定義偽指令(1)EQU 格式:符號名格式:符號名 EQU 表達(dá)式表達(dá)式例:例:CR EQU 0DH PORT EQU 218H C1 EQU ADD ;加法指令賦給符號名;加法指令賦給符號名C1 PURGE C1 ;C1不再代替不再代替ADD。(2)=(等號)(等號)格式:

34、符號名格式:符號名=表達(dá)式表達(dá)式等號與等號與EQU語句具有相同的功能,區(qū)別在于語句具有相同的功能,區(qū)別在于EQU不允不允許對同一符號重新定義,而許對同一符號重新定義,而“=”則可以重新定義。則可以重新定義。例:例:N=100 MOV AX,N N=N-20 MOV CX,N若換成若換成EQU則出錯(cuò)。則出錯(cuò)。注意:注意:N并不分配內(nèi)存單元。并不分配內(nèi)存單元。(3)LABEL 格式:名稱格式:名稱 LABEL 類型類型功能:為功能:為LABEL語句下一行語句所使用的變量或標(biāo)號語句下一行語句所使用的變量或標(biāo)號取一別名并賦給新的類型。其中變量的類型為取一別名并賦給新的類型。其中變量的類型為BYTE、W

35、ORD、DWORD等,標(biāo)號的類型為等,標(biāo)號的類型為NEAR、FAR。例:例:X LABEL WORD M DB 12H,34H MOV AL,M ;AL=12H MOV BX,X ;BX=3412HLABEL相當(dāng)于相當(dāng)于EQU THIS。3完全段定義偽指令完全段定義偽指令(1)SEGMENTENDS格式:段名格式:段名 SEGMENT 定位類型定位類型 組合類型組合類型 類別類別 段名段名 ENDS說明:說明:(1)定位方式有)定位方式有PARA、BYTE、WORD和和PAGE等等4種,其中種,其中PARA為隱含的定位方式,表示段首址的低為隱含的定位方式,表示段首址的低4位必須為位必須為0。(

36、2)組合方式有)組合方式有NONE、PUBLIC、COMMON、AT 表達(dá)式、表達(dá)式、STACK和和MEMORY等等6種,表明本段同其種,表明本段同其它段的組合關(guān)系。它段的組合關(guān)系。(3)類別明典型的有)類別明典型的有DATA、CODE和和STACK等等3種,種,連接時(shí)類別名相同的段存放在連續(xù)的存儲區(qū)中。連接時(shí)類別名相同的段存放在連續(xù)的存儲區(qū)中。(2)ASSUME8086中允許設(shè)置多個(gè)邏輯段,但只允許中允許設(shè)置多個(gè)邏輯段,但只允許4個(gè)邏輯段同時(shí)個(gè)邏輯段同時(shí)有效,有效,ASSUME 用來將它們分別定義成代碼段、數(shù)用來將它們分別定義成代碼段、數(shù)據(jù)段、附加段和堆棧段。據(jù)段、附加段和堆棧段。格式:格式

37、:ASSUME CS:段名,:段名,DS:段名,:段名,ES:段名,:段名,SS:段名:段名 也可用也可用ASSUME 段寄存器:段寄存器:NOTHING來取消前面來取消前面所定義的段名。所定義的段名。注意:注意:ASSUME放在可執(zhí)行程序開始位置的前面,指放在可執(zhí)行程序開始位置的前面,指明段寄存器與段名之間的關(guān)系,但并未給段寄存器明段寄存器與段名之間的關(guān)系,但并未給段寄存器賦初值(賦初值(CS除外)。程序中用戶需要用除外)。程序中用戶需要用MOV指令將指令將段名傳送到對應(yīng)的段寄存器中。段名傳送到對應(yīng)的段寄存器中。例:例:CODE SEGMENT ASSUME CS:CODE,DS:DATA1

38、,SS:STACK,ES:DATA2 START:MOV AX,DATA1 MOV DS,AX MOV AX,DATA2 MOV ES,AX MOV AX,STACK MOV SS,AX在程序中,在程序中,DS、ES必須賦值,而必須賦值,而SS可忽略??珊雎?。4簡化段定義偽指令簡化段定義偽指令(1)DOSSEG:用于標(biāo)記各簡化段,順序由系統(tǒng)安排。用于標(biāo)記各簡化段,順序由系統(tǒng)安排。(2)MODEL格式:格式:MODEL 模式選擇符模式選擇符 ,高級語言,高級語言功能:指明簡化段所使用的內(nèi)存模式,指示數(shù)據(jù)與代碼功能:指明簡化段所使用的內(nèi)存模式,指示數(shù)據(jù)與代碼允許使用的長度。允許使用的長度。模式選擇

39、符:模式選擇符:SMALL,MEDIUM,COMPACT,LARGE。SMALL:小模式,所有的數(shù)據(jù)在一物理段中,所有代:小模式,所有的數(shù)據(jù)在一物理段中,所有代碼存放在另一物理段中。代碼段與數(shù)據(jù)段均為近程,碼存放在另一物理段中。代碼段與數(shù)據(jù)段均為近程,不與高級語言連接時(shí)一般為不與高級語言連接時(shí)一般為SMALL模式。模式。(3)STACK:定義一個(gè)堆棧段,并形成定義一個(gè)堆棧段,并形成SP、SS的值。的值。(4)DATA:定義一個(gè)數(shù)據(jù)段。:定義一個(gè)數(shù)據(jù)段。(5)CODE:定義代碼段。:定義代碼段。5過程定義偽指令過程定義偽指令(1)格式:過程名)格式:過程名 PROC NEAR/FAR RET N

40、 過程名過程名 ENDP功能:定義一個(gè)過程,其它程序可以用功能:定義一個(gè)過程,其它程序可以用CALL指令調(diào)用指令調(diào)用它。它。過程名過程名:是給所定義的過程取的名字。它是主程序調(diào)用:是給所定義的過程取的名字。它是主程序調(diào)用的目的操作數(shù),即子程序的入口地址。它像標(biāo)號一的目的操作數(shù),即子程序的入口地址。它像標(biāo)號一樣具有三種屬性:段屬性、偏移地址屬性、距離屬樣具有三種屬性:段屬性、偏移地址屬性、距離屬性性NEAR/FAR。 RET N:返回指令,其中:返回指令,其中N表示返回時(shí)所丟棄的字節(jié)表示返回時(shí)所丟棄的字節(jié)數(shù)(偶數(shù))。數(shù)(偶數(shù))。(2)過程嵌套)過程嵌套過程中調(diào)用過程。過程中調(diào)用過程。例:例:MS

41、UB PROC FAR CALL SUB1 RET SUB1 PROC NEAR RET SUB1 ENDP MSUB ENDP注意:過程與注意:過程與C語言中的函數(shù)類似,但與函數(shù)的格式不語言中的函數(shù)類似,但與函數(shù)的格式不同。同。6與地址有關(guān)偽指令與地址有關(guān)偽指令(1)ORG 格式:格式:ORG 表達(dá)式表達(dá)式功能:給匯編程序設(shè)置位置指針,指定下面語句的起始功能:給匯編程序設(shè)置位置指針,指定下面語句的起始偏移地址。偏移地址。說明:一般情況下,段定義語句(說明:一般情況下,段定義語句(SEGMENT)指出了)指出了段的起點(diǎn),偏移地址為段的起點(diǎn),偏移地址為0。段內(nèi)各個(gè)語句或數(shù)據(jù)的地。段內(nèi)各個(gè)語句或數(shù)

42、據(jù)的地址由段地址開始依次類推可確定。而用址由段地址開始依次類推可確定。而用ORG指令則指令則可以指定將指令或數(shù)據(jù)從某個(gè)地址開始存放??梢灾付▽⒅噶罨驍?shù)據(jù)從某個(gè)地址開始存放。例:用例:用ORG指定代碼段地址。指定代碼段地址。 CODE SEGMENT ORG 100H ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX CODE ENDS例:用例:用ORG改變數(shù)據(jù)段地址。改變數(shù)據(jù)段地址。 DATA SEGMENT ORG 100H A1 DB 10H,20H,30H ;A1偏移地址為偏移地址為100H ORG 200H A2 DW 3031H,3

43、233H ;A2的偏移地址的偏移地址200H DATA ENDS(2)EVEN格式:格式:EVEN功能:使下一語句的地址調(diào)整為偶地址??商岣叽鎯ζ鞴δ埽菏瓜乱徽Z句的地址調(diào)整為偶地址??商岣叽鎯ζ鞯拇嫒∷俣取5拇嫒∷俣?。例:例:DATA SEGMENT X1 DB 0DH EVEN X2 DW 100DUP(?)(?) DATA ENDS(3)$(匯編地址指針)(匯編地址指針)例:例:DATA SEGMENT BUF DB 12345ABCDE COUNT=$BUF ;COUNT=10 DATA ENDS例:例:DATA SEGMENT ORG 100H BUF DB ABCD ORG $+5

44、NUM DW 50 ;NUM的地址為的地址為0109H DATA ENDS7模塊定義與連接偽指令模塊定義與連接偽指令 在編寫規(guī)模比較大的匯編源程序時(shí),可以將整個(gè)程在編寫規(guī)模比較大的匯編源程序時(shí),可以將整個(gè)程序劃分成幾個(gè)獨(dú)立的源程序,稱之為模塊。然后將序劃分成幾個(gè)獨(dú)立的源程序,稱之為模塊。然后將各個(gè)獨(dú)立的模塊分別匯編,生成各自的目標(biāo)程序,各個(gè)獨(dú)立的模塊分別匯編,生成各自的目標(biāo)程序,最后將它們連接生成一個(gè)完整的可執(zhí)行程序。這種最后將它們連接生成一個(gè)完整的可執(zhí)行程序。這種方式稱為多模塊程序設(shè)計(jì)。方式稱為多模塊程序設(shè)計(jì)。(1)END格式:格式:END 標(biāo)號標(biāo)號功能:標(biāo)記匯編源程序結(jié)束。功能:標(biāo)記匯編源

45、程序結(jié)束。說明:放在源程序的最后一行,表示匯編程序到此結(jié)束。說明:放在源程序的最后一行,表示匯編程序到此結(jié)束。如果缺省,則會出問題。另外,在多模塊程序設(shè)計(jì)如果缺省,則會出問題。另外,在多模塊程序設(shè)計(jì)中,只有主模塊才需要加標(biāo)號,而其他模塊則不能中,只有主模塊才需要加標(biāo)號,而其他模塊則不能加標(biāo)號。標(biāo)號是程序中第一條可執(zhí)行指令的標(biāo)號,加標(biāo)號。標(biāo)號是程序中第一條可執(zhí)行指令的標(biāo)號,常用常用BEGIN、START表示,可缺省。如缺省,則用表示,可缺省。如缺省,則用過程名過程名(2)PUBLIC格式:格式:PUBLIC 符號符號1,符號,符號2,功能:指明本模塊中的某些符號是公共的,其它模塊可功能:指明本模

46、塊中的某些符號是公共的,其它模塊可以使用。通常指明變量、標(biāo)號、過程名等。以使用。通常指明變量、標(biāo)號、過程名等。(3)EXTERN 格式:格式:EXTERN 名字:類型名字:類型, 功能:指明本模塊中所用的某些符號是外部的,其它功能:指明本模塊中所用的某些符號是外部的,其它模塊中已用模塊中已用PUBLIC對其說明。對其說明。第四節(jié)第四節(jié) DOS系統(tǒng)功能調(diào)用和系統(tǒng)功能調(diào)用和BIOS中斷調(diào)用中斷調(diào)用1常用常用DOS系統(tǒng)功能調(diào)用系統(tǒng)功能調(diào)用DOS系統(tǒng)功能調(diào)用即系統(tǒng)功能調(diào)用即DOS為用戶提供的一組例行子程為用戶提供的一組例行子程序,其調(diào)用和返回不是用序,其調(diào)用和返回不是用CALL和和RET,而是用,而是

47、用INT n和和IRET。這些子程序可分為以下幾個(gè)方面:。這些子程序可分為以下幾個(gè)方面:磁盤的讀寫及控制管理。磁盤的讀寫及控制管理。內(nèi)存管理內(nèi)存管理基本輸入基本輸入/輸出管理(如鍵盤、打印機(jī)、顯示器)輸出管理(如鍵盤、打印機(jī)、顯示器)其他管理(如日期、時(shí)間)其他管理(如日期、時(shí)間)所有這些子程序按順序編號(調(diào)用號),分別為所有這些子程序按順序編號(調(diào)用號),分別為075H。調(diào)用方法:子程序入口參數(shù)送相應(yīng)寄存器調(diào)用方法:子程序入口參數(shù)送相應(yīng)寄存器 調(diào)用功能號送調(diào)用功能號送AH INT 21H(1)1號功能調(diào)用(鍵盤輸入并顯示)號功能調(diào)用(鍵盤輸入并顯示) MOV AH,1 INT 21H 功能:

48、掃描鍵盤,等待輸入,若有鍵盤按下,則將功能:掃描鍵盤,等待輸入,若有鍵盤按下,則將鍵值讀入并判斷是否為鍵值讀入并判斷是否為Ctrl+Break鍵,若是,退出;鍵,若是,退出;若不是,則將鍵值(字符的若不是,則將鍵值(字符的ASCII碼)送碼)送AL,同時(shí),同時(shí)在在CRT上顯示該字符。上顯示該字符。(2)6號功能調(diào)用號功能調(diào)用 MOV DL,0FFH MOV AH,6 INT 21H 功能:從鍵盤上接收一個(gè)字符,并送至功能:從鍵盤上接收一個(gè)字符,并送至AL,且,且ZF=0。若無鍵按下,則若無鍵按下,則ZF=1。(3)11號功能調(diào)用號功能調(diào)用 MOV AH,0BH INT 21H 功能:掃描鍵盤,

49、無鍵按下,功能:掃描鍵盤,無鍵按下,AL=0;有鍵按下,;有鍵按下,AL=FFH。(4)2號功能調(diào)用(顯示一個(gè)字符)號功能調(diào)用(顯示一個(gè)字符) MOV AH,2 MOV DL,待顯字符,待顯字符ASCII碼碼 INT 21H (5)9號功能調(diào)用(字符串顯示)號功能調(diào)用(字符串顯示) MOV DX,待顯示字符串首地址,待顯示字符串首地址 MOV AH,9 INT 21H 功能:將以功能:將以$為結(jié)束標(biāo)志的字符串在屏幕上顯示。為結(jié)束標(biāo)志的字符串在屏幕上顯示。說明:說明:(1)執(zhí)行前要在)執(zhí)行前要在DS數(shù)據(jù)段定義一個(gè)字符串,該字符串?dāng)?shù)據(jù)段定義一個(gè)字符串,該字符串必須在必須在$結(jié)尾。結(jié)尾。(2)若字符

50、串無)若字符串無$結(jié)尾,則在其尾部加一結(jié)尾,則在其尾部加一$;若;若字符串中間有字符串中間有$,則只能采用,則只能采用2號功能調(diào)用逐個(gè)字符號功能調(diào)用逐個(gè)字符輸出。輸出。 (6)10號功能調(diào)用(字符串輸入)號功能調(diào)用(字符串輸入) MOV AH,10 MOV DX,待存數(shù)據(jù)區(qū)首地址,待存數(shù)據(jù)區(qū)首地址 INT 21H 功能:從鍵盤上接收字符串送到內(nèi)存數(shù)據(jù)中。功能:從鍵盤上接收字符串送到內(nèi)存數(shù)據(jù)中。 注意:數(shù)據(jù)區(qū)的定義形式:注意:數(shù)據(jù)區(qū)的定義形式: BUF DB 50 ;數(shù)據(jù)區(qū)長度;數(shù)據(jù)區(qū)長度 DB ? ;實(shí)際輸入字符的個(gè)數(shù);實(shí)際輸入字符的個(gè)數(shù) DB 50 DUP(?)(?) ;存放輸入的字符;存放

51、輸入的字符 如果輸入的字符數(shù)大于數(shù)據(jù)區(qū)所定義的字符個(gè)數(shù),如果輸入的字符數(shù)大于數(shù)據(jù)區(qū)所定義的字符個(gè)數(shù),就會發(fā)出就會發(fā)出“嘟嘟嘟嘟”聲。聲。(7)4CH號功能調(diào)用(返回操作系統(tǒng))號功能調(diào)用(返回操作系統(tǒng)) MOV AH,4CH INT 21H 功能:結(jié)束當(dāng)前正在執(zhí)行的程序,返回操作系統(tǒng),功能:結(jié)束當(dāng)前正在執(zhí)行的程序,返回操作系統(tǒng),屏幕顯示操作系統(tǒng)提示符。屏幕顯示操作系統(tǒng)提示符。2BIOS中斷調(diào)用中斷調(diào)用 駐留在駐留在ROM中的中的BIOS提供了系統(tǒng)加電自檢、引導(dǎo)提供了系統(tǒng)加電自檢、引導(dǎo)裝入裝入I/O設(shè)備的處理程序及接口控制等功能模塊來處理設(shè)備的處理程序及接口控制等功能模塊來處理所有的系統(tǒng)中斷。與所

52、有的系統(tǒng)中斷。與DOS系統(tǒng)功能調(diào)用類似,用戶可系統(tǒng)功能調(diào)用類似,用戶可以直接用指令設(shè)置參數(shù),然后中斷調(diào)用以直接用指令設(shè)置參數(shù),然后中斷調(diào)用BIOS中的程序。中的程序。 下面介紹幾條常用的中斷調(diào)用。下面介紹幾條常用的中斷調(diào)用。(1)鍵盤中斷調(diào)用()鍵盤中斷調(diào)用(INT 16H)軟中斷軟中斷INT 16H有多個(gè)功能,其中常用的是有多個(gè)功能,其中常用的是0、1、2號號功能功能0號:號:MOV AH,0 INT 16H功能:從鍵盤讀字符,并將其功能:從鍵盤讀字符,并將其ASCII碼送碼送AL。掃描碼。掃描碼送送AH。與。與DOS的的1、8號功能類似。號功能類似。1號:號:MOV AH,1 INT 16

53、H功能:判斷是否有鍵按下。有鍵按下,功能:判斷是否有鍵按下。有鍵按下,ZF=0,且,且AL,AH同上。無鍵按下,同上。無鍵按下,ZF=1。與。與DOS的的6號、號、0B號功能號功能類似。類似。例:按任意鍵,程序退出執(zhí)行。例:按任意鍵,程序退出執(zhí)行。DOS功能調(diào)用(功能調(diào)用(11號功能):號功能): MOV AH,0BH INT 21H CMP AL,0FFH JZ STOP ;有鍵按下,;有鍵按下,AL=0FFH STOP:MOV AH,4CH INT 21HDOS功能調(diào)用(功能調(diào)用(6號功能):號功能): MOV AH,06H MOV DL,0FFH INT 21H JNZ STOP ;有鍵

54、按下,;有鍵按下,ZF=0 STOP:MOV AH,4CH INT 21HBIOS中斷調(diào)用(中斷調(diào)用( INT 16H):): MOV AH,1 INT 16H JNZ STOP ;有鍵按下,;有鍵按下,ZF=0 STOP:MOV AH,4CH INT 21H(2)顯示器中斷調(diào)用()顯示器中斷調(diào)用(INT 10H) INT 10H的功能調(diào)用可以進(jìn)行屏幕設(shè)置。共有的功能調(diào)用可以進(jìn)行屏幕設(shè)置。共有16種種功能號,其中的功能號,其中的0E號功能與號功能與DOS的的2號功能類似。號功能類似。例:在當(dāng)前光標(biāo)位置顯示人處字符例:在當(dāng)前光標(biāo)位置顯示人處字符“7”,并使光標(biāo)進(jìn),并使光標(biāo)進(jìn)1。 MOV AH,0

55、EH MOV AL,37H INT 10H DOS調(diào)用可實(shí)現(xiàn)相同的功能:調(diào)用可實(shí)現(xiàn)相同的功能: MOV AH,2 MOV DL,37H INT 21H(3)時(shí)間設(shè)置和讀取()時(shí)間設(shè)置和讀?。↖NT 1AH) INT 1AH可以實(shí)現(xiàn)對時(shí)間的設(shè)置和讀取。調(diào)用此功可以實(shí)現(xiàn)對時(shí)間的設(shè)置和讀取。調(diào)用此功能時(shí),能時(shí),AH存放功能號,如下表所示:存放功能號,如下表所示:AH 功能入口參數(shù)出口參數(shù)2讀時(shí)鐘CH:CL=時(shí):分DH:DL=秒:1/100秒(BCD)6置報(bào)警時(shí)間CH:CL=時(shí):分DH:DL=秒:1/100秒(BCD)7清除報(bào)警原理:時(shí)間計(jì)數(shù)器每原理:時(shí)間計(jì)數(shù)器每55ms自動(dòng)加自動(dòng)加1,所以將,所以將

56、CX和和DX中中數(shù)除以數(shù)除以65520得到小時(shí)數(shù),余數(shù)除以得到小時(shí)數(shù),余數(shù)除以1092得分?jǐn)?shù),余數(shù)得分?jǐn)?shù),余數(shù)除以除以182得秒數(shù)。得秒數(shù)。應(yīng)用舉例:利作中斷調(diào)作產(chǎn)生應(yīng)用舉例:利作中斷調(diào)作產(chǎn)生5秒延時(shí)(秒延時(shí)(P206) DELAY5S PROC LLP:MOV AH,0 INT 1AH CMP DX,0500H JNZ LLP RET DELAY5S ENDP3、DOS與與BIOS調(diào)用舉例調(diào)用舉例例:編寫程序,將鍵入的例:編寫程序,將鍵入的4位十進(jìn)制數(shù)以壓縮的位十進(jìn)制數(shù)以壓縮的BCD碼碼形式存入字變量形式存入字變量SW中。中。為了接收鍵入的為了接收鍵入的4位十進(jìn)制數(shù),需定義一變量數(shù)據(jù)區(qū),位十

57、進(jìn)制數(shù),需定義一變量數(shù)據(jù)區(qū),定義形式為:定義形式為:BUF DB 5,0,5 DUP(?)(?) ;為回車符留一字節(jié);為回車符留一字節(jié)單元。單元。程序如下:程序如下: DATA SEGMENT MES DB PLEASE INPUT 4 NUMBERS DB 0DH,0AH,$ BUF DB 5,0,5 DUP(?)(?) SW DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX MOV DX,OFFSET MES MOV AH,9 INT 21H LEA DX,BUF MOV AH,10

58、INT 21H ;等待從鍵盤上接收數(shù)字;等待從鍵盤上接收數(shù)字 MOV AX,WORD PTR BUF+4 AND AX,0F0FH ;轉(zhuǎn)化為非壓縮;轉(zhuǎn)化為非壓縮BCD數(shù)數(shù) MOV CL,4 SHL AL,CL OR AL,AH ;十位與個(gè)位數(shù)合并在十位與個(gè)位數(shù)合并在AL中。中。 MOV BYTE PTR SW,AL MOV AX,WORD PTR BUF+2 AND AX,0F0FH SHL AL,CL OR AL,AH MOV BYTE PTR SW+1,AL MOV AH,4CH INT 21HCODE ENDS END START例:設(shè)計(jì)程序,使計(jì)算機(jī)不停地響鈴(其例:設(shè)計(jì)程序,使計(jì)算機(jī)

59、不停地響鈴(其ASCII碼為碼為07H),按任意鍵停止。),按任意鍵停止。CODE SEGMENT ASSUME CS:CODESTART:MOV DL,07H MOV AH,2 INT 21H MOV AH,0BH INT 21H CMP AL,0FFH JNZ START ;有鍵按下,;有鍵按下,AL=0FFH MOV AH,4CH INT 21H CODE ENDS END START思考題:思考題: 試設(shè)計(jì)一程序,使計(jì)算機(jī)屏幕上每秒鐘顯示一行字試設(shè)計(jì)一程序,使計(jì)算機(jī)屏幕上每秒鐘顯示一行字符符“Good Morning!”,按任意鍵結(jié)束。,按任意鍵結(jié)束。第五節(jié)第五節(jié) 匯編語言程序設(shè)計(jì)的基

60、本方法匯編語言程序設(shè)計(jì)的基本方法1順序結(jié)構(gòu)程序設(shè)計(jì)順序結(jié)構(gòu)程序設(shè)計(jì)例例1:求兩個(gè)數(shù)的平均值,這兩個(gè)數(shù)分別在:求兩個(gè)數(shù)的平均值,這兩個(gè)數(shù)分別在X單元和單元和Y單單元中,而平均值放在元中,而平均值放在Z單元中。假定均為字節(jié)數(shù),程序單元中。假定均為字節(jié)數(shù),程序如下:如下:DATA SEGMENT X DB 95 Y DB 87 Z DB ?DATA ENDSCODE SEGMENTMAIN PROC FAR ASSUME CS:CODE,DS:DATA PUSH DS XOR AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV AL,X ADD AL,Y ;兩數(shù)相加,和送

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論