版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第5章定義數(shù)據(jù)5.1定義數(shù)據(jù)的偽指令5.2立即數(shù)5.3賦值偽指令5.1定義數(shù)據(jù)的偽指令本節(jié)介紹DB、DW、DD、DQ及DT定義數(shù)據(jù)的偽指令。它們分別實現(xiàn)定義數(shù)據(jù)或資料的字節(jié)、字、雙字、四字和十字節(jié)數(shù)據(jù)。定義數(shù)據(jù)的偽指令一般格式如下所示:[變量名]DN操作數(shù)(1)變量名即名稱,是可選項,以方括號識別。若程序中使用到該變量名,則變量名不可省略。(2)DN表示定義數(shù)據(jù)偽指令的操作碼,在使用時有以下幾種取值:DB(字節(jié))、DW(字)、DD(雙字)、DQ(四字)、DT(十字節(jié))。(3)操作數(shù)項表示要定義的數(shù)據(jù),可以有下列幾種情況:常數(shù)常數(shù)可以有一個或多個,當為多個常數(shù)時,之間用逗號隔開。如:
FLD1DB25HFLD2DB11,12,13,14,15匯編程序?qū)⑦@些常數(shù)按順序定義在相鄰的字節(jié)變量中,當使用FLD2時,相當于取第1個常數(shù)11,而使用到FLD2+1時,即取第2個常數(shù)12。若有
MOVAL,F(xiàn)LD2+3
則AL中的值為0E(14)。
匯編語言中,常以一個問號“?”來預(yù)留一個字節(jié)的空間。如:
FLD3DB?FLD4DB?,?
操作數(shù)同時也允許重復(fù)多個常數(shù),其一般格式如下:[變量名]DN重復(fù)次數(shù)DUP(操作數(shù))例如:DW10DUP(?) ;預(yù)留10個字單元
DB5DUP(14) ;定義5個含十六進制0E的字節(jié)
DB3DUP(4DUP(8)) ;定義12個含十六進制8的字節(jié)字符串字符串是用來描述如人名或標題的特殊“數(shù)據(jù)”。字符串是以單引號(‘’)或雙引號(“”)擴起來作為定界符。例如,‘PC’或“PC”。匯編程序?qū)⑦@些字符串以ASCII碼的格式存入目的程序。只有DB偽指令才能定義超過兩個字節(jié)的字符串,并且以由低地址到高地址的順序來存儲字符串。請記住,DB是定義字符串的唯一明智選擇。例5.1提供了一些例子。例5.1字符串與數(shù)值的定義。源程序清單如下:??;filename:L51.ASMPage60,132TITLEEXDEF(EXE)Defineassemblerpseudo-opsDATASGSEGMENTPARA‘DATA’;——————定義字節(jié)數(shù)據(jù)——————DBFLD1DBDB?FLD2DBDB‘PersonalComputer’FLD3DBDB32FLD4DBDB20HFLD5DBDB01011001BFLD6DBDB01,‘JAN’,02,‘FEB’,03,‘MAR’FLD7DBDB‘32654’FLD8DBDB10DUP(0) ;tenzeros;——————定義字數(shù)據(jù)——————DWFLD1DWDW0FFF0HFLD2DWDW01011001BFLD3DWDWFLD7DB ;addressconstantFLD4DWDW3,4,7,8,9 ;fiveconstantsFLD5DWDW5DUP(0) ;fivezeros;——————定義雙字數(shù)據(jù)——————DDFLD1DDDD?FLD2DDDD‘PC’FLD3DDDD32572FLD4DDDDFLD3DB-FLD2DB ;diffbetwaddressFLD5DDDD14,49;——————定義四字數(shù)據(jù)——————DQFLD1DQDQ?FLD2DQDQ04D47HFLD3DQDQ32572;——————定義十字節(jié)數(shù)據(jù)——————DTFLD1DTDT?FLD2DTDT‘PC’DATASGENDS例5.1的字符串與數(shù)值的定義結(jié)果如下(見圖5-1):—————————————————————————————————————————————1Page60,1322TITLEEXDEF(EXE)Defineassemblerpseudo-ops30000DATASGSEGMENTPARA‘DATA’4;
——————定義字節(jié)數(shù)據(jù)――DB50000 ?? FLD1DBDB?60001 50 65 72 73 6F 6E 61 FLD2DBDB‘PersonalComputer’76C 20 43 6F 6D 70 75 874 65 72 90012 20 FLD3DBDB32100013 20 FLD4DBDB20H110014 59 FLD5DBDB01011001B120015 01 4A 41 4E 02 46 45 FLD6DBDB01,‘JAN’,02,‘FEB’,03,‘MAR’13 42 03 4D 41 52 140021 33 32 36 35 34 FLD7DBDB‘32654’150026 000A[ FLD8DBDB10DUP(0);tenzeros16 00 17 ] 18 19 ;——————定義字數(shù)據(jù)——————DW200030 FFF0 FLD1DWDW0FFF0H210032 0059 FLD2DWDW01011001B220034 0021R FLD3DWDWFLD7DB
;addressconstant230036 0003000400070008 FLD4DWDW3,4,7,8,9;fiveconstants24 0009 250040 0005[ FLD5DWDW5DUP(0);fivezeros26 0000
27 ] 28 ;——————定義雙字數(shù)據(jù)——————DD29004A ???????? FLD1DDDD?30004E 43500000 FLD2DDDD'PC'310052 3C7F0000 FLD3DDDD32572320056 11000000 FLD4DDDDFLD3DB-FLD2DB33005A 0E00000031000000 FLD5DDDD14,4934 ;——————定義四字數(shù)據(jù)——————DQ350062 ???????????????? FLD1DQDQ?36006A 474D000000000000 FLD2DQDQ04D47H370072 3C7F000000000000 FLD3DQDQ3257238 ;——————定義十字節(jié)數(shù)據(jù)——————DT39007A ??????????????????? FLD1DTDT?40 ? 410084 43500000000000000000FLD2DTDT‘PC’42008E DATASGENDS
43 END圖5-1例5.1字符串與數(shù)值的定義結(jié)果5.1.1數(shù)值型常數(shù)
數(shù)值型常數(shù)可以用來表示算術(shù)數(shù)值和存儲器的偏移地址,有二進制、八進制、十進制和十六進制等幾種不同的表示形式。這些匯編語言中采用不同的后綴說明加以區(qū)分:
B:表示二進制。如:10110110B。
Q(或O):表示八進制。如:263Q。D:表示十進制。如:58D或58。
H:表示十六進制。如:43H,0FEH。機器內(nèi)使用二進制數(shù),但二進制數(shù)書寫起來比較冗長,所以在許多情況下還是用八進制或十六進制表示,這是因為八進制、十六進制與二進制之間的轉(zhuǎn)換十分方便。匯編程序在匯編時,把任何進制的常數(shù)全部轉(zhuǎn)換成十六進制數(shù)。下面是各種不同進制常數(shù)的格式。1.二進制二進制格式允許使用0,1,其后必須加后綴說明字母B。使用二進制是為了在編寫邏輯運算程序時,使用邏輯運算指令A(yù)ND、OR、XOR以及TEST時能夠方便地區(qū)別位的值。十進制的12,十六進制的0CH和二進制的1100B,匯編后均產(chǎn)生相同的值0CH。2.八進制八進制格式允許使用0~7,其后必須后綴說明字母Q或O,例如,253Q。3.十進制
十進制格式允許使用十進制的數(shù)字0~9,其后可以加后綴說明字母D也可以不加,例如,125或125D。匯編后十進制的125會變成十六進制的7D。4.十六進制
十六進制格式允許使用十六進制的數(shù)字0~9、A~F,其后必須加后綴說明字母H。因為匯編程序?qū)⑺幸宰帜钙鹗嫉脑L問都視為符號名稱,所以,當十六進制數(shù)以A~F起始時,前面一定要加數(shù)字0,例如:0FFFH與0E2H。5.1.2定義字節(jié)DB
在定義數(shù)據(jù)的各種偽指令中,DB是最有用的一種。一個DB的變量可以含有直到此行結(jié)束的任意長度的數(shù)據(jù)。例如,例5.1中的FLD2DB與FLD7DB。注意,常數(shù)FLD2DB的值“PersonalComputer”在機器碼中每個均以ASCII碼表示;十六進制20表示空格符。
DB的操作數(shù)項可以是一個或多個字節(jié)的常數(shù)。一個字節(jié)只能表示兩個十六進制數(shù),其正數(shù)的最大值是7F。80~FF這些“較高”值則表示負數(shù)。若以十進制表示,其范圍為-128~+127。圖5-1中的數(shù)值型常數(shù)有FLD3DB、FLD4DB、FLD5DB與FLD8DB。FLD6DB混合了數(shù)值與字符串常數(shù),它適合作一個表(Table)的定義。當操作數(shù)為“?”時,表示預(yù)留一個字節(jié)的內(nèi)存空間以備以后使用,如FLD1DB。5.1.3定義字DWDW偽指令定義長度為一個字(兩個字節(jié))的數(shù)據(jù)項。DW的操作數(shù)被限制在兩個字節(jié)以內(nèi),且匯編程序是以反向順序產(chǎn)生目的碼,如“PC”變成“CP”。DW操作數(shù)項可以含有一個或多個常數(shù)。兩個字節(jié)為4個十六進制數(shù)。最大的十六進制正數(shù)為7FFF,而從8000到FFFF則表示負數(shù)。若以十進制數(shù)表示,其表示范圍為-32?768~+32767。在圖5-1中,F(xiàn)LD1DW與FLD2DW定義了數(shù)值常數(shù),而FLD3DW則定義了一個偏移地址,即FLD7DB的地址,產(chǎn)生的目的碼為0021,右邊的R表示可重定位。
FLD4DW定義了一個含有5個常數(shù)的表,注意在目的碼中每一個常數(shù)均占了一個字(兩個字節(jié))。對于DW,DD,DQ格式,匯編程序把所定義的常數(shù),全都轉(zhuǎn)換成十六進制的目的碼,并以反向順序存于內(nèi)存儲器。因此,十進制數(shù)32?572會轉(zhuǎn)換成十六進制7F3C,并存儲為3C7F。5.1.4定義雙字DD
DD偽指令定義雙字(四個字節(jié))的數(shù)據(jù)項。每一項占4個字節(jié)。最大的十六進制正數(shù)為7FFFFFFF,而從80000000到FFFFFFFF則表示負數(shù)。若以十進制數(shù)表示,其表示范圍為-2147483648~+2147483647。在圖5-1中,F(xiàn)LD3DD定義了一個數(shù)值常數(shù)。FLD4DD產(chǎn)生一個已定義的兩個地址間的差值,其結(jié)果為FLD2DB的長度(十六進制的11即17個字節(jié))。FLD5DD定義了兩個數(shù)值常數(shù)。匯編程序?qū)⑺械腄D數(shù)值常數(shù)轉(zhuǎn)換成十六進制數(shù),并以反向順序存儲目的碼。因此,十進制數(shù)32572會轉(zhuǎn)換成00007F3C,并存儲為3C7F0000。5.1.5定義四字DQDQ偽指令定義長度為4個字(8個字節(jié))的數(shù)據(jù)項。數(shù)據(jù)項中的每個常數(shù)最大占8個字節(jié)即16個十六進制數(shù)。最大的十六進制正數(shù)為7后面接15個F。
圖5-1中的FLD2DQ與FLD3DQ定義了數(shù)值常數(shù)。匯編程序把所有的DQ數(shù)值轉(zhuǎn)換成十六進制,并以反向順序存儲目的碼。5.1.6定義十字節(jié)DTDT偽指令定義長度為十個字節(jié)的數(shù)據(jù)項。注意,對于不同的匯編程序版本DT會產(chǎn)生不同的常數(shù)。在圖5-1列出了兩個DT例子,一個為未定初值的數(shù)據(jù)項,另一個則為含有兩個字符串的字符串常數(shù)。例5.1中的程序只有一個數(shù)據(jù)段。匯編程序不會產(chǎn)生任何錯誤信息,但在鏈接時會產(chǎn)生一個警告:“Warning:NoSTACKSegment”(這個錯誤可以忽略)??梢越柚贒EBUG中的D命令查看所產(chǎn)生的目的碼,方法請參閱第4章4.3節(jié)。
5.2立
即
數(shù)另一種定義數(shù)據(jù)的方法是,直接把操作數(shù)寫在指令中,形成立即數(shù)。例如:
MOVAX,1220H此種情況下,十六進制數(shù)1220H就成了機器指令碼的一部分。這條符號指令的機器指令碼為B82012,共占3個字節(jié)。其中B8是機器指令的操作碼,表示將立即數(shù)1220H移入AX寄存器,緊接著的兩個字節(jié)是立即數(shù)自己。含有立即數(shù)的符號指令一般有兩個操作數(shù):第一個操作數(shù)可以是寄存器或內(nèi)存儲器,第二個操作數(shù)應(yīng)是立即數(shù)。機器指令碼格式中,立即數(shù)是緊跟在指令操作碼后面的。所以,它操作的效率比使用數(shù)據(jù)段,把數(shù)據(jù)定義在數(shù)據(jù)段,從數(shù)據(jù)段中取數(shù)據(jù)效率要高。例如:數(shù)據(jù)段:AMT1DW1220H
指令段:MOVAX,AMT15.2.1立即數(shù)的長度立即數(shù)的范圍被限制在一個字節(jié)(00H~0FFH)或一個字(0000H~0FFFFH)。同時立即數(shù)的長度又受制于第一個操作數(shù)的長度。例如:
MOVAL,1220H(不正確,AL一個字節(jié),1220H兩個字節(jié))1220H是兩個字節(jié)的長度,而AL只是一個字節(jié)的長度。然而立即數(shù)可以比第一個操作數(shù)短。如:
ADDAX,25H
(正確,AX兩個字節(jié),25H一個字節(jié))匯編程序會將立即數(shù)展開成兩個字節(jié)0025H,并以逆序2500H的格式形成目的碼操作數(shù)。5.2.2立即數(shù)的格式立即數(shù)可以是十六進制(如1220H)、十進制(如255)或者是二進制(如11111111B)。匯編后同樣都會被翻譯成為十六進制的FF。5.2.3可以使用立即數(shù)的指令下列指令均可以使用立即數(shù):(1)傳送指令:MOV;(2)算術(shù)運算與比較指令:ADD,ADC,SUB,SBB,CMP;(3)循環(huán)移位與移位指令:RCL,RCR,ROL,ROR,SHL,SAR,SHR;(4)邏輯運算指令:AND,OR,TEST,XOR。
這些指令在以后的章節(jié)中會逐步使用。圖5-2列出了這些指令正確使用立即數(shù)的范例。;filename:L52.LST ;
0000 DATASGSEGMENTPARA‘Data’0000?? FLD11DB?0001???? FLD2DW?0003 DATASGENDS ;—————————————————————0000 CODESGSEGMENTPARA‘CODE’0000 BEGINPROCFAR ASSUMECS:CODESG,DS:DATASG00001EPUSHDS00012BC0 SUBAX,AX000350 PUSHAX0004B8
R MOVAX,DATASG00078ED8 MOVDS,AX ;—————————————————————0009B80123 MOVAX,0123H000C050025 ADDAX,0025H000FBB0101 MOVBX,257 ;—————————————————————00121405
ADCAL,5001480C70D ADDBH,13001780DB05 SBBBL,5001A802E0000R05 SUBFLD11,5001F3C12 CMPAL,18 ;—————————————————————0021D0D3 RCLBL,10023D0DC RCRAH,10025D1060001R ROLFLD2,10029D0C8 RORAL,1002BD1E1 SALCX,1002DD1FB SARBX,1002FD02E0000R SHRFLD11,1 ;—————————————————
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 關(guān)于2025年度市政道路施工管理協(xié)議書3篇
- 2025年度生態(tài)公園清工承包服務(wù)合同3篇
- 2025年度生態(tài)園區(qū)土石方整治與生態(tài)修復(fù)合作協(xié)議3篇
- 二零二五年度農(nóng)村自來水管網(wǎng)租賃服務(wù)合同
- 二零二五年度農(nóng)村家庭資產(chǎn)分配協(xié)議范本2篇
- 2025清潔合同樣板
- 2025年度創(chuàng)新型企業(yè)監(jiān)事聘用合同標準模板3篇
- 二零二五年度農(nóng)村土地租賃與農(nóng)業(yè)產(chǎn)業(yè)扶貧合同
- 2025年度數(shù)據(jù)中心防火門緊急更換與安全評估服務(wù)協(xié)議3篇
- 二零二五年度農(nóng)業(yè)種植項目環(huán)境保護責任書3篇
- 河北省衡水市藥品零售藥店企業(yè)藥房名單目錄
- 火化證明格式
- 機械原理課程設(shè)計-自動蓋章機
- e乙二醇精制車間設(shè)備布置圖
- 行政強制法講座-PPT課件
- 2022年新媒體編輯實戰(zhàn)教程測試題及答案(題庫)
- 崗位現(xiàn)場應(yīng)急處置方案卡全套(全套20頁)
- 涼席竹片銑槽機(課程設(shè)計)
- 高壓線防護搭設(shè)方案
- 綜合機械化固體充填采煤技術(shù)要求-編制說明
- 十人聯(lián)名推薦表
評論
0/150
提交評論