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

下載本文檔

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

文檔簡介

1、21世紀(jì)高等院校規(guī)劃教材匯編語言程序設(shè)計相 偉 主編徐小平 李珍香 副主編中國水利水電出版社2021/9/121第二章程序設(shè)計基礎(chǔ)2021/9/122本章學(xué)習(xí)目標(biāo)通過本章學(xué)習(xí),讀者應(yīng)該掌握以下內(nèi)容:匯編語言源程序結(jié)構(gòu)及基本概念各種尋址方式常用偽指令的格式、 功能常用I/O功能調(diào)用的用法2021/9/1232.1匯編語言源程序結(jié)構(gòu)2.1.1 匯編語言源程序結(jié)構(gòu)及分析初學(xué)程序設(shè)計最有效的方法是閱讀源程序并上機調(diào)試。通過閱讀程序可以掌握程序的一般結(jié)構(gòu),學(xué)習(xí)實現(xiàn)程序功能的經(jīng)典算法。通過對程序進行上機調(diào)試,逐漸掌握指令的語法格式、功能,避免編寫源程序時出現(xiàn)常見的語法錯誤,同時訓(xùn)練調(diào)試技巧。2021/9/

2、124例2-1 顯示信息“How do you do ?”DATA SEGMENTSTRDB “How do you do ?$”DATA ENDSSTACK SEGMENT STACKDB200 DUP(?)STACK ENDSCODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODESTART:MOVAX,DATA MOVDS,AXLEADX,STRMOVAH,9INT 21HMOVAH,4CHINT21HCODE ENDSENDSTART2021/9/125例2-2 將內(nèi)存緩沖區(qū)中以BUFA開始的一組字?jǐn)?shù)據(jù)傳送到BUFB開始的內(nèi)存區(qū)。DATA SEGMENT

3、BUFADW 367BH,2845H,0A78H,9DE3H,0F6BH,6532HCOUNTEQU ($-BUFA)/2BUFBDW COUNT DUP (?DATA ENDSSTACK SEGMENT STACKDB 200 DUP(?)STACK ENDSCODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODESTART:MOVAX,DATA MOVDS,AX2021/9/126LEASI,BUFALEADI,BUFBMOVCX,COUNTLOP:MOVAX,SIMOVDI,AXINCSIINCSIINCDIINCDIDECCXJNZLOPMOVAH,4C

4、HINT21HCODE ENDSENDSTART2021/9/1272.1.2 機器指令簡介8086/8088指令系統(tǒng)提供的機器指令從功能上可分為7種類型:數(shù)據(jù)傳送指令算術(shù)運算指令位運算指令程序控制指令串操作指令處理器控制指令輸入/輸出指令2021/9/128所有機器指令從格式上看,有3種指令格式: 無操作數(shù)指令格式:助記符例如:STCCLCCMC2021/9/129 單操作數(shù)指令格式: 助記符 操作數(shù)例如:PUSHAXPOPBX2021/9/1210 雙操作數(shù)指令格式: 助記符 目的操作數(shù),源操作數(shù)例如:MOV CX,DX2021/9/12112.1.3 常量、變量、標(biāo)號及表達式1常量常量是

5、指匯編語言源程序中以數(shù)值常數(shù)、字符串常數(shù)和符號常數(shù)的形式存在的量。注意:當(dāng)數(shù)值常量的值是十六進制形式,并且第一個字符是大寫字母AF或小寫字母af時,需要在數(shù)值前面加一個0,如:0A64DH。2021/9/1212例如:在下面的匯編源程序中,帶下畫線的量就是常量DATA SEGMENTSTRDB “How do you do ?$”DATA ENDSSTACK SEGMENT STACKDB200 DUP(?)STACK ENDSCODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODESTART:MOVAX,DATA MOVDS,AXLEADX,STRMOVAH,

6、9INT 21HMOVAH,4CHINT21HCODE ENDSENDSTART2021/9/1213例如:在下面的數(shù)據(jù)段中,帶下畫線的是一個符號常數(shù),它是使用EQU偽指令定義的。DATA SEGMENTBUFADW 367BH,2845H,0A78H,9DE3H,0F6BH,6532HCOUNTEQU ($-BUFA)/2BUFBDW COUNT DUP (?)DATA ENDS定義符號常數(shù)使用EQU偽指令、“”偽指令。2021/9/12142變量變量是指數(shù)據(jù)存儲單元地址的符號表示,變量的值在程序運行過程中可以改變。2021/9/1215(1)變量的定義定義變量使用偽指令DB、DW、DD、D

7、Q、DT。DB用來定義字節(jié)變量,字節(jié)變量占1個存儲單元,可存儲一個字節(jié)數(shù)據(jù)。DW用來定義字變量,字變量占2個存儲單元,可存儲一個字?jǐn)?shù)據(jù)。DD用來定義雙字變量,雙字變量占4個存儲單元,可存儲一個雙字?jǐn)?shù)據(jù)。DQ用來定義四字類型變量,四字類型變量占8個存儲單元,可存儲8字節(jié)數(shù)據(jù)。DT用來定義十字節(jié)類型變量,十字節(jié)類型變量占10個存儲單元,可存儲10字節(jié)數(shù)據(jù)。2021/9/1216例如:在數(shù)據(jù)段DATA中定義字節(jié)變量STR。DATA SEGMENTSTRDB “How do you do ?$”DATA ENDS2021/9/1217例如:在數(shù)據(jù)段DATA中定義了字變量BUFA和BUFB。DATA S

