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

下載本文檔

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

文檔簡介

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

2、些接近人們書寫習(xí)慣的英語和數(shù)學(xué)表達式形式的句子編寫程序。這種語言不面向機器,學(xué)表達式形式的句子編寫程序。這種語言不面向機器,而是面向過程、面向?qū)ο?。而是面向過程、面向?qū)ο蟆?匯編語言程序的結(jié)構(gòu)形式匯編語言程序的結(jié)構(gòu)形式(1)完全段結(jié)構(gòu)程序)完全段結(jié)構(gòu)程序 例:在屏幕上顯示字符串例:在屏幕上顯示字符串“Good Morning!”標準結(jié)構(gòu)標準結(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 保護保護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非標準結(jié)構(gòu)非標準結(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ū)δ繕顺绦颍ㄕf明:用連接程序?qū)δ繕顺绦颍∣BJ文件)進行連接和文件)進行連接和定位時,操作系統(tǒng)為每個程序建立了一個程序段前綴定位時,操作系統(tǒng)為每個程序建立了一個程序段前綴PSP,其長度為,其長度為256字節(jié)。主要用于存放所要執(zhí)行程序字節(jié)。主要用于存放所要執(zhí)行程序的有關(guān)信息,同時也提供了程序與操作系統(tǒng)的接口。在的有關(guān)信息,同時也提供了程序與操作系統(tǒng)的接口。在PSP的開始處(偏移地址的開始處(偏移地址0000H)安排了一條指令)安排了一條指令I(lǐng)NT 20H。執(zhí)行該指令

5、即可返回到。執(zhí)行該指令即可返回到DOS。 DOS在建立了程序段前綴在建立了程序段前綴PSP后,就將要執(zhí)行的程后,就將要執(zhí)行的程序從磁盤裝入內(nèi)存。在定位時,代碼段在序從磁盤裝入內(nèi)存。在定位時,代碼段在PSP之后,然之后,然后是數(shù)據(jù)段、堆棧段。后是數(shù)據(jù)段、堆棧段。 在程序開始時,在程序開始時,DS指向指向PSP所在段。所在段。ES也不指向也不指向用戶的附加段,因此,在程序開始處,用指令將用戶的附加段,因此,在程序開始處,用指令將DS、ES、SS等指向用戶所設(shè)計的段。(其中等指向用戶所設(shè)計的段。(其中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也可以用標準方式返回也可以用標準方式返回DOS。3、匯編語言的數(shù)據(jù)類型、匯編語言的數(shù)據(jù)類型(1)指令性語句)指令性語句 是執(zhí)行語句,以機器指令作基礎(chǔ),與機器指令相對是執(zhí)行語句,以機器指令作基礎(chǔ),與機器指令相對應(yīng)。匯編程序可將它翻譯成目標代碼(機器指令)。應(yīng)。匯編程序可將它翻譯成目標代碼

7、(機器指令)。CPU可以執(zhí)行。可以執(zhí)行。指令性語句只能出現(xiàn)在代碼段中。指令性語句只能出現(xiàn)在代碼段中。語句格式語句格式: 標號:指令助記符標號:指令助記符 操作數(shù),操作數(shù)操作數(shù),操作數(shù) ;注釋;注釋(2)偽指令語句)偽指令語句 是說明性語句。它沒有對應(yīng)的目標代碼。匯編程序是說明性語句。它沒有對應(yīng)的目標代碼。匯編程序匯編源程序時對偽指令語句進行處理。它完成對數(shù)據(jù)的匯編源程序時對偽指令語句進行處理。它完成對數(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等等一些特殊的運算符與操作符:一些特殊的運算符與操作符:LT、EQ、OR、HIGH、SEG、OFFSET、PTR等等2語句格式語句格式一般形式:一般形式: 標識符標識符 助記符助記符 操作數(shù)操作數(shù)1,操作數(shù)理,操作數(shù)理2 :注釋:注釋例:例: START:MOV AX,DATA X DB 1,2(1)助記符)助記符助記符是語句的主體,對指令語句它是機器指令的助記助記符是語句的主體,對指令語句它是機器指令的助記符(符(指令的符號指令的符號),對于偽指令它是偽指令符。),對于偽指令它是偽指令符。(2)標識符)標識符 標號:用于指令語句

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

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

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

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

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

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

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

