第03章 匯編語言_第1頁
第03章 匯編語言_第2頁
第03章 匯編語言_第3頁
第03章 匯編語言_第4頁
第03章 匯編語言_第5頁
已閱讀5頁,還剩83頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第三章匯編語言本章重點(diǎn)3.1尋址方式3.2匯編語言的語句格式3.3匯編語言中數(shù)據(jù)的表示方式3.4運(yùn)算符號(hào)3.5偽指令3.6匯編語言的上機(jī)過程3.7匯編語言程序的調(diào)試過程

3.1尋址方式3.1.1操作數(shù)的種類3.1.2九大尋址方式3.1.3段跨越與段更換3.1.1操作數(shù)的種類什么是尋址方式?指令中提供操作數(shù)或操作數(shù)地址的方法。操作數(shù):源操作數(shù):其值不變化。目標(biāo)操作數(shù):其值有可能變化。(1)立即操作數(shù):指令要操作的數(shù)據(jù)在指令代碼中直接給出。

MOVAL,10H;指令碼

B010(2)寄存器操作數(shù):指令要操作的數(shù)據(jù)存放在CPU的寄存器中。

MOVAL,BL;指令碼88D8(3)存儲(chǔ)器操作數(shù):指令要操作的數(shù)據(jù)在存儲(chǔ)器(內(nèi)存)中存放。

MOVAL,[1234H];(4)I/O端口操作數(shù):指令要操作的數(shù)據(jù)來自或要送到I/O端口。

INAL,20H;指令碼E4203.1.2九大尋址方式1.固定尋址2.立即數(shù)尋址3.寄存器直接尋址4.寄存器間接尋址5.存儲(chǔ)器直接尋址6.基址尋址7.變址尋址8.基址變址尋址9.數(shù)據(jù)串尋址1.固定尋址

指令要操作的數(shù)據(jù)在指令中并沒有明確給出,但隱含在指令中。

例:

MULBL;AL*BL=>AX

在該指令中,AL和AX并未給出.2.立即數(shù)尋址

指令要操作的數(shù)據(jù)包含在指令碼中。例:MOVAX,1234H

其指令碼為B83412注意:只能用于源操作數(shù),不能用于目標(biāo)操作數(shù)。3.寄存器直接尋址指令要操作的數(shù)據(jù)在寄存器中存放。例:MOVAL,3

注意:寄存器直接尋址即可用于源操作數(shù),也可以用于目標(biāo)操作數(shù),若兩個(gè)操作數(shù)都為寄存器直接尋址,則兩個(gè)寄存器的類型必須一致。

4.寄存器間接尋址

在寄存器間接尋址中,操作數(shù)位于內(nèi)存中,操作數(shù)的地址位于某個(gè)寄存器中,在指令(碼)中給出的是該寄存器的名字(編號(hào))。

舉例:

MOVAL,[BX];指令碼:8A07

MOVAX,[SI];指令碼:8B04

可以用于寄存器間接尋址的寄存器有:BXSIDIBXSIDI的默認(rèn)數(shù)據(jù)段DS

注意:匯編語言的兩個(gè)操作數(shù)不能同時(shí)來源于存儲(chǔ)器。5.存儲(chǔ)器直接尋址

在存儲(chǔ)器直接尋址中,指令直接給出的是操作數(shù)在內(nèi)存中存放的地址。

例如:MOVAL,[1000H]MOVBX,[1000H]注意:隱含段為數(shù)據(jù)段。此方式即可用于源操作數(shù),也可用于目標(biāo)操作數(shù),但兩個(gè)操作數(shù)不能同時(shí)為存儲(chǔ)器直接尋址方式。

在基址尋址中,操作數(shù)位于內(nèi)存中,操作數(shù)的地址由基址寄存器BX或BP與一個(gè)位移量相加給出,在指令(碼)中給出的是該基址寄存器的名字(編號(hào))及位移量。

舉例:MOVAL,[BX+1234H]注意:若為BX,則隱含段為數(shù)據(jù)段。若為BP,則隱含段為堆棧段。6.基址尋址