8、EGMENTBUFADW 367BH,2845H,0A78H,9DE3H,0F6BH,6532HCOUNTEQU ($-BUFA)/2BUFBDW COUNT DUP (?)DATA ENDS2021/9/1218(2)變量的屬性變量有三個屬性,即段屬性、偏移地址屬性、類型屬性。段屬性:指變量所在段的段地址。偏移地址屬性:指變量所定義的單元到變量所在段的開始位置之間的字節(jié)距離。類型屬性:由定義變量使用的偽指令確定。DB定義的變量的類型屬性為字節(jié)類型(BYTE),DW定義的變量的類型屬性為字類型(WORD),DD定義的變量的類型屬性為雙字類型(DWORD),DT定義的變量的類型屬性為四字類型,

9、DQ定義的變量的類型屬性為十字節(jié)類型。2021/9/12193標(biāo)號標(biāo)號是指機器指令存儲單元地址的符號表示。2021/9/1220(1)標(biāo)號的定義LOP:MOVAX,SIMOVDI,AXINCSIINCSIINCDIINCDIDECCXJNZLOP2021/9/1221(2)標(biāo)號的屬性標(biāo)號與變量一樣,也具有三個屬性,即段屬性、偏移地址屬性、類型屬性。段屬性:指標(biāo)號所在段的段地址。偏移地址屬性:指標(biāo)號所定義的單元到標(biāo)號所在段的開始位置之間的字節(jié)距離。類型屬性:標(biāo)號的類型屬性分為近類型NEAR和遠類型FAR。NEAR類型的標(biāo)號稱為近標(biāo)號,近標(biāo)號只能用于段內(nèi)轉(zhuǎn)移。FAR類型的標(biāo)號稱為遠標(biāo)號,遠標(biāo)號既可

10、用于段內(nèi)轉(zhuǎn)移,也可用于段間轉(zhuǎn)移。2021/9/12224表達式由常量、變量、標(biāo)號、運算符和括號組成的有意義的式子稱為表達式。其中運算符又可分為算術(shù)運算符、邏輯運算符、關(guān)系運算符及其他運算符。表達式的計算結(jié)果是一個常數(shù),該常數(shù)可以作為指令的操作數(shù)使用。2021/9/1223(1)算術(shù)運算符 表2-1 算術(shù)運算符 算術(shù)運算符 功 能加減*乘/除MOD取余2021/9/1224例如:算術(shù)表達式的計算219/73186.4/2.633219 MOD 7的結(jié)果為22021/9/1225(2)關(guān)系運算符表2-2 關(guān)系運算符關(guān)系運算符功 能EQ相等NE不相等LT小于GT大于LE小于等于GE大于等于2021/

