微機原理與接口技術(第3版)彭虎-第4章 8086匯編語言程序設計_第1頁
微機原理與接口技術(第3版)彭虎-第4章 8086匯編語言程序設計_第2頁
微機原理與接口技術(第3版)彭虎-第4章 8086匯編語言程序設計_第3頁
微機原理與接口技術(第3版)彭虎-第4章 8086匯編語言程序設計_第4頁
微機原理與接口技術(第3版)彭虎-第4章 8086匯編語言程序設計_第5頁
已閱讀5頁,還剩95頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、“十一五十一五”國家級國家級規劃教材規劃教材微機原理與接口技術 (第3版)第第4 4章章80868086匯編語言程序設計匯編語言程序設計本章主要本章主要內容內容2半導體存儲器的分類半導體存儲器的分類18086 匯編語言的語句匯編語言的語句18086 匯編語言中的運算符匯編語言中的運算符38086 匯編語言中的偽指令匯編語言中的偽指令匯編語言程序設計匯編語言程序設計45匯編語言程序設計與上機調試匯編語言程序設計與上機調試6宏定義與宏調用宏定義與宏調用概述概述v 匯編語言:匯編語言:用指令的助記符、符號地址、標號等書用指令的助記符、符號地址、標號等書寫程序的語言。用助記符來表示指令的操作碼和操寫程

2、序的語言。用助記符來表示指令的操作碼和操作數,用符號或標號代表地址、常量和變量。作數,用符號或標號代表地址、常量和變量。v 用匯編語言編寫的程序稱為用匯編語言編寫的程序稱為匯編語言程序匯編語言程序或或源程序源程序(Source ProgramSource Program)。)。 源程序文件名后綴:源程序文件名后綴:.asm.asm(不區分大小寫)(不區分大小寫)v 匯編語言源程序不能直接在計算機上運行,需要將匯編語言源程序不能直接在計算機上運行,需要將它翻譯成機器語言程序它翻譯成機器語言程序,即,即目標程序目標程序(Object Object ProgramProgram)。)。 目標程序文件

3、名后綴:目標程序文件名后綴:.obj.obj(不區分大小寫)(不區分大小寫)概述概述v 匯編語言源程序匯編語言源程序目標程序目標程序的的這個翻譯過程為這個翻譯過程為匯編匯編。v 完成匯編任務的程序(軟件)完成匯編任務的程序(軟件)稱為稱為匯編程序匯編程序。匯編過程的含義如圖:匯編過程的含義如圖:匯編語言匯編語言源程序源程序目標程序目標程序匯編程序匯編程序匯編匯編概述概述v將匯編語言源程序翻譯成目標代碼程序;將匯編語言源程序翻譯成目標代碼程序;v按指令要求自動分配存儲區(包括程序區、數據區按指令要求自動分配存儲區(包括程序區、數據區等);等);v自動把源程序中以各種進制表示的數據都轉換成二自動把

4、源程序中以各種進制表示的數據都轉換成二進制形式的數據;進制形式的數據;v計算表達式的值;計算表達式的值;v對匯編語言源程序進行語法檢查,并給出語法出錯對匯編語言源程序進行語法檢查,并給出語法出錯的提示信息。的提示信息。匯編語言匯編語言源程序源程序目標程序目標程序匯編程序匯編程序匯編匯編匯編程序完成匯編程序完成的的任務任務概述概述v 匯編語言程序由若干個匯編語言程序由若干個段段組成。組成。v 按照各段功能的不同,分別有按照各段功能的不同,分別有: 代碼段、數據段、堆棧段和附加段代碼段、數據段、堆棧段和附加段v 代碼段是必須要定義的。代碼段是必須要定義的。概述概述v 【例【例5-15-1】若若X

5、X、Y Y和和RESULTRESULT為內存字單元的地址為內存字單元的地址,請,請編寫匯編寫匯編程序,計算編程序,計算X+YX+Y,并把和存入,并把和存入RESULTRESULT單元。單元。DATA SEGMENTDATA SEGMENT; ;段定義段定義 X DW 2010H X DW 2010H ; ;定義被加數定義被加數 Y DW 2011H Y DW 2011H ; ;定義加數定義加數 RESULT DW ? RESULT DW ? ; ;分配和數存放單元分配和數存放單元DATA ENDS DATA ENDS ; ; 段定義結束段定義結束概述概述說明哪個段是數據段,說明哪個段是數據段,

6、哪個段是代碼段哪個段是代碼段程序運行結束,關閉并返程序運行結束,關閉并返回操作系統回操作系統給除給除CSCS以外的其他用到以外的其他用到的段的段寄存器賦值的段的段寄存器賦值源程序結束源程序結束處理并存處理并存結果結果CODE SEGMENTCODE SEGMENT ASSUME CS:CODE,DS:DATA ASSUME CS:CODE,DS:DATA STARTSTART: MOV AX,DATA : MOV AX,DATA MOV DS,AX MOV DS,AX MOV AX,X MOV AX,X ADD AX,Y ADD AX,Y MOV RESULT,AX MOV RESULT,AX

7、 MOV AH,4CH MOV AH,4CH INT 21H INT 21HCODE ENDSCODE ENDS ENDEND START START4 8086 4 8086 匯編語言程序設計匯編語言程序設計4.14.1 8086 8086 匯編語言的語句匯編語言的語句語句語句指令性語句指令性語句指示性語句指示性語句CPU CPU 可執行語句,對應可執行語句,對應CPUCPU指令系統規定的一條指令系統規定的一條指令指令如:如:MOVMOV AH AH,4CH 4CH INC INC BX BX匯編時給匯編程序提供與匯編時給匯編程序提供與硬件有關的匯編信息,本硬件有關的匯編信息,本身并不產生目