17、可以是一個存儲器的地址,在果可以是一個常數(shù)字,也可以是一個存儲器的地址,在此地址中存放了數(shù)據(jù)(稱為變量)或指令(稱為標號)。此地址中存放了數(shù)據(jù)(稱為變量)或指令(稱為標號)。MASM中使用了中使用了6類運算符類運算符(P129表表4-1)算術(shù)運算符算術(shù)運算符邏輯運算符邏輯運算符關(guān)系運算符關(guān)系運算符數(shù)值返回運算符數(shù)值返回運算符修改屬性運算符修改屬性運算符其它運算符其它運算符(1)算術(shù)運算符)算術(shù)運算符主要的算術(shù)運算有:主要的算術(shù)運算有:+、*、/、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匯編時,計算表達式形成指令為:匯編時,計算表達式形成指令為: DA EQU 300 MOV AX,220 MOV BX,0 MOV CX,3 MOV DH,19H(2)邏輯運算符)邏輯運算符邏輯運算有邏輯運算有AND(與)、(與)、OR(或)、(或)、XOR(異或)、(異或)、NOT(非)(非)4種。邏輯運算符與邏輯運算指令一樣,也種。邏輯運算符與邏輯運算指令一樣,也是按位運算,它只能對常數(shù)進行運算,得到的結(jié)果也是是按位運算,它只能對常數(shù)進行運算,得到的結(jié)果也是常數(shù)。常數(shù)。邏輯運算符作為操作數(shù),處理是在匯編期間完成的

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

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

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

22、其值與變量或標號的類型關(guān)系為:標號的類型關(guān)系為: 變量或標號變量或標號返回值返回值變量或標號變量或標號返回值返回值BYTE1QWORD8WORD2TWORD10DWORD3NEAR-1(0FFH)FWORD4FAR-2(0FEH) LENGTH:取變量相同類型的個數(shù)。:取變量相同類型的個數(shù)。依據(jù)數(shù)據(jù)定義偽指令后第一個表達式的形式而定。依據(jù)數(shù)據(jù)定義偽指令后第一個表達式的形式而定。為為N DUP(?)時,取(?)時,取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)修改屬性運算符)修改屬性運算符修改屬性運算符也叫綜合運算符、合成運算符、屬性定修改屬性運算符也叫綜合運算符、合成運算符、屬性定義符等。義符等。 段操作符:段操作符:用來

24、臨時給一個存儲器操作數(shù)指定一個段屬性(段超越)用來臨時給一個存儲器操作數(shù)指定一個段屬性(段超越)例:例:MOV AX,ES:BXPTR:用來臨時指定或修改存儲器操作數(shù)的類型。:用來臨時指定或修改存儲器操作數(shù)的類型。PTR本身不分配存儲單元,僅給已分配的存儲單元賦予本身不分配存儲單元,僅給已分配的存儲單元賦予新的屬性。以保證運算時操作數(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,所以匯編時,所以匯編時認為錯誤。一般用認為錯誤。一般用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)向的目標地址與本指令之間的距離在指出轉(zhuǎn)向的目標地址與本指令之間的距離在128+127之間,即限制在短轉(zhuǎn)移范圍內(nèi)。短標號可以用在之間,即限制在短轉(zhuǎn)移范圍內(nèi)。短標號可以用在條件轉(zhuǎn)移指令中,使用短標號的指令比使用近標號的指條件轉(zhuǎn)移指令中,使用短標號

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

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

29、先級越高)各種運算符的優(yōu)先級如下表:(數(shù)字越小,優(yōu)先級越高) 運算符優(yōu)先級次序表運算符優(yōu)先級次序表優(yōu)先級運算符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ù)) ;注釋;注釋用來定義一個變量的類型并分配存儲單元??少x初值也用來定義一個變量的類型并分配存儲單元??少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ù)、表達式、字符串、?以及例:用常數(shù)、表達式、字符串、?以及DU

