變量定義及常用偽指令_第1頁
變量定義及常用偽指令_第2頁
變量定義及常用偽指令_第3頁
變量定義及常用偽指令_第4頁
變量定義及常用偽指令_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

變量定義及常用偽指令第一頁,共四十三頁,編輯于2023年,星期五第4講變量定義及常用偽指令硬指令和偽指令硬指令——使CPU產(chǎn)生動作、并在程序執(zhí)行時才處理的語句,如mov、add等偽指令(Directive)——不產(chǎn)生CPU動作、在程序執(zhí)行前由匯編程序處理的說明性語句,例如,數(shù)據(jù)說明、變量定義等等偽指令與具體的處理器類型無關(guān),但與匯編程序的版本有關(guān)

本課程采用微軟宏匯編程序MASM6.15第二頁,共四十三頁,編輯于2023年,星期五匯編語言程序的語句格式⑴執(zhí)行性語句——由硬指令構(gòu)成的語句,它通常對應(yīng)一條機器指令,出現(xiàn)在程序的代碼段中:標號:硬指令助記符操作數(shù),操作數(shù) ;注釋⑵說明性語句——由偽指令構(gòu)成的語句,它通常指示匯編程序如何匯編源程序:名字偽指令助記符參數(shù),參數(shù),… ;注釋標號是反映硬指令位置(邏輯地址)的標識符,后跟一個冒號分隔名字是反映偽指令位置(邏輯地址)和屬性的標識符,后跟空格或制表符分隔,沒有一個冒號處理器指令的操作數(shù)可以是立即數(shù)、寄存器和存儲單元偽指令的參數(shù)可以是常數(shù)、變量名、表達式等,可以有多個,參數(shù)之間用逗號分隔語句中由分號“;”開始的部分為注釋內(nèi)容,用以增加源程序的可讀性必要時,一個語句行也可以由分號開始作為階段性注釋匯編程序在翻譯源程序時將跳過該部分,不對它們做任何處理第三頁,共四十三頁,編輯于2023年,星期五標識符標識符(Identifier)一般最多由31個字母、數(shù)字及規(guī)定的特殊符號(如_、@、$、?、%)組成,不能以數(shù)字開頭。默認情況下,匯編程序不區(qū)別標識符中的字母大小寫一個程序中,每個標識符的定義是唯一的,還不能是匯編語言采用的保留字硬指令助記符——例如:MOV、ADD偽指令助記符——例如:DB、EQU操作符——例如:OFFSET、PTR寄存器名——例如:AX、CS預(yù)定義符號——例如:@data第四頁,共四十三頁,編輯于2023年,星期五第4講變量定義及常用偽指令1數(shù)值型參數(shù)2變量定義偽指令3變量和標號的屬性4字符串的輸入輸出方法第五頁,共四十三頁,編輯于2023年,星期五1數(shù)值型參數(shù)在源程序語句格式的4個組成部分中,參數(shù)是指令的操作對象(學(xué)習(xí)硬指令時被稱為操作數(shù)),參數(shù)之間用逗號分隔匯編語言程序中,指令參數(shù)有數(shù)值型,它的主要形式是常數(shù)和數(shù)值表達式;匯編語言程序中,指令參數(shù)還有地址型,它的主要形式是標號和名字(變量名、段名、過程名等)第六頁,共四十三頁,編輯于2023年,星期五(1)

