版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第4章教學(xué)重點第3章學(xué)習(xí)了8086硬指令,第4章介紹MASM基本的偽指令。第4章重點掌握:程序的格式、開發(fā)方法參數(shù)的表達(dá)、變量的定義變量和標(biāo)號的屬性硬指令和偽指令硬指令——使CPU產(chǎn)生動作、并在程序執(zhí)行時才處理的語句,就是第3章學(xué)習(xí)的處理器指令偽指令(Directive)——不產(chǎn)生CPU動作、在程序執(zhí)行前由匯編程序處理的說明性語句,例如,數(shù)據(jù)說明、變量定義等等偽指令與具體的處理器類型無關(guān),但與匯編程序的版本有關(guān)4.1匯編語句格式本節(jié)從匯編語言程序的語句格式出發(fā),給出第一個示范性的匯編語言源程序,并介紹匯編語言程序的過程:編輯匯編連接調(diào)試即匯編語言程序的開發(fā)方法語句格式⑴執(zhí)行性語句——由硬指令構(gòu)成的語句,它通常對應(yīng)一條機(jī)器指令,出現(xiàn)在程序的代碼段中:標(biāo)號:硬指令助記符操作數(shù),操作數(shù) ;注釋⑵說明性語句——由偽指令構(gòu)成的語句,它通常指示匯編程序如何匯編源程序:名字偽指令助記符參數(shù),參數(shù),… ;注釋第4章
匯編語言大小寫不敏感
MOVCX,0 ;傳送指令,具有2個操作數(shù)DELAY: NOP ;空操作指令,沒有操作數(shù),帶有標(biāo)號
LOOPDELAY ;循環(huán)指令,標(biāo)號DELAY說明轉(zhuǎn)移位置BUFFER DB1,2,3,4,5,6,7
;數(shù)據(jù)定義偽指令,在主存中開辟7個連續(xù)的字節(jié)單元,初值依次為1~7,BUFFER表示首地址匯編語言語句實例標(biāo)號、名字與標(biāo)識符標(biāo)號是反映硬指令位置(邏輯地址)的標(biāo)識符,后跟一個冒號分隔名字是反映偽指令位置(邏輯地址)和屬性的標(biāo)識符,后跟空格或制表符分隔,沒有一個冒號標(biāo)識符(Identifier)一般最多由31個字母、數(shù)字及規(guī)定的特殊符號(如_、$、?、@)組成,不能以數(shù)字開頭。默認(rèn)情況下,匯編程序不區(qū)別標(biāo)識符中的字母大小寫一個程序中,每個標(biāo)識符的定義是唯一的,還不能是匯編語言采用的保留字第4章保留字保留字(ReservedWord)是匯編程序已經(jīng)利用的標(biāo)識符,主要有:硬指令助記符——例如:MOV、ADD偽指令助記符——例如:DB、EQU操作符——例如:OFFSET、PTR寄存器名——例如:AX、CS預(yù)定義符號——例如:@data第4章助記符硬指令助記符可以是任何一條處理器指令,也可以是一條宏指令偽指令助記符將在本章和下章學(xué)習(xí)前一章引入的定義字節(jié)數(shù)據(jù)和字符串的DB就是偽指令操作數(shù)與參數(shù)處理器指令的操作數(shù)可以是立即數(shù)、寄存器和存儲單元偽指令的參數(shù)可以是常數(shù)、變量名、表達(dá)式等,可以有多個,參數(shù)之間用逗號分隔注釋語句中由分號“;”開始的部分為注釋內(nèi)容,用以增加源程序的可讀性必要時,一個語句行也可以由分號開始作為階段性注釋匯編程序在翻譯源程序時將跳過該部分,不對它們做任何處理分隔符語句的4個組成部分要用分隔符分開標(biāo)號后用冒號,注釋前用分號操作數(shù)之間和參數(shù)之間使用逗號分隔其他部分通常采用空格或制表符多個空格和制表符的作用與一個相同MASM支持續(xù)行符“\”匯編語言源程序的組成原則完整的匯編語言源程序由段組成一個匯編語言源程序可以包含若干個代碼段、數(shù)據(jù)段、附加段或堆棧段,段與段之間的順序可隨意排列需獨立運行的程序必須包含一個代碼段,并指示程序執(zhí)行的起始點,一個程序只有一個起始點所有的可執(zhí)行性語句必須位于某一個代碼段內(nèi),說明性語句可根據(jù)需要位于任一段內(nèi)通常,程序還需要一個堆棧段匯編語言程序的開發(fā)過程編輯文本編輯器,如EDIT.COM源程序:文件名.asm匯編匯編程序,如MASM.EXE目標(biāo)模塊:文件名.obj連接連接程序,如LINK.EXE可執(zhí)行文件:文件名.exe調(diào)試調(diào)試程序,如DEBUG.EXE應(yīng)用程序錯誤錯誤錯誤錯誤4.2表達(dá)式
表達(dá)式由操作數(shù)和運算符組成,如3+2、77AND55、NOT5AH等。1.操作數(shù)操作數(shù)用于代表一個數(shù)據(jù)或一個地址,可以是常量和變量。2.運算符運算符包括算術(shù)、邏輯運算、關(guān)系、分析、綜合五類運算符。①算術(shù)運算符
包括+、-、*、/、MOD
參加運算的內(nèi)容可以是數(shù)據(jù),也可以是地址,但必須有具體的物理含義。
②邏輯運算符
包括AND、OR、NOT、XOR
③關(guān)系運算符
包括相等:EQ
大于:GT
不等:NE
小于或等于:LE
小于:LT
大于或等于:GE關(guān)系運算結(jié)果只有兩個——真、假。如果關(guān)系是真,則結(jié)果為0FFH(0FFFFH);如果關(guān)系是假,則結(jié)果為0。例如
MOVAX,5GT3;等價于MOVAX,F(xiàn)FFFH;
MOVBL,8+2*3LE5+29/6等價于MOVBL,00H④分析運算符分析運算在匯編語言程序設(shè)計中很重要。它包括取存儲單元偏移地址:OFFSET
取存儲單元段地址:
SEG
取類型:TYPE
取字節(jié)數(shù):
SIZE
按類型取長度:LENGTH例1:設(shè)有數(shù)據(jù)段中使用
DATA1DB05,A2,00,10H,85H定義了一個單元,則
05A2001085DSCSDATA12000:1500
①
MOVAL,DATA1
可將DATA1中的數(shù)傳送到AL中,
AL=05②
MOVAX,SEGDATA1可將DATA1的所在段地址傳到AX中,
AX=2000
③
MOVAX,OFFSETDATA1可將DATA1的偏移地址傳入AX中,
AX=1500例2:設(shè)有數(shù)據(jù)段中使用DATA1DW100DUP(?)
定義了100個字單元,則
MOVAX,TYPEDATA1AX=2
MOVAX,LENGTHDATA1AX=100MOVAX,SIZEDATA1AX=20005A2001085DSDATA1⑤綜合運算符
綜合運算符包括:SHORT(短),PTR(屬性),段超越,THIS(當(dāng)前位置),HIGH和LOW(字節(jié)分離)
PRT——改變存儲器地址操作數(shù)的操作類型,但其段地址和偏移地址不變。如:
DATA1DW100DUP(?)MOVAL,DATA1MOVAL,BYTEPTRDATA1
√×DATA1SEGMENTWBUFFEREQUTHISWORDBUFFERDB12H,34H,00H,91HDATA1ENDSCODE1SEGMENTASSUMECS:CODE1,DS:DATA1START:MOVAX,DATA1MOVDS,AX
MOVAL,BUFFERMOVBX,WBUFFER……CODE1ENDSENDSTARTTHIS——用來建立新的存儲器地址操作數(shù),但不分配存儲單元。新的操作數(shù)類型在THIS中指定,而其段地址和偏移量就是匯編時的當(dāng)前值。1234009185DSBUFFERWBUFFERAL=12HBX=3412H4.3偽指令在8086/8088匯編語言中偽指令是用于諸如數(shù)據(jù)定義、存儲區(qū)分配、編程框架等功能。所謂偽指令是非機(jī)器指令,它是在匯編期間進(jìn)行操作的。(1)符號常量定義語句EQU
為了使程序便于閱讀和修改,我們有時使用一個符號來代表一個值,而符號代表了一定的意義,在程序中使用一個符號代表一個值進(jìn)行操作,其格式為:
符號EQU表達(dá)式例如:
PORTEQU3F8H在程序中可使用
MOVDX,PORT
對DX進(jìn)行賦值,實際上PORT就是一個常量。還可在語句中進(jìn)行運算,如:
DATA_PORTEQU3F8HSTAT_PORTEQU3F8H+2
SEEDEQU10FUNCEQUSEED*SEED+2*SEED+1
‘=’號操作
對符號的賦值還可使用“=”操作,它與EQU的區(qū)別是“=”操作可以重復(fù)定義,而EQU則不能重復(fù)定義。如:
X=3Y=6Y=Y*Y-X……MOVAX,Y
4.3.2變量定義(數(shù)據(jù)定義)變量名為用戶自定義標(biāo)識符,表示初值表首元素的邏輯地址;用這個符號表示地址,常稱為符號地址變量名可以沒有。這種情況,匯編程序?qū)⒅苯訛槌踔当矸峙淇臻g,無符號地址設(shè)置變量名是為了方便存取它指示的存儲單元數(shù)據(jù)定義語句的格式為:
變量名操作符初值表變量定義偽指令助記符變量定義偽指令根據(jù)申請的主存空間單位分類DB——定義字節(jié)偽指令DW——定義字偽指令DD——定義雙字偽指令DF——定義3字偽指令DQ——定義4字偽指令DT——定義10字節(jié)偽指令還有定位偽指令初值表初值表是用逗號分隔的參數(shù)主要由數(shù)值常數(shù)、表達(dá)式或?、DUP組成?——表示初值不確定,即未賦初值;DUP——表示重復(fù)初值DUP的格式為:重復(fù)次數(shù)DUP(重復(fù)參數(shù))定義字節(jié)單元偽指令DBDB偽指令用于分配一個或多個字節(jié)單元,并可以將它們初始化為指定值初值表中每個數(shù)據(jù)一定是字節(jié)量(Byte),存放一個8位數(shù)據(jù):可以是0~255的無符號數(shù)或是-128~+127帶符號數(shù)也可以是字符串常數(shù)實例字節(jié)單元定義實例data segment ;數(shù)據(jù)段X db'a',-5 db2dup(100),?Y db'ABC'data ends應(yīng)用moval,X;此處X表示它的第1個數(shù)據(jù),故AL←'a'decX+1;對X為始的第2個數(shù)據(jù)減1,故成為-6movY,al;現(xiàn)在Y這個字符串成為'aBC'字節(jié)變量的應(yīng)用定義字單元偽指令DWDW偽指令用于分配一個或多個字單元,并可以將它們初始化為指定值初值表中每個數(shù)據(jù)一定是字量(Word),一個字單元可用于存放任何16位數(shù)據(jù):一個段地址一個偏移地址兩個字符
0~65535之間的無符號數(shù)-32768~+32767之間的帶符號數(shù)實例字單元定義實例data segment ;數(shù)據(jù)段count dw8000h,?,'AB'maxint equ64hnumber dwmaxintarray dwmaxintdup(0)data ends字變量和字常量的定義:WNUM EQU5678H ;定義WNUM為常量COUNT DW20H;定義COUNT變量,假設(shè)在數(shù)據(jù)段的偏移地址為10H字變量和字常量的應(yīng)用:MOVAX,[BX+SI+WNUM] ;MOVAX,[BX+SI+5678H]MOVAX,COUNT ;MOVAX,[0010H]MOVAX,[SI+COUNT] ;MOVAX,COUNT[SI] ;MOVAX,[SI+10H]LEABX,COUNT ;LEABX,[0010H]MOVBX,OFFSETCOUNT ;MOVBX,0010H字變量和字常量定義雙字單元偽指令DDDD偽指令用于分配一個或多個雙字單元,并可以將它們初始化為指定值初值表中每個數(shù)據(jù)是一個32位的雙字量(DoubleWord):可以是有符號或無符號的32位整數(shù)也可以用來表達(dá)16位段地址(高位字)和16位的偏移地址(低位字)的遠(yuǎn)指針vardd DD0,?,12345678hfarpoint DD00400078h
例:
DATA1DB?DATA2DW1000HDATA3DD3000A455HDATA4DW2DUP(0)DATA5DW0120H,0240H,0360H
DS隨機(jī)001055A4003000000000200140026003DATA1DATA2DATA3DATA4DATA5DS544849532049532041204558414D504C45例:DATA6DB‘THISISAEXAMPLE’DATA6THIS
ISAEXAMPLE
注意:
數(shù)據(jù)定義語句定義的數(shù)據(jù)在存儲器中占有相應(yīng)的單元而EQU只是定義了一個數(shù)據(jù),在匯編后以實際數(shù)據(jù)的形式體現(xiàn)在程序中。也就是說,EQU語句不會占有存儲單元。單個字符可以用DB,DW,DD,DQ,DT定義,兩個字符DB,DW,多個字符只能用DB定義4.3.3段定義和段對應(yīng)在段定義中,SEGMENT和ENDS總是成對使用的,它們將數(shù)據(jù)和程序分為多個段,如數(shù)據(jù)段、棧段和代碼段。
ASSUME是匯編時進(jìn)行操作的,它用于在匯編時告訴匯編器,哪個是數(shù)據(jù)段,哪個是代碼段,哪個是棧段。ASSUMEDS:DATA,CS:CODE,
SS:STACK,ES:EXTRA4.3.4定位偽指令定位偽指令控制數(shù)據(jù)的偏移地址ORG
參數(shù)ORG偽指令是將當(dāng)前偏移地址指針指向參數(shù)表達(dá)的偏移地址:ORG100h ;從100h處安排數(shù)據(jù)或程序ORG$+10;使偏移地址加10,即跳過10個字節(jié)空間MASM中,符號“$”表示當(dāng)前偏移地址值EVEN ;從偶地址開始ALIGNn ;從n的整數(shù)倍地址開始4.3.5過程定義和調(diào)用和其它程序設(shè)計一樣,8086/8088匯編程序設(shè)計有過程或子程序的設(shè)計方法。8086/8066匯編程序的過程從運行位置上分為近過程(NEAR)和遠(yuǎn)過程(FAR),其定義如下:
PROC_NAME1PROCNEAR……RETPROC_NAME1ENDP
PROC_NAME2PROCFAR……RETPROC_NAME2ENDP過程的調(diào)用用call指令4.3.6程序開始和結(jié)束在程序的開始可以用NAME
或TITLE為程序取名字。格式為:NAME程序名
TITLE程序名
整個程序的結(jié)束使用END
標(biāo)出,當(dāng)匯編器讀到END
時,它認(rèn)為程序到此就結(jié)束了。在程序中,首條被執(zhí)行的語句有一個標(biāo)號,在程序的結(jié)尾使用END
后跟上這個標(biāo)號,用以標(biāo)出這個程序的開始執(zhí)行處。
注:NAME、TITLE操作不是必須的。
END
則必不可少。4.3.7宏定義、宏調(diào)用、宏展開宏定義的格式:宏名MACRO[形參表]...ENDM宏調(diào)用格式:宏名[實參表](宏體)舉例宏定義:宏調(diào)用
ABCMACROA,B,CABCAL,BL,CLMOVAL,A宏展開:ADDAL,BMOVAL,ALMOVC,ALADDAL,BLENDMMOVCL,AL
宏與子程序的比較相同點:均可一次定義,多
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年完成特定技術(shù)攻關(guān)的勞動合同樣本3篇
- 2024全新企業(yè)融資抵押貸款委托服務(wù)合同范本下載2篇
- 2024年度典當(dāng)行不動產(chǎn)抵押貸款服務(wù)合同3篇
- 2024年度二人合資創(chuàng)辦環(huán)??萍脊竞贤侗?篇
- 2024年標(biāo)準(zhǔn)草種采購與銷售協(xié)議模板版
- 污水管網(wǎng)改造提升項目投標(biāo)書
- 2024年施工現(xiàn)場安全管理合同2篇
- 2024版北京二手車交易糾紛仲裁服務(wù)合同模板2篇
- 2024年飛機(jī)購銷及航空器維修服務(wù)包年合同3篇
- 2024年架子工工程承包合同(含環(huán)保要求)
- cin宮頸上皮內(nèi)瘤變的護(hù)理
- 提高患者出院隨訪率課件
- 精神科疾病的精神科診斷與治療
- 醫(yī)療健康合作協(xié)議
- 戲劇表演社管理制度
- 水囊引產(chǎn)護(hù)理查房
- 2024屆高考語文 語言文字運用 復(fù)習(xí)課件
- 2023年CQE客訴工程師年度總結(jié)及下年規(guī)劃
- 2023年秋季國家開放大學(xué)-02272-數(shù)據(jù)結(jié)構(gòu)(本)期末考試題帶答案
- 有限空間消防水箱應(yīng)急預(yù)案
- 江西省三新協(xié)同教研共同體2023-2024學(xué)年高一上學(xué)期12月聯(lián)考物理試卷(解析版)
評論
0/150
提交評論