11、9/1226例如:假設(shè)NUM的值為60H。則:NUM GT 80HNUM EQ 60H2021/9/1227 邏輯運算符表2-3 邏輯運算符邏輯運算符功 能AND與OR或XOR異或NOT非SHR邏輯右移SHL邏輯左移2021/9/1228例如: 假設(shè)NUM的值為6BH 則:NUM AND 87H;表達式的值是03HNUM OR87H;表達式的值是0EFHNUM XOR 87H;表達式的值是0ECHNOT 87H;表達式的值是78HNUM SHR 2 ;表達式的值是1AHNUM SHL 2 ;表達式的值是0ACH2021/9/1229 其他運算符屬性分離運算符(SEG、OFFSET、TYPE、L

12、ENGTH、SIZE)屬性定義運算符(PTR、THIS、SHORT、HIGH、LOW、“:”)以及( )、 、MASK、WIDTH。2021/9/1230 SEG SEG 返回其后變量或標(biāo)號所在段的段地址。2021/9/1231 OFFSET OFFSET返回其后變量或標(biāo)號的偏移地址。2021/9/1232DATA SEGMENTBUFADW 367BH,2845H,0A78H,9DE3H,0F6BH,6532HCOUNTEQU ($-BUFA)/2BUFBDW COUNT DUP (?)DATA ENDSMOV AX,SEG BUFAMOV DS,AXMOV SI,OFFSET BUFAMO

13、V DI,OFFSET BUFB2021/9/1233 TYPE 返回其后變量或標(biāo)號的類型。表2-4 TYPE返回值 類 型返回值變量DB1DW2DD4DQ8標(biāo)號NEAR-1 或 0FFHFAR-2 或0FEH2021/9/1234例如:在下面的數(shù)據(jù)段中。DATA SEGMENTADB 87H,45H,92HBDW 34D6H,0F67HCDD ?DATA ENDS若在代碼段中有如下指令:MOV AH,TYPE AMOV AL,TYPE BMOV CH,TYPE C則將被匯編成:MOV AH,1MOV AL,2MOV CH,42021/9/1235 LENGTH 例如:在下面的數(shù)據(jù)段中。DAT

14、A SEGMENTBUFADW 367BH,2845H,0A78H,9DE3H,0F6BH,6532HCOUNT EQU ($-BUFA)/2BUFBDW COUNT DUP (?)DATA ENDS若在代碼段中有如下兩條指令MOV CX,LENGTH BUFAMOV DX,LENGTH BUFB則將被匯編成:MOV CX,1MOV DX,62021/9/1236 SIZE例如:在下面的數(shù)據(jù)段中。DATA SEGMENTBUFA DW 367BH,2845H,0A78H,9DE3H,0F6BH,6532HCOUNT EQU ($-BUFA)/2BUFB DW COUNT DUP (?)DATA

15、 ENDS若在代碼段中有如下兩條指令MOV CX,SIZE BUFAMOV DX,SIZE BUFB則將被匯編成:MOV CX,2MOV DX,122021/9/1237 PTR 和THISPTR用來指明某個變量、標(biāo)號或地址的類型屬性,使它臨時具有與原定義所不同的類型屬性,但保持他們原來的段屬性和偏移屬性不變。PTR 的使用格式為:類型 PTR 表達式其中,表達式的類型可以是BYTE、WORD、DWORD、NEAR、FAR等。 2021/9/1238例如DATA SEGMENTADB 87H,45H,92HBDW 34D6H,0F67HCDD ?DATA ENDSMOV AX,WORD PTR

16、 AMOV BL,BYTE PTR B2021/9/1239例如:MOV SI ,30H若將上述指令的操作數(shù)改為字操作數(shù),則指令為: MOV WORD PTR SI ,30H 或者:MOV SI ,WORD PTR 30H若將上述指令的操作數(shù)改為字節(jié)操作數(shù),則指令為:MOV BYTE PTR SI ,30H 或者:MOV SI ,BYTE PTR 30H2021/9/1240 SHORTSHORT表示轉(zhuǎn)移指令的目標(biāo)地址屬性是短轉(zhuǎn)移,即目標(biāo)地址與本指令之間的字節(jié)距離在-128127之間。例如:JMP SHORT LOP2 2021/9/1241 HIGH 和LOWHIGH選取表達式計算結(jié)果的高8