常數(shù)常數(shù)(常量)表示一個固定的數(shù)值它又分成多種形式:(1)十進制常數(shù)(2)十六進制常數(shù)(3)二進制常數(shù)(4)八進制常數(shù)(5)字符串常數(shù)(6)符號常數(shù)第七頁,共四十三頁,編輯于2023年,星期五十進制常數(shù)由0~9數(shù)字組成,以字母D或d結(jié)尾缺省情況下,后綴D或d可以省略匯編語言大小寫不敏感,D和d通用例如:100、255DDEBUG下默認的是十六進制數(shù)據(jù),但在編寫匯編語言源程序的時候默認的是十進制!第八頁,共四十三頁,編輯于2023年,星期五十六進制常數(shù)由0~9、A~F組成,以字母H或h結(jié)尾以字母A~F開頭的十六進制數(shù),前面要用0表達,以避免與其他符號混淆匯編語言大小寫不敏感,H和h通用例如:64H、0FFh、0B800H第九頁,共四十三頁,編輯于2023年,星期五二進制常數(shù)由0或1兩個數(shù)字組成,以字母B或b結(jié)尾匯編語言大小寫不敏感,B和b通用例如:01101100B第十頁,共四十三頁,編輯于2023年,星期五字符串常數(shù)用單引號或雙引號括起來的單個字符或多個字符,其數(shù)值是每個字符對應(yīng)的ASCII碼的值例如:'d'=64H'AB'=4142H'Hello,Everybody!'第十一頁,共四十三頁,編輯于2023年,星期五符號常數(shù)利用一個標識符表達的一個數(shù)值,用于常量定義等價EQU偽指令符號名EQU數(shù)值表達式符號名EQU<字符串>等號=偽指令符號名=數(shù)值表達式常數(shù)若使用有意義的符號名來表示,可以提高程序的可讀性,同時更具有通用性EQU不允許重復(fù)賦值,但=則無此限制實例第十二頁,共四十三頁,編輯于2023年,星期五符號定義

DosWriteCharequ2 CarriageReturn=13 CallDOSequ<int21h>符號應(yīng)用(左邊程序段等價右側(cè)的符號形式)

movah,2 ;movah,DosWriteChar movdl,13 ;movdl,CarriageReturn int21h ;CallDOS符號常數(shù)實例第十三頁,共四十三頁,編輯于2023年,星期五(2)

數(shù)值表達式數(shù)值表達式一般是指由運算符連接的各種常數(shù)所構(gòu)成的表達式匯編程序在匯編過程中計算表達式,最終得到一個數(shù)值程序運行之前,就已經(jīng)計算出了表達式;所以,程序運行速度沒有變慢,但增強程序的可讀性第十四頁,共四十三頁,編輯于2023年,星期五運算符算術(shù)運算符邏輯運算符移位運算符關(guān)系運算符高低分離符第十五頁,共四十三頁,編輯于2023年,星期五算術(shù)運算符實現(xiàn)加、減、乘、除、取余的算術(shù)運算+-*/MODmovax,3*4+5

;等價于movax,17MOD也稱為取模,它產(chǎn)生除法之后的余數(shù),如19mod7結(jié)果是5加+和減-運算符還可以用于地址表達式除加、減外,其他運算符的參數(shù)必須是整數(shù)第十六頁,共四十三頁,編輯于2023年,星期五邏輯運算符實現(xiàn)按位相與、相或、異或、求反的邏輯運算ANDORXORNOTmoval,03hAND45h;等價于moval,01h第十七頁,共四十三頁,編輯于2023年,星期五移位運算符實現(xiàn)對數(shù)值的左移、右移的邏輯操作;移入低位或高位的是0SHLSHR格式為:數(shù)值表達式SHL/SHR移位次數(shù)moval,0101bSHL(2*2);等價于moval,01010000b第十八頁,共四十三頁,編輯于2023年,星期五關(guān)系運算符用于比較和測試符號數(shù)值EQNEGTLTGELEMASM用0FFFFH(補碼-1)表示條件為真MASM用0000H表示條件為假movbx,PORTLT5;當PORT<5時,匯編結(jié)果為movbx,0ffffh;否則,匯編結(jié)果為movbx,0000h第十九頁,共四十三頁,編輯于2023年,星期五高低分離符取數(shù)值的高半部分或低半部分HIGHLOWHIGHWORDLOWWORDHIGH、LOW從一個字數(shù)值或符號常量中得到高、低字節(jié)movah,HIGH8765h ;等價于movah,87h從MASM6.0引入的HIGHWORD、LOWWORD取一個符號常量(不能是其他常數(shù))的高字或低字部分dd_valueequ0ffff1234h