8、標代碼,身并不產生目標代碼,CPUCPU不執行。是指示匯編程序不執行。是指示匯編程序進行匯編的操作。進行匯編的操作。也稱也稱偽指令(或指示符)偽指令(或指示符)例:例:MESSAGE DB MESSAGE DB THIS IS A SAMPLE PROGRAM.THIS IS A SAMPLE PROGRAM. ;定義變量定義變量MESSAGEMESSAGE在數據段在數據段DATADATA中的存放形式,匯編時,匯編程序將中的存放形式,匯編時,匯編程序將MESSAGEMESSAGE定義為一個字節類型數據區的首地址,并按字節存儲字符串。定義為一個字節類型數據區的首地址,并按字節存儲字符串。 4.1

9、4.1 8086 8086 匯編語言的語句匯編語言的語句v1、指令性語句格式、指令性語句格式 4 8086 4 8086 匯編語言程序設計匯編語言程序設計 表示可任選部分表示可任選部分;v LOOPERLOOPER: MOV ALMOV AL,DATA2SI DATA2SI ;取一個字節加數;取一個字節加數v BB1BB1:SHL AX, 1 SHL AX, 1 ; ;將將AXAX邏輯左移邏輯左移1 1位位 LOOP BB1 LOOP BB1 標號標號: : 操作碼操作碼 操作數操作數 ,操作數,操作數 ; ;注釋注釋 4.14.1 8086 8086 匯編語言的語句匯編語言的語句v1、指令性

10、語句格式、指令性語句格式 4 8086 4 8086 匯編語言程序設計匯編語言程序設計 表示可任選部分表示可任選部分;標號段:標號段:v 可選項,可選項,后跟冒號,在程序中作為后跟冒號,在程序中作為JMPJMP、LOOPLOOP指令的轉移目標指令的轉移目標,與具體的指令地址相聯系。,與具體的指令地址相聯系。v 在同一段程序中,同樣的標號名只允許定義一次。在同一段程序中,同樣的標號名只允許定義一次。v 由由字母(不分大小寫)、數字及特殊符號字母(不分大小寫)、數字及特殊符號組成,組成,名字可以用除名字可以用除數字外所有的合法符號開頭數字外所有的合法符號開頭,名字的有效長度不超過名字的有效長度不超

11、過3131個英文個英文字符字符。標識符不能是匯編語言中有特定意義的保留字、助記符標識符不能是匯編語言中有特定意義的保留字、助記符、RegReg等等 標號標號: : 操作碼操作碼 操作數操作數 ,操作數,操作數 ; ;注釋注釋 4.14.1 8086 8086 匯編語言的語句匯編語言的語句v1、指令性語句格式、指令性語句格式 4 8086 4 8086 匯編語言程序設計匯編語言程序設計 表示可任選部分表示可任選部分;標號段:標號段:v 標號表示標號表示指令地址指令地址, , 是是指令符號地址指令符號地址, , 一旦定義了具有一旦定義了具有3 3種屬種屬性:性: 段地址屬性:段地址屬性: 標號所在

12、段的段地址(16位數),在CS中 段內偏移量段內偏移量( (或相對地址或相對地址) )屬性:屬性:標號與CS段起始地址之間相距字節數,16位無符號數 類型屬性:類型屬性:標號所代表的指令的轉移范圍,分NEAR(近)與FAR (遠)兩種。 標號標號: : 操作碼操作碼 操作數操作數 ,操作數,操作數 ; ;注釋注釋 4.14.1 8086 8086 匯編語言的語句匯編語言的語句v1、指令性語句格式、指令性語句格式 4 8086 4 8086 匯編語言程序設計匯編語言程序設計標號段:標號段:類型屬性:類型屬性:代表的指令的轉移范圍,分NEAR(近)與FAR (遠)兩種v NEAR類型的標號僅在同一

13、段內使用,用2字節指針給出轉移的偏移量屬性(即只改變IP值,不改變CS值);v FAR類型的標號無此限制,必須用字節指針指出轉移的段地址與段內偏移量。v 當標號用作JMP或CALL等指令的目標操作數時,若為段內轉移或調用則采用NEAR類型;若為段間轉移或調用則應當采用FAR類型。 標號標號: : 操作碼操作碼 操作數操作數 ,操作數,操作數 ; ;注釋注釋 4 8086 4 8086 匯編語言程序設計匯編語言程序設計操作碼段:操作碼段:v 包括包括8086 8086 的指令助記符。的指令助記符。v 語句中唯一不可缺少的部分。語句中唯一不可缺少的部分。v 操作碼助記符通常稱為關鍵字或保留字,用戶

14、不能用這些字或操作碼助記符通常稱為關鍵字或保留字,用戶不能用這些字或詞作為變量名、標號、標識符等。詞作為變量名、標號、標識符等。4.14.1 8086 8086 匯編語言的語句匯編語言的語句v1、指令性語句格式、指令性語句格式 表示可任選部分表示可任選部分; 標號標號: : 操作碼操作碼 操作數操作數 ,操作數,操作數 ; ;注釋注釋 4 8086 4 8086 匯編語言程序設計匯編語言程序設計操作數段:操作數段:v 表明操作的對象,操作數可以是常數、寄存器、標號、變量和表明操作的對象,操作數可以是常數、寄存器、標號、變量和表達式。表達式。v 對于對于8086 8086 的一般性執行指令,操作

