計(jì)算機(jī)應(yīng)用基礎(chǔ)3-2_第1頁
計(jì)算機(jī)應(yīng)用基礎(chǔ)3-2_第2頁
計(jì)算機(jī)應(yīng)用基礎(chǔ)3-2_第3頁
計(jì)算機(jī)應(yīng)用基礎(chǔ)3-2_第4頁
計(jì)算機(jī)應(yīng)用基礎(chǔ)3-2_第5頁
已閱讀5頁,還剩73頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

引子:(自學(xué))1.指令助記符表2.學(xué)習(xí)指令的要點(diǎn)3.利用DEBUG程序,學(xué)習(xí)指令系統(tǒng)4.指令中操作數(shù)的表示5.書寫指令注意事項(xiàng)1編輯課件1.指令助記符表2編輯課件3編輯課件2.學(xué)習(xí)指令的要點(diǎn)從以下幾個(gè)方面來掌握一條指令:

指令的助記符

指令的格式:操作數(shù)的個(gè)數(shù)、類型(B,W,DW)

執(zhí)行的操作:指令執(zhí)行后的結(jié)果包括:哪些寄存器、內(nèi)存單元的值發(fā)生了變化對標(biāo)志位有無影響,哪些受影響

特點(diǎn)及注意事項(xiàng)只介紹常用的指令,其他需要時(shí)可自學(xué)。4編輯課件D:\>DEBUG-A

;匯編指令0AF8:0100MOVAL,0B5

0AF8:0102ADDAL,8F0AF8:0104-R

;顯示指令執(zhí)行前各寄存器的值A(chǔ)X=0000BX=0000CX=0000DX=0000、、、、、、CS=0AF8IP=0100NVUP

EIPLNZNA

PO

NC-T=1002

;執(zhí)行指令,查看結(jié)果AX=0044BX=0000CX=0000DX=0000、、、、、、CS=0AF8IP=0104OVUPEIPL

NZ

ACPECY0AF8:01042080FC01AND[BX+SI+01FC],AL-

10110101

+

10001111進(jìn)位1

111111

01000100編程完成B5h+8Fh=?學(xué)習(xí)加法ADD指令及其對狀態(tài)標(biāo)志位的影響。3.利用DEBUG學(xué)習(xí)指令系統(tǒng)(示例,實(shí)驗(yàn))5編輯課件4.指令中操作數(shù)的表示符號表示內(nèi)容data立即數(shù)操作數(shù)reg通用寄存器操作數(shù)8位:AH、AL、BH、BL、CH、CL、DH、DL16位:AX、BX、CX、DX、BP、SP、SI、DIsegreg段寄存器CS、DS、SS、ESmem或[]存儲器操作數(shù)(5種尋址方式)src源操作數(shù)dst目的操作數(shù)

(

)注釋時(shí)表示寄存器、存儲器、端口的內(nèi)容oprd1oprd2兩操作數(shù)6編輯課件5.書寫指令注意事項(xiàng)(本章全部結(jié)束后再復(fù)習(xí))不區(qū)分字母的大小寫下列寫法表示同一條指令:MOVAX,1ABDHmov

ax,1abdh

不自創(chuàng)助記符將MOVAL,0寫成MOVEAL,0JMPlable

寫成JUMPlable7編輯課件

注意操作數(shù)的范圍對字節(jié)操作指令0~FFH0~255對字操作指令0~FFFFH0~65535

MOVAL,260

MOVAX,70000MOVAL,1FFHMOVAL,2ABCDH

8編輯課件

對無操作數(shù)指令,不添加操作數(shù)。

STCAL

對單操作數(shù)指令,操作數(shù)不能是立即數(shù)。

IMUL69編輯課件

對雙操作數(shù)指令①不能兩個(gè)同為存儲器操作數(shù)

MOV[DI],[SI]

②目的操作數(shù)不能是立即數(shù)

ADD3,AL

兩個(gè)操作數(shù)的類型應(yīng)相同

SUBAX,BL

若value定義為字類型存儲器變量:

MOVCL,value[BX]10編輯課件

內(nèi)存操作數(shù)的屬性應(yīng)明確。

MOV[BX],0MOVbyteptr[BX],0MOVwordptr[BX],0MOV[BX],ALMOV[BX],AX11編輯課件

