




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
變量定義及常用偽指令第一頁,共四十三頁,編輯于2023年,星期五第4講變量定義及常用偽指令硬指令和偽指令硬指令——使CPU產(chǎn)生動(dòng)作、并在程序執(zhí)行時(shí)才處理的語句,如mov、add等偽指令(Directive)——不產(chǎn)生CPU動(dòng)作、在程序執(zhí)行前由匯編程序處理的說明性語句,例如,數(shù)據(jù)說明、變量定義等等偽指令與具體的處理器類型無關(guān),但與匯編程序的版本有關(guān)
本課程采用微軟宏匯編程序MASM6.15第二頁,共四十三頁,編輯于2023年,星期五匯編語言程序的語句格式⑴執(zhí)行性語句——由硬指令構(gòu)成的語句,它通常對(duì)應(yīng)一條機(jī)器指令,出現(xiàn)在程序的代碼段中:標(biāo)號(hào):硬指令助記符操作數(shù),操作數(shù) ;注釋⑵說明性語句——由偽指令構(gòu)成的語句,它通常指示匯編程序如何匯編源程序:名字偽指令助記符參數(shù),參數(shù),… ;注釋標(biāo)號(hào)是反映硬指令位置(邏輯地址)的標(biāo)識(shí)符,后跟一個(gè)冒號(hào)分隔名字是反映偽指令位置(邏輯地址)和屬性的標(biāo)識(shí)符,后跟空格或制表符分隔,沒有一個(gè)冒號(hào)處理器指令的操作數(shù)可以是立即數(shù)、寄存器和存儲(chǔ)單元偽指令的參數(shù)可以是常數(shù)、變量名、表達(dá)式等,可以有多個(gè),參數(shù)之間用逗號(hào)分隔語句中由分號(hào)“;”開始的部分為注釋內(nèi)容,用以增加源程序的可讀性必要時(shí),一個(gè)語句行也可以由分號(hào)開始作為階段性注釋匯編程序在翻譯源程序時(shí)將跳過該部分,不對(duì)它們做任何處理第三頁,共四十三頁,編輯于2023年,星期五標(biāo)識(shí)符標(biāo)識(shí)符(Identifier)一般最多由31個(gè)字母、數(shù)字及規(guī)定的特殊符號(hào)(如_、@、$、?、%)組成,不能以數(shù)字開頭。默認(rèn)情況下,匯編程序不區(qū)別標(biāo)識(shí)符中的字母大小寫一個(gè)程序中,每個(gè)標(biāo)識(shí)符的定義是唯一的,還不能是匯編語言采用的保留字硬指令助記符——例如:MOV、ADD偽指令助記符——例如:DB、EQU操作符——例如:OFFSET、PTR寄存器名——例如:AX、CS預(yù)定義符號(hào)——例如:@data第四頁,共四十三頁,編輯于2023年,星期五第4講變量定義及常用偽指令1數(shù)值型參數(shù)2變量定義偽指令3變量和標(biāo)號(hào)的屬性4字符串的輸入輸出方法第五頁,共四十三頁,編輯于2023年,星期五1數(shù)值型參數(shù)在源程序語句格式的4個(gè)組成部分中,參數(shù)是指令的操作對(duì)象(學(xué)習(xí)硬指令時(shí)被稱為操作數(shù)),參數(shù)之間用逗號(hào)分隔匯編語言程序中,指令參數(shù)有數(shù)值型,它的主要形式是常數(shù)和數(shù)值表達(dá)式;匯編語言程序中,指令參數(shù)還有地址型,它的主要形式是標(biāo)號(hào)和名字(變量名、段名、過程名等)第六頁,共四十三頁,編輯于2023年,星期五(1)
常數(shù)常數(shù)(常量)表示一個(gè)固定的數(shù)值它又分成多種形式:(1)十進(jìn)制常數(shù)(2)十六進(jìn)制常數(shù)(3)二進(jìn)制常數(shù)(4)八進(jìn)制常數(shù)(5)字符串常數(shù)(6)符號(hào)常數(shù)第七頁,共四十三頁,編輯于2023年,星期五十進(jìn)制常數(shù)由0~9數(shù)字組成,以字母D或d結(jié)尾缺省情況下,后綴D或d可以省略匯編語言大小寫不敏感,D和d通用例如:100、255DDEBUG下默認(rèn)的是十六進(jìn)制數(shù)據(jù),但在編寫匯編語言源程序的時(shí)候默認(rèn)的是十進(jìn)制!第八頁,共四十三頁,編輯于2023年,星期五十六進(jìn)制常數(shù)由0~9、A~F組成,以字母H或h結(jié)尾以字母A~F開頭的十六進(jìn)制數(shù),前面要用0表達(dá),以避免與其他符號(hào)混淆匯編語言大小寫不敏感,H和h通用例如:64H、0FFh、0B800H第九頁,共四十三頁,編輯于2023年,星期五二進(jìn)制常數(shù)由0或1兩個(gè)數(shù)字組成,以字母B或b結(jié)尾匯編語言大小寫不敏感,B和b通用例如:01101100B第十頁,共四十三頁,編輯于2023年,星期五字符串常數(shù)用單引號(hào)或雙引號(hào)括起來的單個(gè)字符或多個(gè)字符,其數(shù)值是每個(gè)字符對(duì)應(yīng)的ASCII碼的值例如:'d'=64H'AB'=4142H'Hello,Everybody!'第十一頁,共四十三頁,編輯于2023年,星期五符號(hào)常數(shù)利用一個(gè)標(biāo)識(shí)符表達(dá)的一個(gè)數(shù)值,用于常量定義等價(jià)EQU偽指令符號(hào)名EQU數(shù)值表達(dá)式符號(hào)名EQU<字符串>等號(hào)=偽指令符號(hào)名=數(shù)值表達(dá)式常數(shù)若使用有意義的符號(hào)名來表示,可以提高程序的可讀性,同時(shí)更具有通用性EQU不允許重復(fù)賦值,但=則無此限制實(shí)例第十二頁,共四十三頁,編輯于2023年,星期五符號(hào)定義
DosWriteCharequ2 CarriageReturn=13 CallDOSequ<int21h>符號(hào)應(yīng)用(左邊程序段等價(jià)右側(cè)的符號(hào)形式)
movah,2 ;movah,DosWriteChar movdl,13 ;movdl,CarriageReturn int21h ;CallDOS符號(hào)常數(shù)實(shí)例第十三頁,共四十三頁,編輯于2023年,星期五(2)
數(shù)值表達(dá)式數(shù)值表達(dá)式一般是指由運(yùn)算符連接的各種常數(shù)所構(gòu)成的表達(dá)式匯編程序在匯編過程中計(jì)算表達(dá)式,最終得到一個(gè)數(shù)值程序運(yùn)行之前,就已經(jīng)計(jì)算出了表達(dá)式;所以,程序運(yùn)行速度沒有變慢,但增強(qiáng)程序的可讀性第十四頁,共四十三頁,編輯于2023年,星期五運(yùn)算符算術(shù)運(yùn)算符邏輯運(yùn)算符移位運(yùn)算符關(guān)系運(yùn)算符高低分離符第十五頁,共四十三頁,編輯于2023年,星期五算術(shù)運(yùn)算符實(shí)現(xiàn)加、減、乘、除、取余的算術(shù)運(yùn)算+-*/MODmovax,3*4+5
;等價(jià)于movax,17MOD也稱為取模,它產(chǎn)生除法之后的余數(shù),如19mod7結(jié)果是5加+和減-運(yùn)算符還可以用于地址表達(dá)式除加、減外,其他運(yùn)算符的參數(shù)必須是整數(shù)第十六頁,共四十三頁,編輯于2023年,星期五邏輯運(yùn)算符實(shí)現(xiàn)按位相與、相或、異或、求反的邏輯運(yùn)算ANDORXORNOTmoval,03hAND45h;等價(jià)于moval,01h第十七頁,共四十三頁,編輯于2023年,星期五移位運(yùn)算符實(shí)現(xiàn)對(duì)數(shù)值的左移、右移的邏輯操作;移入低位或高位的是0SHLSHR格式為:數(shù)值表達(dá)式SHL/SHR移位次數(shù)moval,0101bSHL(2*2);等價(jià)于moval,01010000b第十八頁,共四十三頁,編輯于2023年,星期五關(guān)系運(yùn)算符用于比較和測試符號(hào)數(shù)值EQNEGTLTGELEMASM用0FFFFH(補(bǔ)碼-1)表示條件為真MASM用0000H表示條件為假movbx,PORTLT5;當(dāng)PORT<5時(shí),匯編結(jié)果為movbx,0ffffh;否則,匯編結(jié)果為movbx,0000h第十九頁,共四十三頁,編輯于2023年,星期五高低分離符取數(shù)值的高半部分或低半部分HIGHLOWHIGHWORDLOWWORDHIGH、LOW從一個(gè)字?jǐn)?shù)值或符號(hào)常量中得到高、低字節(jié)movah,HIGH8765h ;等價(jià)于movah,87h從MASM6.0引入的HIGHWORD、LOWWORD取一個(gè)符號(hào)常量(不能是其他常數(shù))的高字或低字部分dd_valueequ0ffff1234h
;定義一個(gè)符號(hào)常量movax,LOWWORDdd_value
;等價(jià)于movax,1234h第二十頁,共四十三頁,編輯于2023年,星期五2變量定義偽指令變量定義(Define)偽指令為變量申請(qǐng)固定長度的存儲(chǔ)空間,并可同時(shí)將相應(yīng)的存儲(chǔ)單元初始化變量名偽指令助記符初值表
變量定義偽指令最常使用第二十一頁,共四十三頁,編輯于2023年,星期五變量名變量名為用戶自定義標(biāo)識(shí)符,表示初值表首元素的邏輯地址;用這個(gè)符號(hào)表示地址,常稱為符號(hào)地址設(shè)置變量名是為了方便存取它指示的存儲(chǔ)單元變量名可以沒有。這種情況,匯編程序?qū)⒅苯訛槌踔当矸峙淇臻g,無符號(hào)地址第二十二頁,共四十三頁,編輯于2023年,星期五初值表初值表是用逗號(hào)分隔的參數(shù)主要由常數(shù)、表達(dá)式或?、DUP組成?——表示初值不確定,即未賦初值;DUP——表示重復(fù)初值DUP的格式為:重復(fù)次數(shù)DUP(重復(fù)參數(shù))第二十三頁,共四十三頁,編輯于2023年,星期五變量定義偽指令助記符變量定義偽指令根據(jù)申請(qǐng)的主存空間單位分類DB——定義字節(jié)偽指令DW——定義字偽指令DD——定義雙字偽指令DF——定義3字偽指令DQ——定義4字偽指令DT——定義10字節(jié)偽指令還有定位偽指令第二十四頁,共四十三頁,編輯于2023年,星期五定義字節(jié)單元偽指令DBDB偽指令用于分配一個(gè)或多個(gè)字節(jié)單元,并可以將它們初始化為指定值初值表中每個(gè)數(shù)據(jù)一定是字節(jié)量(Byte),存放一個(gè)8位數(shù)據(jù):可以是0~255的無符號(hào)數(shù)或是-128~+127帶符號(hào)數(shù)也可以是字符串常數(shù)第二十五頁,共四十三頁,編輯于2023年,星期五data segment ;數(shù)據(jù)段X db'a',0-5 db2dup(100),?Y db'ABC'data ends字節(jié)單元定義實(shí)例第二十六頁,共四十三頁,編輯于2023年,星期五moval,X;此處X表示它的第1個(gè)數(shù)據(jù),故AL←'a'decX+1;對(duì)X為始的第2個(gè)數(shù)據(jù)減1,故成為-6movY,al;現(xiàn)在Y這個(gè)字符串成為'aBC'字節(jié)變量的應(yīng)用第二十七頁,共四十三頁,編輯于2023年,星期五定義字單元偽指令DWDW偽指令用于分配一個(gè)或多個(gè)字單元,并可以將它們初始化為指定值初值表中每個(gè)數(shù)據(jù)一定是字量(Word),一個(gè)字單元可用于存放任何16位數(shù)據(jù):一個(gè)段地址一個(gè)偏移地址兩個(gè)字符
0~65535之間的無符號(hào)數(shù)-32768~+32767之間的帶符號(hào)數(shù)第二十八頁,共四十三頁,編輯于2023年,星期五data segment ;數(shù)據(jù)段count dw8000h,?,'AB'maxint equ64hnumber dwmaxintarray dwmaxintdup(0)data ends字單元定義實(shí)例第二十九頁,共四十三頁,編輯于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偽指令用于分配一個(gè)或多個(gè)雙字單元,并可以將它們初始化為指定值初值表中每個(gè)數(shù)據(jù)是一個(gè)32位的雙字量(DoubleWord):可以是有符號(hào)或無符號(hào)的32位整數(shù)也可以用來表達(dá)16位段地址(高位字)和16位的偏移地址(低位字)的遠(yuǎn)指針vardd DD0,?,12345678hfarpoint DD00400078h第三十一頁,共四十三頁,編輯于2023年,星期五定位偽指令定位偽指令控制數(shù)據(jù)的偏移地址ORG
參數(shù)ORG偽指令是將當(dāng)前偏移地址指針指向參數(shù)表達(dá)的偏移地址:ORG100h ;從100h處安排數(shù)據(jù)或程序ORG$+10;使偏移地址加10,即跳過10個(gè)字節(jié)空間MASM中,符號(hào)“$”表示當(dāng)前偏移地址值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個(gè)字變量X,Y和Z,初值分別為5,6和7,試求出三者之和,并存入字變量W中。第三十三頁,共四十三頁,編輯于2023年,星期五3變量和標(biāo)號(hào)的屬性①地址屬性標(biāo)號(hào)和名字對(duì)應(yīng)存儲(chǔ)單元的邏輯地址邏輯地址包括:段地址和偏移地址②類型屬性標(biāo)號(hào)、子程序名的類型可以是NEAR(近)和FAR(遠(yuǎn)),分別表示段內(nèi)或段間變量名的類型可以是BYTE(字節(jié))、WORD(字)和DWORD(雙字)等第三十四頁,共四十三頁,編輯于2023年,星期五地址操作符取得名字或標(biāo)號(hào)的段地址和偏移地址兩個(gè)屬性[]
將括起的表達(dá)式作為存儲(chǔ)器地址$
當(dāng)前偏移地址: 采用指定的段地址寄存器OFFSET名字/標(biāo)號(hào)返回名字或標(biāo)號(hào)的偏移地址SEG名字/標(biāo)號(hào)返回名字或標(biāo)號(hào)的段地址第三十五頁,共四十三頁,編輯于2023年,星期五
org$+10array db45,45h .code movax,segarray movds,ax movbx,offsetarray ;等價(jià)于leabx,array movcl,array+4 ;等效于movcl,array[4]
地址操作符實(shí)例
加4個(gè)字節(jié)單元第三十六頁,共四十三頁,編輯于2023年,星期五類型名PTR名字/標(biāo)號(hào)PTR操作符使名字或標(biāo)號(hào)具有指定的類型類型名可以是BYTE/WORD/DWORD/FWORD/QWORD/TBYTE或者是NEAR/FARmoval,byteptrw_var ;w_var是一個(gè)字變量使用PTR操作符,可以臨時(shí)改變名字或標(biāo)號(hào)的類型第三十七頁,共四十三頁,編輯于2023年,星期五統(tǒng)計(jì)一個(gè)字變量中包含數(shù)據(jù)元素的個(gè)數(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號(hào)中斷來實(shí)現(xiàn)。通常按照如下4個(gè)步驟進(jìn)行:⑴在AH寄存器中設(shè)置系統(tǒng)功能調(diào)用號(hào)⑵在指定寄存器中設(shè)置入口參數(shù)⑶執(zhí)行指令I(lǐng)NT21H(或ROM-BIOS的中斷向量號(hào))實(shí)現(xiàn)中斷服務(wù)程序的功能調(diào)用⑷根據(jù)出口參數(shù)分析功能調(diào)用執(zhí)行情況第三十九頁,共四十三頁,編輯于2023年,星期五字符串輸出的功能調(diào)用DOS功能調(diào)用INT21H功能號(hào):AH=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 八年級(jí)下冊物理課外輔導(dǎo)計(jì)劃
- 鋼筋混凝土條形基礎(chǔ)施工現(xiàn)場管理流程
- 餐飲行業(yè)疫情防控工作計(jì)劃
- 小學(xué)安全隱患排查論文范文
- 部編本人教版2024-2025年小學(xué)一年級(jí)語文上冊課時(shí)安排教學(xué)計(jì)劃
- 技工院校教學(xué)改革計(jì)劃
- 建筑工程施工總結(jié)范文
- 統(tǒng)編版六下語文課題研究計(jì)劃
- 小學(xué)留守兒童藝術(shù)興趣培養(yǎng)計(jì)劃
- 人事經(jīng)理崗位職責(zé)與招聘流程管理
- 能源使用和能源消耗
- 國開期末考試《建筑工程質(zhì)量檢驗(yàn)》機(jī)考試題及答案(第6套)
- 2022海南省財(cái)金集團(tuán)有限公司招聘試題及答案解析
- 氧化還原反應(yīng)的基本規(guī)律及其應(yīng)用
- 全國工會(huì)財(cái)務(wù)知識(shí)競賽題庫及答案
- 物聯(lián)網(wǎng)平臺(tái)介紹
- 計(jì)算機(jī)組成原理考點(diǎn)整理
- 廣東省深圳市龍華區(qū)2022-2023學(xué)年五年級(jí)下學(xué)期期末數(shù)學(xué)試卷
- 黃石市陽新縣法院系統(tǒng)書記員招聘考試真題
- 湖北省工傷職工停工留薪期分類目錄
- 教科版六下科學(xué)全冊課時(shí)練(含答案)
評(píng)論
0/150
提交評(píng)論