17、位。LOW選取表達式計算結(jié)果的低8位。例如:HIGH 0F25AH的值是0F2HLOW 0F25AH的值是5AH2021/9/1242 段前綴運算符 :運算符“:”用于臨時給變量、標(biāo)號或地址指定一個段屬性,且只在所出現(xiàn)的語句中有效,“:”并不改變地址的偏移地址屬性和類型屬性。例如: MOV SI ,AX 指令的功能是將AX寄存器的值存放到數(shù)據(jù)段DS中偏移地址為(SI)的字單元中,假如需要將將AX寄存器的值存放到附加數(shù)據(jù)段ES中偏移地址為(SI)的字單元中,則要在SI的前面加段前綴ES。指令改為:MOV ES: SI ,AX 2021/9/1243運算符的優(yōu)先級如表2-5所示。表2-5 運算符的

18、優(yōu)先級優(yōu)先級運算符1 LENGTH、SIZE、WTDTH、MASK、()、 、2 PTR、OFFSET、SEG、TYPE、THIS、段前綴運算符(:)3 HIGH、LOW4 *、/、MOD、SHL、SHR5 、-6 EQ、NE、LT、LE、GT、GE7 NOT8 AND9 OR、XOR10 SHORT2021/9/12442.2尋址方式在指令中,指定操作數(shù)或操作數(shù)地址的方法稱為尋址方式。操作數(shù)的各種尋址方式是匯編語言進行程序設(shè)計的基礎(chǔ),必須熟練掌握。2021/9/12452.2.1 立即尋址立即尋址是指操作數(shù)作為指令的一部分而直接寫在指令中,這種操作數(shù)稱為立即數(shù),立即數(shù)緊跟在操作碼之后,與操作

19、碼一起存放在代碼段中。如果立即數(shù)為16位,則立即數(shù)的存放規(guī)則是高字節(jié)存放在高地址,低字節(jié)存放在低地址。立即數(shù)尋址方式通常用于給寄存器或內(nèi)存單元賦初值。2021/9/1246例如:閱讀以下各條指令,掌握立即尋址方式的用法。MOV AL, 80HMOV BX, 0A683HMOV X, 20H ;X是字節(jié)變量MOV Y, 3456H ;Y是字變量2021/9/1247實際上,在匯編語言程序設(shè)計中,還經(jīng)常使用符號常數(shù)作為立即操作數(shù)。比如,假設(shè)COUNT是在程序中定義的一個符號常數(shù),它代表一組數(shù)據(jù)的個數(shù),則將該組數(shù)據(jù)的個數(shù)送入CX寄存器的指令如下:MOV AX,COUNT上述指令中的源操作數(shù)COUNT

20、是立即尋址方式。2021/9/1248匯編語言規(guī)定:在單操作數(shù)指令中,立即數(shù)不能作為指令中的操作數(shù)。在雙操作數(shù)指令中,立即數(shù)只能作為源操作數(shù),不能作為目的操作數(shù)。 2021/9/12492.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ù)的位置上。2021/9/1250例如:閱讀以下各條

21、指令的功能,掌握寄存器尋址方式的用法。 MOV BH, 80h MOV AX, 6AB4H MOV MAX, AX;MAX是字變量 MOV CX,COUNT;COUNT是符號常數(shù) MOV AX,BX MOV DL, BL2021/9/1251說明:在雙操作數(shù)指令中,如果源操作數(shù)和目的操作數(shù)都是寄存器尋址,則它們必須同時是8位寄存器,或同時是16位寄存器。例如,下面的指令是錯誤的。 MOV AX, BL2021/9/12522.2.3 存儲器尋址存儲器尋址是指指令所需要的操作數(shù)存放在內(nèi)存中,在指令中給出操作數(shù)地址的方式。存儲器尋址根據(jù)指令中給出的操作數(shù)地址的形式不同又分為直接尋址、寄存器間接尋址