A、B、C、D、E、F開頭的十六進(jìn)制數(shù)前面加0,與H結(jié)尾的標(biāo)識符區(qū)別。如寄存器名:AH、BH、CH、

DH

變量名:abcdH

等例

movAL,0AH

movAL,AH

movBX,0abcdH12編輯課件

CS和IP的值只在控制轉(zhuǎn)移指令中修改。對非控制轉(zhuǎn)移指令,取完指令后IP值自動(dòng)指向下條指令。段寄存器CS的值,只在MOV、PUSH中可作操作數(shù),且這兩條指令執(zhí)行結(jié)果不改變CS值。MOVAX,CSPUSHCSIP、PSW兩個(gè)寄存器不作為操作數(shù)在指令中出現(xiàn)。movIP,1234HmovPSW,0F0FHPSW狀態(tài)寄存器的值由指令執(zhí)行后確定,不同的指令對各標(biāo)志的影響不同。13編輯課件數(shù)據(jù)傳送是最基本、最重要的一種操作實(shí)際程序中,使用的比例最高寄存器寄存器寄存器內(nèi)存單元寄存器I/O端口設(shè)置寄存器、內(nèi)存單元的初始值二.?dāng)?shù)據(jù)傳送指令14編輯課件

按傳送內(nèi)容,可分為四類:1.通用數(shù)據(jù)傳送MOV,PUSH,POP,XCHG,XLAT2.地址傳送LEA,LDS,LES3.標(biāo)志傳送PUSHF,POPF,LAHF,SAHF4.輸入輸出傳送IN,OUT

特點(diǎn):

1.除POPF、SAHF外,其他傳送指令對標(biāo)志位均無影響

2.唯一允許以段寄存器做操作數(shù)的指令且只有MOV、PUSH、POP這三條允許15編輯課件1.通用傳送指令

MOV、PUSH、POP、XCHG、XLATreg/mem/segreg←regreg/segreg←memreg/mem←segregreg/mem←data

可實(shí)現(xiàn)(1)MOV傳送指令格式MOVdst,src執(zhí)行(dst)←(src)16編輯課件例:①reg/mem/segreg←reg通用寄存器/存儲器/段寄存器←通用寄存器

MOVAL,BLMOV[BX],ALMOVDS,AX②reg/segreg←mem通用寄存器/段寄存器←存儲器MOVAL,[BX]MOVDS,[BX+SI]

③reg/mem←segreg通用寄存器/存儲器←段寄存器

MOVBX,CSMOV[BX],DS

④reg/mem←data通用寄存器/存儲器←立即數(shù)MOVAl,9MOVBX,OFFSETbufferMOVBYTEPTR[value],0MOVWORDPTR[BX],117編輯課件MOV指令特點(diǎn)及注意事項(xiàng):

雙操作數(shù)指令(注意雙操作指令的特點(diǎn))可進(jìn)行字節(jié)或字傳送不允許存儲器傳送到存儲器MOV[BX],valueMOV[DI],[SI]MOVAX,valueMOV[BX],AXMOVAL,[SI]MOV[DI],AL18編輯課件

可對DS、ES、SS賦值但不允許立即數(shù)直接傳送給段寄存器MOVDS,AXMOVES,[BX]MOVDS,1000HMOVAX,1000HMOVDS,AX

CS不能做目的操作數(shù),不能通過傳送指令改變CS的值

MOVCS,AX19編輯課件

不允許段寄存器傳送到段寄存器

MOVES,DSMOVAX,DSMOVES,AXD:\MASM>DEBUG-A1693:0100MOVES,DS^Error1693:0100MOVAX,DS1693:0102MOVES,AX1693:0104-20編輯課件例編程將CL寄存器的內(nèi)容傳送到200:100H單元中。MOVAX,200HMOVDS,AX;(DS)=200HMOV[100H

],CL;(02100H)=(CL)編程1:MOVAX,200HMOVDS,AX;(DS)=200HMOVDI,100H;(DI)=100HMOV[DI

],CL;(02100H)=(CL)編程2:MOV[200:100H],CL21編輯課件

MOV指令應(yīng)用(自學(xué))例:實(shí)現(xiàn)將AREA1開始的100個(gè)數(shù)據(jù)傳送到AREA2開始的單元?!瑼REA1:AREA2:100個(gè)數(shù)據(jù)22編輯課件分析題意:

①可以用200條MOV指令來完成100個(gè)數(shù)據(jù)傳送,指令操作重復(fù),每個(gè)數(shù)據(jù)傳送后的地址是變化的。②可以利用循環(huán), 但每循環(huán)一次要修改地址(源地址和目的地址),必須把地址放在寄存器當(dāng)中,用寄存器間接尋址來尋找操作數(shù).23編輯課件得到如下程序:

MOVSI,OFFSETAREA1 MOVDI,OFFSETAREA2 MOVCX,100AGAIN: MOVAL,[SI] MOV[DI],AL

INCSI ;修改地址指針 INCDI ;修改地址指針 DECCX ;修改個(gè)數(shù) JNZAGAIN

…24編輯課件----計(jì)算EA需要的時(shí)鐘數(shù):如下表所示:(略) (若段超越,再加兩個(gè)時(shí)鐘T周期)寄存器間接尋址尋址方式計(jì)算EA所需時(shí)間直接尋址寄存器相對尋址基址加變址尋址[BP+DI],[BX+SI][BP+SI],[BX+DI]相對基址加變址尋址[BP+DI+位移量】,[BX+SI+位移量][BP+SI+位移量】,[BX+DI+位移量]6T5T9T7T8T11T12T25編輯課件----指令字節(jié)數(shù):指令字節(jié)數(shù)與尋址方式有關(guān)。通常操作碼占二個(gè)字節(jié);立即尋址:立即數(shù)增加1-2個(gè)字節(jié)數(shù);操作數(shù)在內(nèi)存中:

直接尋址:直接地址為1-2個(gè)字節(jié),總的指令長3-4個(gè)字節(jié);寄存器間接尋址(沒有位移量):2個(gè)字節(jié);變址尋址或者相對基址加變址:都有1-2字節(jié)的位移量, 指令字節(jié)數(shù)為2-4個(gè)字節(jié)。

----傳送次數(shù):指執(zhí)行指令時(shí),內(nèi)存與CPU之間數(shù)據(jù)傳送的次數(shù)。凡是立即數(shù)→寄存器或寄存器之間的傳送無此傳送數(shù)。凡是寄存器與存儲器之間傳送次數(shù)為1。26編輯課件(2)PUSH(Pushwordontostack)POP(Popwordoffstack)這是兩條堆棧操作指令。1)先介紹一下什么是堆棧,為什么需要堆棧堆棧是按照先進(jìn)后出原則組織的一段內(nèi)存區(qū)域。通常用于存放一些重要數(shù)據(jù),

如:程序的地址、或是需要恢復(fù)的數(shù)據(jù)。為方便數(shù)據(jù)的存放和恢復(fù),設(shè)置專門的指針,指向堆棧中要操作的單元。段值由SS給出,偏移地址由SP給出

SS→堆棧段寄存器(stacksegment)SP→堆棧指針寄存器(stackpoint)SS:SP

27編輯課件特點(diǎn):下推式的(規(guī)定堆棧設(shè)置在堆棧段內(nèi))改變SP的內(nèi)容,隨著推入堆棧內(nèi)容增加,SP的值減少。先進(jìn)后出工作原則(LastInFirstOut簡稱LIFO)

堆棧在內(nèi)存中的情況:28編輯課件堆棧在內(nèi)存中的情況:可以用一條立即數(shù)傳送指令給SP賦值,確定SP在SS段中的初始位置。例:設(shè)(SS)=9000H,堆棧段為64KBMOVSP,0E200H ;(SP)=0E200H則:整個(gè)堆棧段的物理地址范圍為:

90000H~9FFFFH

棧頂?shù)奈锢淼刂窞椋?E200H堆棧在內(nèi)存中的情況如右圖所示:堆棧在內(nèi)存中的情況29編輯課件2)堆棧操作指令(堆棧操作指令有兩條):

入棧指令格式:PUSHsrc;(SP)(SP)-2 ((SP)+1,(SP))(src)把一個(gè)字從源操作數(shù)(src)由SP指向堆棧頂部。

出棧指令格式:POPdest;(dest)((SP)+1,(SP)) (SP)(SP)+2把現(xiàn)行SP所指向堆棧頂部的一個(gè)字指定的目的操作數(shù)(dest),同時(shí)進(jìn)行修改堆棧指針的操作。

SS:SP

SS:SP

(src)SS:SP

SS:SP

(dst)30編輯課件PUSH入棧操作格式

