版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1
在說明數(shù)據(jù)時不僅要指定其數(shù)值,還需說明它的屬性,如是字節(jié)數(shù)據(jù)還是字數(shù)據(jù)。4.2.1匯編語言數(shù)據(jù)數(shù)據(jù)是指令和偽指令語句中操作數(shù)的根本組成局部。一個數(shù)據(jù)由數(shù)值和屬性兩局部構成。
在匯編語言中常用的數(shù)據(jù)形式有:常數(shù)、變量和標號。2
常數(shù)在匯編期間其值已完全確定,并且在程序運行過程中,其值不會發(fā)生變化。一、常數(shù)常數(shù)有以下幾種形式:1.二進制數(shù):以字母B結尾,如01001001B2.八進制數(shù):以字母O或Q結尾,如631Q254O3.十進制數(shù):以字母D結尾,或者沒有結尾字母。如2007D、2007。34.十六進制數(shù):以字母H結尾,如3FEH,如果常數(shù)的第一個數(shù)字為字母,為了與標識符加以區(qū)別,必須在其前面冠以數(shù)字“0〞?!勒麛?shù)局部?小數(shù)局部E±指數(shù)局部尾數(shù)
匯編程序在匯編源程序時,可以把實數(shù)轉換為4字節(jié)、8字節(jié)或10字節(jié)的二進制數(shù)形式存放。例2.134E+105.實數(shù)。一般格式為:46.字符串常數(shù):用引號〔單引號或雙引號〕括起來的一個或多個字符,這些字符以它的ASCII碼值存儲在內存。例如`B`在內存中為42H,`ABC`為41H42H43H。在內存中的存儲如下圖。43H42H41H…..….低地址高地址5〔3〕在數(shù)據(jù)定義偽指令中使用常數(shù)在程序中可以用在以下幾種情況:〔1〕作指令語句的源操作數(shù)〔2〕在指令語句的直接尋址方式、變址〔基址〕尋址方式或基址變址尋址方式中作位移量。MOVAX,0B2F0HADDAH,64HMOVBX,32H[SI]MOV0ABH[BX],CXADCDX,1234H[BP][DI]DB10HDW3210H6
變量用來表示存放數(shù)據(jù)的存儲單元,這些數(shù)據(jù)在程序運行期間可以被改變。二、變量
定義變量就是給變量在內存中分配一定的存儲單元。也就是給這個存儲單元賦與一個符號名,即變量名,同時還要將這些存儲單元預置初置。1.變量的定義與預置定義變量使用數(shù)據(jù)定義偽指令DB、DW、DD、DQ和DT等。
程序中以變量名的形式來訪問變量,因此,可以認為變量名就是存放數(shù)據(jù)的存儲單元地址。7變量定義的一般格式:其中表達式1、表達式2是給存儲單元賦的初值。DB;定義字節(jié)變量
DW;定義字變量變量名DD表達式1,表達式2……;定義4字節(jié)變量
DQ;定義8字節(jié)變量
DT;定義10字節(jié)變量例如:VAR_DATASEGMENT
DATA1DB12H
DATA2DB20H,30H
DATA3DW5678H
VAR_DATAENDS8它表示變量所在位置與段起始點之間的字節(jié)數(shù)。當變量被定義后,就具有了以下三個屬性:〔1〕段屬性它表示變量存放在哪一個邏輯段中?!?〕偏移量屬性〔OFFSET〕段屬性和偏移量屬性就構造了變量的邏輯地址例如上面例子中的變量DATA1、DATA2和DATA3三個變量都存放在VAR-DATA邏輯段中。如上述例子中,變量DATA1的偏移量為0,DATA2為1,DATA3為3。9它表示變量占用存儲單元的字節(jié)數(shù)。其中DB偽指令定義的變量為字節(jié),DW定義的變量為字,DD定義的為雙字〔4字節(jié)〕,DQ定義的為4字,DT定義的為5字?!?〕類型屬性
在變量的定義語句中,給變量賦初值的表達式可以使用下面4種形式:例如:DATA1DB32,30HDATA1的內容為32〔20H〕,DATA1+1單元內容為30H.〔1〕數(shù)值表達式10例如:DA-BYTEDB?,?,?表示讓匯編程序分配三個字節(jié)存儲單元。這些存儲單元的內容的值為任意值。不帶引號的問號“?〞表示可以預置任意內容?!?〕?表達式
對于DB偽指令,字符串為用引號括起來的不超過255個字符。給每一個字符分配一個字節(jié)單元。字符串按從左到右,將字符的ASCII編碼值以地址遞增的排列順序依次存放?!?〕字符串表達式11對于DW偽指令可以給兩個字符組成的字符串分配兩個字節(jié)存儲單元。例如:STRING2DW‘AB’,‘CD’,’EF’例如:STRING1DB‘ABCDEF’STRING241H42H43H44H45H46H‘B’‘A’‘D’‘C’‘E’‘F’46H41H42H43H44H45HSTRING1‘A’‘B’‘C’‘D’‘E’‘F’注意:兩個字符的存放順序是前一個字符放在高地址,后一字符放低地址單元。12例如:STRING3DD‘AB’,‘CD’注意:DW和DD偽指令不能用兩個以上字符構成的字符串賦初值,否那么將出錯。對于DD偽指令,只能給兩個字符組成的字符串分配4個字節(jié)單元。41H42H43H44H00000000STRING3‘A’‘B’‘D’‘C’兩個字符存放在較低地址的兩個字節(jié)單元中。存放順序與DW偽指令相同,而較高的兩個字節(jié)單元都存放0。13〔4〕DUP表達式DUP稱為重復數(shù)據(jù)操作符。使用DUP表達式的一般格式為:DB
變量名DW表達式1DUP(表達式2)
DD其中:表達式1是重復的次數(shù),表達式2是重復的內容。例如:DATA_ADB10HDUP(?)DATA_BDB20HDUP(‘AB’)分配16個字節(jié)單元分配20H*2=40H個字節(jié),其內容為重復字符串‘AB’。14DUP還可以嵌套使用,即表達式2又可以是一個帶DUP的表達式。例如:DATA_CDB10HDUP(4DUP(2),7)
重復10H個數(shù)字序列“2,2,2,2,7〞,共占用10H*5=50H個字節(jié)。2.變量的使用〔1〕在指令語句中引用例如:DA1DB0FEH
DA2DW52ACH
……
MOVAL,DA1;將0FEH傳送到AL中
MOVBX,DA2;將52ACH傳送到BX中在指令語句中直接引用變量名就是對其存儲單元的內容進行存取15當變量出現(xiàn)在變址〔基址〕尋址或基址變址尋址的操作數(shù)中時表示取用該變量的偏移量。例如:DA3DB10HDUP(?)DA4DW10HDUP〔1〕MOVDA3[SI],ALADDDX,DA4[BX][DI]......DA3DA4(SI)(BX)+(DI)111111將AL的內容送入從DA3開始再偏移(SI)的存儲單元中將從DA4開始再偏移(BX)+(DI)的字存儲單元的內容與DX的內容相加,結果送回DX中。16后面三條偽指令的操作數(shù)中都包含了前面定義的兩個變量設上述語句所在段的段基值為0915H,NUM的偏移量為0004H,那么存儲單元的分配情況如下圖。75H0000000400040015H09H0700......ADR3NUMARRAY+0+1+3FADR1ADR2〔2〕在偽指令語句中引用NUMDB75H
ARRAYDW20HDUP(0)
ADR1DWNUM
ADR2DDNUM
ADR3DWARRAY[2]它表示取變量地址的偏移量取變量段基值和偏移量。前兩個字節(jié)存偏移量,后兩個字節(jié)存段基值17標號寫一條指令的前面,它就是該指令在內存的存放地址的符號表示,也就是指令地址的別名。三、標號例如:MOVCX,100
LAB:MOVAX,BX
……
LOOPLAB
JNENEXT;不為零轉移
……
NEXT:……標號主要用在程序中需要改變程序的執(zhí)行順序時,用來標記轉移的目的地,即作轉移指令的操作數(shù)。18它表示該標號可以被段內還是段間的指令調用。每個標號具有三屬性〔1〕段屬性〔SEG〕
它表示該標號所代表的地址在哪個邏輯段中,即段基值?!?〕偏移量屬性〔OFFSET〕它表示該標號所代表的地址在段內與段起點間的字節(jié)數(shù),即地址的偏移量?!?〕距離屬性〔也叫類型屬性〕
該標號只能作段內轉移,也就是說只能是與該標號所指指令同在一個邏輯段的轉移指令和調用指令才能使用它。NEAR〔近〕:19
當標號加在指令語句前面時,它隱含為NEAR屬性。a.隱含方式例SUB1:MOVAX,30HSUB1的距離屬性為NEAR也就是它只能被本段的轉移指令和調用指令訪問。b.用LABEL偽指令給標號指定距離屬性類型為NEAR或FAR。該語句應與指令語句連用。格式:
標號名LABEL類型該標號可以被非本段的轉移和調用指令使用。標號的距離屬性可以有兩種方法來指定:FAR(遠):20例如:SUB1_FARLABELFAR
SUB1:MOVAX,30H
…...SUB1_FAR與SUB1兩個標號具有相同的段屬性和偏移量屬性,即相同的邏輯地址。被轉移指令或調用指令訪問時,是指同一個入口地址,但SUB1-FAR可以被其它段的指令調用。LABEL偽指令還可以用來定義變量的屬性,即改變一個變量的屬性,如把字變量的上下字節(jié)作為字節(jié)變量來處理。例如:DATA_BYTELABELBYTEDATA_WORDDW20HDUP〔?〕DATA_BYTE與DATA_WORD具有相同的段基值和偏移量。DATA_BYTE可以被用來存取一個字節(jié)數(shù)據(jù),而DATA_WORD那么不能。21
在源程序設計中,使用符號定義語句將一些常數(shù)或表達式等內容用某個指定的符號來表示。在8086/8088匯編語言中有兩種符號定義語句。4.2.2符號定義語句一、等值語句語句格式:符號名EQU表達式功能:用符號名來表示EQU右邊的表達式。后面的程序中一旦出現(xiàn)該符號名,匯編程序將把它替換成該表達式。一般來說,表達式可以是任何形式,常有以下幾種情況。1.常數(shù)或數(shù)值表達式COUNTEQU5NUMEQUCOUNT+5222.地址表達式ADR1被定義為在DS數(shù)據(jù)段中以BP作基址尋址的一個存儲單元。ADR1EQUDS:[BP+14]3.變量、存放器名或指令助記符例如:CREGEQUCX;在后面的程序使用CREG就是使用CXCBDEQUDAA;DAA為十進制調整指令。注意:在同一源程序中,同一符號不能用EQU定義屢次。例:CBDEQUDAACBDEQUADD錯誤使用23格式:符號名=表達式二、等號語句等號語句與等值語句具有相同的作用。但等號語句可以對一個符號進行屢次定義。例如:CONT=5NUM=14HNUM=NUM+10HCBD=DAACBD=ADD注意:等值語句與等號語句都不會為符號分配存儲單元。因此所定義的符號沒有段、偏移量和類型等屬性。244.2.3表達式與運算符
表達式是指令或偽指令語句操作數(shù)的常見形式。它由常數(shù)、變量、標號等通過操作運算符連接而成。注意:任何表達式的值在程序匯編過程中進行計算確定,而不是到程序運行時才計算。8086/8088宏匯編語言中的操作運算符非常豐富,可以分為以下五類。一、算術運算符+、—、*、/、MOD、SHL、SHR、[]1.運算符“+〞和“-〞也可作單目運算符,表示數(shù)的正負。252.使用“+〞、“-〞、“*〞、和“/〞運算符時,參加運算的數(shù)和運算結果都是整數(shù)。3.“/〞運算為取商的整數(shù)局部,而“MOD〞運算取除法運算的余數(shù)。NUM=15*8;NUM=120NUM=NUM/7;NUM=17NUM=NUMMOD3;NUM=2NUM=NUM+5;NUM=7NUM=-NUM-3;NUM=-10NUM=-NUM-NUM;NUM=20例如:264."SHR"和"SHL"為邏輯移位運算符“SHR〞為右移,左邊移出來的空位用0補入?!癝HL〞為左移,右邊移出來的空位用0補入。注意:移位運算符與移位指令區(qū)別。移位運算符的操作對象是某一具體的數(shù)〔常數(shù)〕,在匯編時完成移位操作。而移位指令是對一個存放器或存儲單元內容在程序運行時執(zhí)行移位操作。例如NUM=11011011B
…….
MOVAX,NUMSHL1MOVBX,NUMSHR2
ADDDX,NUMSHR6不能改成:SHLNUM,CL27上面的指令序列等效下面三條指令。MOVAX,110110110B
MOVBX,00110110B
ADDDX,35.下標運算符“[]〞具有相加的作用一般使用格式:表達式1[表達式2]作用:將表達式1與表達式2的值相加后形成一個存儲器操作數(shù)的地址。下面兩個語句是等效的。MOVAX,DA_WORD[20H]
MOVAX,DA_WORD+20H28可以用存放器來存放下標變量例:下面幾個語句是等價的MOVAX,ARRAY[BX][SI];基址變址尋址
MOVAX,ARRAY[BX+SI]
MOVAX,[ARRAY+BX][SI]
MOVAX,[ARRAY+SI][BX]
MOVAX,[ARRAY+BX+SI]下面是幾個錯誤的語句。MOVAX,ARRAY+BX+SI
MOVAX,ARRAY+BX[SI]
MOVAX,ARRAY+DA_WORD29二、邏輯運算符
邏輯運算符有NOT、AND、OR和XOR等四個,它們執(zhí)行的都是按位邏輯運算。例如MOVAX,NOT0F0H=>MOVAX,0FF0FH
MOVAL,NOT0F0H=>MOVAL,0FH
MOVBL,55HAND0F0H=>MOVBL,50H
MOVBH,55HOR0F0H=>MOVBH,0F5H
MOVCL,55HXOR0F0H=>MOVCL,0A5H三、關系運算符關系運算符包括:EQ〔等于〕、NE〔不等于〕、LT〔小于〕、LE〔小于等于〕、GT〔大于〕、GE〔大于等于〕30關系運算符用于比較兩個表達式的大小。關系運算符比較的兩個表達式必須同為常數(shù)或同一邏輯段中的變量。如果是常量的比較,那么按無符號數(shù)進行比較;如果是變量的比較,那么比較它們的偏移量的大小。關系運算的結果只能是“真〞〔全1〕或“假〞〔全0〕MOVAX,0FHEQ1111B=>MOVAX,0FFFFH
MOVBX,0FHNE1111B=>MOVBX,0例1:VARDWNUMLT0ABH該語句在匯編時,根據(jù)符號常量NUM的大小來決定VAR存儲單元的值,當NUM<0ABH時,那么變量VAR的內容為0FFFFH,否那么VAR的內容為0。例231四、數(shù)值返回運算符該類運算符有5個,它們將變量或標號的某些特征值或存儲單元地址的一局部提取出來。取變量或標號所在段的段基值。1.SEG運算符DATASEGMENT
K1DW1,2
K2DW3,4
……
MOVAX,SEGK1
MOVBX,SEGK2例如:設DATA邏輯段的段基值為1FFEH,則兩條傳送指令將被匯編為:MOVAX,1FFEH
MOVBX,1FFEH作用32該運算符的作用是取變量或標號在段內的偏移量。2.OFFSET運算符例如:DATASEGMENT
VAR1DB20HDUP(0)
VAR2DW5A49H
ADDRDWVAR2;將VAR2的偏移量20H存入ADDR中
…….
MOVBX,VAR2;(BX)=5A49H
MOVSI,0FFSETVAR2;(SI)=20H
MOVDI,ADDR;DI的內容與SI相同
MOVBP,OFFSETADDR;(BP)=22H33該運算符的作用為取變量或標號的類型屬性,并用數(shù)字形式來表示。對變量來說就是取它的字節(jié)長度。3.TYPE運算符變量BYTE1
WORD2
DWORD4標號NEAR-1
FAR-2例如:V1DB‘ABCDE’
V2DW1234H,5678H
V3DDV2;存放V2的段基值和偏移量
……
MOVAL,TYPEV1
MOVCL,TYPEV2
MOVCH,TYPEV3上述程序段匯編后的等效指令序列如下:34MOVAL,01HMOVCL,02HMOVCH,04H該運算符只能加在變量的前面。如果變量是用重復數(shù)據(jù)操作符DUP說明的,那么返回外層DUP給定的值。如果沒有用DUP說明,那么返回值總是1。4.LENGTH運算符K1DB10HDUP〔0〕
K2DB10H,20H,30H,40H
K3DW20HDUP(0,1,2DUP(0))
K4DB‘ABCDEFGH’
……..35MOVAL,LENGTHK1;(AL)=10H
MOVBL,LENGTHK2;(BL)=1
MOVCX,LENGTHK3;(CX)=20H
MOVDX,LENGTHK4;(DX)=1
該運算符只能作用于變量,SIZE取值等于LENGTH和TYPE兩個運算符返回值的乘積。5.SIZE運算符例如,對于上面例子,加上以下指令:MOVAL,SIZEK1;〔AL〕=10H
MOVBL,SIZEK2;〔BL〕=1
MOVCL,SIZEK3;〔CL〕=20H*2=40H
MOVDL,SIZEK4;〔DL〕=136五、屬性修改運算符
這一類運算符用來對變量、標號或存儲器操作數(shù)的類型屬性進行修改或指定。1.PTR運算符類型PTR地址表達式使用格式:作用:將地址表達式所指定的標號、變量或用其它形式表示的存儲器地址的類型屬性修改為“類型〞所指的值。類型可以是BYTE、WORD、DWORD、NEAR和FAR。這種修改是臨時性的,只在含有該運算符的語句內有效。37例如:DA_BYTEDB20HDUP(0)
DA_WORDDW30HDUP(0)
…….
MOVAX,WORDPTRDA_BYTE[10]
ADDBYTEPTRDA_WORD[20],BL
INCBYTEPTR[BX]
SUBWORDPTR[SI],100
JMPFARPTRSUB1;指明SUB1不是本段中的地址2.HIGH/LOW運算符HIGH表達式
LOW表達式使用格式:這兩個運算符用來將一個數(shù)據(jù)別離出高字節(jié)和低字節(jié)。38如果表達式為一個常量,那么將其別離成高8位和低8位;如果表達式是一個地址〔段基值或偏移量〕時,那么別離出它的高字節(jié)和低字節(jié)。例如:DATASEGMENT
CONSTEQU0ABCDH
DA1DB10HDUP〔0〕
DA2DW20HDUP〔0〕
DATAENDS
…….
MOVAH,HIGHCONST
MOVAL,LOWCONST
MOVBH,HIGH(OFFSETDA1)
MOVBL,LOW(OFFSETDA2)
MOVCH,HIGH(SEGDA1)
MOVCL,LOW(SEGDA2)設DATA段的段基值是0926H,那么上述指令序列匯編后的等效指令為:MOVAH,0ABH
MOVAL,0CDH
MOVBH,00H
MOVBL,10H
MOVCH,09H
MOVCL,26H39
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 生產效率的飛躍新世代生產設備介紹
- 幼兒園中國傳統(tǒng)節(jié)日活動方案
- 2023八年級數(shù)學下冊 第二章 一元一次不等式與一元一次不等式組6 一元一次不等式組第2課時 一元一次不等式組的解法(2)說課稿 (新版)北師大版001
- 12 寓言二則 說課稿-2023-2024學年語文二年級下冊統(tǒng)編版001
- 8我們受特殊保護 第二課時《專門法律來保護》說課稿-2024-2025學年六年級上冊道德與法治統(tǒng)編版
- 25《慢性子裁縫和急性子顧客》說課稿-2024-2025學年統(tǒng)編版語文三年級下冊
- Module 1(說課稿)-2023-2024學年外研版(一起)英語一年級下冊
- Module6 Unit2 He ran very fast(說課稿)2024-2025學年外研版(三起)英語五年級上冊
- 28 少年閏土 說課稿-2024-2025學年統(tǒng)編版六年級上冊
- 22《狐假虎威》第二課時 說課稿-2024-2025學年統(tǒng)編版語文二年級上冊
- 社區(qū)成人血脂管理中國專家共識(2024年)
- 信息科技重大版 七年級上冊 互聯(lián)網(wǎng)應用與創(chuàng)新 第1單元 單元教學設計 互聯(lián)網(wǎng)時代
- CR200J動力集中動車組拖車制動系統(tǒng)講解
- 骨盆骨折患者的護理
- 國際貨物運輸委托代理合同(中英文對照)全套
- 全面新編部編版四年級下冊語文教材解讀分析
- 江蘇農牧科技職業(yè)學院單招《職業(yè)技能測試》參考試題庫(含答案)
- 三年級上冊脫式計算100題及答案
- 烹飪實訓室安全隱患分析報告
- 《金屬加工的基礎》課件
- 運輸行業(yè)春節(jié)安全生產培訓 文明駕駛保平安
評論
0/150
提交評論