22、、變址尋址、基址加變址尋址、相對基址加變址尋址。2021/9/1253直接尋址直接尋址方式是指操作數(shù)的偏移地址在指令中直接給出。例如:MOV AX,200H 假設(shè)數(shù)據(jù)段的段地址DS1500H,(15200H)字單元的值是876AH,問執(zhí)行指令后,相關(guān)寄存器及存儲單元的值是什么?答:EA200H。PA(DS)*16EA15000H200H15200H。2021/9/1254指令的執(zhí)行過程如圖2-2所示。操作碼代碼段00H02H6AH數(shù)據(jù)段87H8 7 6 A HA X圖2-2 直接尋址示意圖1 5 0 00 2 0 0D S 1 5 2 0 0 2021/9/12552寄存器間接尋址寄存器間接尋

23、址是指操作數(shù)的偏移地址在BX、BP、SI和DI四個寄存器之一。(1)當(dāng)以BX、SI或DI寄存器進行間接尋址時,操作數(shù)的物理地址由DS中的段地址與BX、SI或DI中的偏移地址構(gòu)成。(2)當(dāng)以BP寄存器進行間接尋址時,操作數(shù)物理地址由SS中的段地址與BP中的偏移地址構(gòu)成 。2021/9/1256例如:MOV AX,BX假設(shè)該指令執(zhí)行之前,DS2000H,AX54C8H,BX0300H,存儲單元20300H的內(nèi)容是6A9BH。問執(zhí)行指令后,相關(guān)寄存器及存儲單元的值是什么?源操作數(shù)的地址為:EA(BX) 0300HPA(DS)*16EA2000H*160300H20300H。2021/9/1257指令

24、的執(zhí)行過程如圖2-3所示。6 A 9 B A X操作碼代碼段9BH數(shù)據(jù)段6AH圖2-3 間接尋址示意圖2 0 0 00 3 0 0D S2 0 3 0 0 B X2021/9/12583變址尋址變址尋址是指操作數(shù)的偏移地址是BX、BP、SI、DI之一的值和一個8位或16位偏移量之和。指令中給出的8位或16位偏移量用補碼表示。在計算操作數(shù)的偏移地址時,如果偏移量是8位,則進行符號擴展成16位。(1)當(dāng)以BX、SI或DI寄存器進行間接尋址時,操作數(shù)物理地址由DS中的段地址與BX、SI或DI中的偏移地址構(gòu)成(2)當(dāng)以BP寄存器進行間接尋址時,操作數(shù)物理地址由SS中的段地址與BP中的偏移地址構(gòu)成 。2

25、021/9/1259例如:MOV BX, SI200H假設(shè)該指令執(zhí)行之前,DS2000H,BX6874H,SI1000H,存儲單元21200H的內(nèi)容是1B43H。問執(zhí)行指令后,相關(guān)寄存器及存儲單元的值是什么?指令中的源操作數(shù)是變址尋址,源操作數(shù)的地址為:EA (SI)200H 1000H200H1200HPA(DS)*16EA2000H*161200H 21200H。2021/9/1260指令的執(zhí)行過程如圖2-4所示。1 B 4 3 A X操作碼代碼段00H02H43H數(shù)據(jù)段1BH圖2-4 變址尋址示意圖 2 0 0 01 0 0 0D S 2 1 2 0 0 S I 0 2 0 0 2021