PUSHsrc執(zhí)行(SP)←(SP)-2(SS:SP)←(src)特點(diǎn):

單操作數(shù)指令操作數(shù)為16位,可以是reg/segreg/mem,不可以是datareg:AX,BX,CX,DX,SI,DI,BP,BXsegreg:CS,DS,ES,SSmem:字類型SS:SP

SS:SP

(src)31編輯課件例:

PUSHAX若執(zhí)行前:

(SS)=2000H(SP)=1002H(SS:SP)=

2010H

(AX)=1234H3B2A10低高20地址SS:SP2000:1002指令執(zhí)行前(AX)=1234h則執(zhí)行后:

(SS)=2000H(SP)=1000H(SS:SP)=1234H(AX)=1234H123410低高20地址SS:SP2000:1000指令執(zhí)行后(AX)=1234h不變減2變不變

32編輯課件D:\MASM>DEBUG-A

;匯編兩條指令1693:0100MOVAX,12341693:0103PUSHAX1693:0104-R

;顯示指令執(zhí)行前寄存器值A(chǔ)X=0000

BX=0000CX=0000DX=0000

SP=FFEE

BP=0000SI=0000DI=0000DS=1693ES=1693SS=1693CS=1693IP=0100NVUPEIPLNZNAPONC1693:0100B83412MOVAX,1234-T=1002;執(zhí)行CS:100開始處的兩條指令….AX=1234

BX=0000CX=0000DX=0000

SP=FFEC

BP=0000SI=0000DI=0000DS=1693ES=1693SS=1693CS=1693IP=0104NVUPEIPLNZNAPONC1693:010403C6ADDAX,SI-DSS:FFECL10;查看棧頂內(nèi)容1693:FFE0341200004...1693:FFF0FFFFFFFFFFFFFFFF-FFFFFFFFFFFFFFFF

.........…-例利用DEBUG學(xué)習(xí)PUSH指令注意相關(guān)寄存器和內(nèi)存單元內(nèi)容的變化33編輯課件特點(diǎn):單操作數(shù)指令操作數(shù)為16位,可以是reg/segreg/mem,不可以是datareg:AX,BX,CX,DX,SI,DI,BP,BXsegreg:DS,ES,SS,不允許是CSmem:字類型

POP出棧操作SS:SP

SS:SP

(dst)格式

POPdst執(zhí)行(dst)←(SS:SP)(SP)←(SP)+234編輯課件若執(zhí)行前:

(SS)=2000H(SP)=1000H(SS:SP)=1234H

(BX)=5678H123410低高20SS:SP2000:1000指令執(zhí)行前地址(BX)=5678h例:

POPBX123410低高20SS:SP2000:1002指令執(zhí)行后地址(BX)=1234h則執(zhí)行后:

(SS)=2000H(SP)=1002H

(SS:SP)=2010H(BX)=1234H

不變加2變變

35編輯課件-A

1693:0100MOVBP,SP;取當(dāng)前棧頂?shù)刂?693:0102MOVWORDPTR[BP],1234;用MOV指令使棧頂內(nèi)容為1234H1693:0107POPBX;出棧指令1693:0108-R;查看指令執(zhí)行前狀態(tài)AX=0000BX=0000CX=0000DX=0000SP=FFEE

BP=0000SI=0000DI=0000DS=1693ES=1693SS=1693CS=1693IP=0100NVUPEIPLNZNAPONC1693:010089E5MOVBP,SP-T=100;執(zhí)行CS:100處的第一條mov指令A(yù)X=0000BX=0000CX=0000DX=0000SP=FFEE

BP=FFEESI=0000DI=0000DS=1693ES=1693SS=1693CS=1693IP=0102NVUPEIPLNZNAPONC1693:0102C746003412MOVWORDPTR[BP+00],1234SS:FFEE=0000-T;執(zhí)行下一條mov指令A(yù)X=0000BX=0000CX=0000DX=0000SP=FFEE

BP=FFEESI=0000DI=0000DS=1693ES=1693SS=1693CS=1693IP=0107NVUPEIPLNZNAPONC1693:01075BPOPBX-T;執(zhí)行pop指令,注意BX,SP的變化AX=0000BX=1234CX=0000DX=0000SP=FFF0BP=FFEESI=0000DI=0000DS=1693ES=1693SS=1693CS=1693IP=0108NVUPEIPLNZNAPONC1693:0108F5CMC-例在DEBUG下學(xué)習(xí)POP指令36編輯課件例:執(zhí)行下列程序段