15、數表可以是一個或兩個操的一般性執行指令,操作數表可以是一個或兩個操作數。作數。v 若是兩個操作數,用逗號隔開,則稱左邊操作數為目標操作數若是兩個操作數,用逗號隔開,則稱左邊操作數為目標操作數,右邊操作數為源操作數。,右邊操作數為源操作數。4.14.1 8086 8086 匯編語言的語句匯編語言的語句v1、指令性語句格式、指令性語句格式 標號標號: : 操作碼操作碼 操作數操作數 ,操作數,操作數 ; ;注釋注釋 表示可任選部分表示可任選部分;4 8086 4 8086 匯編語言程序設計匯編語言程序設計操作數段:操作數段:v 表明操作的對象,操作數可以是常數、寄存器、標號、變量和表明操作的對象,

16、操作數可以是常數、寄存器、標號、變量和表達式。表達式。4.14.1 8086 8086 匯編語言的語句匯編語言的語句v1、指令性語句格式、指令性語句格式 標號標號: : 操作碼操作碼 操作數操作數 ,操作數,操作數 ; ;注釋注釋 表示可任選部分表示可任選部分;u操作數可能為以下幾種情況:操作數可能為以下幾種情況:常量操作數:如常量操作數:如 34 等。等。寄存器操作數:如寄存器操作數:如 AX 等。等。存儲器操作數:如存儲器操作數:如0100H 等。等。表達式操作數:如表達式操作數:如AX+2、DAT+2、SEG NUM1等。等。4 8086 4 8086 匯編語言程序設計匯編語言程序設計注

17、釋段:注釋段:v 以“;”開始,用來簡要說明該指令在程序中的作用(不是重復解釋指令本身的功能),以便于程序的閱讀、備忘和交流。4.14.1 8086 8086 匯編語言的語句匯編語言的語句v1、指令性語句格式、指令性語句格式 標號標號: : 操作碼操作碼 操作數操作數 ,操作數,操作數 ; ;注釋注釋 表示可任選部分表示可任選部分;4.14.1 8086 8086 匯編語言的語句匯編語言的語句v2、指示性語句格式、指示性語句格式 4 8086 4 8086 匯編語言程序設計匯編語言程序設計 表示可任選部分表示可任選部分;v DATA1 DB 0F8HDATA1 DB 0F8H,60H60H,0

18、ACH0ACH,74H74H,3BH3BH;定義一組數據;定義一組數據vDATA SEGMENTDATA SEGMENT AA DB 20H,-30H ;AA DB 20H,-30H ;在數據段定義一組字節數據在數據段定義一組字節數據 DATA ENDSDATA ENDS 標識符標識符( (名字名字) ) 指示符指示符( (偽指令偽指令) ) 表達式表達式 ; ;注釋注釋 4.14.1 8086 8086 匯編語言的語句匯編語言的語句v2、指示性語句格式、指示性語句格式 4 8086 4 8086 匯編語言程序設計匯編語言程序設計 表示可任選部分表示可任選部分;標識符段:標識符段:v 標識符由

19、字母開頭,由字母、數字、特殊字符標識符由字母開頭,由字母、數字、特殊字符( (如如? ?、下劃線、下劃線、 等等) )組成的字符串。組成的字符串。v 標識符定義的為常量名、變量名、過程名、段名等。v 默認情況下,匯編程序是不區分大、小寫字母的v 注意:名字的后面沒有冒號,這是指示性語句同指令性語句在格式上的主要區別。 標識符標識符( (名字名字) ) 指示符指示符( (偽指令偽指令) ) 表達式表達式 ; ;注釋注釋 4.14.1 8086 8086 匯編語言的語句匯編語言的語句v2、指示性語句格式、指示性語句格式 4 8086 4 8086 匯編語言程序設計匯編語言程序設計標識符段:標識符段

20、:v 標識符標識符, , 具有具有3 3種屬性:種屬性: 段地址屬性:段地址屬性: 標識符所在段的段地址(16位數) 段內偏移量段內偏移量( (或相對地址或相對地址) )屬性:屬性:標識符與段起始地址之間相距字節數,16位無符號數 類型屬性:類型屬性:偽指令定義的變量的屬性,指出變量所保留的字節數。BYTE(1BYTE(1字節的字節型字節的字節型) ), WORD(2 WORD(2字節的字型字節的字型) ), DWORD(4DWORD(4字節的雙字型字節的雙字型) ) 。 標識符標識符( (名字名字) ) 指示符指示符( (偽指令偽指令) ) 表達式表達式 ; ;注釋注釋 4.14.1 808

21、6 8086 匯編語言的語句匯編語言的語句v2、指示性語句格式、指示性語句格式 4 8086 4 8086 匯編語言程序設計匯編語言程序設計 表示可任選部分表示可任選部分;指示符段:指示符段:v 指示符又稱指示符又稱偽指令,偽指令,由匯編程序執行的命令。v 能將標識符定義為變量、程序段、常數、過程等,且給出其屬性。 標識符標識符( (名字名字) ) 指示符指示符( (偽指令偽指令) ) 表達式表達式 ; ;注釋注釋 4.14.1 8086 8086 匯編語言的語句匯編語言的語句v2、指示性語句格式、指示性語句格式 4 8086 4 8086 匯編語言程序設計匯編語言程序設計 表示可任選部分表示

22、可任選部分;表達式段:表達式段:v 是常數、寄存器、標號、變量與一些操作符相結合的序列,可是常數、寄存器、標號、變量與一些操作符相結合的序列,可以有數字表達式和地址表達式兩種。以有數字表達式和地址表達式兩種。v 在匯編期間,匯編程序按照一定的優先規則,對表達式進行計算后得到一個數值或一個地址。 標識符標識符( (名字名字) ) 指示符指示符( (偽指令偽指令) ) 表達式表達式 ; ;注釋注釋 4.24.2 8086 8086 匯編語言中的偽指令匯編語言中的偽指令4 8086 4 8086 匯編語言程序設計匯編語言程序設計v 偽指令又稱偽指令又稱偽操作偽操作,在匯編程序的指示性語句中作,在匯編

