《匯編語言程序設計》-電子教案第二章_第1頁
《匯編語言程序設計》-電子教案第二章_第2頁
《匯編語言程序設計》-電子教案第二章_第3頁
《匯編語言程序設計》-電子教案第二章_第4頁
《匯編語言程序設計》-電子教案第二章_第5頁
已閱讀5頁,還剩109頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

《匯編語言程序設計》-電子教案第二章第二章 程序設計基礎本章學習目標通過本章學習,讀者應該掌握以下內(nèi)容: 匯編語言源程序結(jié)構(gòu)及基本概念 各種尋址方式 常用偽指令的格式、功能 常用I/O功能調(diào)用的用法2.1 匯編語言源程序結(jié)構(gòu)

2.1.1匯編語言源程序結(jié)構(gòu)及分析 初學程序設計最有效的方法是閱讀源程序并上機調(diào)試。通過閱讀程序可以掌握程序的一般結(jié)構(gòu),學習實現(xiàn)程序功能的經(jīng)典算法。通過對程序進行上機調(diào)試,逐漸掌握指令的語法格式、功能,避免編寫源程序時出現(xiàn)常見的語法錯誤,同時訓練調(diào)試技巧。例2-1顯示信息“Howdoyoudo?”DATA SEGMENTSTR DB“Howdoyoudo?$” DATA ENDSSTACK SEGMENT STACK DB 200DUP(?)STACK ENDSCODE SEGMENT ASSUMEDS:DATA,SS:STACK,CS:CODESTART: MOV AX,DATA MOV DS,AX LEA DX,STR MOV AH,9 INT21H MOV AH,4CH INT 21HCODE ENDS END START例2-2將內(nèi)存緩沖區(qū)中以BUFA開始的一組字數(shù)據(jù)傳送到BUFB開始的內(nèi)存區(qū)。DATA SEGMENTBUFA DW367BH,2845H,0A78H,9DE3H,0F6BH,6532H COUNT EQU($-BUFA)/2BUFB DWCOUNTDUP(?DATA ENDSSTACK SEGMENTSTACK DB200DUP(?)STACK ENDSCODE SEGMENT ASSUMEDS:DATA,SS:STACK,CS:CODESTART: MOV AX,DATA MOV DS,AX LEA SI,BUFA LEA DI,BUFB MOV CX,COUNTLOP: MOV AX,[SI] MOV [DI],AX INC SI INC SI INC DI INC DI DEC CX JNZ LOP MOV AH,4CH INT 21HCODE ENDS END START2.1.2機器指令簡介

8086/8088指令系統(tǒng)提供的機器指令從功能上可分為7種類型: 數(shù)據(jù)傳送指令 算術(shù)運算指令 位運算指令 程序控制指令 串操作指令 處理器控制指令 輸入/輸出指令所有機器指令從格式上看,有3種指令格式: ①無操作數(shù)指令 格式: 助記符 例如: STC CLC CMC ②單操作數(shù)指令 格式:助記符操作數(shù) 例如: PUSH AX POP BX ③雙操作數(shù)指令 格式:助記符目的操作數(shù),源操作數(shù) 例如:MOV CX,DX2.1.3常量、變量、標號及表達式

1.常量 常量是指匯編語言源程序中以數(shù)值常數(shù)、字符串常數(shù)和符號常數(shù)的形式存在的量。 注意:當數(shù)值常量的值是十六進制形式,并且第一個字符是大寫字母A~F或小寫字母a~f時,需要在數(shù)值前面加一個0,如:0A64DH。例如:在下面的匯編源程序中,帶下畫線的量就是常量DATA SEGMENTSTR DB“Howdoyoudo?$” DATA ENDSSTACK SEGMENT STACK DB 200DUP(?)STACK ENDSCODE SEGMENT ASSUMEDS:DATA,SS:STACK,CS:CODESTART: MOV AX,DATA MOV DS,AX LEA DX,STR MOV AH,9 INT21H

MOV AH,4CH INT 21HCODE ENDS END START 例如:在下面的數(shù)據(jù)段中,帶下畫線的是一個符號常數(shù),它是使用EQU偽指令定義的。DATA SEGMENTBUFA DW 367BH,2845H,0A78H, 9DE3H,0F6BH,6532H COUNT EQU($-BUFA)/2 BUFB DW COUNTDUP(?) DATA ENDS 定義符號常數(shù)使用EQU偽指令、“=”偽指令。2.變量

變量是指數(shù)據(jù)存儲單元地址的符號表示,變量的值在程序運行過程中可以改變。(1)變量的定義定義變量使用偽指令DB、DW、DD、DQ、DT。DB用來定義字節(jié)變量,字節(jié)變量占1個存儲單元,可存儲一個字節(jié)數(shù)據(jù)。DW用來定義字變量,字變量占2個存儲單元,可存儲一個字數(shù)據(jù)。DD用來定義雙字變量,雙字變量占4個存儲單元,可存儲一個雙字數(shù)據(jù)。DQ用來定義四字類型變量,四字類型變量占8個存儲單元,可存儲8字節(jié)數(shù)據(jù)。DT用來定義十字節(jié)類型變量,十字節(jié)類型變量占10個存儲單元,可存儲10字節(jié)數(shù)據(jù)。例如:在數(shù)據(jù)段DATA中定義字節(jié)變量STR。DATA SEGMENTSTR DB“Howdoyoudo?$” DATA ENDS例如:在數(shù)據(jù)段DATA中定義了字變量BUFA和BUFB。DATA SEGMENTBUFA DW367BH,2845H,0A78H, 9DE3H,0F6BH,6532H COUNT EQU($-BUFA)/2BUFB DWCOUNTDUP(?)DATA ENDS(2)變量的屬性變量有三個屬性,即段屬性、偏移地址屬性、類型屬性。段屬性:指變量所在段的段地址。偏移地址屬性:指變量所定義的單元到變量所在段的開始位置之間的字節(jié)距離。類型屬性:由定義變量使用的偽指令確定。DB定義的變量的類型屬性為字節(jié)類型(BYTE),DW定義的變量的類型屬性為字類型(WORD),DD定義的變量的類型屬性為雙字類型(DWORD),DT定義的變量的類型屬性為四字類型,DQ定義的變量的類型屬性為十字節(jié)類型。3.標號

標號是指機器指令存儲單元地址的符號表示。(1)標號的定義 LOP: MOV AX,[SI] MOV [DI],AX INC SI INC SI INC DI INC DI DEC CX JNZ LOP(2)標號的屬性 標號與變量一樣,也具有三個屬性,即段屬性、偏移地址屬性、類型屬性。段屬性:指標號所在段的段地址。偏移地址屬性:指標號所定義的單元到標號所在段的開始位置之間的字節(jié)距離。類型屬性:標號的類型屬性分為近類型NEAR和遠類型FAR。NEAR類型的標號稱為近標號,近標號只能用于段內(nèi)轉(zhuǎn)移。FAR類型的標號稱為遠標號,遠標號既可用于段內(nèi)轉(zhuǎn)移,也可用于段間轉(zhuǎn)移。4.表達式

由常量、變量、標號、運算符和括號組成的有意義的式子稱為表達式。其中運算符又可分為算術(shù)運算符、邏輯運算符、關系運算符及其他運算符。表達式的計算結(jié)果是一個常數(shù),該常數(shù)可以作為指令的操作數(shù)使用。(1)算術(shù)運算符表2-1算術(shù)運算符算術(shù)運算符功能+加-減*乘/除MOD取余例如:算術(shù)表達式的計算 219/7=31 86.4/2.6=33 219MOD7的結(jié)果為2(2)關系運算符表2-2關系運算符關系運算符功能EQ相等NE不相等LT小于GT大于LE小于等于GE大于等于例如:假設NUM的值為60H。則:

NUM GT 80H NUM EQ 60H ⑶邏輯運算符表2-3邏輯運算符邏輯運算符功能AND與OR或XOR異或NOT非SHR邏輯右移SHL邏輯左移例如:假設NUM的值為6BH

則: NUM AND87H ;表達式的值是03HNUM OR 87H ;表達式的值是0EFHNUMXOR87H ;表達式的值是0ECHNOT 87H ;表達式的值是78HNUMSHR2 ;表達式的值是1AHNUMSHL 2 ;表達式的值是0ACH⑷其他運算符屬性分離運算符(SEG、OFFSET、TYPE、LENGTH、SIZE)屬性定義運算符(PTR、THIS、SHORT、HIGH、LOW、“:”)以及()、[]、<>、·、MASK、WIDTH。①SEGSEG返回其后變量或標號所在段的段地址。②OFFSET OFFSET返回其后變量或標號的偏移地址。DATA SEGMENTBUFA DW367BH,2845H,0A78H, 9DE3H,0F6BH,6532H COUNT EQU($-BUFA)/2BUFB DWCOUNTDUP(?)DATA ENDSMOV AX,SEGBUFAMOVDS,AXMOVSI,OFFSETBUFAMOVDI,OFFSETBUFB③TYPE

返回其后變量或標號的類型。表2-4TYPE返回值類型返回值變量DB1DW2DD4DQ8標號NEAR-1或0FFHFAR-2或0FEH例如:在下面的數(shù)據(jù)段中。 DATA SEGMENT A DB87H,45H,92H B DW34D6H,0F67H C DD? DATA ENDS若在代碼段中有如下指令: MOVAH,TYPEA MOVAL,TYPEB MOVCH,TYPEC則將被匯編成: MOVAH,1 MOVAL,2 MOVCH,4④LENGTH例如:在下面的數(shù)據(jù)段中。 DATA SEGMENT BUFA DW367BH,2845H,0A78H, 9DE3H,0F6BH,6532H COUNTEQU($-BUFA)/2 BUFB DWCOUNTDUP(?) DATAENDS若在代碼段中有如下兩條指令 MOVCX,LENGTHBUFA MOVDX,LENGTHBUFB則將被匯編成: MOVCX,1 MOVDX,6⑤SIZE例如:在下面的數(shù)據(jù)段中。 DATA SEGMENT BUFA DW 367BH,2845H,0A78H,9DE3H, 0F6BH,6532H COUNTEQU($-BUFA)/2 BUFB DWCOUNTDUP(?) DATA ENDS若在代碼段中有如下兩條指令 MOVCX,SIZEBUFA MOVDX,SIZEBUFB則將被匯編成: MOVCX,2 MOVDX,12⑥PTR和THISPTR用來指明某個變量、標號或地址的類型屬性,使它臨時具有與原定義所不同的類型屬性,但保持他們原來的段屬性和偏移屬性不變。 PTR的使用格式為:類型

PTR

表達式

其中,表達式的類型可以是BYTE、WORD、DWORD、NEAR、FAR等。例如 DATA SEGMENT A DB87H,45H,92H B DW34D6H,0F67H C DD? DATA ENDS MOVAX,WORDPTRA MOVBL,BYTEPTRB例如:MOV[SI],30H

若將上述指令的操作數(shù)改為字操作數(shù),則指令為: MOVWORDPTR[SI],30H 或者: MOV[SI],WORDPTR30H若將上述指令的操作數(shù)改為字節(jié)操作數(shù),則指令為: MOVBYTEPTR[SI],30H 或者: MOV[SI],BYTEPTR30H⑦SHORTSHORT表示轉(zhuǎn)移指令的目標地址屬性是短轉(zhuǎn)移,即目標地址與本指令之間的字節(jié)距離在-128~+127之間。例如: JMPSHORTLOP2⑧HIGH和LOWHIGH選取表達式計算結(jié)果的高8位。LOW選取表達式計算結(jié)果的低8位。例如: HIGH0F25AH的值是0F2H LOW0F25AH的值是5AH⑨段前綴運算符:運算符“:”用于臨時給變量、標號或地址指定一個段屬性,且只在所出現(xiàn)的語句中有效,“:”并不改變地址的偏移地址屬性和類型屬性。 例如:MOV[SI],AX 指令的功能是將AX寄存器的值存放到數(shù)據(jù)段DS中偏移地址為(SI)的字單元中,假如需要將將AX寄存器的值存放到附加數(shù)據(jù)段ES中偏移地址為(SI)的字單元中,則要在[SI]的前面加段前綴ES。指令改為:MOVES:[SI],AX運算符的優(yōu)先級如表2-5所示。表2-5運算符的優(yōu)先級優(yōu)先級運算符1LENGTH、SIZE、WTDTH、MASK、·、()、<>、[]、2PTR、OFFSET、SEG、TYPE、THIS、段前綴運算符(:)3HIGH、LOW4*、/、MOD、SHL、SHR5+、-6EQ、NE、LT、LE、GT、GE7NOT8AND9OR、XOR10SHORT2.2 尋址方式 在指令中,指定操作數(shù)或操作數(shù)地址的方法稱為尋址方式。操作數(shù)的各種尋址方式是匯編語言進行程序設計的基礎,必須熟練掌握。2.2.1立即尋址立即尋址是指操作數(shù)作為指令的一部分而直接寫在指令中,這種操作數(shù)稱為立即數(shù),立即數(shù)緊跟在操作碼之后,與操作碼一起存放在代碼段中。如果立即數(shù)為16位,則立即數(shù)的存放規(guī)則是高字節(jié)存放在高地址,低字節(jié)存放在低地址。立即數(shù)尋址方式通常用于給寄存器或內(nèi)存單元賦初值。例如:閱讀以下各條指令,掌握立即尋址方式的用法。 MOVAL,80H MOVBX,0A683H MOVX,20H;X是字節(jié)變量 MOVY,3456H;Y是字變量實際上,在匯編語言程序設計中,還經(jīng)常使用符號常數(shù)作為立即操作數(shù)。比如,假設COUNT是在程序中定義的一個符號常數(shù),它代表一組數(shù)據(jù)的個數(shù),則將該組數(shù)據(jù)的個數(shù)送入CX寄存器的指令如下: MOVAX,COUNT 上述指令中的源操作數(shù)COUNT是立即尋址方式。匯編語言規(guī)定:在單操作數(shù)指令中,立即數(shù)不能作為指令中的操作數(shù)。在雙操作數(shù)指令中,立即數(shù)只能作為源操作數(shù),不能作為目的操作數(shù)。2.2.2寄存器尋址寄存器尋址是指指令所需要的操作數(shù)存放在某一個寄存器中。指令中使用的寄存器可以是8位寄存器,也可以是16位寄存器。8位寄存器有:AH、AL、BH、BL、CH、CL、DH和DL。16位寄存器有:AX、BX、CX、DX、SI、DI、SP、BP和段寄存器等。指令中指定的寄存器即可以做為源操作數(shù),也可以做為目的操作數(shù),或同時出現(xiàn)在源操作數(shù)和目的操作數(shù)的位置上。例如:閱讀以下各條指令的功能,掌握寄存器尋址方式的用法。 ①MOVBH,80h ②MOVAX,6AB4H ③MOVMAX,AX ;MAX是字變量 ④MOVCX,COUNT ;COUNT是符號常數(shù) ⑤MOVAX,BX ⑥MOVDL,BL說明:在雙操作數(shù)指令中,如果源操作數(shù)和目的操作數(shù)都是寄存器尋址,則它們必須同時是8位寄存器,或同時是16位寄存器。 例如,下面的指令是錯誤的。 MOVAX,BL2.2.3存儲器尋址 存儲器尋址是指指令所需要的操作數(shù)存放在內(nèi)存中,在指令中給出操作數(shù)地址的方式。存儲器尋址根據(jù)指令中給出的操作數(shù)地址的形式不同又分為直接尋址、寄存器間接尋址、變址尋址、基址加變址尋址、相對基址加變址尋址。⒈直接尋址直接尋址方式是指操作數(shù)的偏移地址在指令中直接給出。 例如:MOVAX,[200H] 假設數(shù)據(jù)段的段地址DS=1500H,(15200H)字單元的值是876AH,問執(zhí)行指令后,相關寄存器及存儲單元的值是什么? 答: EA=200H。 PA=(DS)*16+EA=15000H+200H=15200H。指令的執(zhí)行過程如圖2-2所示。

┇ 操作碼 代碼段 00H 02H ┇ 6AH 數(shù)據(jù)段 87H ┇

876AHAX圖2-2直接尋址示意圖15000200DS+152002.寄存器間接尋址寄存器間接尋址是指操作數(shù)的偏移地址在BX、BP、SI和DI四個寄存器之一。(1)當以BX、SI或DI寄存器進行間接尋址時,操作數(shù)的物理地址由DS中的段地址與BX、SI或DI中的偏移地址構(gòu)成。(2)當以BP寄存器進行間接尋址時,操作數(shù)物理地址由SS中的段地址與BP中的偏移地址構(gòu)成。例如:MOVAX,[BX]假設該指令執(zhí)行之前,DS=2000H,AX=54C8H,BX=0300H,存儲單元20300H的內(nèi)容是6A9BH。問執(zhí)行指令后,相關寄存器及存儲單元的值是什么?源操作數(shù)的地址為: EA=(BX)=0300H PA=(DS)*16+EA=2000H*16+0300H=20300H。指令的執(zhí)行過程如圖2-3所示。6A9BAX

┇ 操作碼 代碼段

┇ 9BH 數(shù)據(jù)段 6AH ┇

圖2-3間接尋址示意圖20000300DS+20300BX3.變址尋址變址尋址是指操作數(shù)的偏移地址是BX、BP、SI、DI之一的值和一個8位或16位偏移量之和。指令中給出的8位或16位偏移量用補碼表示。在計算操作數(shù)的偏移地址時,如果偏移量是8位,則進行符號擴展成16位。 (1)當以BX、SI或DI寄存器進行間接尋址時,操作數(shù)物理地址由DS中的段地址與BX、SI或DI中的偏移地址構(gòu)成 (2)當以BP寄存器進行間接尋址時,操作數(shù)物理地址由SS中的段地址與BP中的偏移地址構(gòu)成。例如:MOVBX,[SI+200H]假設該指令執(zhí)行之前,DS=2000H,BX=6874H,SI=1000H,存儲單元21200H的內(nèi)容是1B43H。問執(zhí)行指令后,相關寄存器及存儲單元的值是什么?指令中的源操作數(shù)是變址尋址,源操作數(shù)的地址為: EA=(SI)+200H=1000H+200H=1200H PA=(DS)*16+EA=2000H*16+1200H=21200H。指令的執(zhí)行過程如圖2-4所示。1B43AX

┇ 操作碼 代碼段 00H 02H ┇ 43H 數(shù)據(jù)段 1BH ┇

圖2-4變址尋址示意圖20001000DS+21200SI02004.基址加變址尋址基址加變址尋址是指操作數(shù)的偏移地址是一個基址寄存器BX、BP的值和一個變址寄存器SI、DI的值之和。 (1)當以BX作為基址寄存器時,操作數(shù)物理地址由DS中的段地址與SI或DI中的偏移地址構(gòu)成。 (2)當以BP作為基址寄存器時,操作數(shù)物理地址由SS中的段地址與SI或DI中的偏移地址構(gòu)成。例如:MOVAX,[BX+SI]假設該指令執(zhí)行之前,DS=2000H,AX=6528H,BX=0500H,SI=0300H,存儲單元20800H的內(nèi)容是7B46H。問執(zhí)行指令后,相關寄存器及存儲單元的值是什么? 由于指令中的源操作數(shù)是基址加變址尋址,故源操作數(shù)的地址為: EA=(BX)+(SI)=0500H+0300H=0800H PA=(DS)*16+EA=2000H*16+0800H=20800H。指令的執(zhí)行過程如圖2-5所示。7B46HAX

┇ 操作碼 代碼段

┇ 46H 數(shù)據(jù)段 7BH ┇

圖2-5基址加變址尋址示意圖030020000500DS+20800BXSI5.相對基址加變址尋址相對基址加變址尋址是指操作數(shù)的偏移地址是一個基址寄存器BX、BP的值加上一個變址寄存器SI、DI的值,再加上指令中的一個8位、16位偏移量之和。指令中給出的8位或16位偏移量用補碼表示。在計算有效地址時,如果偏移量是8位,則進行符號擴展成16位。 (1)當以BX作為基址寄存器時,操作數(shù)物理地址由DS中的段地址與SI或DI中的偏移地址構(gòu)成。 (2)當以BP作為基址寄存器時,操作數(shù)物理地址由SS中的段地址與SI或DI中的偏移地址構(gòu)成。例如:

MOVAX,[BX+SI+1000H]假設該指令執(zhí)行之前,DS=2000H,AX=6528H,BX=0500H,SI=0300H,存儲單元21800H的內(nèi)容是0B874H。問執(zhí)行指令后,相關寄存器及存儲單元的值是什么? 源操作數(shù)的地址為: EA=(BX)+(SI)+1000H=0500H+0300H+1000H=1800H PA=(DS)*16+EA=2000H*16+1800H=21800H。指令的執(zhí)行過程如圖2-6所示。B874HAX

┇ 操作碼 代碼段 00H 10H ┇ 74H 數(shù)據(jù)段 B8H ┇

圖2-6相對基址加變址尋址示意圖DS+21800030020000500BXSI1000例2-3將內(nèi)存緩沖區(qū)中以BUFA開始的一組字數(shù)據(jù)傳送到BUFB開始的內(nèi)存區(qū)。DATA SEGMENTBUFA DW 367BH,2845H,0A78H, 9DE3H,0F6BH,6532H COUNT EQU($-BUFA)/2BUFB DWCOUNTDUP(?)DATA ENDSSTACK SEGMENTSTACK DB 200DUP(?)STACK ENDSCODE SEGMENT ASSUMEDS:DATA,SS:STACK, CS:CODESTART: MOV AX,DATA MOV DS,AX MOV SI,0 MOV DI,0 MOV CX,COUNT LOP: MOV AX,BUFA[SI] MOV BUFB[DI],AX INC SI INC SI INC DI INC DI DEC CX JNZ LOP MOV AH,4CH INT 21H CODE ENDS END START關于尋址方式的幾點說明:

①對于單操作數(shù)指令,操作數(shù)可以使用除立即尋址方式之外的各種尋址方式。對于雙操作數(shù)指令,源操作數(shù)可以使用各種尋址方式,目的操作數(shù)可以使用除立即尋址方式之外的各種尋址方式,但源操作數(shù)和目的操作數(shù)不能同時采用存儲器尋址方式。②立即尋址和直接尋址在表現(xiàn)形式上的區(qū)別是是否帶有[],寄存器尋址和寄存器間接尋址在表現(xiàn)形式上的區(qū)別也是是否帶有[]。帶有[]的操作數(shù)屬于存儲器操作數(shù),[]內(nèi)的值表示存儲器操作數(shù)的偏移地址。③存儲器尋址方式有多種等價的書寫形式,如表2-6所示。表2-6尋址方式的等價寫法存儲器尋址方式等價的書寫格式變址尋址200H[SI][200H+SI]基址加變址尋址[BX+SI][BX]+[SI]相對基址加變址尋址1000H[BX+SI][BX+SI+1000H][BX]+[SI]+1000H④在存儲器尋址方式中,通常根據(jù)寄存器BX、BP、SI、DI使用隱含規(guī)定的段寄存器,其中使用BX、SI、DI寄存器時段寄存器是DS,使用BP寄存器時段寄存器是SS。實際上,操作數(shù)也可以存放在其他段中,比如:附加的數(shù)據(jù)段、堆棧段、代碼段。如果操作數(shù)存放在其他段,如附加的數(shù)據(jù)段ES,則計算物理地址時,段寄存器就不能使用DS,而應該使用ES,并通過使用段前綴的方式在指令中給出。 例如: MOVES:SUM,AX2.3 常用偽指令數(shù)據(jù)定義偽指令:DB、DW、DD、DQ、DT符號定義偽指令:EQU、=、LABEL段定義偽指令:SEGMENT…ENDS、ASSUME、END過程定義偽指令:PROC…ENDP宏定義偽指令:MACRO…ENDM等條件匯編偽指令:IF…ENDIF等模塊通信偽指令:PUBLIC、EXTRN結(jié)構(gòu)定義偽指令:STRUC…ENDS記錄定義偽指令:RECORD其他偽指令:NAME、TITLE、ORG、EVEN等偽指令語句的一般格式:名字偽指令助記符操作數(shù)1,操作數(shù)2,…;注釋2.3.1數(shù)據(jù)定義偽指令數(shù)據(jù)定義偽指令可以是:DB、DW、DD、DQ、DT。 DB:用來定義字節(jié)類型的變量,DB定義的每個操作數(shù)都占用1個字節(jié)單元。 DW:用來定義字類型的變量,DW定義的每個操作數(shù)都占用1個字單元。 DD:用來定義雙字類型的變量,DD定義的每個操作數(shù)都占用2個字單元。 DQ:用來定義八個字節(jié)類型的變量,DQ定義的每個操作數(shù)都占用8個字節(jié)單元。 DT:用來定義十個字節(jié)類型的變量,DT定義的每個操作數(shù)都占用10個字節(jié)單元。例如:定義數(shù)值常數(shù)和字符串常數(shù) DATA SEGMENT CON1 DB56H,89H,0A3H,0BCH CON2 DW 7865H,0B34DH CON3 DD 897632BDH CON4 DB ‘pleaseinput:’ DATAENDS2.3.2符號定義偽指令符號定義偽指令可用來給匯編語言程序中的常數(shù)、表達式、變量、標號、指令助記符或寄存器等重新定義一個名字,或者改變變量、標號的屬性,從而給程序設計帶來更大的靈活性。符號定義偽指令主要有EQU、=、LABEL。1.定義符號常數(shù)(1)EQU 格式:符號常數(shù)EQU表達式(2)= 格式:符號常數(shù)=表達式

說明:EQU定義的符號常數(shù)不能重復定義,而用“=”定義的符號常數(shù)可以重復定義。 例如: A EQU20 B EQUA*2+5 COUNTEQU($-BUFA)/2 例如: A=20 A=A*2+52.定義變量或標號(1)定義變量格式:變量LABEL變量類型說明:格式中的變量類型常用BYTE、WORD、DWORD,分別表示字節(jié)類型、字類型、雙字類型。(2)定義標號格式:標號LABEL標號類型說明:格式中的標號類型使用NEAR、FAR,分別表示近類型、遠類型。功能:給跟在LABEL偽指令后面的指令存儲單元定義一個標號,該標號的類型屬性在格式中指定,標號的段地址和偏移地址屬性與指令存儲單元的段地址和偏移地址相同。2.3.3段定義偽指令 為了實現(xiàn)程序的分段設計,宏匯編程序MASM提供了按段組織程序的一組偽指令,它們是SEGMENT…ENDS、ASSUME、END等。1.SEGMENT和ENDS、段定義偽指令的格式為:段名SEGMENT[定位屬性][組合屬性][‘類別’] ┇段名ENDS功能:定義程序中的一個邏輯段。2.ASSUME 格式:ASSUME

段寄存器:段名,… 功能:用來設定段寄存器與邏輯段之間的對應關系。程序中使用ASSUME后,宏匯編程序就將與段寄存器對應的邏輯段作為當前段。ASSUME一般出現(xiàn)在代碼段的開始。3.END偽指令格式:END[標號]功能:結(jié)束匯編。2.3.3其他常用的偽指令

1.NAME偽指令格式:NAME程序名功能:將程序名作為源程序目標模塊的名字。NAME偽指令通常放在源程序的開始,在輸出匯編語言源程序的列表文件中,在每一頁的開頭輸出該程序名。若源程序中省略NAME偽指令,則匯編程序?qū)⒃次募鳛槟繕四K的名字。2.TITLE偽指令 格式:TITLE標題名 功能:同NAME偽指令的功能。將標題名作為源程序目標模塊的名字。標題名最多60個字符,但匯編程序只將前6個字符作為目標模塊名。3.ORG偽指令 格式:ORG表達式 功能:將數(shù)據(jù)或指令代碼從ORG偽指令中指定的偏移地址處開始存放。表達式的值表示偏移地址,取值范圍為0~0FFFFH或0~65535。當程序中不使用ORG偽指令時,數(shù)據(jù)或指令代碼從段的開始位置連續(xù)存放。 DATA SEGMENT BUFA DW367BH,2845H,0A78H, 9DE3H,0F6BH,6532H COUNT EQU($-BUFA)/2 ORG 100H BUFB DWCOUNTDUP(?) DATA ENDS4.EVEN偽指令格式:EVEN功能:將數(shù)據(jù)或指令代碼從偶地址處開始存放。 DATA SEGMENT TAB1 DB48H,0A2H,98H,0BEH,87H EVEN TAB2 DW0B7639H,19F6H DATA ENDS2.4 I/O功能調(diào)用DOS操作系統(tǒng)和ROMBIOS分別提供了一系列功能調(diào)用,作為匯編語言處理I/O操作的接口,程序員可以很方便的通過調(diào)用這些功能實現(xiàn)字符及字符串的輸入輸出。2.4.1常用的DOS系統(tǒng)功能調(diào)用DOS系統(tǒng)功能調(diào)用的方法: ①AH←功能號 ②設置入口參數(shù) ③INT21H1.屏幕顯示一個字符(2號調(diào)用)調(diào)用格式: MOV AH,2 MOV DL,字符的ASCII碼 INT 21H例如:輸出字符9,需要將字符9的ASCLL碼39H存放在DL寄存器里。

MOVAH,2 MOVDL,39H INT21H2.打印一個字符(5號調(diào)用)調(diào)用格式: MOV AH,5 MOV DL,字符的ASCII碼 INT 21H例如:打印字符A,需要將字符A的ASCII碼41H存放在DL寄存器里。 MOVAH,5 MOVDL,41H INT21H3.屏幕顯示一個字符串(9號調(diào)用)調(diào)用格式: MOVAH,9 MOVDX,字符串的首地址(偏移地址) INT21H4.鍵盤輸入一個字符(1號調(diào)用)調(diào)用格式: MOV AH,1 INT 21H5.鍵盤輸入一個字符但不回顯(8號調(diào)用)調(diào)用格式: MOV

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論