PUSHAX

PUSHBX

MOVAX,66H③

MOVBX,99H④

POPBX

POPAX

⑥若執(zhí)行前(SS)=3000H(SP)=200EH(SS:SP)=1234H(AX)=0A0BH(BX)=0C0DH3000:200ESS:SP

執(zhí)行前(AX)=0A0B(BX)=0C0D3412執(zhí)行①后3000:200CSS:SP

0B0A3000:200ASS:SP

執(zhí)行②后0D0C0B0A3000:200CSS:SP

執(zhí)行⑤后:(BX)=0C0D0D0C0B0A執(zhí)行③④后(AX)=0066(BX)=0099執(zhí)行③④后(AX)=0066(BX)=00993000:200ASS:SP

執(zhí)行②后0D0C0B0A執(zhí)行⑥后:(AX)=0A0B3000:200ESS:SP

(BX)=0C0D執(zhí)行③④后(AX)=0066(BX)=00990D0C0B0A37編輯課件用PUSH往SS段傳送一批數(shù)據(jù)后,再用POP取出時(shí),取出單元的順序與存放時(shí)的順序正好相反,“后進(jìn)先出”⑥POPAX(AX)=0A0B①PUSHAX3000:200ESS:SP

執(zhí)行前3000:200CSS:SP

3000:200ASS:SP

②PUSHBX3000:200ESS:SP

3000:200CSS:SP

0D0C0B0A3412⑤POPBX(BX)=0C0D(AX)=0A0B(BX)=0C0D④MOVAX,0066;(BX)=0099③MOVAX,0066;(AX)=0066

38編輯課件堆棧使用的場合用堆棧保存恢復(fù)信息

子程序的調(diào)用、返回以及中斷調(diào)用、返回

用堆棧傳送數(shù)據(jù)(程序設(shè)計(jì)中介紹)39編輯課件主程序子程序:子程序:在一個(gè)實(shí)際程序中,有些操作要執(zhí)行多次, 把要重復(fù)執(zhí)行(subroutine)操作編為子程序。 也常把一些常用的操作標(biāo)準(zhǔn)化、通用化的子程序。主程序(Mainprogram):往往要調(diào)用子程序或處理中斷, 暫停主程序,執(zhí)行子程序或中斷服務(wù)程序。40編輯課件調(diào)用子程序時(shí)需保留內(nèi)容:①調(diào)用子程序:將CALL下條指令地址即IP值保留下來 (8088中碼段寄存器CS和指令指針I(yè)P),才能保證子程序執(zhí)行完后準(zhǔn)確返回主程序繼續(xù)執(zhí)行。②執(zhí)行子程序時(shí),通常用到內(nèi)部寄存器,執(zhí)行結(jié)果會(huì)影響標(biāo)志位,必須在調(diào)用子程序之前將現(xiàn)狀保護(hù)起來。③子程序嵌套或子程序遞歸(自調(diào)自)保留許多信息,而且保證正確返回(且后進(jìn)先出)。

后保留先取出原則(即LIFO-LASTInFirstout)。41編輯課件注意:SP——堆棧指針,始終指向棧頂。 SP初值用MOVSP,data來設(shè)定。下邊詳細(xì)說明一下堆棧用途:42編輯課件存放CPU寄存器或存儲器中暫時(shí)不使用的數(shù)據(jù),

使用數(shù)據(jù)時(shí)將其彈出:

PUSHAX ;將(AX)入棧(AX)(AX)43編輯課件使用數(shù)據(jù)時(shí)將其彈出: POPBX44編輯課件調(diào)用子程序(或過程)或發(fā)生中斷時(shí)要保護(hù)斷點(diǎn)的地址,子程序或中斷返回時(shí)恢復(fù)斷點(diǎn)。子程序嵌套斷點(diǎn)地址壓入和彈出情況45編輯課件注意事項(xiàng)

堆棧是一重要數(shù)據(jù)結(jié)構(gòu),使用堆棧應(yīng)有明確目的。不亂用堆棧操作,不亂修改堆棧內(nèi)容。PUSH、POP、PUSHF、POPF、CALL、RET、INT、IRET