31、P定義變量定義變量 DA1 DB 10H,52H DA2 DW 1122H,34H DA3 DD 5*20H FIRST DB ab SECOND DW ab ;相當于相當于DW 6162H,此時只,此時只能有兩個字符。能有兩個字符。 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可以將變量或標號的偏移地址存可以將變量或標號的偏移地址存入存儲器,當用入存儲器,當用DD來定義時,原變量或標號的偏移來定義時,原變量或標號的偏移地址存入低位字中,原變量或標號的段地址存入高地址存入低位字中,原變量或標號的段地址存入高位字中。位字中。例:例: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 表達式表達式例:例:CR EQU 0DH PORT EQU 218H C1 EQU ADD ;加法指令賦給符號名;加法指令賦給符號名C1 PURGE C1 ;C1不再代替不再代替ADD。(2)=(等號)(等號)格式:

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

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

36、2)組合方式有)組合方式有NONE、PUBLIC、COMMON、AT 表達式、表達式、STACK和和MEMORY等等6種,表明本段同其種,表明本段同其它段的組合關(guān)系。它段的組合關(guān)系。(3)類別明典型的有)類別明典型的有DATA、CODE和和STACK等等3種,種,連接時類別名相同的段存放在連續(xù)的存儲區(qū)中。連接時類別名相同的段存放在連續(xù)的存儲區(qū)中。(2)ASSUME8086中允許設(shè)置多個邏輯段,但只允許中允許設(shè)置多個邏輯段,但只允許4個邏輯段同時個邏輯段同時有效,有效,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:用于標記各簡化段,順序由系統(tǒng)安排。用于標記各簡化段,順序由系統(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ù)段均為近程,不與高級語言連接時一般為不與高級語言連接時一般為SMALL模式。模式。(3)STACK:定義一個堆棧段,并形成定義一個堆棧段,并形成SP、SS的值。的值。(4)DATA:定義一個數(shù)據(jù)段。:定義一個數(shù)據(jù)段。(5)CODE:定義代碼段。:定義代碼段。5過程定義偽指令過程定義偽指令(1)格式:過程名)格式:過程名 PROC NEAR/FAR RET N

40、 過程名過程名 ENDP功能:定義一個過程,其它程序可以用功能:定義一個過程,其它程序可以用CALL指令調(diào)用指令調(diào)用它。它。過程名過程名:是給所定義的過程取的名字。它是主程序調(diào)用:是給所定義的過程取的名字。它是主程序調(diào)用的目的操作數(shù),即子程序的入口地址。它像標號一的目的操作數(shù),即子程序的入口地址。它像標號一樣具有三種屬性:段屬性、偏移地址屬性、距離屬樣具有三種屬性:段屬性、偏移地址屬性、距離屬性性NEAR/FAR。 RET N:返回指令,其中:返回指令,其中N表示返回時所丟棄的字節(jié)表示返回時所丟棄的字節(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 表達式表達式功能:給匯編程序設(shè)置位置指針,指定下面語句的起始功能:給匯編程序設(shè)置位置指針,指定下面語句的起始偏移地址。偏移地址。說明:一般情況下,段定義語句(說明:一般情況下,段定義語句(SEGMENT)指出了)指出了段的起點,偏移地址為段的起點,偏移地址為0。段內(nèi)各個語句或數(shù)據(jù)的地。段內(nèi)各個語句或數(shù)

42、據(jù)的地址由段地址開始依次類推可確定。而用址由段地址開始依次類推可確定。而用ORG指令則指令則可以指定將指令或數(shù)據(jù)從某個地址開始存放??梢灾付▽⒅噶罨驍?shù)據(jù)從某個地址開始存放。例:用例:用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)整為偶地址。可提高存儲器功能:使下一語句的地址調(diào)整為偶地址??商岣叽鎯ζ鞯拇嫒∷俣?。的存取速度。例:例: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ī)模比較大的匯編源程序時,可以將整個程在編寫規(guī)模比較大的匯編源程序時,可以將整個程序劃分成幾個獨立的源程序,稱之為模塊。然后將序劃分成幾個獨立的源程序,稱之為模塊。然后將各個獨立的模塊分別匯編,生成各自的目標程序,各個獨立的模塊分別匯編,生成各自的目標程序,最后將它們連接生成一個完整的可執(zhí)行程序。這種最后將它們連接生成一個完整的可執(zhí)行程序。這種方式稱為多模塊程序設(shè)計。方式稱為多模塊程序設(shè)計。(1)END格式:格式:END 標號標號功能:標記匯編源程序結(jié)束。功能:標記匯編源

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