26、/9/12614基址加變址尋址基址加變址尋址是指操作數(shù)的偏移地址是一個基址寄存器BX、BP的值和一個變址寄存器SI、DI的值之和。(1)當(dāng)以BX作為基址寄存器時,操作數(shù)物理地址由DS中的段地址與SI或DI中的偏移地址構(gòu)成。(2)當(dāng)以BP作為基址寄存器時,操作數(shù)物理地址由SS中的段地址與SI或DI中的偏移地址構(gòu)成。2021/9/1262例如:MOV AX, BXSI假設(shè)該指令執(zhí)行之前,DS2000H,AX6528H,BX0500H,SI0300H,存儲單元20800H的內(nèi)容是7B46H。問執(zhí)行指令后,相關(guān)寄存器及存儲單元的值是什么?由于指令中的源操作數(shù)是基址加變址尋址,故源操作數(shù)的地址為:EA(

27、BX)(SI) 0500H0300H0800HPA(DS)*16EA2000H*160800H 20800H。2021/9/1263指令的執(zhí)行過程如圖2-5所示。7 B 4 6 HA X操作碼代碼段46H數(shù)據(jù)段7BH圖2-5 基址加變址尋址示意圖 0 3 0 0 2 0 0 00 5 0 0D S2 0 8 0 0 B XS I2021/9/12645相對基址加變址尋址相對基址加變址尋址是指操作數(shù)的偏移地址是一個基址寄存器BX、BP的值加上一個變址寄存器SI、DI的值,再加上指令中的一個8位、16位偏移量之和。指令中給出的8位或16位偏移量用補碼表示。在計算有效地址時,如果偏移量是8位,則進行

28、符號擴展成16位。(1)當(dāng)以BX作為基址寄存器時,操作數(shù)物理地址由DS中的段地址與SI或DI中的偏移地址構(gòu)成。(2)當(dāng)以BP作為基址寄存器時,操作數(shù)物理地址由SS中的段地址與SI或DI中的偏移地址構(gòu)成。2021/9/1265例如:MOV AX, BXSI1000 H假設(shè)該指令執(zhí)行之前,DS2000H,AX6528H,BX0500H,SI0300H,存儲單元21800H的內(nèi)容是0B874H。問執(zhí)行指令后,相關(guān)寄存器及存儲單元的值是什么?源操作數(shù)的地址為:EA (BX)(SI)1000 H 0500H0300H1000 H 1800HPA(DS)*16EA2000H*161800H 21800H。

29、2021/9/1266指令的執(zhí)行過程如圖2-6所示。B 8 7 4 HA X操作碼代碼段00H10H74H數(shù)據(jù)段B8H圖2-6 相對基址加變址尋址示意圖D S2 1 8 0 0 0 3 0 0 2 0 0 00 5 0 0B XS I 1 0 0 0 2021/9/1267例2-3 將內(nèi)存緩沖區(qū)中以BUFA開始的一組字?jǐn)?shù)據(jù)傳送到BUFB開始的內(nèi)存區(qū)。2021/9/1268DATA SEGMENTBUFADW 367BH,2845H,0A78H,9DE3H,0F6BH,6532HCOUNTEQU ($-BUFA)/2BUFBDW COUNT DUP (?)DATA ENDSSTACK SEGME

30、NT STACKDB200 DUP(?)STACK ENDSCODE SEGMENT ASSUME DS:DATA,SS:STACK, CS:CODESTART:MOVAX,DATA MOVDS,AX2021/9/1269 MOV SI,0 MOV DI,0MOVCX,COUNTLOP:MOVAX,BUFASIMOVBUFBDI,AXINCSIINCSIINCDIINCDIDECCXJNZLOPMOVAH,4CHINT21HCODE ENDSENDSTART2021/9/1270關(guān)于尋址方式的幾點說明: 對于單操作數(shù)指令,操作數(shù)可以使用除立即尋址方式之外的各種尋址方式。對于雙操作數(shù)指令,源操作

31、數(shù)可以使用各種尋址方式,目的操作數(shù)可以使用除立即尋址方式之外的各種尋址方式,但源操作數(shù)和目的操作數(shù)不能同時采用存儲器尋址方式。2021/9/1271 立即尋址和直接尋址在表現(xiàn)形式上的區(qū)別是是否帶有 ,寄存器尋址和寄存器間接尋址在表現(xiàn)形式上的區(qū)別也是是否帶有 。帶有 的操作數(shù)屬于存儲器操作數(shù), 內(nèi)的值表示存儲器操作數(shù)的偏移地址。2021/9/1272 存儲器尋址方式有多種等價的書寫形式,如表2-6所示。表2-6 尋址方式的等價寫法存儲器尋址方式等價的書寫格式變址尋址 200H SI 200HSI基址加變址尋址 BXSI BXSI相對基址加變址尋址 1000 H BXSI BXSI1000 H B