在變址尋址中,操作數(shù)位于位于內(nèi)存中,操作數(shù)的地址由變址寄存器SI或DI與一個(gè)位移量相加給出,在指令(碼)中給出的是該變址寄存器的名字(編號(hào))及位移量.舉例:

MOVAL,[SI+1234H]注意:隱含段為數(shù)據(jù)段。7.變址尋址8.基址變址尋址

在基變址尋址中,操作數(shù)位于內(nèi)存中,操作數(shù)的地址由基址寄存器BX或BP與變址寄存器SI或DI及一個(gè)位移量相加給出,在指令(碼)中給出的是寄存器的名字(編號(hào))及位移量。

有效地址=(BX)(BP)+(SI)(DI)+位移量注意:若為BX,則隱含段為數(shù)據(jù)段。若為BP,則隱含段為堆棧段。3.1.3段更換與段跨越當(dāng)要操作的數(shù)據(jù)不在隱含段中時(shí),就需要段更換或段跨越。

MOVBX,0100HMOVAL,CS:[BX](1)MOV

AX,[1024](2)MOV[-100],BL(3)MOV[BX],[SI-10](4)MOV[AX+10],BL(5)MOV[BX+BP-50],DX(6)MOV[SI+DI],CL(7)MOV[SI+BX-100],100(8)MOVBX,[BX+SI-5](9)MOV[BX],AX3.2

匯編語言的語句格式[標(biāo)號(hào):]操作符[操作數(shù)][;注解][標(biāo)號(hào)名]定義符參數(shù)1,…,參數(shù)n[;注釋]一、匯編語句格式注意:1、機(jī)器指令的標(biāo)號(hào)以冒號(hào)結(jié)束,偽指令的標(biāo)號(hào)后不能加冒號(hào)。2、標(biāo)號(hào)不能重復(fù)定義,但是可以多次使用。3、標(biāo)號(hào)/變量的三大屬性

標(biāo)號(hào)是可執(zhí)行語句的地址符號(hào)。變量是一個(gè)可以存放數(shù)據(jù)的存儲(chǔ)單元的名字,變量名表示該數(shù)據(jù)區(qū)或存儲(chǔ)區(qū)的第一個(gè)數(shù)據(jù)單元的首地址。標(biāo)號(hào)和變量都具有以下三種屬性:(1)段屬性(SEGMENT)

當(dāng)命名了一個(gè)標(biāo)號(hào)或變量時(shí),實(shí)際上也就是定義了該存儲(chǔ)器操作數(shù)的所在的段。因此,也就確定了它們的段地址。在使用時(shí),由于正在使用的段地址一定在CS、DS、ES、SS中。一般,標(biāo)號(hào)的段地址在CS中,變量的段地址在DS中,在指令執(zhí)行時(shí),這種段地址被隱含地使用。(2)偏移量屬性(OFFSET)

標(biāo)號(hào)或變量所在的地址距段基址的偏移量。(3)類型屬性(TYPE)

標(biāo)號(hào)的類型分為段內(nèi)(即近或NEAR)屬性及段間(即遠(yuǎn)或FAR)屬性。