;定義一個符號常量movax,LOWWORDdd_value

;等價于movax,1234h第二十頁,共四十三頁,編輯于2023年,星期五2變量定義偽指令變量定義(Define)偽指令為變量申請固定長度的存儲空間,并可同時將相應(yīng)的存儲單元初始化變量名偽指令助記符初值表

變量定義偽指令最常使用第二十一頁,共四十三頁,編輯于2023年,星期五變量名變量名為用戶自定義標識符,表示初值表首元素的邏輯地址;用這個符號表示地址,常稱為符號地址設(shè)置變量名是為了方便存取它指示的存儲單元變量名可以沒有。這種情況,匯編程序?qū)⒅苯訛槌踔当矸峙淇臻g,無符號地址第二十二頁,共四十三頁,編輯于2023年,星期五初值表初值表是用逗號分隔的參數(shù)主要由常數(shù)、表達式或?、DUP組成?——表示初值不確定,即未賦初值;DUP——表示重復(fù)初值DUP的格式為:重復(fù)次數(shù)DUP(重復(fù)參數(shù))第二十三頁,共四十三頁,編輯于2023年,星期五變量定義偽指令助記符變量定義偽指令根據(jù)申請的主存空間單位分類DB——定義字節(jié)偽指令DW——定義字偽指令DD——定義雙字偽指令DF——定義3字偽指令DQ——定義4字偽指令DT——定義10字節(jié)偽指令還有定位偽指令第二十四頁,共四十三頁,編輯于2023年,星期五定義字節(jié)單元偽指令DBDB偽指令用于分配一個或多個字節(jié)單元,并可以將它們初始化為指定值初值表中每個數(shù)據(jù)一定是字節(jié)量(Byte),存放一個8位數(shù)據(jù):可以是0~255的無符號數(shù)或是-128~+127帶符號數(shù)也可以是字符串常數(shù)第二十五頁,共四十三頁,編輯于2023年,星期五data segment ;數(shù)據(jù)段X db'a',0-5 db2dup(100),?Y db'ABC'data ends字節(jié)單元定義實例第二十六頁,共四十三頁,編輯于2023年,星期五moval,X;此處X表示它的第1個數(shù)據(jù),故AL←'a'decX+1;對X為始的第2個數(shù)據(jù)減1,故成為-6movY,al;現(xiàn)在Y這個字符串成為'aBC'字節(jié)變量的應(yīng)用第二十七頁,共四十三頁,編輯于2023年,星期五定義字單元偽指令DWDW偽指令用于分配一個或多個字單元,并可以將它們初始化為指定值初值表中每個數(shù)據(jù)一定是字量(Word),一個字單元可用于存放任何16位數(shù)據(jù):一個段地址一個偏移地址兩個字符

0~65535之間的無符號數(shù)-32768~+32767之間的帶符號數(shù)第二十八頁,共四十三頁,編輯于2023年,星期五data segment ;數(shù)據(jù)段count dw8000h,?,'AB'maxint equ64hnumber dwmaxintarray dwmaxintdup(0)data ends字單元定義實例第二十九頁,共四十三頁,編輯于2023年,星期五字變量和字常量的定義:WNUM EQU5678H ;定義WNUM為常量COUNT DW20H;定義COUNT變量,假設(shè)在數(shù)據(jù)段的偏移地址為10H字變量和字常量的應(yīng)用:MOVAX,[BX+SI+WNUM] MOVAX,COUNT MOVAX,[SI+COUNT]

LEABX,COUNT MOVBX,OFFSETCOUNT

字變量和字常量;MOVAX,[BX+SI+5678H];MOVAX,[0010H];MOVAX,COUNT[SI];MOVAX,[SI+10H];LEABX,[0010H]

