版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電機(jī)與電氣控制技術(shù) 課件 項(xiàng)目6 CA6150型臥式車床電氣控制電路的檢修
- 《GBT 14786-2008農(nóng)林拖拉機(jī)和機(jī)械 驅(qū)動(dòng)車輪扭轉(zhuǎn)疲勞試驗(yàn)方法》專題研究報(bào)告
- 《GBT 15306.3-2008陶瓷可轉(zhuǎn)位刀片 第3部分:無孔刀片尺寸(U級(jí))》專題研究報(bào)告
- 道路安全事故教育課件
- 2026年貴州省貴陽市高職單招英語試題含答案
- 2025-2026年西師版八年級(jí)地理上冊期末題庫試題附答案
- 2025-2026年蘇教版初三化學(xué)上冊期末試題解析+答案
- 2026年廣東省中山市重點(diǎn)學(xué)校高一數(shù)學(xué)分班考試試題及答案
- 迪愛生安全培訓(xùn)課件
- 邊境漁業(yè)安全培訓(xùn)班課件
- 2026年共青團(tuán)中央所屬單位高校畢業(yè)生公開招聘66人備考題庫及參考答案詳解
- 2025內(nèi)蒙古鄂爾多斯市委政法委所屬事業(yè)單位引進(jìn)高層次人才3人考試題庫含答案解析(奪冠)
- 2025-2026學(xué)年外研版八年級(jí)上冊英語期末模擬考試題(含答案)
- 洗衣液宣傳課件
- “五個(gè)帶頭”方面對(duì)照發(fā)言材料二
- TTAF 241.1-2024 支持衛(wèi)星通信的移動(dòng)智能終端技術(shù)要求和測試方法 第1部分:多模天通衛(wèi)星終端
- 奶茶品牌2026年新品研發(fā)上市流程
- 日常飲食營養(yǎng)搭配
- 上海醫(yī)療收費(fèi)目錄
- 操作系統(tǒng)安全基礎(chǔ)的課件
- 人教版(2024)八年級(jí)上冊物理期末復(fù)習(xí)全冊知識(shí)點(diǎn)提綱
評(píng)論
0/150
提交評(píng)論