定義一個(gè)變量時(shí),用偽指令DB定義的變量,其類型屬性即為字節(jié)(BYTE);用偽指令DW定義的變量,其類型屬性即為字(WORD);用偽指令DD定義的變量,其類型屬性即為雙字(DWORD)。4、操作符5、操作數(shù)6、注釋二、數(shù)據(jù)在機(jī)內(nèi)的表示1、符號(hào)的表示2、數(shù)的表示法:定點(diǎn)與浮點(diǎn)3、數(shù)的表示范圍3.3匯編語言中數(shù)據(jù)的書寫格式1.二進(jìn)制2.八進(jìn)制3.十進(jìn)制4.十六進(jìn)制5.科學(xué)計(jì)數(shù)法6.ASCII碼常量7.符號(hào)常量8.表達(dá)式3.4匯編語言中的運(yùn)算符運(yùn)算符分為算術(shù)運(yùn)算符、邏輯運(yùn)算符和關(guān)系運(yùn)算符以及分析運(yùn)算符等六種。1、算術(shù)運(yùn)算符算術(shù)運(yùn)算符包括+、-、*、/(加、減、乘、除)以及求除法運(yùn)算后的余數(shù)的運(yùn)算符MOD、SHL、SHR。這些運(yùn)算符用于數(shù)值操作數(shù)中,其結(jié)果應(yīng)為可計(jì)算的數(shù)值。如19/7其值為2,而19MOD7其值是5。2、邏輯運(yùn)算符邏輯運(yùn)算符是指實(shí)現(xiàn)按位操作的符號(hào)AND、OR、XOR和NOT。邏輯運(yùn)算符的操作數(shù)只能是數(shù)字,且結(jié)果也為數(shù)字。3、關(guān)系運(yùn)算符關(guān)系運(yùn)算符有EQ(相等)、NE(不等)、LT(小于)、GT(大于)、LE(小于或等于)、GE(大于或等于)等運(yùn)算符。一個(gè)關(guān)系運(yùn)算符聯(lián)系的兩個(gè)操作數(shù),可以為數(shù)值,也可以為地址表達(dá)式。但其運(yùn)算的結(jié)果一定是一個(gè)固定的數(shù)值,用來表示邏輯值。關(guān)系成立時(shí),用0FFFFH表示真;關(guān)系不成立時(shí),用0表示假。關(guān)系運(yùn)算符所完成的操作也是在匯編時(shí)完成的。4、分析運(yùn)算符該類操作符不改變操作數(shù)的屬性,但能取得操作數(shù)的某一屬性值。它們通常用于返回存儲(chǔ)器操作數(shù)的段屬性值,偏移量屬性值及類型屬性值。(1)SEG格式:SEG變量或標(biāo)號(hào)名功能:返回變量或標(biāo)號(hào)所在的段基址。例如:MOVAX,SEGA1;把變量A1的段基址送入AX中。(2)OFFSET格式:OFFSET變量名或標(biāo)號(hào)名功能:返回變量或標(biāo)號(hào)所在段的段內(nèi)偏移量。例如:MOVAX,OFFSETA1;把A1的段內(nèi)偏移量送入AX。(3)TYPE

格式:TYPE變量名或標(biāo)號(hào)名功能:返回變量名或標(biāo)號(hào)名的類型值。若為變量,其類型值由類型所對(duì)應(yīng)的字節(jié)數(shù)決定。對(duì)于字節(jié)類型,類型值為1;對(duì)于字類型,類型值為2;對(duì)于雙字類型,類型值為4。標(biāo)號(hào)的類型值則用特殊的負(fù)數(shù)表示。對(duì)于NEAR類型的標(biāo)號(hào),類型值為-1,對(duì)于FAR類型的標(biāo)號(hào),類型值為-2。例如:ALFADW20DUP(?)…MOVAL,TYPEALFA(4)LENGTH格式:LENGTH變量名功能:返回與標(biāo)號(hào)相聯(lián)系的數(shù)據(jù)個(gè)數(shù)。

例如:ALFADW50DUP(?)

則MOVAL,LENGTHALFA(5)SIZE格式:SIZE變量名功能:返回與標(biāo)號(hào)相聯(lián)系的字節(jié)數(shù)。例如:ALFADW50DUP(?)

則MOVAL,SIZEALFA例如:DSEGSEGMENTD1DB3D2DW10DUP(?)

D3DB4DSEGENDS1.MOVAX,OFFSETD12.MOVAX,OFFSETD23.MOVAX,OFFSETD34.MOVAX,TYPED25.MOVAX,SIZED26.MOVAX,LENGTHD2

根據(jù)4,5,6能夠得到怎樣的關(guān)系?5、組合運(yùn)算符①PTR

格式:類型PTR表達(dá)式類型可以為:BYTE,WORD,DWORD,QWORD,TBYTE,NEAR,F(xiàn)AR