;MOVBX,0010H第三十頁,共四十三頁,編輯于2023年,星期五定義雙字單元偽指令DDDD偽指令用于分配一個或多個雙字單元,并可以將它們初始化為指定值初值表中每個數(shù)據(jù)是一個32位的雙字量(DoubleWord):可以是有符號或無符號的32位整數(shù)也可以用來表達16位段地址(高位字)和16位的偏移地址(低位字)的遠指針vardd DD0,?,12345678hfarpoint DD00400078h第三十一頁,共四十三頁,編輯于2023年,星期五定位偽指令定位偽指令控制數(shù)據(jù)的偏移地址ORG

參數(shù)ORG偽指令是將當前偏移地址指針指向參數(shù)表達的偏移地址:ORG100h ;從100h處安排數(shù)據(jù)或程序ORG$+10;使偏移地址加10,即跳過10個字節(jié)空間MASM中,符號“$”表示當前偏移地址值arrayDB12,34,56lenequ$-array;記錄變量array所占字節(jié)數(shù)第三十二頁,共四十三頁,編輯于2023年,星期五例題.modelsmall.stack.dataX dw5Y dw6Z dw7W dw?.code .startup

movax,X addax,Y addax,Z movW,ax

.exit0 end設(shè)有3個字變量X,Y和Z,初值分別為5,6和7,試求出三者之和,并存入字變量W中。第三十三頁,共四十三頁,編輯于2023年,星期五3變量和標號的屬性①地址屬性標號和名字對應(yīng)存儲單元的邏輯地址邏輯地址包括:段地址和偏移地址②類型屬性標號、子程序名的類型可以是NEAR(近)和FAR(遠),分別表示段內(nèi)或段間變量名的類型可以是BYTE(字節(jié))、WORD(字)和DWORD(雙字)等第三十四頁,共四十三頁,編輯于2023年,星期五地址操作符取得名字或標號的段地址和偏移地址兩個屬性[]

將括起的表達式作為存儲器地址$

當前偏移地址: 采用指定的段地址寄存器OFFSET名字/標號返回名字或標號的偏移地址SEG名字/標號返回名字或標號的段地址第三十五頁,共四十三頁,編輯于2023年,星期五

org$+10array db45,45h .code movax,segarray movds,ax movbx,offsetarray ;等價于leabx,array movcl,array+4 ;等效于movcl,array[4]

地址操作符實例

加4個字節(jié)單元第三十六頁,共四十三頁,編輯于2023年,星期五類型名PTR名字/標號PTR操作符使名字或標號具有指定的類型類型名可以是BYTE/WORD/DWORD/FWORD/QWORD/TBYTE或者是NEAR/FARmoval,byteptrw_var ;w_var是一個字變量使用PTR操作符,可以臨時改變名字或標號的類型第三十七頁,共四十三頁,編輯于2023年,星期五統(tǒng)計一個字變量中包含數(shù)據(jù)元素的個數(shù).modelsmall.stack.datav_worddw3322h,6*4,3dup(2),?,"ab"countequ($-v_word)/2.code.startupmovdl,countadddl,30hmovah,02hint21h.exit0end第三十八頁,共四十三頁,編輯于2023年,星期五4字符串的輸入輸出方法同字符的輸入輸出類似,字符串的輸入輸出也采用DOS提供給用戶的用于調(diào)用系統(tǒng)功能的21H號中斷來實現(xiàn)。通常按照如下4個步驟進行:⑴在AH寄存器中設(shè)置系統(tǒng)功能調(diào)用號⑵在指定寄存器中設(shè)置入口參數(shù)⑶執(zhí)行指令I(lǐng)NT21H(或ROM-BIOS的中斷向量號)實現(xiàn)中斷服務(wù)程序的功能調(diào)用⑷根據(jù)出口參數(shù)分析功能調(diào)用執(zhí)行情況第三十九頁,共四十三頁,編輯于2023年,星期五字符串輸出的功能調(diào)用DOS功能調(diào)用INT21H功能號:AH=

溫馨提示

  • 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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論