32、XSI1000 H2021/9/1273 在存儲器尋址方式中,通常根據(jù)寄存器BX、BP、SI、DI使用隱含規(guī)定的段寄存器,其中使用BX、SI、DI寄存器時段寄存器是DS,使用BP寄存器時段寄存器是SS。2021/9/1274實際上,操作數(shù)也可以存放在其他段中,比如:附加的數(shù)據(jù)段、堆棧段、代碼段。如果操作數(shù)存放在其他段,如附加的數(shù)據(jù)段ES,則計算物理地址時,段寄存器就不能使用DS,而應(yīng)該使用ES,并通過使用段前綴的方式在指令中給出。例如: MOV ES:SUM,AX2021/9/12752.3常用偽指令數(shù)據(jù)定義偽指令:DB、DW、DD、DQ、DT符號定義偽指令:EQU、LABEL段定義偽指令:S

33、EGMENTENDS、ASSUME、END過程定義偽指令:PROCENDP宏定義偽指令:MACROENDM等條件匯編偽指令:IFENDIF等模塊通信偽指令:PUBLIC、EXTRN結(jié)構(gòu)定義偽指令:STRUCENDS記錄定義偽指令:RECORD其他偽指令: NAME、TITLE、ORG、EVEN等2021/9/1276偽指令語句的一般格式:名字 偽指令助記符 操作數(shù)1,操作數(shù)2, ;注釋 2021/9/12772.3.1 數(shù)據(jù)定義偽指令數(shù)據(jù)定義偽指令可以是:DB、DW、DD、DQ、DT。DB:用來定義字節(jié)類型的變量,DB定義的每個操作數(shù)都占用1個字節(jié)單元。DW:用來定義字類型的變量,DW定義的每

34、個操作數(shù)都占用1個字單元。DD:用來定義雙字類型的變量,DD定義的每個操作數(shù)都占用2個字單元。 DQ:用來定義八個字節(jié)類型的變量,DQ定義的每個操作數(shù)都占用8個字節(jié)單元。 DT:用來定義十個字節(jié)類型的變量,DT定義的每個操作數(shù)都占用10個字節(jié)單元。2021/9/1278例如:定義數(shù)值常數(shù)和字符串常數(shù)DATA SEGMENTCON1 DB 56H,89H,0A3H,0BCHCON2DW7865H,0B34DHCON3DD897632BDHCON4DB please input: DATA ENDS2021/9/12792.3.2 符號定義偽指令符號定義偽指令可用來給匯編語言程序中的常數(shù)、表達式、

35、變量、標(biāo)號、指令助記符或寄存器等重新定義一個名字,或者改變變量、標(biāo)號的屬性,從而給程序設(shè)計帶來更大的靈活性。符號定義偽指令主要有EQU、LABEL。2021/9/12801定義符號常數(shù)(1)EQU格式:符號常數(shù) EQU 表達式(2)格式:符號常數(shù) 表達式說明:EQU 定義的符號常數(shù)不能重復(fù)定義,而用“”定義的符號常數(shù)可以重復(fù)定義。 2021/9/1281例如:A EQU 20B EQU A*25COUNT EQU ($-BUFA)/2例如:A20AA*252021/9/12822定義變量或標(biāo)號(1)定義變量 格式:變量 LABEL 變量類型 說明:格式中的變量類型常用BYTE、WORD、DWO

36、RD,分別表示字節(jié)類型、字類型、雙字類型。2021/9/1283(2)定義標(biāo)號 格式:標(biāo)號 LABEL 標(biāo)號類型 說明:格式中的標(biāo)號類型使用NEAR、FAR,分別表示近類型、遠類型。 功能:給跟在LABEL偽指令后面的指令存儲單元定義一個標(biāo)號,該標(biāo)號的類型屬性在格式中指定,標(biāo)號的段地址和偏移地址屬性與指令存儲單元的段地址和偏移地址相同。2021/9/12842.3.3 段定義偽指令為了實現(xiàn)程序的分段設(shè)計,宏匯編程序MASM提供了按段組織程序的一組偽指令,它們是SEGMENT ENDS、ASSUME、END等。2021/9/12851 SEGMENT和ENDS、段定義偽指令的格式為:段名 SEG