功能:建立或修改表達(dá)式的類型為新類型。例如:MOVWORDPTR[SI],3MOVBYTEPTR[SI],3

D1DW1234HMOVAL,BYTEPTRD1②THIS

格式:THIS類型功能:建立一個(gè)新的類型例如:D1EQUTHISWORDD2DB20DUP(10H)

MOVAL,D2MOVAX,D16、字節(jié)分離運(yùn)算符

HIGH*LOW*

注意:*為16位數(shù)據(jù)。例如:MOVAL,HIGH1234HMOVBL,LOW1234H注意運(yùn)算符的優(yōu)先級(jí):單目〉雙目算術(shù)〉關(guān)系〉邏輯

3.5偽指令偽指令:在匯編過程當(dāng)中,起說明作用的指令。3.5.1符號(hào)定義偽指令符號(hào)定義偽指令可以為符號(hào)名賦新值。1.等價(jià)定義偽指令EQU偽指令格式:符號(hào)名EQU表達(dá)式功能:將表達(dá)式的值賦給符號(hào)名,或?yàn)楸磉_(dá)式賦于另一個(gè)等價(jià)的符號(hào)名。注意:

EQU偽指令定義的符號(hào)名是常量,不能再賦值,即不允許用EQU再為符號(hào)名重新定義。A1EQU10+3A2EQUA1A3EQUAXA4EQUMOV2.等號(hào)定義偽指令偽指令格式:

符號(hào)名=表達(dá)式功能:將表達(dá)式的值賦給符號(hào)名(變量)。功能與EQU偽指令相似,不同之處是它可以在程序中不同地方多次使用,可以重新為符號(hào)名賦值。

B1=20

B2=20+7

B3=30+6例如:A1EQU30A1EQU40A1=30A1=40A1=30A1EQU40A1EQU40A1=303.5.2數(shù)據(jù)定義偽指令數(shù)據(jù)定義偽指令可為變量分配存儲(chǔ)單元或定義數(shù)值。偽指令DB、DW、DD、DQ、DT分別定義字節(jié)、字或雙字變量(或數(shù)據(jù))。偽指令格式:

[變量名]DB表達(dá)式[變量名]DW表達(dá)式[變量名]DD表達(dá)式[變量名]DQ表達(dá)式[變量名]DT表達(dá)式功能:定義一個(gè)存儲(chǔ)單元的標(biāo)號(hào)名并初始化該單元或從該單元開始的若干連續(xù)單元。3.5.3段定義偽指令可以用來組成段的結(jié)構(gòu)。1.段定義偽指令SEGMENT和ENDS

偽指令格式:段名SEGMENT[定位類型][組合類型][’類別’]

段名ENDS功能:用此偽指令可以把模塊分為若干個(gè)邏輯段,每一對(duì)SEGMENT和ENDS可定義一個(gè)邏輯段。1)定位類型定位類型任選項(xiàng)告訴匯編程序如何確定邏輯段的邊界在存儲(chǔ)器中的位置。定位類型共有以下四種:●

BYTE(邊界起始地址

=××××

××××

××××

××××

××××B)

該類型表示邏輯段從一個(gè)字節(jié)的邊界開始,即可以從任何地址開始。此時(shí)本段的起始地址可緊接在前一個(gè)段的后面?!馱ORD(邊界起始地址

=××××

××××

××××

××××

×××0B)

該類型表示邏輯段從字的邊界開始。2字節(jié)為1個(gè)字,此時(shí)本段的起始地址必須是偶數(shù)?!馪ARA(邊界起始地址

=××××

××××

××××

××××0000B)

該類型表示邏輯段從一個(gè)節(jié)(Paragraph)的邊界開始(一節(jié)等于16個(gè)字節(jié)),也即段的起始地址能被16整除。故本段的起始地址(十六進(jìn)制)應(yīng)為××××0H。如果省略定位類型任選項(xiàng),則默認(rèn)其為PARA?!馪AGE(邊界起始地址=××××

××××

××××

00000000B)

