第四章 匯編語言程序設計的格式ppt課件_第1頁
第四章 匯編語言程序設計的格式ppt課件_第2頁
第四章 匯編語言程序設計的格式ppt課件_第3頁
第四章 匯編語言程序設計的格式ppt課件_第4頁
第四章 匯編語言程序設計的格式ppt課件_第5頁
已閱讀5頁,還剩96頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1,第四章 偽指令及匯編語言源程序程序結構,匯編語言語句種類及格式 偽操作 匯編語言的上機過程,2,匯編程序功能,運行匯編語言程序的步驟: (1)用編輯程序建立ASM源文件 (2)用MASM程序把ASM文件轉換成OBJ文件 (3)LINK (4)用DOS 命令運行,3,匯編語言語句種類及格式,指令語句 偽指令語句 宏指令,4,一、指令語句,使CPU產生動作、并在程序執(zhí)行時才處理的語句,就是第3章學習的指令 書寫格式 標號: 指令助記符 DEST ,SRC ;注釋 標號:一條指令的符號地址??梢允÷?,如有必須以“:”作為結束標志。在程序段或子程序段的第一條指令處可使用標號,以在程序需要時轉移到該

2、處時,以標號的形式引用。,5,指令語句標號的命名,標號的命名:根據用途,由字母、數字、專用符號? - $ 約定: 最長31個字符 第一個字符不能是數字 ? - $可出現在標號的任意位置,但? $不能單獨使用 . 只能出現在起始位置 一個程序中,每個標識符的定義是唯一的,且不能與任何保留字相同,6,二、偽指令語句,(Directive)不產生CPU動作、在程序執(zhí)行前由匯編程序處理的說明性語句,例如,數據說明、變量定義等等 偽指令與具體的處理器類型無關,但與匯編程序的版本有關 名字 偽指令 操作數 ;注釋,7,偽指令語句格式說明,符號名字段: 與標號相區(qū)別,不帶“:” 可以是常量名、變量名、過程名

3、、結構名、記錄名等 可視為指令語句中的操作數(如符號名就表示一個常量或存儲地址 命名規(guī)則與標號相同 偽指令字段:規(guī)定這條語句要求匯編程序完成的具體操作,8,4.2 偽操作,一、數據定義及存儲器分配偽操作 二、表達式賦值偽操作 三、段定義偽操作 四、程序開始和結束偽操作 五、地址計數器及對準偽操作 六、基數控制偽操作 七、處理器選擇偽操作,9,一、數據定義及存儲器分配偽操作,數據是語句中操作數的基本組成部分 一般來講數據具有數值和屬性兩個特征 匯編語言能識別的數據項包括:常數、變量和標號,10,一、數據定義及存儲器分配偽操作,變量:代表存儲在某些存儲單元中的數據,在程序運行期間可以修改;對變量的

4、訪問以變量名的形式進行;可認為變量名為存儲單元的符號地址 變量的定義與預置 由數據定義偽操作完成,分配存儲單元 起名字 賦初值,11,一、數據定義偽指令的格式,變量名,DB DW DD DQ,表達式1,表達式2,,段屬性(SEG):表示變量存放在哪個邏輯段中,訪問時要使之成為當前段 偏移量屬性(OFFSET):表示變量在所屬邏輯段中距起始點的距離 類型屬性(TYPE):表示變量所占字節(jié)數,12,一、數據定義偽指令(表達式),數值表達式 D1 DB 12H,34H,56H (D1)=12H, (D1+1)=34H, (D1+2)=56H D2 DW 1234H,5678H (D2)=1234H,

5、 (D2+2)=5678H ?表達式:表示該單元的內容任意 D3 DB ?,?;表示分配2個字節(jié) D4 DW ?,?;表示分配2個字,13,一、數據定義偽指令(表達式),字符串表達式 STR1 DB ABCDE ;為每個字符分配1個單元,辨析:STR1 DB AB STR2 DW BA,當定義字符串中字符多于兩個時,只能用DB定義,不用DW。,14,一、數據定義偽指令(表達式),帶DUP的表達式,變量名,DB DW DD DQ,表達式1 DUP(表達式2),D1 DB 20H DUP(?) ;預留20H個字節(jié),內容任意,D2 DB 10H DUP(ABCD) ;重復10H個ABCD,共占40H

6、字節(jié),D3 DW 10H DUP(4) ;重復10H個字單元,內容0004H,共占20H字節(jié),15,一、數據定義偽指令(表達式),帶DUP的表達式DUP操作符可重復使用,D4 DB 10H DUP(4 DUP(2),7),;重復10H個(2,2,2,2,7),共占50H字節(jié),16,一、數據定義偽指令(表達式),TABLE DW PAR1 DW PAR2 DW PAR3 ;只存儲偏移地址 DATA DD DATA1 DD DATA2 ;第一個字存偏移地 ; 址,第二個字存段 ;地址,17,一、數據定義偽指令(表達式),例 OPER1 DB ?,? OPER2 DW ?,? MOV OPER1,

7、0 MOV OPER2, 0,18,一、數據定義偽指令(表達式),OPER1 DB 1,2 OPER2 DW 1234H, 5678H MOV AX, OPER1+1 MOV AL, OPER2,?,MOV AX, WORD PTR OPER1+1 MOV AL, BYTE PTR OPER2,AX=3402 AL=12,19,二、表達式賦值偽操作,等值語句 符號 EQU 表達式 ;將表達式的值賦給左邊的符號,表達式的形式 1) 常數或數值表達式 CNT EQU 5 NUM EQU 13+5+4,2) 址表達式 ADR1 EQU DS:BP+14,3) 變量、標號或指令助記符 W0 EQU W