37、MENT 定位屬性 組合屬性 類別 段名 ENDS功能:定義程序中的一個邏輯段。2021/9/12862ASSUME格式:ASSUME 段寄存器:段名,功能:用來設(shè)定段寄存器與邏輯段之間的對應(yīng)關(guān)系。程序中使用ASSUME后,宏匯編程序就將與段寄存器對應(yīng)的邏輯段作為當(dāng)前段。ASSUME一般出現(xiàn)在代碼段的開始。2021/9/12873END偽指令格式:END 標(biāo)號功能:結(jié)束匯編。2021/9/12882.3.3其他常用的偽指令1NAME偽指令格式:NAME 程序名功能:將程序名作為源程序目標(biāo)模塊的名字。NAME偽指令通常放在源程序的開始,在輸出匯編語言源程序的列表文件中,在每一頁的開頭輸出該程序名

38、。若源程序中省略NAME偽指令,則匯編程序?qū)⒃次募鳛槟繕?biāo)模塊的名字。2021/9/12892TITLE偽指令格式:TITLE 標(biāo)題名功能:同NAME偽指令的功能。將標(biāo)題名作為源程序目標(biāo)模塊的名字。標(biāo)題名最多60個字符,但匯編程序只將前6個字符作為目標(biāo)模塊名。2021/9/12903ORG偽指令格式:ORG 表達式功能: 將數(shù)據(jù)或指令代碼從ORG偽指令中指定的偏移地址處開始存放。表達式的值表示偏移地址,取值范圍為00FFFFH或065535。當(dāng)程序中不使用ORG偽指令時,數(shù)據(jù)或指令代碼從段的開始位置連續(xù)存放。2021/9/1291DATA SEGMENTBUFADW 367BH,2845H,

39、0A78H,9DE3H,0F6BH,6532HCOUNTEQU ($-BUFA)/2ORG100HBUFBDW COUNT DUP (?)DATA ENDS2021/9/12924EVEN偽指令格式:EVEN 功能:將數(shù)據(jù)或指令代碼從偶地址處開始存放。DATA SEGMENTTAB1DB 48H,0A2H,98H,0BEH,87HEVENTAB2DW 0B7639H,19F6HDATA ENDS2021/9/12932.4I/O功能調(diào)用DOS操作系統(tǒng)和ROM BIOS分別提供了一系列功能調(diào)用,作為匯編語言處理I/O操作的接口,程序員可以很方便的通過調(diào)用這些功能實現(xiàn)字符及字符串的輸入輸出。 20

40、21/9/12942.4.1 常用的DOS系統(tǒng)功能調(diào)用DOS系統(tǒng)功能調(diào)用的方法: AH功能號 設(shè)置入口參數(shù) INT 21H2021/9/12951屏幕顯示一個字符(2號調(diào)用)調(diào)用格式:MOV AH,2MOV DL,字符的ASCII碼INT 21H2021/9/1296例如:輸出字符9,需要將字符9的ASCLL碼39H存放在DL寄存器里。MOV AH ,2MOV DL ,39HINT 21H2021/9/12972打印一個字符(5號調(diào)用)調(diào)用格式:MOVAH,5MOVDL ,字符的ASCII碼INT21H2021/9/1298例如:打印字符A,需要將字符A的ASCII碼41H存放在DL寄存器里。MOV AH,5MOV DL,41HINT 21H 2021/9/12993屏幕顯示一個字符串 (9號調(diào)用)調(diào)用格式:MOV AH,9MOV DX,字符串的首地址(偏移地址) INT 21H2021/9/121004. 鍵盤輸入一個字符(1號調(diào)用)調(diào)用格式:MOV AH,1INT 21H2021/9/121015. 鍵盤輸入一個字符但不回顯 (8號調(dià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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論