23、程序的指示性語句中作為為指示符指示符。v 偽指令可以對數據進行定義,為變量分配存儲區域偽指令可以對數據進行定義,為變量分配存儲區域,定義一個程序段或一個過程,指示程序結束等。,定義一個程序段或一個過程,指示程序結束等。v 有符號定義語句、變量義語句、段定義語句、過程有符號定義語句、變量義語句、段定義語句、過程定義語句、結束語句等。定義語句、結束語句等。4.2.14.2.1 符號定義語句符號定義語句4.2 8086 4.2 8086 匯編語言中的偽指令匯編語言中的偽指令1 1 等值語句等值語句v 格式:格式: 符號名符號名 EQU EQU 表達式表達式u表達式表達式可以是一個常數、已定義的符號、

24、數值表達式或可以是一個常數、已定義的符號、數值表達式或地址表達式地址表達式。v 功能:功能:給表達式賦予一個名字。定義后,可用名字代給表達式賦予一個名字。定義后,可用名字代替表達式。在同一源程序中,一個替表達式。在同一源程序中,一個符號名符號名只能用只能用EQUEQU定義一次。定義一次。例例PORT EQU 1234 PORT EQU 1234 ;常量;常量BUFF EQU PORT+58 BUFF EQU PORT+58 ;數值表達式;數值表達式MEM EQU DS:BP+20H MEM EQU DS:BP+20H ;地址表達式;地址表達式COUNT EQU CX COUNT EQU CX

25、;變量;變量ABC EQU AAAABC EQU AAA ;指令助記符;指令助記符當程序中出現下面的語句時當程序中出現下面的語句時MOV AX, PORT MOV AX, PORT = MOV AX, 1234= MOV AX, 1234MOV BX, BUFF MOV BX, BUFF = MOV BX, 1292 = MOV BX, 1292 B EQU BP+8 B EQU BP+8 B EQU 20H B EQU 20H 不行!不行!4.2 8086 4.2 8086 匯編語言中的偽指令匯編語言中的偽指令4.2.14.2.1 符號定義語句符號定義語句4.2 8086 4.2 8086

26、匯編語言中的偽指令匯編語言中的偽指令2 2 等號語句等號語句v 格式:格式: 符號名符號名 = = 表達式表達式u表達式表達式可以是一個常數、已定義的符號、數值表達式或可以是一個常數、已定義的符號、數值表達式或地址表達式地址表達式。v功能:功能:與與EQUEQU基本相同,區別是它可以對同一基本相同,區別是它可以對同一個名字重新定義。個名字重新定義。例例NMU = 34NMU = 34NUM = 34+1NUM = 34+14.2.24.2.2 變量定義語句變量定義語句4.2 8086 4.2 8086 匯編語言中的偽指令匯編語言中的偽指令v 用于定義變量(程序中所用的存儲器操作數),指用于定義

27、變量(程序中所用的存儲器操作數),指定變量的類型和名稱,并為其分配存儲單元和預置定變量的類型和名稱,并為其分配存儲單元和預置初值。初值。v 格式:格式: 符號名符號名 DB/DW/DD DB/DW/DD 表達式表達式v 功能:功能:當一個符號名用偽指令當一個符號名用偽指令DBDB、DWDW或或DDDD定義后,定義后,稱為稱為變量變量。DBDB 變量為字節變量為字節數據類型數據類型(8(8位位) )。DWDW 變量為字變量為字數據類型數據類型(16(16位位) ) 。DD DD 變量為雙字變量為雙字數據類型數據類型(32(32位位) ) 。4.2.24.2.2 變量定義語句變量定義語句4.2 8

28、086 4.2 8086 匯編語言中的偽指令匯編語言中的偽指令v 格式:格式: 符號名符號名 DB/DW/DD DB/DW/DD 表達式表達式v 變量定義后具有如下屬性:變量定義后具有如下屬性: 字節型、字型、雙字型等數據類型。字節型、字型、雙字型等數據類型。 分配內存單元。分配內存單元。 存放存放時時低字節數據存放在低地址單元,高字節數據存放在低字節數據存放在低地址單元,高字節數據存放在高地址單元。高地址單元。 變量定義一般在數據段中,故一個變量被定義后,具有段變量定義一般在數據段中,故一個變量被定義后,具有段地址和段內偏移地址屬性。地址和段內偏移地址屬性。4.2.24.2.2 變量定義語句

29、變量定義語句4.2 8086 4.2 8086 匯編語言中的偽指令匯編語言中的偽指令1 1、定義一組數據:、定義一組數據:v 例如:例如: BUFF1 DW 1234H,OABCDH,8EH,-79DH BUFF1 DW 1234H,OABCDH,8EH,-79DH BUFF2 DB 12H,34H,CDH,8EH BUFF2 DB 12H,34H,CDH,8EH MOV AX, BUFF1 MOV AX, BUFF1 MOV BX, BUFF1+2 MOV BX, BUFF1+2 MOV DL, BUFF2 MOV DL, BUFF2 MOV AX, 0000H MOV AX, 0000H

