




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第七講第七講 微型計算機匯編語言微型計算機匯編語言及匯編程序及匯編程序曾鐵軍主要內(nèi)容主要內(nèi)容 宏匯編語言的基本語法宏匯編語言的基本語法1 偽指令偽指令2 宏指令宏指令3 系統(tǒng)功能調(diào)用系統(tǒng)功能調(diào)用4 匯編程序的功能及匯編過程匯編程序的功能及匯編過程5 匯編語言程序設(shè)計匯編語言程序設(shè)計6匯編語言程序設(shè)計與執(zhí)行過程匯編語言程序設(shè)計與執(zhí)行過程v輸入?yún)R編語言源程序輸入?yún)R編語言源程序 源文件源文件 .ASMv匯編編譯)匯編編譯) 目標文件目標文件 .OBJv鏈接鏈接 可執(zhí)行文件可執(zhí)行文件 .EXEv調(diào)試調(diào)試 最終程序最終程序匯編語言源程序的結(jié)構(gòu)匯編語言源程序的結(jié)構(gòu) 匯編語言源程序通常由一個或幾個程序匯編語
2、言源程序通常由一個或幾個程序模塊組成模塊組成, ,每個模塊一般由三個邏輯段組每個模塊一般由三個邏輯段組成:成: 數(shù)據(jù)段數(shù)據(jù)段存放數(shù)據(jù)、變量存放數(shù)據(jù)、變量 堆棧段堆棧段堆棧區(qū)域堆棧區(qū)域 代碼段代碼段存放程序指令存放程序指令v一個基本的匯編語言程序框架如下:一個基本的匯編語言程序框架如下:v stack SEGMENT PARA stackv DB 100 DUP(stack)v stack ENDSv data SEGMENTv v data ENDSv code SEGMENTv ASSUME CS:code, DS:data, ES:datav start: MOV AX, datav MO
3、V DS, AXv MOV ES, AXv v MOV AL, 4CHv INT 21Hv code ENDSv END start v匯編語言的語句有兩種:匯編語言的語句有兩種:v指令性語句指令性語句由由80868086指令助記符構(gòu)成的語句指令助記符構(gòu)成的語句v指示性語句指示性語句由偽指令構(gòu)成的語句由偽指令構(gòu)成的語句v指令性語句的格式為:指令性語句的格式為:v 標號標號: : 指令助記符指令助記符 目的操作數(shù),源操作數(shù)目的操作數(shù),源操作數(shù) ; ;注釋注釋v 指示性語句的格式為:指示性語句的格式為:v 名字名字 偽指令偽指令 操作數(shù)操作數(shù)1,1,操作數(shù)操作數(shù)2,2,操作數(shù)操作數(shù)n n ; ;注
4、釋注釋v v注:各部分之間至少要用一個空格作為分隔符。注:各部分之間至少要用一個空格作為分隔符。指令性語句由指令性語句由CPUCPU執(zhí)行,每一條指令性語句都有一條機器執(zhí)行,每一條指令性語句都有一條機器碼指令與其對應(yīng);碼指令與其對應(yīng);指示性語句由匯編程序執(zhí)行。它指出匯編程序應(yīng)如何對指示性語句由匯編程序執(zhí)行。它指出匯編程序應(yīng)如何對源程序進行匯編,如何定義變量、分配存儲單元以及指示源程序進行匯編,如何定義變量、分配存儲單元以及指示程序開始和結(jié)束等。指示性語句無機器碼指令與其相對應(yīng)程序開始和結(jié)束等。指示性語句無機器碼指令與其相對應(yīng)。 指令性語句匯編時生成機器碼;指令性語句匯編時生成機器碼; 指示性語句
5、匯編時不生成機器碼。指示性語句匯編時不生成機器碼。語句的構(gòu)成元素:語句的構(gòu)成元素:標號標號指令的符號地址,用來代表指令在存儲器中指令的符號地址,用來代表指令在存儲器中的地址。只能出現(xiàn)在指令性語句中,標號后應(yīng)加上的地址。只能出現(xiàn)在指令性語句中,標號后應(yīng)加上冒號。冒號。名字名字段、過程、變量的名字,用來代表它們在存段、過程、變量的名字,用來代表它們在存儲器中的地址。只能出現(xiàn)在指示性語句中,名字后儲器中的地址。只能出現(xiàn)在指示性語句中,名字后不加冒號。不加冒號。指令助記符指令助記符80868086助記符、偽指令助記符、偽指令操作數(shù)操作數(shù)即指令的操作對象即指令的操作對象對指令性語句對指令性語句00,1
6、1,2 2個個對指示性語句對指示性語句根據(jù)需要而定根據(jù)需要而定操作數(shù)之間以逗號分隔操作數(shù)之間以逗號分隔操作數(shù)可以是:寄存器、存儲單元、常數(shù)或表達式操作數(shù)可以是:寄存器、存儲單元、常數(shù)或表達式 v注釋注釋以分號開頭,可放在指令后,也可單獨以分號開頭,可放在指令后,也可單獨一行。一行。v 注意注解的寫法。要寫指令段在程序中注意注解的寫法。要寫指令段在程序中的作用,而不要寫指令的操作。的作用,而不要寫指令的操作。v 例如:以下為同一條指令寫的注釋例如:以下為同一條指令寫的注釋v 1MOV CX,100 ;傳送傳送100到到CXv 2MOV CX,100 ;循環(huán)計數(shù)器置初值循環(huán)計數(shù)器置初值v 顯然,第
7、二種寫法要比第一種寫法要好。顯然,第二種寫法要比第一種寫法要好。 INT 21H INT 21H; ;退回退回DOSDOSprog ENDSprog ENDS END start END start1.1.常量常量二進制數(shù)二進制數(shù), ,以以B B結(jié)尾。如結(jié)尾。如01001101B01001101B。十進制數(shù)十進制數(shù), ,如如8585。十六進制數(shù)十六進制數(shù), ,以以H H結(jié)尾。第結(jié)尾。第1 1個數(shù)字為個數(shù)字為A-FA-F時,時,前面應(yīng)加前面應(yīng)加0 0,如,如0F160H0F160H。字符串:用引號括起來的字符串:用引號括起來的1 1個或多個字符。個或多個字符。如如ERROR!, a,ERROR!
8、, a,匯編時被翻譯成對應(yīng)匯編時被翻譯成對應(yīng)的的ASCIIASCII碼碼45H,52H,52H,4FH,52H,21H45H,52H,52H,4FH,52H,21H和和61H61H。(1) 指令語句中源操作數(shù)中作立即數(shù),它應(yīng)與目指令語句中源操作數(shù)中作立即數(shù),它應(yīng)與目的操作數(shù)的位數(shù)相一致,可以是的操作數(shù)的位數(shù)相一致,可以是8位或位或16位,例位,例如:如:MOVAX,0A5F1H(2) 在指令語句的基址加變址的尋址方式中作位在指令語句的基址加變址的尋址方式中作位移量,例如:移量,例如:MOVBX,SI+32H(3) 在數(shù)據(jù)定義偽指令中,例如:在數(shù)據(jù)定義偽指令中,例如:DB12H; 定義一個字節(jié)數(shù)
9、據(jù)定義一個字節(jié)數(shù)據(jù)DW1234H; 定義一個字數(shù)據(jù)定義一個字數(shù)據(jù)DD12345678H; 定義一個雙字數(shù)據(jù)定義一個雙字數(shù)據(jù)DBA B C D; 定義定義4個字節(jié)的字符串數(shù)據(jù)個字節(jié)的字符串數(shù)據(jù)有三個屬性:有三個屬性: 段地址:即標號所在段的段地址;段地址:即標號所在段的段地址; 偏移量:標號所代表存儲單元的段內(nèi)偏移地址偏移量:標號所代表存儲單元的段內(nèi)偏移地址; 類類 型:型:NEARNEAR或或FARFAR: NEAR NEAR表示標號所在語句與轉(zhuǎn)移指令表示標號所在語句與轉(zhuǎn)移指令/ / 調(diào)用指令在同一碼段內(nèi)調(diào)用指令在同一碼段內(nèi), ,跳轉(zhuǎn)跳轉(zhuǎn)時時 只需改變只需改變IPIP即可。即可。 FAR FA
10、R標號所在語句與轉(zhuǎn)移指令標號所在語句與轉(zhuǎn)移指令/ /調(diào)調(diào)用用 指令不在同一代碼段內(nèi)。指令不在同一代碼段內(nèi)。 若沒有對類型進行說明若沒有對類型進行說明, ,默認為默認為NEARNEAR。標號通常作為轉(zhuǎn)移指令或標號通常作為轉(zhuǎn)移指令或CALLCALL指令的轉(zhuǎn)移地址。指令的轉(zhuǎn)移地址。2.2.標號標號 變量變量即內(nèi)存中的存儲單元或數(shù)據(jù)區(qū)。即內(nèi)存中的存儲單元或數(shù)據(jù)區(qū)。 變量名變量名是存儲單元是存儲單元( (數(shù)據(jù)區(qū)數(shù)據(jù)區(qū)) )的符號地的符號地 址或名字。址或名字。變量也有三個屬性變量也有三個屬性: :段地址段地址變量所在段的段地址變量所在段的段地址偏移量偏移量變量單元地址與段首地址之間的位移量。變量單元地址
11、與段首地址之間的位移量。類類 型型有有BYTEBYTE、WORDWORD和和DWORDDWORD三種。三種。變量在程序中作為存儲器操作數(shù)被引用。變量在程序中作為存儲器操作數(shù)被引用。3.3.變量變量v標號和變量名的使用規(guī)則標號和變量名的使用規(guī)則v組成:組成:A-Z(不分大小寫不分大小寫), 0-9, ? . _ $v不能以數(shù)字開頭,句號不能以數(shù)字開頭,句號(.)只能作為首字符只能作為首字符v長度小于長度小于31個字符個字符v不能與保留字不能與保留字(指令助記符、偽指令、預(yù)定義符號指令助記符、偽指令、預(yù)定義符號等等)重名重名v不能重復(fù)定義不能重復(fù)定義v例如:例如:v 正確的:正確的:LP1, AG
12、AIN, NEXT, _GO, OK_1v 錯誤的:錯誤的:4M, LOOP, AAA, #HELP, +ONEVAR_DATA SEGMENTDATA1DB 12HDATA2DB ?DATA3DW5678HSTRING1 DB ABCDD_B1 DB DUP(4)VAR_DATA ENDSMOV AL, DATA1MOV AX, DATA3表達式是常數(shù)、寄存器、標號、變量與運算符的表達式是常數(shù)、寄存器、標號、變量與運算符的組合。組合。有數(shù)字表達式和地址表達式兩種。有數(shù)字表達式和地址表達式兩種。匯編時按優(yōu)先規(guī)則對表達式進行計算,計算出具匯編時按優(yōu)先規(guī)則對表達式進行計算,計算出具體的數(shù)值或地址。
13、運行時不能改變。體的數(shù)值或地址。運行時不能改變。表達式中的運算符有表達式中的運算符有6 6類:算術(shù)、邏輯、關(guān)系、類:算術(shù)、邏輯、關(guān)系、取地址、屬性、雜類。取地址、屬性、雜類。用于數(shù)字表達式用于數(shù)字表達式, ,例:例: MOV AX,4 MOV AX,4* *10241024匯編后的形式為匯編后的形式為: : MOV AX,4096 MOV AX,4096 用于地址表達式用于地址表達式, ,例例: : LEA SI,TAB+3 LEA SI,TAB+3若若TABTAB的偏移地址為的偏移地址為1000H1000H,則匯編后的形式為:,則匯編后的形式為: LEA SI,1003H LEA SI,10
14、03H 1)1)算術(shù)運算符算術(shù)運算符 + +、- -、* *、/ /,MODMOD邏輯運算符只能用于數(shù)字表達式中。邏輯運算符只能用于數(shù)字表達式中。 例:例:MOVMOV CL,36H AND 0FHCL,36H AND 0FH 經(jīng)匯編后:經(jīng)匯編后:MOV CL,06HMOV CL,06H留意,不要把邏輯運算符與邏輯運算指令混淆:留意,不要把邏輯運算符與邏輯運算指令混淆: 例:例:AND AX, 3FC0H AND 0FF00HAND AX, 3FC0H AND 0FF00H 匯編后源操作數(shù)被翻譯為:匯編后源操作數(shù)被翻譯為:3F00H3F00H,所以上述指,所以上述指令與令與AND AX, 3F
15、00HAND AX, 3F00H等價。等價。2)2)邏輯運算符邏輯運算符 AND AND、OROR、XORXOR、NOTNOT關(guān)系運算的結(jié)果是一個邏輯值:真或假關(guān)系運算的結(jié)果是一個邏輯值:真或假 關(guān)系為真關(guān)系為真, ,結(jié)果為全結(jié)果為全1 1 關(guān)系為假關(guān)系為假, ,結(jié)果為全結(jié)果為全0 0例:例:MOV BX,PORT GT 300HMOV BX,PORT GT 300H 若若PORTPORT的值大于的值大于300H,300H,則匯編后為:則匯編后為: MOV BX,0FFFFH MOV BX,0FFFFH 否則匯編后為:否則匯編后為: MOV BX,0 MOV BX,03)3)關(guān)系運算符關(guān)系運算
16、符EQEQ、NENE、LTLT、GTGT、LELE、GEGE4)取地址運算符取地址運算符-SEGOFFSETSEG:取變量:取變量/標號的段地址標號的段地址OFFSET:取變量:取變量/標號的偏移地址標號的偏移地址例:例:VAR DB 12H MOV BX,OFFSET VAR ;取變量;取變量VAR的的偏移地址偏移地址 MOV AX,SEG VAR ;取變量;取變量VAR的的段地址段地址留意,以下指令的異同:留意,以下指令的異同: MOV BX, OFFSET VAR LEA BX, VAROFFSET只能取靜態(tài)的偏移地址;只能取靜態(tài)的偏移地址;LEA指令即可取靜態(tài)的偏移地址,也可取動態(tài)的偏
17、移地指令即可取靜態(tài)的偏移地址,也可取動態(tài)的偏移地址。址。 vTYPE 取變量的類型取變量的類型1,2,4)vLENGTH 取所定義變量的長度取所定義變量的長度v (即變量中元素的個數(shù))(即變量中元素的個數(shù))vSIZE 取所定義存儲區(qū)的字節(jié)數(shù)取所定義存儲區(qū)的字節(jié)數(shù)v (=TYPE*LENGTH)v例:例:VAR DW 1,2,3,4,5 v 那么那么 TYPE VAR = 2v LENGTH VAR = 5v SIZE VAR = 105)5)取值運算符取值運算符TYPETYPE、LENGTHLENGTH、SIZESIZE6)6)屬性運算符屬性運算符PTRPTR用來指定地址操作數(shù)的類型。用來指定
18、地址操作數(shù)的類型。格式:格式: PTR PTR 類型類型BYTE, WORD, DWORD, BYTE, WORD, DWORD, NEAR, FARNEAR, FARBYTEBYTE、WORDWORD、DWORDDWORD 用于描述數(shù)據(jù)存儲單元用于描述數(shù)據(jù)存儲單元( (變量變量) )地址地址NEARNEAR、FARFAR 用于描述轉(zhuǎn)移、調(diào)用的目的地址用于描述轉(zhuǎn)移、調(diào)用的目的地址例:例:MOVMOVBYTE PTRDI,0 ;BYTE PTRDI,0 ;字節(jié)類型字節(jié)類型 MOV MOVWORD PTRDI,0 ;WORD PTRDI,0 ;字類型字類型 MOV MOVDI,0B5H ;DI,0
19、B5H ;類型不定類型不定PTRPTR也可用來進行強制類型轉(zhuǎn)換也可用來進行強制類型轉(zhuǎn)換例:例:STR1 DW STR1 DW ? ;STR1 ;STR1定義為字類型定義為字類型 MOV MOVAX,STR1 ;AX,STR1 ;合法合法 MOV MOVAL,STR1 ;AL,STR1 ;非法非法 MOV AL,BYTE PTR STR1 ; MOV AL,BYTE PTR STR1 ;合法合法vLOW 取低字節(jié)取低字節(jié)vHIGH 取高字節(jié)取高字節(jié)v例:設(shè)例:設(shè)SSY = 2050H vMOV AL , LOW 3080H; AL=80HvMOV AH, HIGH SSY; AH=20HvMOV
20、 CL, LOW 3A4BH; CL=4BH7)7)分離運算符分離運算符LOWLOW、HIGHHIGH8) 8) 運算優(yōu)先級見運算優(yōu)先級見P160P160表表7-27-27.2 偽指令偽指令v數(shù)據(jù)定義偽指令數(shù)據(jù)定義偽指令v符號定義偽指令符號定義偽指令v段定義和段寄存器指定偽指令段定義和段寄存器指定偽指令v過程定義偽指令過程定義偽指令v結(jié)束偽指令結(jié)束偽指令 由匯編程序執(zhí)行的指令,它本身不被匯編由匯編程序執(zhí)行的指令,它本身不被匯編成機器指令。常用的偽指令有:成機器指令。常用的偽指令有:1 1) 數(shù)據(jù)定義偽指令數(shù)據(jù)定義偽指令 用于定義變量,即內(nèi)存單元或數(shù)據(jù)區(qū)。數(shù)據(jù)定義用于定義變量,即內(nèi)存單元或數(shù)據(jù)區(qū)
21、。數(shù)據(jù)定義偽指令的格式為:偽指令的格式為:變量名變量名 數(shù)據(jù)定義偽指令數(shù)據(jù)定義偽指令 操作數(shù),操作數(shù),操作數(shù),操作數(shù),常用的數(shù)據(jù)定義偽指令有如下幾種:常用的數(shù)據(jù)定義偽指令有如下幾種: DB DB 定義字節(jié)定義字節(jié) DW DW 定義字定義字 DD DD 定義雙字定義雙字操作數(shù)可以是常數(shù)、變量或表達式操作數(shù)可以是常數(shù)、變量或表達式例例1 1:DATA_B DB 10,5,10HDATA_B DB 10,5,10HDATA_W DW 100H,-4DATA_W DW 100H,-4DATA_D DD 0FFFBHDATA_D DD 0FFFBH匯編后的內(nèi)存分配情況匯編后的內(nèi)存分配情況如右圖所示。如右
22、圖所示。例例2 2:操作數(shù)可以是字符串,例如:操作數(shù)可以是字符串,例如STR DBSTR DBHELLOHELLO匯編后的情況如圖:匯編后的情況如圖:操作數(shù)操作數(shù)? ?用來保留存儲空間用來保留存儲空間, ,但不存入數(shù)據(jù)但不存入數(shù)據(jù). .例例3 3:ABC DB 0,1,2,3,4,OK,$ABC DB 0,1,2,3,4,OK,$ RSV DW ?,?,?,?,?,?,?,? RSV DW ?,?,?,?,?,?,?,?復(fù)制操作符復(fù)制操作符DUP:DUP:重復(fù)的數(shù)據(jù)可以使用復(fù)制操作符重復(fù)的數(shù)據(jù)可以使用復(fù)制操作符DUP,DUP,如上面如上面RSVRSV亦亦可寫成可寫成: : RSV DW 8 D
23、UP(?) RSV DW 8 DUP(?)若操作數(shù)中若使用若操作數(shù)中若使用$,$,則表示的是地址計數(shù)器的當則表示的是地址計數(shù)器的當前值。前值。v例:例: TABLE DB 10 DUP(?) TABLE DB 10 DUP(?)v BUFFER DW TABLE,$+3 BUFFER DW TABLE,$+3v設(shè)設(shè)TABLETABLE的偏移地址為的偏移地址為0080H,0080H,則匯編后如下圖所則匯編后如下圖所示:示:2 2符號定義偽指令符號定義偽指令 把一個表達式用一個符號表示,以后凡出現(xiàn)該表把一個表達式用一個符號表示,以后凡出現(xiàn)該表達式的地方都可用這個符號表示。類似于達式的地方都可用這個
24、符號表示。類似于C C語言中語言中的的#define#define。符號定義偽指令有兩種:符號定義偽指令有兩種:EQUEQU,= =用用EQUEQU定義的符號未清除前定義的符號未清除前, ,不能重新定不能重新定義。清除義。清除EQUEQU定義可用定義可用PURGEPURGE偽指令。偽指令。用用”=”=”定義的符號可在任何時候進行重定義的符號可在任何時候進行重定義。定義。二者均不占用存儲空間二者均不占用存儲空間, ,僅是給符號賦值僅是給符號賦值 例:例:FIVE EQU 5FIVE EQU 5 COUNT EQU CX COUNT EQU CX TEN EQU 10 TEN EQU 10 DIS
25、T = BYTE PTRSI+BP DIST = BYTE PTRSI+BP GOTO = JMP GOTO = JMP MOV AX, TEN MOV AX, TEN MOV CX, COUNT MOV CX, COUNT ADD DIST, FIVE ADD DIST, FIVE DIST = WORD PTRSI+BP+1 DIST = WORD PTRSI+BP+1 ADD DIST, AX ADD DIST, AX GOTO LABEL GOTO LABEL 3 3段定義偽指令段定義偽指令 匯編語言程序是按段來組織程序和數(shù)據(jù)的。匯編語言程序是按段來組織程序和數(shù)據(jù)的。 和存儲器的物理段
26、相對應(yīng),匯編語言程序中的段和存儲器的物理段相對應(yīng),匯編語言程序中的段稱為邏輯段。匯編連接后被映射到物理段中。稱為邏輯段。匯編連接后被映射到物理段中。 三類段:代碼三類段:代碼( (程序程序) )、數(shù)據(jù)、堆棧、數(shù)據(jù)、堆棧 段定義偽指令:段定義偽指令:SEGMENTSEGMENT、ENDSENDS、ASSUMEASSUME、ORGORG 定義一個段的基本格式:定義一個段的基本格式: 段名段名 SEGMENT SEGMENT 定位類型定位類型組合方式組合方式類別類別 段名段名 ENDS ENDS 這兩個偽指令總是成對出現(xiàn),二者前面的段名這兩個偽指令總是成對出現(xiàn),二者前面的段名應(yīng)一致。應(yīng)一致。SEGM
27、ENTSEGMENT說明了一個段的開始,說明了一個段的開始,ENDSENDS說說明了一個段的結(jié)束。明了一個段的結(jié)束。 對數(shù)據(jù)段和堆棧段,段中的語句一般是變量定對數(shù)據(jù)段和堆棧段,段中的語句一般是變量定義。對代碼段則是指令語句。義。對代碼段則是指令語句。 如:如: data SEGMENT data SEGMENT data ENDS data ENDS SEGMENT和和ENDS偽指令偽指令A(yù)SSUME偽指令偽指令在代碼段中,還必須明確段和段寄存器的關(guān)系,在代碼段中,還必須明確段和段寄存器的關(guān)系,這由這由ASSUMEASSUME語句來指定。如語句來指定。如 ASSUME CS:code, DS:
28、data, ES:data ASSUME CS:code, DS:data, ES:data 語句中的語句中的codecode和和datadata為段名。為段名。 這個語句說明:這個語句說明: 1. CS 1. CS將指向名字為將指向名字為codecode的代碼段的代碼段 2. DS 2. DS和和ESES將指向名字為將指向名字為datadata的數(shù)據(jù)段的數(shù)據(jù)段但要注意但要注意,ASSUME,ASSUME偽指令只是告知匯編程序有關(guān)偽指令只是告知匯編程序有關(guān)段寄存器與段的關(guān)系段寄存器與段的關(guān)系, ,并沒有給段寄存器賦予實并沒有給段寄存器賦予實際的初值。故下面的語句際的初值。故下面的語句 MOV
29、MOVAX,DATAAX,DATA MOV MOVDS,AXDS,AX MOV MOVES,AXES,AX將段基址裝入段寄存器。如果程序中用到堆棧段將段基址裝入段寄存器。如果程序中用到堆棧段,則,則SSSS也需裝入實際的初值。也需裝入實際的初值。代碼段基地址不需要程序員裝入代碼段基地址不需要程序員裝入CSCS寄存器,而由寄存器,而由OSOS負責裝入。負責裝入。SEGMENT語句后可以帶有可選參數(shù),用以規(guī)定語句后可以帶有可選參數(shù),用以規(guī)定邏輯段的其他一些屬性。邏輯段的其他一些屬性。1) 定位類型定位類型說明如何確定邏輯段的邊界。有四種:說明如何確定邏輯段的邊界。有四種:PARA(Paragrap
30、h): 邏輯段從一個節(jié)邏輯段從一個節(jié) (16個字節(jié)個字節(jié)) 的邊界開始。即段的起始的邊界開始。即段的起始地址應(yīng)能被地址應(yīng)能被16整除整除, 或這說段起始物理或這說段起始物理地址應(yīng)為地址應(yīng)為0H。默認類型默認類型BYTE : 邏輯段從字節(jié)邊界開始,即段可邏輯段從字節(jié)邊界開始,即段可以從任何地址開始。以從任何地址開始。WORD : 邏輯段從字邊界開始。即段的邏輯段從字邊界開始。即段的起始地址必須是偶數(shù)。起始地址必須是偶數(shù)。PAGE : 邏輯段從頁邊界開始。邏輯段從頁邊界開始。256字節(jié)字節(jié)稱為一頁,故段的起始物理地址應(yīng)為稱為一頁,故段的起始物理地址應(yīng)為00H。 2) 組合類型組合類型說明不同模塊中
31、同名段的組合方式。說明不同模塊中同名段的組合方式。PUBLIC: 所有此類型的同名段組合成一個邏輯段,公用一個段地址,運行時裝入同一個物理段中。所有此類型的同名段組合成一個邏輯段,公用一個段地址,運行時裝入同一個物理段中。COMMON : 所有此類型的同名段具有相同的起始地址所有此類型的同名段具有相同的起始地址(覆蓋覆蓋),共享相同的存儲區(qū)域。,共享相同的存儲區(qū)域。AT : 按絕對地址定位,段地址就是表達式的值。按絕對地址定位,段地址就是表達式的值。STACK : 專用于說明堆棧段,組合方式同專用于說明堆棧段,組合方式同PUBLIC3) 類別類別用單引號括起來的字符串。所有同類別的段被安用單引
32、號括起來的字符串。所有同類別的段被安排在連續(xù)的存儲區(qū)域中。排在連續(xù)的存儲區(qū)域中。如:在模塊如:在模塊1中有段定義:中有段定義: seg1 SEGMENT PARA STACK stack seg1 ENDS 在模塊在模塊2中有段定義:中有段定義: seg2 SEGMENT PARA STACK stack seg2 ENDS則連接時這兩個段被安排在一起。則連接時這兩個段被安排在一起。ORG規(guī)定了段內(nèi)的指令或數(shù)據(jù)存放的開始地址規(guī)定了段內(nèi)的指令或數(shù)據(jù)存放的開始地址(偏移地址的初值偏移地址的初值),其格式為:,其格式為: ORG 表達式的值即為開始地址,從此地址起連續(xù)存放表達式的值即為開始地址,從此
33、地址起連續(xù)存放程序或數(shù)據(jù)。程序或數(shù)據(jù)。例:例: ABC SEGMENT ORG 100H begin: ABC ENDS 4ORG偽指令偽指令指令從100H開始存放5 5過程定義偽指令過程定義偽指令PROCPROC、ENDPENDP 過程就是子程序。一個過程可以被其它程序所調(diào)過程就是子程序。一個過程可以被其它程序所調(diào)用用( (用用CALLCALL指令指令) ),過程的最后一條指令一般是返回,過程的最后一條指令一般是返回指令指令(RET)(RET)。 過程定義偽指令的格式為過程定義偽指令的格式為 PROC PROC 類型類型 RET RET ENDP ENDP 留意:留意:PROCPROC和和E
34、NDPENDP必須成對出現(xiàn)。必須成對出現(xiàn)。 過程的類型有兩種:過程的類型有兩種: NEAR( NEAR(默認類型默認類型) )表示段內(nèi)調(diào)用表示段內(nèi)調(diào)用 FAR FAR表示段間調(diào)用表示段間調(diào)用 調(diào)用一個過程的格式為:調(diào)用一個過程的格式為:CALL CALL 6)6)模塊開始偽指令模塊開始偽指令 格式:格式:NAME NAME 模塊名模塊名 該偽指令指明程序模塊的開始,并指出模塊名。該偽指令指明程序模塊的開始,并指出模塊名。7)7)模塊結(jié)束偽指令模塊結(jié)束偽指令 格式:格式:END END 啟動標號或過程名啟動標號或過程名 該偽指令告訴匯編程序源文件結(jié)束,并給出執(zhí)行程序的入該偽指令告訴匯編程序源文件
35、結(jié)束,并給出執(zhí)行程序的入口地址??诘刂?。ENDEND后跟的表達式通常就是程序第一條指令的標號,后跟的表達式通常就是程序第一條指令的標號,指示程序的啟動地址指示程序的啟動地址( (要執(zhí)行的第一條指令的地址要執(zhí)行的第一條指令的地址) )。 在主模塊中,啟動標號或者過程名才有意義。分模塊中,在主模塊中,啟動標號或者過程名才有意義。分模塊中,模塊結(jié)束偽指令只寫模塊結(jié)束偽指令只寫ENDEND。7.3 宏指令宏指令宏代換語句宏代換語句 如果需要多次使用同一個程序段,可以將這個程序段定如果需要多次使用同一個程序段,可以將這個程序段定義為一個宏指令義為一個宏指令”,然后在需要時,可簡單地用宏指令名來,然后在需
36、要時,可簡單地用宏指令名來代替這個程序段。代替這個程序段。格式:格式: MACRO MACRO 形參形參1 1,形參,形參2 2, ENDM ENDM宏指令使用的步驟:宏指令使用的步驟:(1)宏定義:對各個宏指令進行定義,并分別起名字宏定義:對各個宏指令進行定義,并分別起名字(2)宏調(diào)用:在需要使用宏指令的地方,通過宏指令名來調(diào)用宏調(diào)用:在需要使用宏指令的地方,通過宏指令名來調(diào)用(3)宏擴展:由宏匯編程序用宏定義中的指令來代替宏調(diào)用中宏擴展:由宏匯編程序用宏定義中的指令來代替宏調(diào)用中的宏指令名。的宏指令名。例例: :兩個數(shù)之和的宏定義和宏調(diào)用。兩個數(shù)之和的宏定義和宏調(diào)用。 宏定義為:宏定義為:
37、DADD MACRO XDADD MACRO X,Y Y,Z Z MOV AX MOV AX,X X ADD AX ADD AX,Y Y MOV Z MOV Z,AXAX ENDM ENDMX X、Y Y、Z Z是形式參數(shù)。調(diào)用宏是形式參數(shù)。調(diào)用宏DADDDADD時可寫為:時可寫為: DADD DATA1 DADD DATA1,DATA2DATA2,SUMSUMDATA1DATA1,DATA2DATA2,SUMSUM是實際參數(shù),由它們替換定義中的是實際參數(shù),由它們替換定義中的X X、Y Y、Z Z。例:宏定義為:例:宏定義為: DISPLAY MACRO STRING LEA DX,STRIN
38、G MOV AH,9 INT 21H ENDM 程序中宏調(diào)用:程序中宏調(diào)用: DISPLAY ERROR_MESSAGE DISPLAY EXIT_MESSAGE 匯編后的結(jié)果:匯編后的結(jié)果:(帶有帶有+號的指令為宏展開后的結(jié)果號的指令為宏展開后的結(jié)果) + LEA DX,ERROR_MESSAGE + MOV AH,9 + INT 21H + LEA DX,EXIT_MESSAGE + MOV AH,9 + INT 21H 當需要多次執(zhí)行的同一個程序段比較長,對速度的當需要多次執(zhí)行的同一個程序段比較長,對速度的要求不很高,并且不要求修改參數(shù)的條件下,可以采要求不很高,并且不要求修改參數(shù)的條件
39、下,可以采用過程調(diào)用方式;用過程調(diào)用方式; 程序段比較短,希望每次調(diào)用中可以修改參數(shù)的條程序段比較短,希望每次調(diào)用中可以修改參數(shù)的條件下,可以采用宏調(diào)用方式;件下,可以采用宏調(diào)用方式;7.4 系統(tǒng)功能調(diào)用系統(tǒng)功能調(diào)用系統(tǒng)功能調(diào)用:由系統(tǒng)功能調(diào)用:由OSOS提供的一組實現(xiàn)特殊功能的子程提供的一組實現(xiàn)特殊功能的子程序供程序員在程序中調(diào)用,以減輕編程工作量。序供程序員在程序中調(diào)用,以減輕編程工作量。用戶程序在調(diào)用這些系統(tǒng)服務(wù)程序時,不是用用戶程序在調(diào)用這些系統(tǒng)服務(wù)程序時,不是用CALLCALL命命令,而是采用軟中斷指令令,而是采用軟中斷指令 INT n INT n 來實現(xiàn)。來實現(xiàn)。在在DOSDOS系
40、統(tǒng)中,系統(tǒng)功能調(diào)用都是用軟中斷指令系統(tǒng)中,系統(tǒng)功能調(diào)用都是用軟中斷指令I(lǐng)NT INT 21H21H來實現(xiàn)的。來實現(xiàn)的。D0SD0S系統(tǒng)功能調(diào)用的使用方法如下:系統(tǒng)功能調(diào)用的使用方法如下: 傳送入口參數(shù)到指定的寄存器中;傳送入口參數(shù)到指定的寄存器中; AHAH功能號;功能號; 執(zhí)行執(zhí)行INT 21HINT 21H指令;指令;1. 1. 鍵盤輸入單字符鍵盤輸入單字符( (功能號功能號=1)=1) MOV AH,1 MOV AH,1 INT 21H INT 21H 沒有入口參數(shù),執(zhí)行時,系統(tǒng)等待鍵盤輸入,待沒有入口參數(shù),執(zhí)行時,系統(tǒng)等待鍵盤輸入,待程序員按下任何一個鍵,若是程序員按下任何一個鍵,若是
41、Ctrl-BreakCtrl-Break鍵則退出,鍵則退出,若不是,則將鍵入字符的若不是,則將鍵入字符的ASCIIASCII碼置入碼置入ALAL中,并在顯中,并在顯示器上顯示。示器上顯示。 例例: :程序中有時需要用戶對提示做出應(yīng)答。程序中有時需要用戶對提示做出應(yīng)答。 GET_KEY: MOV AH,1 ; GET_KEY: MOV AH,1 ;等待鍵入字符等待鍵入字符 INT 21H INT 21H ; ;結(jié)果在結(jié)果在ALAL中中 CMP AL, CMP AL,Y Y ; ;是是Y Y? ? JZ YES JZ YES ; ;是是, ,轉(zhuǎn)轉(zhuǎn)YESYES CMP AL, CMP AL,N N
42、; ;是是N N? ? JZ NO JZ NO; ;是是, ,轉(zhuǎn)轉(zhuǎn)NONO JMP GET_KEY JMP GET_KEY; ;否則繼續(xù)等待輸入否則繼續(xù)等待輸入 YES: YES: NO: NO: 2.2.鍵盤輸入字符串鍵盤輸入字符串( (功能號功能號=0AH)=0AH) 功能:從鍵盤輸入一串字符并把它存入用戶指定的緩沖區(qū)中,功能:從鍵盤輸入一串字符并把它存入用戶指定的緩沖區(qū)中,此緩沖區(qū)必須預(yù)先指定。此緩沖區(qū)必須預(yù)先指定。格式:格式: MOV DX, MOV DX, MOV AH, 0AH MOV AH, 0AH INT 21H INT 21H N3 N2N1N1: 緩沖區(qū)能存放的字節(jié)數(shù)緩沖區(qū)
43、能存放的字節(jié)數(shù)N2: 留給系統(tǒng)填寫實際鍵入的字符數(shù)留給系統(tǒng)填寫實際鍵入的字符數(shù)(不包括回車符不包括回車符)N3:存放鍵入的字符串,長度為:存放鍵入的字符串,長度為N1個字節(jié),回車鍵個字節(jié),回車鍵(ODH)標志著鍵入內(nèi)容結(jié)束,標志著鍵入內(nèi)容結(jié)束, 也算作鍵入字符。若沒有回車毽,則不接受鍵入的字符。也算作鍵入字符。若沒有回車毽,則不接受鍵入的字符。用戶定義的輸入字符串的緩沖區(qū)格式:用戶定義的輸入字符串的緩沖區(qū)格式: 若用戶鍵入的字符數(shù)若用戶鍵入的字符數(shù)( (包括回車包括回車) )不足以填滿緩沖區(qū)不足以填滿緩沖區(qū)時,則空余字節(jié)補時,則空余字節(jié)補0 0,若實際鍵入的字符數(shù)超過緩沖區(qū),若實際鍵入的字符數(shù)
44、超過緩沖區(qū)的容量,則超出的字符將被丟失,并且響鈴向程序員發(fā)的容量,則超出的字符將被丟失,并且響鈴向程序員發(fā)出警告。出警告。例:設(shè)在數(shù)據(jù)段定義鍵盤緩沖區(qū)如下:例:設(shè)在數(shù)據(jù)段定義鍵盤緩沖區(qū)如下: STR1 DB 10,?,10 DUP(?) STR1 DB 10,?,10 DUP(?) 調(diào)用調(diào)用DOSDOS功能的功能的0AH0AH號功能的程序段為:號功能的程序段為: LEA DX LEA DX,STR1STR1 MOV AH MOV AH,0AH0AH INT 21H INT 21H 此程序段最多從鍵盤接收此程序段最多從鍵盤接收1010個字符包括回車)。個字符包括回車)。3.3.輸出單字符輸出單字符( (功能號功能號=2)=2) MOV DL, MOV DL, MOV AH, 2 MOV AH, 2 INT 21H INT 21H 例:在顯示器上顯示一個字符例:在顯示器上顯示一個字符AA MOV DL, A ; MOV DL, A ;或或
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- ipfs礦機合同范例
- 信托通道業(yè)務(wù)合同范例
- 普魯蘭多糖-海藻酸鈉復(fù)合膜在柑橘果實防腐保鮮作用中的研究
- 雙腿輪式機器人復(fù)雜運動控制算法設(shè)計
- 體型參數(shù)對旋流排沙渠道水沙特性的影響
- 辦公飲品售賣合同范例
- 礦井水中典型有機污染物風(fēng)險評估及光化學(xué)降解技術(shù)研究
- 過渡族金屬有機框架納米陣列的電催化及光輔助電催化性能研究
- 健身房員工合同范例
- 公司采購合同范例6
- SB-T 11238-2023 報廢電動汽車回收拆解技術(shù)要求
- 《商朝的發(fā)展》課件
- 開題報告-基于單片機的溫度控制系統(tǒng)設(shè)計
- 北師版四下數(shù)學(xué)數(shù)學(xué)好玩教材分析公開課課件教案
- 山羊傳染性胸膜肺炎的防治
- 設(shè)計交底與圖紙會審會議紀要
- 北師大版完整版英語完形填空練習(xí)題40篇
- 統(tǒng)編版語文三年級上冊期中課外閱讀大闖關(guān)(含答案)
- 多樣生態(tài)茶園建設(shè)方案
- 電子商務(wù)專升本考試(習(xí)題卷7)
- 莖木類中藥鑒定技術(shù)-通草、鉤藤的鑒定
評論
0/150
提交評論