46、塊中的某些符號是公共的,其它模塊可以使用。通常指明變量、標號、過程名等。以使用。通常指明變量、標號、過程名等。(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。這些子程序可分為以下幾個方面:。這些子程序可分為以下幾個方面:磁盤的讀寫及控制管理。磁盤的讀寫及控制管理。內(nèi)存管理內(nèi)存管理基本輸入基本輸入/輸出管理(如鍵盤、打印機、顯示器)輸出管理(如鍵盤、打印機、顯示器)其他管理(如日期、時間)其他管理(如日期、時間)所有這些子程序按順序編號(調(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,同時,同時在在CRT上顯示該字符。上顯示該字符。(2)6號功能調(diào)用號功能調(diào)用 MOV DL,0FFH MOV AH,6 INT 21H 功能:從鍵盤上接收一個字符,并送至功能:從鍵盤上接收一個字符,并送至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)用(顯示一個字符)號功能調(diào)用(顯示一個字符) MOV AH,2 MOV DL,待顯字符,待顯字符ASCII碼碼 INT 21H (5)9號功能調(diào)用(字符串顯示)號功能調(diào)用(字符串顯示) MOV DX,待顯示字符串首地址,待顯示字符串首地址 MOV AH,9 INT 21H 功能:將以功能:將以$為結(jié)束標志的字符串在屏幕上顯示。為結(jié)束標志的字符串在屏幕上顯示。說明:說明:(1)執(zhí)行前要在)執(zhí)行前要在DS數(shù)據(jù)段定義一個字符串,該字符串數(shù)據(jù)段定義一個字符串,該字符串必須在必須在$結(jié)尾。結(jié)尾。(2)若字符

50、串無)若字符串無$結(jié)尾,則在其尾部加一結(jié)尾,則在其尾部加一$;若;若字符串中間有字符串中間有$,則只能采用,則只能采用2號功能調(diào)用逐個字符號功能調(diào)用逐個字符輸出。輸出。 (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ù);實際輸入字符的個數(shù) DB 50 DUP(?)(?) ;存放輸入的字符;存放

51、輸入的字符 如果輸入的字符數(shù)大于數(shù)據(jù)區(qū)所定義的字符個數(shù),如果輸入的字符數(shù)大于數(shù)據(jù)區(qū)所定義的字符個數(shù),就會發(fā)出就會發(fā)出“嘟嘟嘟嘟”聲。聲。(7)4CH號功能調(diào)用(返回操作系統(tǒng))號功能調(diào)用(返回操作系統(tǒng)) MOV AH,4CH INT 21H 功能:結(jié)束當前正在執(zhí)行的程序,返回操作系統(tǒng),功能:結(jié)束當前正在執(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有多個功能,其中常用的是有多個功能,其中常用的是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)用可以進行屏幕設(shè)置。共有的功能調(diào)用可以進行屏幕設(shè)置。共有16種種功能號,其中的功能號,其中的0E號功能與號功能與DOS的的2號功能類似。號功能類似。例:在當前光標位置顯示人處字符例:在當前光標位置顯示人處字符“7”,并使光標進,并使光標進1。 MOV AH,0

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

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

57、進制數(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 ;十位與個位數(shù)合并在十位與個位數(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è)計程序,使計算機不停地響鈴(其例:設(shè)計程序,使計算機

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è)計一程序,使計算機屏幕上每秒鐘顯示一行字試設(shè)計一程序,使計算機屏幕上每秒鐘顯示一行字符符“Good Morning!”,按任意鍵結(jié)束。,按任意鍵結(jié)束。第五節(jié)第五節(jié) 匯編語言程序設(shè)計的基

60、本方法匯編語言程序設(shè)計的基本方法1順序結(jié)構(gòu)程序設(shè)計順序結(jié)構(gòu)程序設(shè)計例例1:求兩個數(shù)的平均值,這兩個數(shù)分別在:求兩個數(shù)的平均值,這兩個數(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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論