8、ORD PTR DA_BYTE,20,二、表達式賦值偽操作,AB EQU DATA+2 該指令必須在DATA定義 之后,方可使用。,等值語句僅在匯編源程序時作為替代符號用,不產生任何目標代碼,不占存儲單元 在同一程序中,同一符號不能用EQU重復定義,21,二、表達式賦值偽操作,等值語句 符號 = 表達式 ;功能與EQU相同,但可重復定義,CNT = 5 NUM = 4 NUM = NUM+10H CBD = DDA CBD = ADD,22,表達式與運算符,指令中的操作數可以以表達式的形式出現,匯編程序在匯編過程中計算表達式,最終得到一個數值 程序運行之前,就已經計算出了表達式;所以,程序運行

9、速度沒有變慢,但增強程序的可讀性 MASM對除偽指令外各種匯編時處理的指令統稱為操作符(Operator),23,運算符,24,運算符算術運算符,+ - * / MOD SHR SHL 實現加、減、乘、除、取模、移位的運算 MOV AX,3*4+5;等價于 MOV AX,17 其中MOD也稱為取模,它產生除法之后的余數,如19 mod 7 = 5 加+和減-運算符還可以用于地址表達式 表達式 SHR/SHL CNT 除加、減外,其他運算符的參數必須是整數,25,算術運算符例,NUM= 11011011B MOV AL,NUM SHL 3MOV AL,11011000B MOV BL, NUM

10、SHR 2MOV AL,00110110B ADD DL, NUM SHR 6ADD DL,00000011B MOV AL,ARRAYBXSIMOV AL,ARRAYBX+SI,26,運算符邏輯運算符,AND OR XOR NOT 實現按位相與、相或、異或、求反的邏輯運算 OR AL,03H AND 45H0R AL, 01H MOV AX, NOT 0F0HMOV AX,0FF0FH MOV BL, 55H AND 0F0H MOV BL,50H,27,運算符關系運算符,EQ LT LE GT GE 用于比較和測試符號數值 表達式1 關系運算符 表達式2 表達式為常數時,按無符號數進行比較

11、 表達式為變量(同段內)時,比較其偏移量 MASM用0FFH/0FFFFH(補碼 -1)表示條件為真 MASM用0000H表示條件為假,28,運算符關系運算符(舉例),MOV AX, 0FH EQ 1111B MOV AX,0FFFFH MOV BX, 0FH NE 1111B MOV BX,0 VAR DW NUM LT 0ABH ;當已定義的常數NUM小于ABH時,則VAR 0FFH,29,運算符數值返回運算符,操作對象:存儲器操作數(變量/標號) 格式:運算符 變量名/標號名,SEG 名字/標號 返回名字或標號的段基值 MOV AX, SEG K1,OFFSET 名字/標號 返回名字或標