亂修改SS和SP的內(nèi)容包括亂用BP參與的存儲器操作數(shù)

亂用指令46編輯課件

PUSH和POP指令只能對字操作。

PUSHALPOPBYTEPTR[BX]

可以對段寄存器操作但POP不能對CS操作

PUSHDSPUSHCSPOPES

POPCS47編輯課件自學(xué)堆棧應(yīng)用:比較下邊兩個(gè)程序運(yùn)行結(jié)果?

例:用BP的基址指令代替POP指令 …MOVBP,SPPUSHAXPUSHBXPUSHCX …MOVCX,[BP-6]

MOVBX,[BP-4]MOVAX,[BP-2] …ADDSP,6例:壓入堆棧的內(nèi)容與彈出內(nèi)容順序相反…PUSH AXPUSHBXPUSHCX…POPCXPOPBXPOPAX 48編輯課件(3)XCHG交換指令

格式

XCHGoprd1,oprd2執(zhí)行

(oprd1)(oprd2)regregregmemmemreg

可實(shí)現(xiàn)49編輯課件例XCHGAX,BX字操作執(zhí)行前(AX)=1122H(BX)=3344H執(zhí)行后(AX)=3344H(BX)=1122H

例XCHGAH,BL字節(jié)操作執(zhí)行前(AX)=1122H(BX)=3344H執(zhí)行后(AX)=4422H(BX)=3311H50編輯課件XCHGoprd1,oprd2注意事項(xiàng):

雙操作數(shù)指令可進(jìn)行字或字節(jié)操作,不影響標(biāo)志位。不允許對立即數(shù)、段寄存器做操作數(shù)

XCHGAX,4

XCHGBX,DS

存儲器之間不能交換,兩個(gè)操作數(shù)中必須有一個(gè)在寄存器中;

XCHG[BX],[DI] (錯(cuò))51編輯課件(4)XLAT(Translate)換碼指令:該指令不影響標(biāo)志位。格式:XLATstr_table ;(AL)←((BX)+(AL))或XLAT str_table——表格符號地址(首地址), 只是為了提高可讀性而設(shè)置,匯編時(shí)仍用BX。

52編輯課件XLAT指令使用方法:先建立一個(gè)字節(jié)表格;表格首偏移地址存入BX;需要轉(zhuǎn)換代碼的序號(相對與表格首地址位移量)存入AL;

(表中第一個(gè)元素的序號為0)執(zhí)行XLAT指令后,表中指定序號的元素存于AL中。

(AL)為轉(zhuǎn)換的代碼。53編輯課件XLAT指令應(yīng)用:若把字符的掃描碼轉(zhuǎn)換成ASCII碼;或數(shù)字0~9轉(zhuǎn)換成7段數(shù)碼所需要的相應(yīng)代碼(字形碼)等就要用XLAT指令。例:內(nèi)存的數(shù)據(jù)段中有一張十六進(jìn)制數(shù)字的ASCII碼表。

首地址為:Hex_table,欲查出表中第10個(gè)元素(‘A’)54編輯課件執(zhí)行指令序列:MOVBX,OFFSETHex_tableMOVAL,0AHXLATHex_table假設(shè):(DS)=F000H,Hex_table=0040H(AL)=0AH執(zhí)行XLAT以后:(AL)=41H=(F004AH), 即“A”的ASCII碼。30H31H32H...39H41H42H...46H...Hex_tableHex_table+1Hex_table+2Hex_table+0AHHex_table+0BHHex_table+0FH'F''B''A''9''1''2''0'16進(jìn)制數(shù)的ASCII碼表55編輯課件2.目的地址傳送指令(Address-objecttransfer)8086/8088提供三條:

地址指針寫入指定寄存器或寄存器對指令。(1) LEA(LoadEffectiveAddress)(2) LDS(LoadpointerusingDS)(3) LES(LoadpointerusingES)56編輯課件(1)LEA有效地址傳送格式LEAreg,mem執(zhí)行(reg)←mem的EA功能:寄存器←存儲器操作數(shù)的偏移地址

57編輯課件執(zhí)行后(BX)=1000H注意:

OFFSET是匯編程序提供的一個(gè)操作符,不是CPU的指令.LEABX,buffer例buffer是一個(gè)符號地址表示的內(nèi)存操作數(shù)(變量)。…...12h34h56h…...buffer內(nèi)存DS:1000h若變量buffer的偏移地址=1000H等價(jià)于MOVBX,OFFSETbuffer58編輯課件buffer