30、MOV BX, 0002H MOV BX, 0002H MOV DL, 0008H MOV DL, 0008H MOV AL, BUFF1 ; MOV AL, BUFF1 ; 類型不匹配類型不匹配 MOV DX, BUFF2 ; MOV DX, BUFF2 ;3412CDAB8E0063F81234CD8E0000H0001H0002H0003H0004H0005H0006H0007H0008H0009H000AH000BHBUFF1BUFF21234H0ABCDH8EH-79DH4.2.24.2.2 變量定義語句變量定義語句4.2 8086 4.2 8086 匯編語言中的偽指令匯編語言中的偽

31、指令2 2、定義一串字符:、定義一串字符:v 例如:例如: STR DB Welcome! STR DB Welcome!v 每個字符的值為它的每個字符的值為它的ASCIIASCII碼值,所以碼值,所以 用用DBDB來定義。來定義。字符字符 ASCIIASCII碼碼 W 57H W 57He 65He 65Hl 6CHl 6CHc 63Hc 63Ho 6FHo 6FHm 6DHm 6DHe 65He 65H! 22H! 22H57656C636F6D6522STRWelcome!4.2.24.2.2 變量定義語句變量定義語句4.2 8086 4.2 8086 匯編語言中的偽指令匯編語言中的偽指

32、令3 3、定義保留存儲單元:、定義保留存儲單元:v 預留內存單元,但不賦值,以存放運算結果。當沒有特定賦預留內存單元,但不賦值,以存放運算結果。當沒有特定賦值時,其中有隨機值。值時,其中有隨機值。 SUM DW ?,? SUM DW ?,? A DB ? A DB ? B DB ? B DB ?4.2.24.2.2 變量定義語句變量定義語句4.2 8086 4.2 8086 匯編語言中的偽指令匯編語言中的偽指令4 4、復制操作:、復制操作:v 復制操作符復制操作符 DUP 可以預置重復的數值。可以預置重復的數值。v DUPDUP之前的數字表示重復次數,之前的數字表示重復次數,DUPDUP后括號

33、內位重復的內容后括號內位重復的內容。 ALL_ZERO DB 0,0 ALL_ZERO DB 0,0,0 0,0 0,0 0等效為:等效為: ALL_ZERO DB 5 DUP(0)ALL_ZERO DB 5 DUP(0)例:例: BUFFER DB 10 DUP(?) ; BUFFER DB 10 DUP(?) ;分配分配1010個字節,初值不確定個字節,初值不確定 ALL_ZERO DW 100 DUP(0) ; ALL_ZERO DW 100 DUP(0) ;分配分配100100個字,初值都為個字,初值都為0 0 STRING DB 4 DUP(ABC) ; STRING DB 4 DU

34、P(ABC) ;連續分配連續分配4 4個個ABCABC字符串字符串 4.2.24.2.2 變量定義語句變量定義語句4.2 8086 4.2 8086 匯編語言中的偽指令匯編語言中的偽指令5 5、將已定義的地址存入內存單元:、將已定義的地址存入內存單元:v 定義過的標號或用定義過的標號或用PROCPROC過程定義過的過程名,都有段地址和過程定義過的過程名,都有段地址和段內偏移地址屬性。若希望將變量、標號或過程名的段地址段內偏移地址屬性。若希望將變量、標號或過程名的段地址和偏移地址保存到存儲單元,可用下列方式完成:和偏移地址保存到存儲單元,可用下列方式完成:v 例如:例如: LIT DD CYCL

35、IT DD CYC CYC: MOV AX, BX CYC: MOV AX, BX ; ;將將CYCCYC的段地址和偏移地址保存到存儲單元的段地址和偏移地址保存到存儲單元LITLIT開始開始 的的4 4個字節單元中。個字節單元中。4.2.34.2.3 段定義語句段定義語句4.2 8086 4.2 8086 匯編語言中的偽指令匯編語言中的偽指令v 一個匯編語言是有若干個一個匯編語言是有若干個邏輯段邏輯段組成。所有的指令、組成。所有的指令、變量均分別放在各個邏輯段中。變量均分別放在各個邏輯段中。段定義語句的用途是段定義語句的用途是在匯編語言源程序中定義邏輯段在匯編語言源程序中定義邏輯段。v 段定義

36、語句可按段來組織和使用存儲器。這些語句包段定義語句可按段來組織和使用存儲器。這些語句包括:括:SEGMENTSEGMENT、ENDSENDS、ASSUMEASSUME、ORGORG等等。4.2.34.2.3 段定義語句段定義語句4.2 8086 4.2 8086 匯編語言中的偽指令匯編語言中的偽指令1 1、段定義語句格式、段定義語句格式v 格式:格式: 段名段名 SEGMENT SEGMENT 定位類型定位類型組合類型組合類型類別類別 段名段名 ENDSENDSv 功能:定義一個邏輯段。功能:定義一個邏輯段。v SEGMENTSEGMENT和和ENDSENDS必須成對使用,它們前面的段名必須必

37、須成對使用,它們前面的段名必須是相同的。是相同的。v SEGMENTSEGMENT后面中括號中的內容為可選項,告訴匯編程后面中括號中的內容為可選項,告訴匯編程序和連接程序如何確定段的邊界、如何連接幾個程序和連接程序如何確定段的邊界、如何連接幾個程序模塊。序模塊。4.2.34.2.3 段定義語句段定義語句4.2 8086 4.2 8086 匯編語言中的偽指令匯編語言中的偽指令1 1、段定義語句格式、段定義語句格式v 定位類型:定位類型:定位類型說明段的起始地址應有怎樣的邊定位類型說明段的起始地址應有怎樣的邊界值,有以下界值,有以下4 4種。種。類型類型段物理地址段物理地址2020位位意義意義BY