12、號的段內偏移地址 MOV SI, OFFSET VAR,30,運算符數值返回運算符,TYPE 名字/標號 返回名字或標號的類型屬性,以數字形式表示,31,運算符數值返回運算符(例),V1 DB ABCD V2 DW 1234H,5678H V3DD V2 MOV AL, TYPE V1;AL=1 MOV CL, TYPE V2;CL=2 MOV CH, TYPE V3;CH=4,32,運算符數值返回運算符,LENGTH 名字/標號 只用于變量,且為DUP所定義 如未用DUP定義則返回值為1 如使用DUP定義則返回最外層之值,33,運算符數值返回運算符(例),K1DB 10H DUP(0) K2

13、DB 10H,20H,30H K3DW 20H DUP(0,1,2 DUP(2) K4DB ABCD MOV AL,LENGTH K1;AL=10H MOV BL,LENGTH K2;BL=1 MOV CX,LENGTH K3;CX=20H MOV DX,LENGTH K4;DX=1,34,運算符數值返回運算符,SIZE 名字 只用于變量,得到重復定義的變量的數組元素所占字節(jié)數=LENGTH*TYPE,35,K1DB 10H DUP(0) K2DB 10H,20H,30H K3DW 20H DUP(0,1,2 DUP(2) K4DB ABCD MOV AL,LENGTH K1;AL=10H M

14、OV BL,LENGTH K2;BL=1 MOV CX,LENGTH K3;CX=20H MOV DX,LENGTH K4;DX=1 MOV AL,SIZE K1;AL=10H MOV BL,SIZE K2;BL=1 MOV CL,SIZE K3;CL=40H MOV DL,SIZE K4;DL=1,36,運算符屬性修改運算符,對存儲器操作數(名字/標號)的屬性修改為指定類型,不管原來是什么類型。 PTR 運算符 類型 PTR 地址表達式,該修改是臨時的,只在當前語句有效,37,運算符屬性修改運算符(例),DA_BYTE DB 20H DUP(0) DA_WORD DW 30H DUP(0)

15、LEA BX DA_WORD LEA SI,DA_BYTE MOV AX,WORD PTR BA_BYTE10H ADD BYTE PTR DA_WORD20H,BL INC BYTE PTR BX SUB WORD PTR SI,30H AND AX,WORD PTRBXSI JMP FAR PTR SUB1,38,運算符THIS運算符,THIS 類型名 和PTR類型相似,將變量或標號定義成指定類型,但不分配新的存儲單元,其尋址空間與跟在后面的變量的尋址空間相同。 LABEL偽指令的功能等同于“EQU THIS”,39,D_BYTEEQU THIS BYTE W_WORDDW 20H DUP

16、(0) ;定義20H字單元,該區(qū)域可按字節(jié)訪問,也可以按字訪問 JMP_FAREQU THIS FAR JMP_NEAR: MOV AL,30H,運算符THIS運算符,40,運算符HIGH/LOW運算符,操作對象:常數/地址表達式 功能:取其高/低8位 CONST EQU 0ABCDH MOV AH,HIGH CONST ;AH=0ABH,41,運算符的優(yōu)先級,1() LENGTH SIZE WIDTH MASK 2PTR OFFSET SEG TPYE THIS : 3HIGE LOW 4* / MOD SHL SHR 5+ - 6EQ NE GT LT GE LE 7NOT 8AND 9O

17、R XOR 10SHORT,建議采用圓括號“( )”顯式表達,它可以極大地提高程序的可閱讀性,42,程序結束返回的方法以中斷指令“INT 21H”返回,DOS軟中斷向用戶提供了一組非常有用的系統功能,其中4CH功能結束當前進程,控制返回給調用該程序的進程,因此,在程序結束前加入語句: MOV AH,4CH INT 21H,43,三、段定義偽操作,段結構,段定義 段尋址(指定當前段) 段寄存器的裝入,44,DATA SEGMENT BUF1 DB 2DH DATA ENDS EXRTA SEGMENT BUF2 DB ? EXRTA ENDS STAK SEGMENT TOP DW 50 DUP

18、(?) STAK ENDS CODE SEGMNET ASSUME CS:CODE, DS: DATA ASSUME ES:EXRTA SS:STAK,START: MOV AX, DATA MOV DS, AX MOV AX, EXRTA MOV ES, AX MOV AX, STAK MOV SS, AX MOV SP ,SIZE TOP MOV AL, BUF1 MOV ES:BUF2,AL MOV AH, 4CH INT 21H CODE ENDS END START,例題:把數據段中BUF1單元中的數據傳送到附加段BUF2中。,45,三、段定義偽操作完整段定義偽指令,段名SEGMEN

19、T 定位 組合 位數 類別 ;語句序列 段名ENDS,段定義由SEGMENT和ENDS這一對偽指令實現,SEGMENT偽指令定義一個邏輯段的開始,ENDS偽指令表示一個段的結束 段定義指令后的4個關鍵字用于確定段的各種屬性. 如果不指定,則采用默認參數;但如果指定,要注意前后次序,46,三、段定義偽操作段定位(align)屬性,表示對邏輯段起始邊界的選擇,可為: PAGE 段從一個頁邊界開始(XXX00H,256Bytes/Page) PARA段節(jié)邊界開始(XXXX0H) DWORD段從一個4倍數地址開始 WORD 段從一個偶地址開始 BYTE 段可以從任意單元開始 完整段定義偽指令的默認定位

20、屬性是PARA,47,三、段定義偽操作段組合(combine)屬性,指定多個邏輯段之間如何連接與定位,可為: PRIVATE 本段與其他段沒有連接關系,這是完整段定義偽指令默認的段組合方式 PUBLIC 在滿足定位關系的前提下,連接程序把本段與所有同名段相鄰地連接在一起,形成新的邏輯段。(可在程序的不同位置及不同的文件中使用段定義語句定義一個邏輯段) COMMON 產生一覆蓋段,兩個同名段起始地址相同,用較長的段覆蓋較短的段,48,三、段定義偽操作段組合(combine)屬性,STACK把所有的同類別段連接在一起,段基值SS,且自動為SP初始化。在一個程序中一般應該有一個堆棧段。 AT 表達式

21、表示本段定位在表達式所指示的節(jié)的邊界上 AT 0930H 表示本段的物理地址從09300H開始 MEMORY 表示本段定位在所有其它段的最高地址,49,三、段定義偽操作段類別(class)屬性,當連接程序組織段時,將所有的同類別段相鄰分配 段類別可以是任意名稱,但必須位于單引號中 大多數MASM程序使用 code、data和stack來分別指名代碼段、數據段和堆棧段,以保持所有代碼和數據的連續(xù),50,DA1SEGMENT PARA DATA DD1DB 10 DUP(12H) DA1ENDS STA1SEGMENT STACK STACK0 DW 20H DUP(?) STA1ENDS DA2

22、SEGMENT PARA DATA DD2DB 20H DUP(13H) DA2ENDS STA2SEGMENT STACK STACK0 DW 30H DUP(?) STA2ENDS CODE SEGMENT CODE ENDS,51,三、段定義偽操作段尋址,指明當前段 ASSUME 段寄存器名:段名,段寄存器名:段名,,在程序運行過程中,可重新設置當前段,也可以刪除原有的設置 ASSUME ES:NOTHING;刪除對ES的設置 ASSUME NOTHING ;刪除對所有段的設置,52,三、段定義偽操作段寄存器的裝入,ASSUME只說明了已哪些段為當前段,具體的段基值并沒有裝入,DS與ES

23、的裝入 用ASSUME將DS/ES與相應的段建立聯系后,用數據傳送指令 MOVAX,段名 MOV DS/ES,AX,53,三、段定義偽操作段寄存器的裝入,SS的裝入 在定義段時,用組合類型STACK說明 STACK1SEGMENT PARA STACK DW 20H DUP(0) STACK1ENDS CODESEGEMNT ASSUME CS:CODE,SS:STACK1 ,SS獲得STACK1的段基值,且SP=40H,54,三、段定義偽操作段寄存器的裝入,SS的裝入(類似于DS/ES的方法) STACK1SEGMENT DW 40H DUP(0) TOPLABEL WORD STACK1E

24、NDS CODESEGEMNT ASSUME CS:CODE,SS:STACK1 MOV AX,STACK1 MOV SS,AX MOV SP,OFFSET TOP;SP=80H ,中間不得插入其他指令,55,三、段定義偽操作段寄存器的裝入,CS的裝入 用結束偽指令:每個源程序都必須以END偽指令結束 END 起始地址,標號 表達式,不一定是指令語句,56,三、段定義偽操作段寄存器的裝入,CS的裝入 CODESEGEMNT ASSUME CS:CODE,SS:STACK1 START: END START,57,四、程序開始和結束偽操作,開始: NAME modul_name TITLE te

25、xt,程序終止和匯編結束是兩碼事,結束: END 起始地址,58,五、地址計數器及對準偽操作,地址計數器$ :匯編程序在為每條指令或變量分配內存時,使用當前位置計數器來指示下一指令或數據的偏移量,用$表示其值。,ARRAY DW 1,2,$+4,3,4,$+4,兩個$+4的值是不同的, 假設 當前ARRAY的偏移地址為0074,則第一個$+4為007C,第二個是0082,59,五、地址計數器及對準偽操作,BUF1 DB 1,2,3,4,5 CNT1 EQU $-BUF1 BUF2 DW 1,2,3,4,5 CNT2 EQU ($-BUF2)/2,CNT1 CNT2 分別為執(zhí)行之后BUF1,BU

26、F2中的數據元素的個數,60,五、地址計數器及對準偽操作,定位偽指令:ORG 表達式 將表達式的值賦給當前位置計數器。即該偽指令后的指令或變量以表達式的值為偏移量,DATA SEGMENT ORG 100H X DB 12H ; X的偏移地址為100H Y DW ? ORG 200H Z DD 9C56H ;Z的偏移地址為0200H DATA ENDS,段內偏移地址從0開始順序使用,也可以用ORG偽指令設置某個單元的起始地址。,61,五、地址計數器及對準偽操作,DATA SEGMENT ORG 100H X DB 12H ; X的偏移地址為100H Y DW ? ORG 200H Z DD 9

27、C56H ;Z的偏移地址為0200H DATA ENDS,62,ORG $+8; 表示從當前地址計數器值$開始的位移量,可以表示跳過8個字節(jié)的存儲區(qū)。 BUFFER LABEL BYTE ORG $+8 等同于:BUFFER DB 8 DUP (?),五、地址計數器及對準偽操作,63,五、地址計數器及對準偽操作,EVEN使下一指令或變量的偏移量為偶數 ALIGN 保證雙字數組邊界從4的倍數開始,64,五、地址計數器及對準偽操作(例),DATASEGMENT ORG 30H DB1DB 12H,34H ORG $+20H STRDB ABC CNTEQU $-STR EVEN DW1DW 20H

28、 DUP(0) DATAENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA ORG 10H START:MOV AX,DATA MOV DS,AX CODE ENDS END START,65,六、基數控制偽操作,匯編語言源程序默認使用十進制,其他用標注表示(B,O,H) 格式:.RADIX 表達式 功能:把默認的基數改為2、8、16等 除指定進制外,其他加標注,MOV BX,0FFH MOV BX,178,.RADIX 16 MOV BX,0FF MOV BX,178D,66,七、過程定義偽指令,過程名PROC NEAR/FAR RET 過程名ENDP,;隱含為

29、NEAR,;必須包含,在同一個邏輯段中可包含多個過程,67,八、程序結束返回的方法,以過程成形式編制的程序 以DOS中斷指令“INT 21H”返回,68,九 簡化段定義偽指令,.STACK 大?。粭6伍_始 .DATA;數據段開始 .CODE 段名;代碼段開始,簡化段定義偽指令指明一個邏輯段的開始,同時自動結束前面的一個段 采用簡化段定義偽指令前,需有.model語句 使用簡化段定義,各段名稱和其他用戶所需的信息可以使用MASM預定義符號,例如: data表示由.data等定義的數據段的段名,69,九 簡化段定義偽指令棧段偽指令,.STACK 大小 棧段偽指令.STACK創(chuàng)建一個棧段,段名是:s

30、tack 它的參數指定棧段所占存儲區(qū)的字節(jié)數,默認是1KB(= 1024 = 400h字節(jié)),70,九 簡化段定義偽指令數據段偽指令,.DATA 數據段偽指令.data創(chuàng)建一個數據段,段名是:_DATA。它用于定義具有初值的變量,當然也允許定義無初值的變量 無初值變量可以安排在另一個段中,它用.data?偽指令創(chuàng)建,數據段名是:_BSS . const偽指令用于建立只讀的常量數據段(段名:CONST),71,九 簡化段定義偽指令代碼段偽指令,.CODE 段名 代碼段偽指令.code創(chuàng)建一個代碼段,它的參數指定該代碼段的段名 如果沒有給出段名,則采用默認段名: 在TINY、SMALL、COMPA

31、CT和FLAT模式下,默認的代碼段名是:_TEXT 在MEDIUM、LARGE和HUGE模式下,默認的代碼段名是:模塊名_TEXT,72,九 簡化段定義偽指令,1.模式選擇偽指令.MODEL 格式:.MODEL 模式選擇符 功能:指明簡化段所使用內存模式,模式選擇符有TINY、SMALL、MEDIUM、COMPACT、LARGE等,一般選擇SMALL模式。,73,存儲模式偽指令,.MODEL 存儲模式 使用簡化段定義,必須有存儲模式偽指令 .model語句必須位于所有段定義語句之前 存儲模式決定一個程序的規(guī)模,確定進行子程序調用、指令轉移和數據訪問的缺省屬性 MASM有7種不同的存儲模式: T

32、INY SMALL COMPACT MEDIUM LARGE HUGE FLAT,74,存儲模式TINY微型模式,微型模式是MASM 6.0才引入的 用于創(chuàng)建COM類型程序 用微型模式編寫匯編語言程序時,所有的段地址寄存器都被設置為同一值 這意味著代碼段、數據段、堆棧段都在同一個段內,不大于64KB;訪問操作數或指令都只需要使用16位偏移地址,75,存儲模式SMALL小型模式,一般的程序(例如本書的絕大多數程序示例和習題)都可用這種模式 在小型模式下,一個程序至多只能有一個代碼段和一個數據段,每段不大于64KB 這里的數據段是指數據段、堆棧段和附加段的總和,它們共用同一個段基址,總長度不可超過

33、64KB;因此小模式下程序的最大長度為128KB 訪問操作數或指令都只需要使用16位偏移地址;這意味著諸如指令轉移、程序調用以及數據訪問等都是近屬性(NEAR),即小型模式下的調用類型和數據指針缺省分別為近調用和近指針,76,存儲模式COMPACT緊湊模式,適合于數據量大但代碼量小的程序 緊湊模式下,代碼段被限制在一個不大于64KB的段內;而數據段則可以有多個,超過64KB 這種模式下的調用類型缺省仍為近調用;而數據指針缺省為遠(FAR)指針,因為必須用段地址來區(qū)別多個數據段,77,存儲模式MEDIUM中型模式,中型模式是與緊湊模式互補的模式 適合于數據量小但代碼量大的程序 中型模式的代碼段可

34、以超過64KB,有多個;但數據段只能有一個不大于64KB的段 這種模式下的數據指針缺省為近指針;但調用類型缺省是遠(FAR)調用,因為要利用段地址區(qū)別多個代碼段,78,存儲模式LARGE大型模式,較大型程序通常采用的存儲模式 大型模式允許的代碼段和數據段都有多個,都可以超過64KB;但全部的靜態(tài)數據(不能改變的數據)仍限制在64K字節(jié)內 大型模式下的調用類型和數據指針缺省分別為遠調用和遠指針,79,存儲模式HUGE(巨型模式),與大型模式基本相同,只是靜態(tài)數據不再被限制在64K字節(jié)之內,80,存儲模式 FLAT平展模式,平展模式用于創(chuàng)建一個32位的程序, 它只能運行在32位x86 CPU上。

35、DOS下不能使用FLAT模式, 而編寫32位Windows 9.x或Windows-NT的程序時,必須采用FLAT模式。,81,九 簡化段定義偽指令,.STACK 大??;棧段開始 .DATA;數據段開始 .CODE 段名;代碼段開始,簡化段定義偽指令指明一個邏輯段的開始,同時自動結束前面的一個段 采用簡化段定義偽指令前,需有.model語句 使用簡化段定義,各段名稱和其他用戶所需的信息可以使用MASM預定義符號,例如: data表示由.data等定義的數據段的段名,82,簡化段定義偽指令,數據段偽指令.DATA 格式:.DATA名字 定義一個數據段,若有多個數據段,則用名字區(qū)別。只有一個數據段

36、時,隱含數據段名為DATA。 棧段定義偽指令 .STACK 格式:.STACK 長度 功能:定義了一個堆棧段,并形成SS和SP的初值,SP的默認值為1024,隱含段名為STACK。,83,簡化段定義偽指令,代碼段定義偽指令.CODE 格式:.CODE 功能:定義一個代碼段,若有多個代碼段,則用名字區(qū)別。只有一個代碼段時,隱含代碼段名為CODE。,84,程序開始偽指令,.STARTUP 按照CPU類型、存儲模式、操作系統和堆棧類型,產生程序開始執(zhí)行的代碼;同時還指定程序開始執(zhí)行的起始點 在DOS下,還將設置DS值,調整SS和SP值 使用了該偽指令,則程序結束處的END偽指令不必再指定程序入口處的

37、標號,85,程序終止偽指令,.EXIT 返回參數 產生終止程序執(zhí)行返回操作系統的指令代碼 它的可選參數是一個返回的數碼,通常用0表示沒有錯誤。例如.exit 0對應的代碼是: mov ah,4ch int 21h DOS功能調用的4ch子功能(返回DOS): 入口參數:AH4ch,AL返回數碼,86,匯編語言程序結構,匯編語言源程序有: 完整段定義結構、 簡化段定義結構、 COM文件結構、 程序段前綴結構。,87,DATA SEGMENT BUF1 DB 35H,78H,0A5H SUM DB ? DATA ENDS CODE SEGMNET ASSUME CS:CODE, DS: DATA

38、START: MOV AX, DATA MOV DS, AX MOV AL,0,MOV SI,OFFSET BUF ADD AL, SI INC SI ADD AL, SI INC SI ADD AL, SI MOV SUM,AL MOV AH,4CH INT 21H CODE ENDS END START,例:三個數相加并把結果放在SUM單元中,下面程序就是一個完整段定義結構的程序,88,.MODEL SMALL .DATA BUF1 DB 35H,78H,0A5H SUM DB ? .CODE MOV AX, DATA MOV DS, AX MOV AL,0 MOV SI,OFFSET B

39、UF ADD AL,SI,INC SI ADD AL, SI INC SI ADD AL, SI MOV SUM, AL MOV AH, 4CH INT 21H END,例:三個數相加并把結果放在SUM單元中,下面程序就是采用簡化段定義結構的程序,89,匯編源程序結構,COM文件結構: 特點: 1 整個程序邏輯段可以有幾個,但物理段只有一個,即整個程序(包括數據和代碼段)在一個段(64KB)的范圍內。 2 程序中的第一條可執(zhí)行指令在段中的0100H處存放。,90,例:三個數相加并把結果放在SUM單元中,下面程序就是COM文件結構實現程序,CODE SEGMNET ASSUME CS:CODE,

40、 DS: DATA ORG 100H START:JMP BEGIN BUF DB 35H,78H,0A5H SUM DB ? BEGIN: MOV AX, CS MOV DS, AX MOV AL,0,MOV SI,OFFSET BUF ADD AL, SI INC SI ADD AL, SI INC SI ADD AL, SI MOV SUM,AL MOV AH,4CH INT 21H CODE ENDS END START,91,例:三個數相加并把結果放在SUM單元中,下面程序就是程序段前綴結構的程序,DATA SEGMENT BUF1 DB 35H,78H,0A5H SUM DB ? DATA ENDS CODE SEGMNET ASSUME CS:CODE, DS: DATA ASUM PROC FAR ;把程序定義成過程的形式。 START: PUSH DS MOV AX,0 PUSH AX MOV AX, DATA MOV DS, AX MOV AL,0,MOV SI,OFFSET BUF ADD AL, SI INC SI ADD AL, SI INC SI ADD AL, SI MOV SUM,AL RET ASUM ENDP

溫馨提示

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

評論

0/150

提交評論