1A2B3C4D、、、、、、例將buffer為首的4個(gè)字節(jié)內(nèi)存內(nèi)容相加,存放在AL中。MOVAX,SEGbufferMOVDS,AX

LEABX,bufferMOVCX,4MOVAL,0exit:ADDAL,[BX]INCBXDECCX;(cx)=(cx)-1JNZexit;ZF≠0,轉(zhuǎn)至exit說明:1)操作符SEG的作用是取變量的段地址。執(zhí)行完前兩條指令后,(DS)=buffer的段值2)操作符OFFSET的作用是取變量的偏移地址執(zhí)行完LEABX,buffer,(BX)為buffer的偏移地址,

3)操作數(shù)[BX]是以DS為段值,BX為偏移值的內(nèi)存單元59編輯課件LEAreg,mem特點(diǎn)及注意事項(xiàng):目的操作數(shù)reg應(yīng)是16位通用寄存器

LEAES,[BX]LEAAL,bufferLEA6,[BX+SI]LEA[DI],buffer

源操作數(shù)應(yīng)是存儲器操作數(shù)

LEABX,AX

傳送的是內(nèi)存單元的有效地址,與其內(nèi)容無關(guān)?!?..12h34h56h…...buffer內(nèi)存60編輯課件(2)

LDS(LoadpointerusingDS)格式:LDSreg16,mem32 ;(reg16)←(EA) (DS)←((EA)+2))功能:把源操作數(shù)指定的4個(gè)相繼字節(jié)送指令指定的寄存器及DS寄存器中。

前兩個(gè)單元內(nèi)容(16位偏移量)裝入指定通用寄存器,后兩個(gè)單元內(nèi)容(段地址)裝入到DS段寄存器。用于寫遠(yuǎn)地址指針。61編輯課件例:假設(shè):(DS)=C000H指令: LDSSI,[0010H]執(zhí)行指令后:(SI)=0180H(DS)=2000H

80H01H00H20HC000H:0010H(DS)C0011HC0012HC0013H......存儲器62編輯課件(3)

LES(LoadpointerusingES)格式:LESreg16,mem32 ;(reg16)←(EA) (ES)←((EA)+2))功能:把源操作數(shù)指定的4個(gè)相繼字節(jié)送指令指定的寄存器及ES寄存器中。前兩個(gè)單元內(nèi)容(16位偏移量)裝入指定通用寄存器,后兩個(gè)單元內(nèi)容(段地址)裝入到ES段寄存器。此指令常常指定DI寄存器。用于寫遠(yuǎn)地址指針。63編輯課件例:假設(shè):(DS)=B000H (BX)=080AH指令: LESDI,[BX]執(zhí)行指令后: (DI)=05A2H (ES)=4000HA2H05H00H40HB000H:080AH(DS)B080BHB080CHB080DH......存儲器(BX)64編輯課件3.標(biāo)志傳送指令(Flagregistertransfer)采用了隱含寄存器(AH、Flags)操作數(shù)方式。8088有四條標(biāo)志傳送操作指令:(1). LAHF(LoadAHintoflags)(2). SAHF(StoreAHintoflags)(3). PUSHF(Pushflagsontostack)(4). POPF(Popflagsoffstack)

65編輯課件(1).LAHF(LoadAHfromflags)格式:LAHF;(AH)←(PSW的低字節(jié))功能:標(biāo)志寄存器低八位(AH)。LAHF指令操作圖示意66編輯課件(2). SAHF(StoreAHintoflags) 格式:SAHF;(PSW的低字節(jié))←(AH) 功能:(AH)送標(biāo)志寄存器低八位。SFZFAFPFCF01234567TFIFDFOF8910111213141501234567FLAGSAH67編輯課件SS:SP

SS:SP

(PSW)(4).POPF標(biāo)志出棧格式POPF執(zhí)行(PSW)←(SS:SP)(SP)←(SP)+2SS:SP

SS:SP

(PSW)(3).PUSHF標(biāo)志入棧格式PUSHF執(zhí)行(SP)←(SP)-2(SS:SP)←(PSW)68編輯課件特點(diǎn)及注意事項(xiàng):無操作數(shù)的形式,操作數(shù)隱含為(PSW)PUSH

溫馨提示

  • 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)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論