該類型表示邏輯段從頁邊界開始(一頁等于256個(gè)字節(jié)),也即段的起始地址能被256整除。故本段的起始地址(十六進(jìn)制)應(yīng)為×××00H。

2)組合(Combine)類型

SEGMENT偽指令的第二個(gè)任選項(xiàng)是組合類型,它告訴匯編程序當(dāng)裝入存儲(chǔ)器時(shí)各個(gè)邏輯段如何進(jìn)行組合。六種組合類型:

(1)不組合。如果SEGMENT偽指令的組合類型任選項(xiàng)缺省,則匯編程序認(rèn)為這個(gè)邏輯段是不組合的。也就是說,不同程序中的邏輯段,即使具有相同的段名,也分別作為不同的邏輯段裝入內(nèi)存,不進(jìn)行組合。(2)PUBLIC

連接時(shí),對(duì)于不同程序模塊中的邏輯段,只要具有相同的段名,就把這些段集中成為一個(gè)邏輯段裝入內(nèi)存。

(3)STACK

組合類型為STACK時(shí),其含意為表明連接時(shí),此段為堆棧段。

(4)COMMON

連接時(shí),對(duì)于不同程序中的邏輯段,如果具有相同的段名,則都從同一個(gè)地址開始裝入,因而各個(gè)邏輯段將發(fā)生重疊。最后,連接以后段的長度等于原來最長的邏輯段的長度,重疊部分的內(nèi)容是最后一個(gè)邏輯段的內(nèi)容。(5)MEMORY

該類型表示當(dāng)幾個(gè)邏輯段連接時(shí),本邏輯段定位在地址最高的地方。如果被連接的邏輯段中有多個(gè)段的組合類型都是MEMORY,則匯編程序只將首先遇到的段作為MEMORY段,而其余的段均當(dāng)作COMMON段處理。(6)AT表達(dá)式這種組合類型表示本邏輯段根據(jù)表達(dá)式的值定位段地址。如AT8A00H,表示本段的段地址為8A00H,則本段從存儲(chǔ)器的物理地址8A000H開始裝入。3)'類別'('Class')

類別名是合法的自定義符,必須放在單引號(hào)內(nèi)。凡是類型名相同的段在連接時(shí)均按先后順序連接起來。2.段假設(shè)偽指令A(yù)SSUME

偽指令格式:ASSUME段寄存器:段名[,…]段寄存器可以是CS,DS,ES,SS。段名為SEGMENT定義的邏輯段的名字。凡是本程序需要使用的段,都應(yīng)指出。

功能:向匯編程序指示當(dāng)前各段所用的段寄存器。設(shè)定段寄存器與段間的對(duì)應(yīng)關(guān)系。3.源程序結(jié)束偽指令END

偽指令格式:END[表達(dá)式]其中表達(dá)式為存儲(chǔ)器地址,通常為標(biāo)號(hào)。功能:END表示一個(gè)模塊的結(jié)束。通知匯編程序,源程序到此結(jié)束,且用表達(dá)式指出程序開始執(zhí)行時(shí)的指令地址。表達(dá)式只用于主程序模塊中。4.指令定位偽指令ORG

偽指令格式:ORG表達(dá)式其中表達(dá)式為16位無符號(hào)二進(jìn)制數(shù)。功能:確定其后的數(shù)據(jù)和代碼存放在相應(yīng)段中的起始地址。

3.6匯編語言的上機(jī)過程例如:輸出A與B的較大者SSEGSEGMENTSTACKSTKDB20DUP(0)SSEGENDSDSEGSEGMENTADB-3BDB4DSEGENDSCSEGSEGMENTASSUMECS:CSEG,DS:DSEG,SS:SSEGSTART:MOVAX,DSEGMOVDS,AXMOVAX,SSEGMOVSS,AXMOVSP,SIZESTKMOVAL,AMOVBL,BCMPAL,BLJGL1MOVAL,BLL1:MOVDL,ALADDDL,30HMOVAH,2INT21HMOVAH,4CHINT21HCSEGENDSENDSTART1.編輯源程序

EDIT.EXEEDITM1.ASM

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論