




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、微機原理及接口教學(xué)課件匯編語言程序設(shè)計和運用教 學(xué) 課 件 主 要 內(nèi) 容 5.1 匯編語言程序格式 5.2 偽指令 5.3 匯編語言程序設(shè)計 5.4 DOS和BIOS功能調(diào)用匯編語言的特點匯編語言是一種以處理器指令系統(tǒng)為基礎(chǔ)的低級程序設(shè)計語言,它采用助記符表達指令操作碼,采用標(biāo)識符號表示指令操作數(shù)利用匯編語言編寫程序的主要優(yōu)點是可以直接、有效地控制計算機硬件,因而容易創(chuàng)建代碼序列短小、運行快速的可執(zhí)行程序在有些應(yīng)用領(lǐng)域,匯編語言的作用是不容置疑和無可替代的匯編程序設(shè)計的過程是與其他高級語言程序設(shè)計大致相同匯編語言源程序匯編程序可執(zhí)行指令和偽指令DEBUG、 ASM、 MASM機器語言匯編語言
2、的特點匯編語言源程序示例:DATA SEGMENT M1 DW 00FFH M2 DW 00FFH P1 DW ? P2 DW ? DATA ENDS STACK SEGMENT ST DB 100 DUP (?) TOP EQU LENGTH ST STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA SS:STACKSTART: MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV SP,TOP MOV BX,OFFSET M1 MOV AX,BX MOV DX,00H MOV BX,OFFSET M2 M
3、UL WORD PTR BX MOV BX,OFFSET P1 MOV BX,AX MOV BX,OFFSET P2 MOV BX,DX HLT MOV AH,4CH INT 21H CODE ENDS END START 5.1 匯編語言源程序格式完整的匯編語言源程序由段組成一個匯編語言源程序可以包含若干個代碼段、數(shù)據(jù)段、附加段或堆棧段,段與段之間的順序可隨意排列需獨立運行的程序必須包含一個代碼段,并指示程序執(zhí)行的起始點,一個程序只有一個起始點所有的可執(zhí)行性語句必須位于某一個代碼段內(nèi),說明性語句可根據(jù)需要位于任一段內(nèi)通常,程序還需要一個堆棧段整個程序以END結(jié)束 源程序由語句序列構(gòu)成一、匯編
4、語言的語句格式執(zhí)行性語句執(zhí)行性語句用于表達處理器指令(也稱為硬指令),匯編后對應(yīng)一條指令代碼。由處理器指令組成的代碼序列是程序設(shè)計的主體標(biāo)號: 硬指令助記符 操作數(shù) ; 注釋說明性語句說明性語句用于表達偽指令,指示源程序如何匯編、變量怎樣定義、過程怎么設(shè)置等名字 偽指令助記符 參數(shù) ;注釋1、標(biāo)號、名字與標(biāo)識符標(biāo)號是反映硬指令位置(邏輯地址)和屬性的標(biāo)識符,后跟一個冒號分隔名字是反映偽指令位置(邏輯地址)和屬性的標(biāo)識符,后跟空格或制表符分隔,沒有冒號標(biāo)識符(Identifier)一般最多由31個字母、數(shù)字及規(guī)定的特殊符號(如 _、$、?、)組成,不能以數(shù)字開頭。默認(rèn)情況下,匯編程序不區(qū)別標(biāo)識符
5、中的字母大小寫一個源程序中,每個標(biāo)識符的定義是唯一的,且不能是匯編系統(tǒng)所采用的保留字名字和標(biāo)號的屬性名字和標(biāo)號是用戶自定義的標(biāo)識符。名字用于偽指令,標(biāo)號用于硬指令。名字和標(biāo)號一經(jīng)使用便具有兩類屬性:邏輯地址屬性名字和標(biāo)號對應(yīng)存儲單元的邏輯地址,含段地址和偏移地址;類型屬性變量名的類型可以是BYTE(字節(jié))、WORD(字)和DWORD(雙字)等;標(biāo)號、段名、子程序名的類型可以是NEAR(近)和FAR(遠),分別表示段內(nèi)或段間調(diào)用匯編程序提供有關(guān)操作符,以便獲取這些屬性值保留字保留字(Reserved Word)是匯編程序已經(jīng)利用的標(biāo)識符(也稱為關(guān)鍵字),主要有:硬指令助記符例如:MOV、ADD偽
6、指令助記符例如:DB、DW操作符例如:OFFSET、PTR寄存器名例如:AX、CS預(yù)定義符號例如:data 匯編語言對大小寫不敏感2、(硬)指令和偽指令指令是目標(biāo)機器所能執(zhí)行的代碼,為目標(biāo)cpu所執(zhí)行 使CPU產(chǎn)生動作、并在程序執(zhí)行時才處理的指令,硬指令就是第4章學(xué)習(xí)的處理器指令,與具體的處理器有關(guān)、與匯編程序無關(guān)偽指令是匯編程序所執(zhí)行的一些操作,為交叉匯編機器所執(zhí)行 不產(chǎn)生CPU動作、在程序執(zhí)行前由匯編程序處理的說明性指令,偽指令與具體的處理器類型無關(guān),但與匯編程序有關(guān)。不同版本的匯編程序支持不同的偽指令3、操作數(shù)和參數(shù)處理器指令中的操作數(shù)可以是立即數(shù)、寄存器和存儲單元偽指令中的參數(shù)可以是常
7、數(shù)、變量名、表達式等,可以有多個,參數(shù)之間用逗號分隔匯編語言程序中,指令參數(shù)有數(shù)值型(主要形式是常數(shù)和數(shù)值表達式)和地址型(主要形式是標(biāo)號和名字,包括變量名、段名、過程名等)。例如,硬指令的操作數(shù)有立即數(shù)、寄存器和存儲單元;其中,立即數(shù)就要用數(shù)值型參數(shù)表達,存儲單元就應(yīng)該用地址型參數(shù)(存儲器操作數(shù))表達。1) 常量常量表示一個固定的數(shù)值,它又分成多種形式常數(shù)字符串符號常量數(shù)值表達式 常數(shù)指由10、16、2和8進制形式表達的數(shù)值,各種進制的數(shù)據(jù)以后綴字母區(qū)分,默認(rèn)不加后綴字母的是十進制數(shù)B由0和1兩個數(shù)字組成,以字母B/b結(jié)尾二進制64H0FFH0B800H由0 9、A F數(shù)字組成,以字母H/h
8、 結(jié)尾,以字母開頭的常數(shù)需要加一個前導(dǎo)0十六進制100255D由0 9數(shù)字組成,以字母 D/d 結(jié)尾(缺省情況可以省略)十進制 字符串字符串常量是用單引號或雙引號括起來的單個字符或多個字符其數(shù)值是每個字符對應(yīng)的ASCII碼值例如:d(等于64H)AB(等于4142H)Hello, Assembly ! 符號常量符號常量使用標(biāo)識符表達一個數(shù)值MASM提供等價機制,用來為常量定義符號名符號定義偽指令有等價“EQU”和等號“”:符號名 EQU 數(shù)值表達式符號名 EQU 不支持符號名 數(shù)值表達式EQU用于數(shù)值等價時不能重復(fù)定義符號名,但“”允許重復(fù)賦值。例如:X = 7 ;等效于:X equ 7X =
9、 X+5 ;“X EQU X+5”是錯誤的符號定義實例:符號定義DosWriteChar equ 2CR = 13CallDOS equ 符號應(yīng)用(左邊的程序段等價右側(cè)的符號形式)mov ah,2 mov ah, DosWriteCharmov dl,13 mov dl, CRint 21h CallDOS 數(shù)值表達式數(shù)值表達式一般是指由運算符連接的各種常量所構(gòu)成的表達式匯編程序在匯編過程中計算表達式,最終得到一個確定的數(shù)值,所以也是常量表達式的數(shù)值在程序運行前的匯編階段計算,所以組成表達式的各部分必須在匯編時就能確定匯編語言支持多種運算符我們經(jīng)常使用的是加減乘除( * / )例如:mov a
10、x,3*4+5;等價于:mov ax,172 )變量 變量實質(zhì)上是指可以讀寫的內(nèi)存單元,雖然內(nèi)存單元地址不變,但其中存放的數(shù)據(jù)可以改變變量需要事先定義才能使用變量定義(Define)偽指令為變量申請固定長度為單位的存儲空間,并可以同時將相應(yīng)的存儲單元初始化定義后的變量可以通過變量名等方法引用(讀寫)其中的數(shù)據(jù),即變量中的數(shù)值 變量的定義 變量定義的匯編語言格式為:變量名 變量定義偽指令 初值表變量名為用戶自定義的標(biāo)識符,有時變量名也可以缺省變量定義偽指令有DB、DW、DD等初值表是用逗號分隔的參數(shù),主要由常量、數(shù)值表達式或“?”組成。其中“?”表示未賦初值多個存儲單元如果初值相同,可以用復(fù)制操
11、作符DUP進行定義:重復(fù)次數(shù) DUP(重復(fù)參數(shù))表示初值表首元素的邏輯地址,常稱為符號地址。 變量名變量名是用戶自定義的標(biāo)識符,用來表示可讀寫數(shù)據(jù)的首地址,或初值表的首地址。這個用符號表示的地址,常稱為符號地址。一個變量可以沒有變量名,在這種情況下,匯編程序?qū)⒅苯訛槌踔当矸峙淇臻g,即該變量沒有符號地址。設(shè)置變量名是為了方便存取它指示的存儲單元。 初值表初值表一般指用戶定義的多個數(shù)據(jù)(用逗號分隔)或 內(nèi)存空間主要由數(shù)值常數(shù)、表達式或?、DUP等組成?表示初值不確定,即未賦初值;DUP表示重復(fù)初值。DUP的格式為:重復(fù)次數(shù) DUP (重復(fù)參數(shù))4、注釋語句中由分號“;”開始的部分為注釋內(nèi)容,用以增
12、加源程序的可讀性必要時,一個語句行也可以由分號開始作為階段性注釋匯編程序在翻譯源程序時將跳過該部分,不對它們做任何處理5、分隔符語句的4個組成部分要用分隔符分開標(biāo)號后用冒號,注釋前用分號操作數(shù)之間和參數(shù)之間使用逗號分隔其他部分通常采用空格或制表符多個空格和制表符的作用與一個相同MASM支持續(xù)行符 “”二、表達式用運算符 1、算術(shù)運算符實現(xiàn)加、減、乘、除、取余的算術(shù)運算。mov ax, 3*4+5;等價于 mov ax,17其中MOD也稱為取模,它產(chǎn)生除法之后的余數(shù),如:19 mod 7 = 5+ 和- 運算符還可以用于地址表達式。除加、減外,其他運算符的參數(shù)必須是整數(shù)。2、邏輯運算符實現(xiàn)按位相
13、與、相或、異或、求反的邏輯運算。or al,03h AND 45h ;等價于 or al,01h3、移位運算符實現(xiàn)對數(shù)值的左移、右移的邏輯操作;移入低位或高位的是0。其格式為: 數(shù)值表達式 SHL/SHR 移位次數(shù) mov al,0101b SHL (2*2);等價于 mov al,01010000b4、關(guān)系運算符用于比較和測試符號數(shù)值MASM用0FFFFH(補碼-1)表示條件為真,用0000H表示條件為假。 運算符包括:EQ NE GT LT GE LE 例:mov bx, (PORT LT 5) AND 20H ) OR (PORT GE 5) AND 30H );當(dāng)PORT5時,匯編結(jié)果
14、為mov bx,30H;否則,匯編結(jié)果為mov bx,00H5、高低分離符取數(shù)值的高半部分或低半部分。HIGH、LOW從一個字?jǐn)?shù)值或符號常量中得到高、低字節(jié)mov ah, HIGH 8765h ;等價于mov ah,87h從引入的HIGHWORD、LOWWORD取一個符號常量(不能是其他常數(shù))的高字或低字部分dd_value equ 0ffff1234h ;定義一個符號常量mov ax, LOWWORD dd_value ;等價于mov ax,1234h6、地址操作符地址操作符取得名字或標(biāo)號的段地址和偏移地址返回名字或標(biāo)號的段地址SEG 名字/標(biāo)號返回名字或標(biāo)號的偏移地址OFFSET 名字/標(biāo)
15、號段前綴,采用指定的段地址寄存器 :當(dāng)前偏移地址 $將括起的表達式作為存儲器地址指針 7、類型操作符類型操作符對名字或標(biāo)號的類型屬性進行設(shè)置類型操作符包括:PTR / THIS / SHORTTYPE / LENGTH / SIZE1)PTR 操作符類型名 PTR 名字/標(biāo)號PTR 操作符使名字或標(biāo)號具有指定的類型,其中:類型名可以是:BYTE / WORD / DWORD / FWORD / QWORD / TBYTE;NEAR/FAR;由STRUCT、RECORD、UNION以及TYPEDEF定義的類型。mov al,byte ptr w_var;w_var是一個字變量jmp far pt
16、r n_label;n_label是一個標(biāo)號使用PTR操作符,可以臨時改變名字或標(biāo)號的類型。2)THIS 操作符THIS 類型名用THIS說明的操作數(shù),在匯編時,具有當(dāng)前邏輯地址和指定的類型:b_var equ THIS byte ;字節(jié)變量b_var,w_var dw 10 dup (0) ;字變量w_var,兩變量地址相同f_jump equ THIS far ;f_jump為段間轉(zhuǎn)移地址(f_jump label far)LABEL偽指令的功能等同于“EQU THIS”。3)SHORT操作符SHORT 標(biāo)名指定標(biāo)號作為-128+127字節(jié)范圍內(nèi)的短轉(zhuǎn)移,如果標(biāo)號實際上超出了這個范圍,則出
17、錯。jmp short n_jump4)TYPE 操作符TYPE 名字/標(biāo)名返回與名字或標(biāo)號類型相關(guān)的數(shù)值對字節(jié)、字和雙字變量分別返回1、2和4;對短、近和遠轉(zhuǎn)移分別返回ff01h、ff02h和ff05h。mov ax, TYPE w_var;匯編結(jié)果為mov ax,2mov ax, TYPE n_jump;匯編結(jié)果為 mov ax,0ff02h(near標(biāo)號)操作符SIZE返回整個變量占用的字節(jié)數(shù)操作符LENGTH返回整個變量的數(shù)據(jù)項數(shù)(即元素數(shù))8. 運算符的優(yōu)先級1() LENGTH SIZE WIDTH MASK2PTR OFFSET SEG TPYE THIS :3HIGE LOW4
18、* / MOD SHL SHR5+ -6EQ NE GT LT GE LE7NOT8AND9OR XOR10SHORT5.2 偽指令一、符號定義偽指令1、EQU(等值語句) 將表達式值賦予名字,一經(jīng)定義不能重復(fù)。 例如: CR EQU 0DH ;常數(shù) A EQU ASC - TABLE ;變量(事先已定義) STR EQU 64 1024 ;數(shù)值表達式 ADR EQU ES:BP + DI + 5 ;地址表達式 功能同 EQU ,但可重新定義一個符號。例如: COUNT = 100 同 COUNT EQU 100 CONNT = 57 COUNT重新定義2、等號語句 =二、內(nèi)存數(shù)據(jù)(變量)定義
19、偽指令定義一個變量的類型,給內(nèi)存單元賦初值,或者分配、預(yù)留內(nèi)存單元分為以下幾類:DB 定義字節(jié)偽指令DW 定義字偽指令DD 定義雙字偽指令DF 定義3 字偽指令DQ 定義4 字偽指令DT 定義10字節(jié)偽指令1、定義字節(jié)變量(Define Byte)DB 偽指令用于分配一個或多個字節(jié)單元,并可以將它們初始化為指定值初值表中每個數(shù)據(jù)一定是字節(jié)量,存放一個8位數(shù)據(jù):可以是0255的無符號數(shù)或是128127帶符號數(shù)也可以是字符串常數(shù)定義字節(jié)變量實例:;數(shù)據(jù)段Xdb a,-5db 2 dup(100),?Ydb ABC字節(jié)變量的應(yīng)用 Xdb a, -5 db 2 dup(100), ? Ydb ABCm
20、ov al,X ;此處X表示它的第1個數(shù)據(jù),故ALadec X+1 ;對X為始的第2個數(shù)據(jù)減1,故成為6mov Y,al ;現(xiàn)在Y這個字符串成為 aBC符號地址變量初值初值表2、定義字變量(Define Word)DW偽指令用于分配一個或多個字單元,并可以將它們初始化為指定值初值表中每個數(shù)據(jù)是字量,一個字單元可用于存放任何16位數(shù)據(jù):一個段地址一個偏移地址兩個字符065535之間的無符號數(shù)3276832767之間的帶符號數(shù)定義字變量實例:;數(shù)據(jù)段countdw 8000h,?,ABmaxintequ 64hnumberdw maxintarraydw maxint dup(0)字變量和字常量的
21、應(yīng)用字變量和字常量的定義:WNUMEQU 5678H;定義WNUM為常量COUNTDW 20H;定義COUNT為變量,假設(shè)它在數(shù)據(jù)段;的偏移地址為10H,20H為其中存放的;初始化數(shù)據(jù)字變量和字常量的應(yīng)用:MOV AX,BX+SI+WNUM MOV AX,BX+SI+5678HMOV AX,COUNT MOV AX,0010HLEA BX,COUNT LEA BX,0010HMOV BX,OFFSET COUNT MOV BX,0010H3、定義雙字變量(Define Double word)DD 偽指令用于分配一個或多個雙字單元,并可以將它們初始化為指定值初值表中每個數(shù)據(jù)是一個32位的雙字量
22、:可以是有符號或無符號的32位整數(shù)也可以用來表達16位段地址(高位字)和16位的偏移地址(低位字)的遠指針varddDD0,?,12345678hfarpointDD00400078h4、其他數(shù)據(jù)單元定義偽指令定義3字偽指令DF用于為一個或多個6字節(jié)變量分配空間及初始化。6字節(jié)常用在32位CPU中表示一個48位遠指針(16位段選擇器 : 32位偏移地址)。定義4字偽指令DQ用于為一個或多個8字節(jié)變量分配空間及初始化。8字節(jié)變量可以表達一個64位整數(shù)。定義10字節(jié)偽指令DT用于為一個或多個10字節(jié)變量分配空間及初始化。10字節(jié)變量可以表達長雙精度(long double)浮點數(shù)。5. 變量的應(yīng)用
23、變量具有存儲單元的邏輯地址屬性程序代碼中通過變量名可直接存取其所指向的首個數(shù)據(jù)X db a, -5 mov al, X ;X a通過變量名加減位移量可存取以改變量地址為基地址的前/后數(shù)據(jù) mov al, X+1 ;X -5 變量的定義示例:;數(shù)據(jù)段bvar1db 100, 01100100b, 64h, d;字節(jié)變量:不同進制表達同一個數(shù)值,內(nèi)存中有4個64Hminint = 5;符號常量:minint 數(shù)值為 5,不占內(nèi)存空間bvar2db -1,minint,minint+5;內(nèi)存中數(shù)值依次為 FFH, 5, 0AH db ? , 2 dup(20h);預(yù)留一個字節(jié)空間,重復(fù)定義了2個數(shù)值
24、 20Hwvar1dw 2010h, 4*4;字變量:兩個數(shù)據(jù)是 2010H、0010H,共占4個字節(jié)wvar2dw ?;wvar2是沒有初值的字變量變量的定義示例(續(xù)):dvardd 12347777h,87651111h,?;雙字變量:2個雙字?jǐn)?shù)據(jù),一個雙字空間abcdb a,b,c,?;定義字符,實際是字節(jié)變量maxint equ 0ah;符號常量:maxint10stringdb ABCDEFGHIJ;定義字符串:使用字節(jié)定義DB偽指令crlfsdb 13,10,$;回車符0DH、換行符0AH和美元符$24Harray1dw maxint dup(0);10個初值為0的字量,可以認(rèn)為是
25、數(shù)組arraydb 2 dup(2,3,2 dup(4);6個字節(jié)內(nèi)容依次為:02 03 04 04 02 03 04 04三、定位偽指令匯編程序按照指令的先后順序一個接著一個分配存儲空間,按照段定義偽指令規(guī)定的邊界定位屬性確定每個邏輯段的起始位置(包括偏移地址)定位偽指令ORG控制數(shù)據(jù)或代碼所在的偏移地址ORG 參數(shù)ORG偽指令是將當(dāng)前偏移地址指針指向參數(shù)表達的偏移地址。例如:ORG 100h;從100H處安排數(shù)據(jù)或程序ORG $+10;偏移地址加10,即跳過10個字節(jié)空間匯編語言程序中,符號“$”表示當(dāng)前偏移地址值四、段定義偽指令段名segment 定位 組合 段字 類別名.;語句序列段名
26、ends完整段定義由SEGMENT和ENDS這一對偽指令實現(xiàn),前者定義一個邏輯段的開始,后者表示一個段的結(jié)束。段定義指令后的 4 個關(guān)鍵字用于確定段的各種屬性,堆棧段要采用 stack 組合類型,代碼段應(yīng)具有code類別,其他為可選屬性參數(shù)。如果不指定,則采用默認(rèn)參數(shù);但如果指定,注意要按照上面的屬性順序。完整段定義格式示例:stacksegment stackdw 512 dup(?) ;設(shè)置堆棧stackendsdatasegment.;在數(shù)據(jù)段定義數(shù)據(jù)dataendscodesegment codeassume cs:code,ds:data,ss:stackstart:mov ax,d
27、atamov ds,ax.;在代碼段填入指令序列mov ax,4c00hint 21hcodeendsend start1、段定位(align)屬性指定邏輯段在主存儲器中的邊界,可為:BYTE從下一個可用的字節(jié)地址(xxxx xxxxb)開始段WORD從下一個可用的偶數(shù)地址(xxxx xxx0b)開始段DWORD 從下一個可用的模4地址(xxxxxx00b)開始段PARA從下一個可用的模16地址(xxxx 0000b)開始段PAGE從下一個可用的模256地址(0000 0000b)開始段簡化段定義偽指令的代碼段和數(shù)據(jù)段默認(rèn)采用WORD定位,堆棧段默認(rèn)采用PARA定位。完整段定義偽指令的默認(rèn)定位
28、屬性是PARA,其低4位已經(jīng)是0,所以默認(rèn)情況下數(shù)據(jù)段的偏移地址從0開始。2、段組合(combine)屬性指定多個邏輯段之間的關(guān)系,可為:PRIVATE本段與其他段沒有邏輯關(guān)系,不與其他段合并,每段都有自己的段地址。這是完整段定義偽指令默認(rèn)的段組合方式。PUBLIC連接程序把本段與所有同名同類型的其他段相鄰連接,然后為所有這些段指定一個共同的段地址,也就是合成一個物理段。這是簡化段定義偽指令默認(rèn)的段組合。STACK本段是堆棧的一部分,連接程序?qū)⑺蠸TACK段按照與PUBLIC段的同樣方式進行合并。這是堆棧段必須具有的段組合。還有“COMMON”和“AT 表達式”,這兩者不常使用。3、段字(u
29、se)屬性為支持32位段而設(shè)置的屬性。對于16位x86 CPU來說,它默認(rèn)是16位段,即USE16。在匯編32位x86 CPU指令時,它默認(rèn)采用32位段,即USE32;但可以使用USE16指定標(biāo)準(zhǔn)的16位段。編寫運行于實地址方式(8086工作方式)的匯編語言程序,必須采用16位段。4、段類別(class)屬性當(dāng)連接程序組織段時,將所有的同類別段相鄰分配。段類別可以是任意名稱,但必須位于單引號中;大多數(shù)MASM程序使用code 代碼段data 數(shù)據(jù)段stack堆棧段來分別指示代碼段、數(shù)據(jù)段和堆棧段,以保持所有代碼和數(shù)據(jù)的連續(xù)。5、指定段寄存器偽指令A(yù)SSUME 段寄存器:段名 ,段寄存器名:段名
30、, .通知 MASM 用指定的段寄存器來尋址對應(yīng)的邏輯段,即建立段寄存器與段的缺省關(guān)系。在明確了程序中各段與段寄存器之間的關(guān)系后,匯編程序會根據(jù)數(shù)據(jù)所在的邏輯段,在需要時自動插入段超越前綴。這是 ASSUME 偽指令的主要功能。ASSUME偽指令并不為段寄存器設(shè)定初值,連接程序LINK 將正確設(shè)置CS : IP 和 SS : SP。由于數(shù)據(jù)段通常都需要,所以在樣板源程序中,首先為DS 賦值;如果使用附加段,還要賦值ES。6、段組偽指令組名 GROUP 段名,段名,.把多個同類段合并為一個64KB物理段,并用一個組名統(tǒng)一存取它。定義段組后,段組內(nèi)各段就統(tǒng)一為一個段地址,各段定義的變量和標(biāo)號的偏移
31、地址就相對于段組基地址計算。offset操作符取變量和標(biāo)號相對于段組的偏移地址,如果沒有段組則取得相對于段的偏移地址。offset后可以跟段組中的某個段名,表示該段最后一個字節(jié)后面字節(jié)相對于段組的偏移地址。五、過程定義和子程序編寫匯編語言中,子程序要用一對過程偽指令PROC和ENDP聲明,格式如下:過程名 PROC NEAR|FAR ;過程體過程名 ENDP可選的參數(shù)指定過程的調(diào)用屬性。沒有指定過程屬性,則采用默認(rèn)屬性NEAR 屬性(段內(nèi)近調(diào)用)的過程只能被同一代碼段的其他程序所調(diào)用FAR 屬性(段間遠調(diào)用)的過程可以被相同或不同代碼段的程序所調(diào)用子程序編寫注意事項子程序要用過程定義偽指令聲明
32、主程序執(zhí)行CALL指令后調(diào)用子程序,子程序利用RET指令返回主程序堆棧操作子程序中對堆棧操作(壓入/彈出)要匹配使用,以保持堆棧的平衡現(xiàn)場的保護和恢復(fù)子程序首部應(yīng)保護要用到的寄存器(內(nèi)容),子程序返回前需進行相應(yīng)恢復(fù)子程序的位置子程序應(yīng)安排在代碼段的主程序之外,最好放在主程序執(zhí)行終止后的位置(即返回DOS的指令之后、結(jié)束匯編的END偽指令之前),也可以放在主程序開始執(zhí)行之前的位置SOFDLY PROC PUSH BX PUSH CX MOV BL , 10DELAY: MOV CX , 2801WAIT: LOOP WAIT DEC BL JNZ DELAY POP CX POP BX RETSOFDLY ENDP 例5.1:一個延遲100 ms 的子程序程序開始為了指明程序開始執(zhí)行的位置,需要使用一個標(biāo)號(例題中采用了start 標(biāo)識符)連接程序會根據(jù)程序起始點正確地設(shè)置CS和IP值,根據(jù)程序大小和堆棧段大小設(shè)置SS和SP值連接程序沒有設(shè)置DS和ES值。程序如果使用數(shù)據(jù)段或附加段,必須明確給DS或ES賦值大多數(shù)程序需要數(shù)據(jù)段,程序的
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 白酒回購合同協(xié)議合同書
- 景觀綠化工程服務(wù)合同
- 購銷合同貨物清單
- 邊坡防護工程勞務(wù)合同
- 用圖形進行編碼(教學(xué)設(shè)計)2024-2025學(xué)年四年級上冊信息技術(shù)蘇科版
- 8 比尾巴(教學(xué)設(shè)計)2024-2025學(xué)年語文一年級上冊統(tǒng)編版
- 人教版初中歷史與社會七年級下冊 6.3.2草原風(fēng)情 教學(xué)設(shè)計
- 浙江工商大學(xué)杭州商學(xué)院《供應(yīng)鏈管理》2023-2024學(xué)年第二學(xué)期期末試卷
- 云南經(jīng)貿(mào)外事職業(yè)學(xué)院《生物技術(shù)專業(yè)文獻檢索與科技論文寫作》2023-2024學(xué)年第二學(xué)期期末試卷
- 中國藥科大學(xué)《單片機原理》2023-2024學(xué)年第二學(xué)期期末試卷
- CJT 290-2008 城鎮(zhèn)污水處理廠污泥處置 單獨焚燒用泥質(zhì)
- 飛行員陸空通話(2)智慧樹知到期末考試答案章節(jié)答案2024年中國民航大學(xué)
- 三禁 兩不 十不準(zhǔn) 課件-2024-2025學(xué)年高一上學(xué)期新生入學(xué)系列教育主題班會
- 圖解《匠心筑夢職啟未來》主題團日活動課件
- 2024年上海市普通高中學(xué)業(yè)水平等級性考試化學(xué)試卷(含答案)
- 【喜德盛自行車營銷策略探究13000字】
- 乳制品及含乳飲料制造行業(yè)作業(yè)活動風(fēng)險分級管控清單
- 免疫檢查點抑制劑相關(guān)肺炎診治專家共識
- 計算機網(wǎng)絡(luò)技術(shù)基礎(chǔ) (項目式微課版) 課件全套 崔升廣 第1-6章-計算機網(wǎng)絡(luò)概述 - 廣域網(wǎng)技術(shù)
- 康復(fù)治療技術(shù)專業(yè)《康復(fù)工程技術(shù)》課程標(biāo)準(zhǔn)
- (高清版)TDT 1013-2013 土地整治項目驗收規(guī)程
評論
0/150
提交評論