38、TE(BYTE(字節型字節型) )XXXX XXXX XXXX XXXX XXXXXXXX XXXX XXXX XXXX XXXX段可起始于任意地址段可起始于任意地址WORD(WORD(字型字型) )XXXX XXXX XXXX XXXX XXX0XXXX XXXX XXXX XXXX XXX0段可起始于偶地址段可起始于偶地址PARA(PARA(節型節型) )XXXX XXXX XXXX XXXX 0000XXXX XXXX XXXX XXXX 0000段起始地址是段起始地址是1616整數倍整數倍PAGE(PAGE(頁型頁型) )XXXX XXXX XXXX 0000 0000XXXX XXX

39、X XXXX 0000 0000段起始地址是段起始地址是256256整數倍整數倍4.2.34.2.3 段定義語句段定義語句4.2 8086 4.2 8086 匯編語言中的偽指令匯編語言中的偽指令1 1、段定義語句格式、段定義語句格式v 組合類型:組合類型:說明鏈接不同模塊中的同名段時采用的方說明鏈接不同模塊中的同名段時采用的方式,有以下式,有以下6 6種。種。 NONENONE:不組合,該段與其他段邏輯上不發生關系,即使同名,不組合,該段與其他段邏輯上不發生關系,即使同名,各段擁有各自的段基值。組合類型的默認值為各段擁有各自的段基值。組合類型的默認值為NONENONE。 STACKSTACK:

40、本段與其他模塊中說明為本段與其他模塊中說明為STACKSTACK的同名的堆棧段鏈接起的同名的堆棧段鏈接起來,公用一個段地址,形成一個新的邏輯段。同時,系統自動初來,公用一個段地址,形成一個新的邏輯段。同時,系統自動初始化始化SSSS及及SPSP。 PUBLIC PUBLIC:本段與其他模塊中說明為本段與其他模塊中說明為PUBLICPUBLIC的同名同類別的段鏈的同名同類別的段鏈接起來,公用一個段地址,形成一個新的邏輯段,所以偏移量調接起來,公用一個段地址,形成一個新的邏輯段,所以偏移量調整為相對于新邏輯段起始地址的值。整為相對于新邏輯段起始地址的值。4.2.34.2.3 段定義語句段定義語句4

41、.2 8086 4.2 8086 匯編語言中的偽指令匯編語言中的偽指令1 1、段定義語句格式、段定義語句格式v 組合類型:組合類型:說明鏈接不同模塊中的同名段時采用的方說明鏈接不同模塊中的同名段時采用的方式,有以下式,有以下6 6種。種。 MEMORYMEMORY:與與PUBLICPUBLIC同義,只不過同義,只不過MEMORYMEMORY定義的段裝在所有同名定義的段裝在所有同名段的最后。若連接時出現多個段的最后。若連接時出現多個MEMORYMEMORY,則最先遇到的段按組合類,則最先遇到的段按組合類型型MEMORYMEMORY處理,其他段組合類型按處理,其他段組合類型按PUBLICPUBLI

42、C處理。處理。 COMMONCOMMON:同名段從同一個內存地址開始裝入。所以,各個邏輯同名段從同一個內存地址開始裝入。所以,各個邏輯段將發生覆蓋。連接以后,該段長度取決于同名段中最長的那個段將發生覆蓋。連接以后,該段長度取決于同名段中最長的那個,而內容有效的是最后裝入的那個。,而內容有效的是最后裝入的那個。 AT exp AT exp:段地址為表達式段地址為表達式expexp的值(長度為的值(長度為1616位)。此項不能用位)。此項不能用于代碼段。例如:于代碼段。例如:AT 0530HAT 0530H,表示本段從物理地址,表示本段從物理地址0530H0530H開始。開始。4.2.34.2.3

43、 段定義語句段定義語句4.2 8086 4.2 8086 匯編語言中的偽指令匯編語言中的偽指令1 1、段定義語句格式、段定義語句格式v 類別:類別:說明鏈接不同模塊中的同名段時采用的方式,說明鏈接不同模塊中的同名段時采用的方式,有以下有以下6 6種。種。 類別名必須用單引號括起來。類別名必須用單引號括起來。 類別的作用是在連接時決定各邏輯段的裝入順序。類別的作用是在連接時決定各邏輯段的裝入順序。 當幾個程序模塊進行連接時,其中具有相同類別名的段,按出當幾個程序模塊進行連接時,其中具有相同類別名的段,按出現的先后順序被裝入連續的內存區。現的先后順序被裝入連續的內存區。 沒有類別名的段,與其他無類

44、別名的段一起連續裝入內存。沒有類別名的段,與其他無類別名的段一起連續裝入內存。 典型的類型名有:典型的類型名有:“STACKSTACK”,“CODECODE”,“DATADATA”。4.2.34.2.3 段定義語句段定義語句4.2 8086 4.2 8086 匯編語言中的偽指令匯編語言中的偽指令2 2、段假設語句、段假設語句ASSUMEASSUMEv 格式:格式: ASSUME ASSUME 段寄存器名:段名段寄存器名:段名 ,段寄存器名:段名,段寄存器名:段名 段寄存器可以是:段寄存器可以是:CSCS、DSDS、ESES、SSSS。 段名為已定義的段。段名為已定義的段。 凡是程序中使用的段,

45、都應說明它與段寄存器凡是程序中使用的段,都應說明它與段寄存器之間的對應關系。之間的對應關系。v 功能:用于明確段與段寄存器的關系。功能:用于明確段與段寄存器的關系。例:例: ASSUME CS: SEGA, DS: SEGB, SS: NOTHINGASSUME CS: SEGA, DS: SEGB, SS: NOTHING4.2.34.2.3 段定義語句段定義語句4.2 8086 4.2 8086 匯編語言中的偽指令匯編語言中的偽指令2 2、段假設語句、段假設語句ASSUMEASSUMEv 格式:格式: ASSUME ASSUME 段寄存器名:段名段寄存器名:段名 ,段寄存器名:段名,段寄存

46、器名:段名v 使用說明使用說明: ASSUMEASSUME偽指令只是指示各邏輯段使用段寄存器的情況,并沒有偽指令只是指示各邏輯段使用段寄存器的情況,并沒有對段寄存器的內容進行賦值。對段寄存器的內容進行賦值。 DSDS、ESES的值必須在程序段中用指令語句進行賦值,而的值必須在程序段中用指令語句進行賦值,而CSCS、SSSS由由系統負責設置,程序中也可對系統負責設置,程序中也可對SSSS進行賦值,但進行賦值,但不允許對不允許對CSCS賦值賦值。4.2.34.2.3 段定義語句段定義語句4.2 8086 4.2 8086 匯編語言中的偽指令匯編語言中的偽指令3 3、ORGORG偽指令與地址計數器偽

47、指令與地址計數器v 在匯編程序中,有一個軟件計數器在匯編程序中,有一個軟件計數器( (LC)LC)地址計數器。在每地址計數器。在每個段定義開始處,它被復位為個段定義開始處,它被復位為0 0。當匯編程序逐行掃描語句時。當匯編程序逐行掃描語句時,用,用LCLC保存當前指令的地址。保存當前指令的地址。v 格式格式1 1: ORG ORG v 格式格式2 2: ORG $+ORG $+表達式表達式v 使用說明使用說明: 強行指定地址計數器強行指定地址計數器LCLC的當前值,在段內改變它以后的代碼或的當前值,在段內改變它以后的代碼或數據存放的偏移地址。數據存放的偏移地址。 ORGORG語句之后段內所有的

48、語句之后段內所有的代碼或數據代碼或數據均以表達式(常量)的值均以表達式(常量)的值為起始偏移量連續存放,除非遇到另一個為起始偏移量連續存放,除非遇到另一個ORGORG語句。語句。 此語句本身并不占內存。此語句本身并不占內存。4.2 8086 4.2 8086 匯編語言中的偽指令匯編語言中的偽指令A547C92301560010H0011H0014H0015H0016H001EH001FH0020H47A5H0C956H0123H 例例 MY_DATA SEGMENT ORG 10 DAT1 DW 47A5H ORG 20 DAT2 DW 0C956H ORG $+8 (跳過跳過8個字節的存儲區

49、個字節的存儲區) DAT3 DW 0123H MY_DATA ENDS16H+8=1EH若省略若省略ORG,則從本段起始地址開始連續,則從本段起始地址開始連續存放存放4.2.34.2.3 段定義語句段定義語句4.2 8086 4.2 8086 匯編語言中的偽指令匯編語言中的偽指令4 4、PUBLICPUBLIC和和EXTRNEXTRN偽指令偽指令v 當一個程序由多個模塊組成時,必須通過命令將各當一個程序由多個模塊組成時,必須通過命令將各模塊連接程一個完整的、可執行的程序。程序模塊模塊連接程一個完整的、可執行的程序。程序模塊,是單獨編譯和匯編的,能夠完成某個功能的程序,是單獨編譯和匯編的,能夠完

50、成某個功能的程序,如主程序模塊、各種功能的子程序模塊。,如主程序模塊、各種功能的子程序模塊。v 由由PUBLIC PUBLIC 說明的名字是全局的,可以在其他模塊中說明的名字是全局的,可以在其他模塊中使用,使用,v EXTRNEXTRN表明本模塊中使用的名字在別的模塊中定義過表明本模塊中使用的名字在別的模塊中定義過,且類型一致。,且類型一致。v PUBLIC PUBLIC 和和EXTRNEXTRN配對使用。配對使用。4.2.34.2.3 段定義語句段定義語句4.2 8086 4.2 8086 匯編語言中的偽指令匯編語言中的偽指令4 4、PUBLICPUBLIC和和EXTRNEXTRN偽指令偽指

51、令(1 1)PUBLICPUBLIC偽指令偽指令v 格式:格式: PUBLIC PUBLIC 名字名字,v 使用說明使用說明: 名字可以是變量、符號常量、標號或過程名。名字可以是變量、符號常量、標號或過程名。 由由PUBLICPUBLIC定義的名字,可以被其他模塊引用,即由其定義的名定義的名字,可以被其他模塊引用,即由其定義的名字是字是公共名字公共名字,可以被外部模塊引用。,可以被外部模塊引用。 4.2.34.2.3 段定義語句段定義語句4.2 8086 4.2 8086 匯編語言中的偽指令匯編語言中的偽指令4 4、PUBLICPUBLIC和和EXTRNEXTRN偽指令偽指令(1 1)EXTR

52、NEXTRN偽指令偽指令v 格式格式1 1: EXTRN EXTRN 名字名字: :類型類型,v 使用說明使用說明: 名字是在其他模塊中已由名字是在其他模塊中已由PUBLICPUBLIC所定義。類型指的是名字的類所定義。類型指的是名字的類型,應與原模塊中定義的類型一致。可以是:型,應與原模塊中定義的類型一致。可以是:u 內存變量型:內存變量型:BYTEBYTE、WORDWORD、DWORDDWORDu 過程型:過程型:NEARNEAR、FARFARu 數值型:數值型:ABSABS 定義本模塊中將要引用的外部模塊中的定義本模塊中將要引用的外部模塊中的名字,它們應在各自的名字,它們應在各自的模塊中

53、已用模塊中已用PUBLICPUBLIC偽指令進行了定義偽指令進行了定義。4.2.44.2.4 過程定義語句過程定義語句4.2 8086 4.2 8086 匯編語言中的偽指令匯編語言中的偽指令v 匯編語言中,用過程的定義來實現子程序功能。匯編語言中,用過程的定義來實現子程序功能。v 過程是程序的一部分,它可以被程序調用。每次可調用一個過程過程是程序的一部分,它可以被程序調用。每次可調用一個過程,當過程中的指令執行完后,控制返回調用它的地方。過程的定,當過程中的指令執行完后,控制返回調用它的地方。過程的定義是用過程定義偽指令完成的。義是用過程定義偽指令完成的。v 格式:格式: 過程名過程名 PRO

54、C PROC NEAR / FARNEAR / FAR 過程體過程體 RET RET 過程名過程名 ENDPENDPv 功能:功能:完成過程定義,在過程體中實現過程的操作功能完成過程定義,在過程體中實現過程的操作功能4.2.44.2.4 過程定義語句過程定義語句4.2 8086 4.2 8086 匯編語言中的偽指令匯編語言中的偽指令v 格式:格式: 過程名過程名 PROC PROC NEAR / FARNEAR / FAR 過程體過程體 RET RET 過程名過程名 ENDPENDPv 功能:功能:完成過程定義,在過程體中實現過程的操作功能完成過程定義,在過程體中實現過程的操作功能v 說明:說

55、明: PROCPROC與與ENDPENDP必須成對出現必須成對出現,PROCPROC開始一個過程,開始一個過程,ENDPENDP結束一個結束一個過程。成對的過程。成對的PROCPROC與與ENDPENDP的前面必須有相同的過程名。的前面必須有相同的過程名。 類型取值為:類型取值為:NEARNEAR(為默認值)或(為默認值)或FARFAR,表示該過程是,表示該過程是段內調用段內調用或段間調用或段間調用。 一個過程中,至少有一條過程返回指令一個過程中,至少有一條過程返回指令RETRET,一般放在,一般放在ENDPENDP之前之前。 過程可以嵌套,但不可以交叉。過程可以嵌套,但不可以交叉。COD1S

56、EGMENTASSUME CS: COD1, ; 代碼段中的其它語句(主程序)代碼段中的其它語句(主程序)SUB1PROC FAR; 名為名為SUB1的的FAR過程開始過程開始 RET; 返回返回SUB1ENDP; SUB1結束結束SUB2PROC ; 名為名為SUB2的的NEAR過程開始過程開始 RET; 返回返回SUB2ENDP; SUB2結束結束; 可能定義的其它過程可能定義的其它過程COD1ENDS; 代碼段結束代碼段結束4.2 8086 4.2 8086 匯編語言中的偽指令匯編語言中的偽指令4.2.54.2.5 結束語句結束語句4.2 8086 4.2 8086 匯編語言中的偽指令匯

57、編語言中的偽指令v 格式:格式:END END 標號標號 v 功能:功能:表示源程序的結束。表示源程序的結束。v 標號指示程序開始執行的起始地址。如果多個程序模標號指示程序開始執行的起始地址。如果多個程序模塊相連接,則只有主程序要使用標號,其他子模塊則塊相連接,則只有主程序要使用標號,其他子模塊則只用只用ENDEND而不必指定標號。而不必指定標號。v END END 是匯編語言源程序中最后一條語句是匯編語言源程序中最后一條語句。DATA DATA SEGMENTSEGMENT; ;定義數據段定義數據段 D1 D1 DB 5 DUP DB 5 DUP(?)(?); ;連續的字節單元連續的字節單元

58、 CC CC EQU $ EQU $D1D1; ;對單元計數對單元計數 SUM SUM DW 0 DW 0; ;為結果保留一個字為結果保留一個字DATA DATA ENDSENDS ; ;數據段定義結束數據段定義結束STACK SEGMENT PARA STACK STACK;定義堆棧段定義堆棧段DB 100 DUP (?)(?);100字節的棧空間字節的棧空間STACK ENDS;堆棧段定義結束堆棧段定義結束CODECODE SEGMENT SEGMENT; ;定義代碼段定義代碼段ASSUME DS:DATADS:DATA,SS:STACKSS:STACK,CS:CODECS:CODE;對各

59、段進行說明對各段進行說明BEGINBEGIN:MOV AXMOV AX,DATADATA ; DS初始化為初始化為DATADATAMOV DSMOV DS,AXAXLEA SILEA SI,D1D1; ;預置源數據的指針預置源數據的指針例例 多個連續字節單元的累加多個連續字節單元的累加定義存儲單定義存儲單元的數據元的數據定義堆棧定義堆棧作堆棧用的存作堆棧用的存儲單元儲單元指令指令段定義語句段定義語句MOV CXMOV CX,CCCC;預置次數預置次數LODS BYTE PTR SILODS BYTE PTR SI;取一個數并修改指針取一個數并修改指針MOV AHMOV AH,0 0;清清AXA

60、X的高字節的高字節CLCCLC;清清CFCF位位BEGINBEGIN:ADC SUMADC SUM,AXAX;累加累加LODS BYTE PTR SILODS BYTE PTR SI;再取數并修改指針再取數并修改指針LOOP BEGINLOOP BEGIN;控制循環控制循環MOV AHMOV AH,4CH4CH;完成,返回完成,返回DOSDOSINT 21HINT 21HCODE CODE ENDSENDS;代碼段結束代碼段結束ENDENDBEGINBEGIN;整個程序結束整個程序結束段定義段定義匯編程序匯編程序結束結束4.34.3 8086 8086 匯編語言中的運算符匯編語言中的運算符4

溫馨提示

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

評論

0/150

提交評論