版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
匯編語言程序設(shè)計(jì)授課教師:計(jì)算機(jī)學(xué)院張曉麗郵箱:osunmood@126.com第3章
實(shí)方式指令尋址與指令系統(tǒng)3.1.
指令的基本尋址方式3.2.
實(shí)方式32位指令尋址
3.3.
實(shí)方式指令系統(tǒng)3.4.
字符設(shè)備I/O功能調(diào)用第3章
實(shí)方式指令尋址與指令系統(tǒng)3.1.
指令的基本尋址方式3.2.
實(shí)方式32位指令尋址
3.3.
實(shí)方式指令系統(tǒng)3.4.
字符設(shè)備I/O功能調(diào)用3.1.指令的基本尋址方式
8086CPU的指令系統(tǒng)的基本指令包括:
數(shù)據(jù)傳送類指令算術(shù)運(yùn)算類指令位操作類指令串操作類指令控制轉(zhuǎn)移類指令處理機(jī)控制類指令操作類型1.
數(shù)據(jù)傳送源目的寄存器寄存器寄存器寄存器存儲器存儲器存儲器存儲器置“1”,清“0”2.算術(shù)邏輯操作加、減、乘、除、增1、減1、求補(bǔ)、浮點(diǎn)運(yùn)算、十進(jìn)制運(yùn)算與、或、非、異或、位操作、位測試、位清除、位求反如8086MOVESTORELOADMOVEPUSHPOP例如MOVEMOVEADDSUBMULDIVINCDECCMPNEGAAAAASAAMAADANDORNOTXORTEST3.移位操作算術(shù)移位4.轉(zhuǎn)移(1)無條件轉(zhuǎn)移JMP(2)條件轉(zhuǎn)移結(jié)果為零轉(zhuǎn)(Z=1)
JZ結(jié)果溢出轉(zhuǎn)(O=1)JO結(jié)果有進(jìn)位轉(zhuǎn)(C=1)JC跳過一條指令SKP循環(huán)移位(帶進(jìn)位和不帶進(jìn)位)如300…305306307SKPDZD=0則跳邏輯移位完成觸發(fā)器INAX,nOUTDX,ALOUTn,AXOUTDX,AX(4)陷阱(Trap)與陷阱指令意外事故的中斷
陷阱指令如8086INTTYPE軟中斷提供給用戶使用的陷阱指令,完成系統(tǒng)調(diào)用5.輸入輸出
隱指令一般不提供給用戶直接使用
在出現(xiàn)事故時(shí),由CPU自動產(chǎn)生并執(zhí)行INAL,DXINAX,DX入端口地址CPU的寄存器出CPU的寄存器端口地址如如INAL,nOUTn,ALOther:非數(shù)值處理指令特權(quán)指令向量指令多處理機(jī)指令操作數(shù)類型和操作種類一、操作數(shù)類型地址數(shù)字
字符邏輯數(shù)無符號整數(shù)定點(diǎn)數(shù)、浮點(diǎn)數(shù)、十進(jìn)制數(shù)ASCII邏輯運(yùn)算(布爾類型)二、數(shù)據(jù)在存儲器中的存放方式字地址為低字節(jié)地址字地址為高字節(jié)地址37621540字地址04低字節(jié)04512673字地址04低字節(jié)尋址方式尋址方式
確定本條指令的操作數(shù)地址下一條
指令的指令地址指令尋址數(shù)據(jù)尋址
尋址方式尋址方式一、指令尋址順序(PC)+1PC跳躍由轉(zhuǎn)移指令指出LDA1000ADD1001DEC1200JMP7LDA2000SUB2001INCSTA2500LDA1100...0123456789PC+1指令地址尋址方式指令地址指令順序?qū)ぶ?順序?qū)ぶ?順序?qū)ぶ?跳躍尋址7順序?qū)ぶ?二、數(shù)據(jù)尋址形式地址A指令字中的地址有效地址EA操作數(shù)的真實(shí)地址約定
指令字長=存儲字長=機(jī)器字長形式地址A操作碼尋址特征3.1.1指令的基本格式
指令一般由操作碼OP、尋址方式MOD和一個(gè)或多個(gè)操作數(shù)OD等字段組成操作碼OP尋址方式MOD操作數(shù)OD指令的表示形式PC微機(jī)的多數(shù)指令有一個(gè)或兩個(gè)操作數(shù),當(dāng)然也可以沒有操作數(shù)常見的表示形式如下:OPOP操作數(shù)OP
目的操作數(shù),源操作數(shù)
單操作數(shù)指令只需指定一個(gè)操作數(shù)
INCAX;AX+1->AX雙操作數(shù)指令需要指定兩個(gè)操作數(shù)
SUBBX,CX;BX-CX->BX沒有操作數(shù)指令,即隱含操作數(shù)指令
在OD位置雖然未明確給出操作數(shù),但在指令OP中隱含有事先安排的操作數(shù)
CLC;0->CF指令字長指令字長決定于操作碼的長度指令字長=存儲字長2.指令字長可變操作數(shù)地址的長度操作數(shù)地址的個(gè)數(shù)1.指令字長固定—控制簡單—控制復(fù)雜指令字長為8的倍數(shù)常用指令設(shè)計(jì)單字長格式二、數(shù)據(jù)尋址操作數(shù):
立即數(shù)寄存器數(shù)存儲器數(shù)立即數(shù)尋址
尋址方式寄存器尋址存儲器尋址3.1.2尋址方式立即尋址寄存器尋址直接尋址寄存器間接尋址寄存器相對尋址基址變址尋址相對基址變址尋址地址的計(jì)算EA=Disp+(SI/DI/None)+(BX/BP/None)以BP尋址PA,默認(rèn)用SS以BX、SI、DI或變量尋址,默認(rèn)DS越段:改變默認(rèn)使用的段寄存器DS可被CS、SS或ES、FS、GS越段SS可被DS、CS或ES、FS、GS越段地址的計(jì)算例:
變量FIVE段地址4000H已在DS中,EA=0010H,則:
FIVEDB5MOVALFIVEPA=DS*24+10H=40010H地址的計(jì)算例:
變量FIVE段地址4000H已在ES中,EA=0010H,則可采用越段形式:MOVAL,ES:FIVEPA=ES*24+10H=40010H地址的計(jì)算不可越段的情況程序以指針I(yè)P尋址,系統(tǒng)規(guī)定用代碼段寄存器CS與IP計(jì)算指令地址以堆棧指針SP尋址PA,用SS對于串操作,ES用來作為目的操作數(shù)的段寄存器SSDSDSDSSSDS可被CS、SS或ES、FS、GS越段SS可被DS、CS或ES、FS、GS越段尋址方式1.立即尋址
指令執(zhí)行階段不訪存A的位數(shù)限制了立即數(shù)的范圍OP#A立即尋址特征立即數(shù)可正可負(fù)補(bǔ)碼形式地址A就是操作數(shù)立即尋址
(ImmediateAddressing)尋址特點(diǎn)指令操作碼和操作數(shù)都在存儲器代碼段中匯編格式
n(n為立即操作數(shù),是用8位或16位二進(jìn)制補(bǔ)碼表示的有符號數(shù))圖形表示立即尋址
(ImmediateAddressing)如果立即數(shù)為16位或32位,將按“高高低低”的原則進(jìn)行存儲指令“MOVAX,4576H”的存儲形式和執(zhí)行情況立即尋址示例MOVAX,10。執(zhí)行后(AX)=?解:源操作數(shù)為立即尋址方式,立即數(shù)為10,存放在指令的下一單元。執(zhí)行:10→AX執(zhí)行后:(AX)=000AH圖形表示:2.直接尋址EA=A操作數(shù)主存尋址特征LDAAAACC
執(zhí)行階段訪問一次存儲器A的位數(shù)決定了該指令操作數(shù)的尋址范圍
操作數(shù)的地址不易修改(必須修改A)有效地址由形式地址直接給出直接尋址
(DirectAddressing)特點(diǎn)指令操作碼OP后直接給出操作數(shù)的16位偏移地址EA
OP與直接地址在代碼段,操作數(shù)據(jù)一般在數(shù)據(jù)段功能:指令下一字單元的內(nèi)容是操作數(shù)的偏移地址EA
PA=DS*16+NN圖形表示直接尋址示例寄存器和存儲器內(nèi)容為:(AX)=1212H,BUF為數(shù)據(jù)段定義的變量,其偏移地址是2000H,(DS)=3000H,(32000H)=4545H。執(zhí)行指令:MOVAX,BUF執(zhí)行后:(AX)=?
直接尋址示例解:執(zhí)行:(32000H)→AX執(zhí)行后:(AX)=4545H圖形表示:
MOVBX,[1234H],在執(zhí)行時(shí),(DS)=2000H,內(nèi)存單元21234H的值為5213H。問該指令執(zhí)行后,BX的值是什么?直接尋址示例直接尋址示例3.隱含尋址操作數(shù)地址隱含在操作碼中ADDA操作數(shù)主存尋址特征AACC暫存ALU另一個(gè)操作數(shù)隱含在ACC中如8086MUL指令被乘數(shù)隱含在AX(16位)或AL(8位)中MOVS指令源操作數(shù)的地址隱含在SI中目的操作數(shù)的地址隱含在DI中
指令字中少了一個(gè)地址字段,可縮短指令字長4.間接尋址EA=(A)有效地址由形式地址間接提供OPA尋址特征AEA主存EAA1EAA1主存EA10
執(zhí)行指令階段2次訪存
可擴(kuò)大尋址范圍
便于編制程序OPA尋址特征A一次間址多次間址操作數(shù)操作數(shù)多次訪存5.寄存器尋址EA=Ri
執(zhí)行階段不訪存,只訪問寄存器,執(zhí)行速度快OPRi尋址特征
寄存器個(gè)數(shù)有限,可縮短指令字長操作數(shù)…………R0RiRn寄存器有效地址即為寄存器編號寄存器尋址
(RegisterAddressing)特點(diǎn)
操作數(shù)在指令指明的寄存器中功能操作數(shù)直接存放在寄存器中圖形表示寄存器尋址示例下列程序執(zhí)行后,(AX)=?(BX)=?
MOVAX,1234H
MOVBX,5678H
ADDAX,BX執(zhí)行:
1234H→AX5678H→BX
(AX)+(BX)→AX執(zhí)行后:(AX)=68ACH,(BX)=5678H圖形表示:解:
6.寄存器間接尋址
有效地址在寄存器中,操作數(shù)在存儲器中,執(zhí)行階段訪存操作數(shù)主存OPRi尋址特征
便于編制循環(huán)程序地址…………R0RiRn寄存器EA=(Ri
)有效地址在寄存器中寄存器間接尋址
(RegisterIndirectAddressing)寄存器間接尋址方式中,寄存器R的內(nèi)容為操作數(shù)的偏移地址EA,操作數(shù)在存儲器中,即:
EA
=
BX\/BP\/DI\/SI
PA=DS*16+BX/SI/DI
PA=SS*16+BP地址的計(jì)算不可越段的情況程序以指針I(yè)P尋址,系統(tǒng)規(guī)定用代碼段寄存器CS與IP計(jì)算指令地址以堆棧指針SP尋址PA,用SS對于串操作,ES用來作為目的操作數(shù)的段寄存器寄存器和存儲器內(nèi)容分別為:(AX)=0,(BP)=0030H,(SS)=2000H,(20030H)=1234H執(zhí)行指令:MOVAX,[BP]執(zhí)行后:(AX)=?,(BP)=?,(SS)=?,(20030H)=?寄存器間接尋址示例解:圖形表示:
寄存器間接尋址示例假設(shè)有指令:MOVBX,[DI],(DS)=1000H,(DI)=2345H,存儲單元12345H的內(nèi)容是4354H。問執(zhí)行指令后,BX的值是什么?寄存器間接尋址示例假設(shè)有指令:MOVBX,[SI],(DS)=1000H,(DI)=2345H,(SS)=2000H,(SI)=2348H存儲單元12345H的內(nèi)容是4354H12348H4356H。問執(zhí)行指令后,BX的值是什么?寄存器間接尋址示例解:
該操作數(shù)的物理地址應(yīng)由DS和DI的值形成,即:PA=(DS)*16+(DI)=1000H*16+2345H=12345H
寄存器間接尋址示例寄存器相對尋址
(RegisterRelativeAddressing)尋址特點(diǎn)操作數(shù)的偏移地址EA為寄存器的內(nèi)容加位移量,操作數(shù)在存儲器中匯編格式
X[R](X表示位移量,是8位或16位二進(jìn)制補(bǔ)碼表示的有符號數(shù))寄存器相對尋址
(RegisterRelativeAddressing)功能操作數(shù)存放在存儲器,寄存器R的內(nèi)容加位移量X為操作數(shù)的偏移地址EA
PA=DS*16+BX/SI/DI+XPA=SS*16+BP+X寄存器相對尋址圖示:寄存器相對尋址示例:
設(shè)執(zhí)行前:(AX)=0040H,(BX)=0030H,(DS)=2000H,(20036H)=0050H執(zhí)行指令:ADD6[BX],AX執(zhí)行后:(AX)=?,(BX)=?,(DS)=?,(20036H)=?
執(zhí)行:(20036H)+(AX)→20036H執(zhí)行后:(AX)=0040H,(BX)=0030H,(DS)=2000H,(20036H)=0090H解:假設(shè)指令:MOVBX,[SI+100H],
(DS)=1000H,(SI)=2345H,內(nèi)存單元12445H的內(nèi)容為2715H,問該指令執(zhí)行后,BX的值是什么?寄存器相對尋址示例:
解:根據(jù)寄存器相對尋址方式的規(guī)則,在本指令中的源操作數(shù)的有效地址EA為:EA=(SI)+100H=2345H+100H=2445H該操作數(shù)的物理地址應(yīng)由DS和EA的值形成,即:PA=(DS)*16+EA=1000H*16+2445H=12445H。該指令的執(zhí)行效果是:把從物理地址為12445H開始的一個(gè)字的值傳送給BX。7.基址尋址(1)采用專用寄存器作基址寄存器EA=(BR)+ABR為基址寄存器OPA操作數(shù)主存尋址特征ALUBR
可擴(kuò)大尋址范圍
便于程序搬家
BR內(nèi)容由操作系統(tǒng)或管理程序確定
在程序的執(zhí)行過程中BR內(nèi)容不變,形式地址A可變?yōu)槌绦?數(shù)據(jù)分配存儲空間(2)
采用通用寄存器作基址寄存器操作數(shù)主存尋址特征ALUOPR0AR0
作基址寄存器由用戶指定哪個(gè)通用寄存器作為基址寄存器通用寄存器R0Rn-1R1…基址寄存器的內(nèi)容由操作系統(tǒng)確定在程序的執(zhí)行過程中R0內(nèi)容不變,形式地址A可變8.變址尋址OPA操作數(shù)主存尋址特征ALUIX可擴(kuò)大尋址范圍可與其他基址尋址合用EA=A+(IX)+(BR)
IX的內(nèi)容由用戶給定在程序的執(zhí)行過程中
IX內(nèi)容可變,形式地址A不變通用寄存器也可以作為變址寄存器EA=(IX)+AIX為變址寄存器(專用)處理數(shù)組問題例
設(shè)數(shù)據(jù)塊首地址為D,求N
個(gè)數(shù)的平均值直接尋址變址尋址LDADADDD+1ADDD+2……ADDD+(N-1)DIV#NSTAANSLDA#0LDX#0INXCPX#NBNEMDIV#NSTAANS共N+2
條指令共8條指令A(yù)DDX,DMX為變址寄存器D為形式地址(X)和#N
比較(X)+1X結(jié)果不為零則轉(zhuǎn)基址變址尋址
(BasedIndexedAddressing)特點(diǎn)操作數(shù)的偏移地址EA是指令中基址寄存器內(nèi)容加上變址寄存器內(nèi)容之和操作數(shù)在存儲器中格式:
[BR]+[IR]
PA=DS*16+BX+/SI/DIPA=SS*16+BP+SI/DI基址變址尋址圖示:假設(shè)指令:MOVBX,[BX+SI],
(DS)=1000H,(BX)=2100H,(SI)=0011H,內(nèi)存單元12111H的內(nèi)容為1234H。問指令執(zhí)行后,BX的值是什么?基址變址尋址示例解:根據(jù)基址加變址尋址方式的規(guī)則,在本指令的源操作數(shù)的有效地址EA為:EA=(BX)+(SI)=2100H+0011H=2111H該操作數(shù)的物理地址應(yīng)由DS和EA的值形成,即:PA=(DS)*16+EA=1000H*16+2111H=12111H該指令的執(zhí)行效果是:把從物理地址為12111H開始的一個(gè)字的值傳送給BX?;纷冎穼ぶ肥纠?.相對尋址EA=(PC)+AA是相對于當(dāng)前指令的位移量(可正可負(fù),補(bǔ)碼)A的位數(shù)決定操作數(shù)的尋址范圍
廣泛用于轉(zhuǎn)移指令操作數(shù)尋址特征ALUOPA相對距離A1000PC
…主存1000AOP(1)相對尋址舉例–3*LDA#0LDX#0ADDX,DINXCPX#NBNE
MDIV#NSTAANSMM+1M+2M+3相對尋址特征*
M
隨程序所在存儲空間的位置不同而不同指令BNE
*-3與指令A(yù)DDX,D
相對位移量不變指令BNE*-3操作數(shù)的有效地址為
EA=(M+3)–3=M(2)按字節(jié)尋址的相對尋址舉例OP位移量2000H2008H8JMP*+8OP06H2000H2008H8設(shè)當(dāng)前指令地址PC=2000H轉(zhuǎn)移后的目的地址為
2008H因?yàn)槿〕鯦MP
*+8后PC=2002H二字節(jié)指令故JMP
*+8指令的第二字節(jié)為2008H-2002H=06H
相對基址變址尋址
(RelativeBasedIndexedAddressing)特點(diǎn)操作數(shù)的偏移地址EA是指令中基址寄存器內(nèi)容、變址寄存器內(nèi)容、位移量X三項(xiàng)和操作數(shù)在存儲器中
匯編格式:X[BR+IR]
PA=DS*16+BX+SI/DI+XPA=SS*16+BP+SI/DI+X假設(shè)指令:MOVAX,[BX+SI+200H],(DS)=1000H,(BX)=2100H,(SI)=0010H,內(nèi)存單元12310H的內(nèi)容為1234H。問指令執(zhí)行后,AX的值是什么?
相對基址變址尋址示例解:根據(jù)相對基址加變址尋址方式的規(guī)則,本指令中源操作數(shù)的有效地址EA為:EA=(BX)+(SI)+200H=2100H+0010H+200H=2310H該操作數(shù)的物理地址應(yīng)由DS和EA的值形成,即:PA=(DS)*16+EA=1000H*16+2310H=12310H該指令的執(zhí)行效果是:把從物理地址為12310H開始的一個(gè)字的值傳送給AX。
相對基址變址尋址示例相對基址變址尋址圖示:
相對基址變址尋址相對基址加變址尋址方式有多種等價(jià)的書寫方式,書寫格式:
[BX+SI+1000H]
1000H[BX+SI]
1000H[BX][SI]
1000H[SI][BX]等格式都是正確的,并且其尋址含義也一致,但格式:BX[1000H+SI]、SI[1000H+BX]
等是錯(cuò)誤的,即所用寄存器不能在”[
]”之外該限制對寄存器相對尋址方式的書寫同樣起作用。相對基址加變址尋址方式與其它尋址方式之間的變形關(guān)系源操作數(shù)指令的變形源操作數(shù)的尋址方式只有一個(gè)偏移量MOVAX,[100H]直接尋址方式只有一個(gè)寄存器MOVAX,[BX]或MOVAX,[SI]寄存器間接尋址方式有一個(gè)寄存器和偏移量MOVAX,[BX+100H]或MOVAX,[SI+100H]寄存器相對尋址方式有二個(gè)寄存器MOVAX,[BX+SI]基址加變址尋址方式有二個(gè)寄存器和常數(shù)項(xiàng)MOVAX,[BX+SI+100H]相對基址加變址尋址方式
相對基址變址尋址10.堆棧尋址堆棧硬堆棧軟堆棧多個(gè)寄存器指定的存儲空間
先進(jìn)后出(一個(gè)入出口)棧頂?shù)刂酚蒘P
指出–11FFFH+12000H
進(jìn)棧(SP)–1SP
出棧(SP)+1SP棧頂棧底2000HSP2000H……1FFFHSP1FFFH棧頂棧底進(jìn)棧出棧1FFFH棧頂2000H棧頂(2)堆棧尋址舉例15200HACCSPX棧頂200H棧底主存151FFHACCSP15棧頂200H棧底主存X1FFH
PUSHA前
PUSHA后
POPA前
POPA后Y1FFHACCSPX棧頂200H棧底主存151FFH15200HACCSP棧頂200H棧底主存X15(3)SP的修改與主存編址方法有關(guān)①按字編址進(jìn)棧出棧(SP)–1SP(SP)+1SP②按字節(jié)編址存儲字長16位進(jìn)棧出棧(SP)–2SP(SP)+2SP存儲字長32位進(jìn)棧出棧(SP)–4SP(SP)+4SP尋址方式若BX=0158H,DI=10A5H,位移量DISP=1B57H,數(shù)據(jù)段寄存器DS=2100H,則按照直接尋址、寄存器尋址、寄存器間接尋址(假定用BX)、寄存器相對尋址(假定用BX)、基址變址尋址(假定用BX、DI)、相對基址變址尋址(假定用BX、DI)得到的偏移地址和物理地址是多少?尋址方式直接尋址EA=DISP=1B57H,PA=DS*24+EA=21000H+1B57H=22B57H寄存器尋址:無EA寄存器間接尋址
EA=BX=0158H
PA=DS*24+EA=21000H+0158H=21158H尋址方式寄存器相對尋址EA=BX+DISP=0158H+1B57H=1CAFHPA=21000H+1CAFH=22CAFH基址變址尋址
EA=0158H+10A5H=11FDHPA=21000H+11FDH=221FDH相對基址變址尋址EA=0158H+10A5H+1B57H=2D54HPA=21000H+2D54H=23D54H32位地址的尋址方式用16位寄存器來訪問存儲單元時(shí),只能使用基地址和變址寄存器來作為地址偏移量的一部分但在用32位寄存器尋址時(shí),不存在上述限制,所有32位寄存器(EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP)都可以是地址偏移量的一個(gè)組成部分。
32位地址的尋址方式當(dāng)用32位地址偏移量進(jìn)行尋址時(shí),內(nèi)存地址的偏移量可分為三部分:一個(gè)32位基址寄存器一個(gè)可乘1、2、4或8的32位變址寄存器一個(gè)8位/32位的偏移常量并且這三部分還可進(jìn)行任意組合,省去其中之一或之二。
32位地址的尋址方式基址寄存器
EAX、EBX、ECX、EDX
ESI、EDI、EBP和ESP
變址寄存器
EAX、EBX、ECX、EDX
ESI、EDI和EBP
(除ESP之外)32位地址的尋址方式用32位地址偏移量進(jìn)行尋址的有效地址計(jì)算公式歸納如下:32位地址的尋址方式MOVAX,[123456H] MOVEAX,[EBX]MOVEBX,[ECX*2] MOVEBX,[EAX+100H]MOVEDX,[EAX*4+200H] MOVEBX,[EAX+EDX*2]MOVEBX,[EAX+EDX*2+300H] MOVAX,[ESP]由于32位尋址方式能使用所有的通用寄存器,和該有效地址相組合的段寄存器也就有新的規(guī)定。1、地址中寄存器的書寫順序決定該寄存器是基址寄存器,還是變址寄存器;如:[EBX+EBP]中的EBX是基址寄存器,EBP是變址寄存器,而[EBP+EBX]中的EBP是基址寄存器,EBX是變址寄存器;2、默認(rèn)段寄存器的選用取決于基址寄存器;3、基址寄存器是EBP或ESP時(shí),默認(rèn)段寄存器是SS,否則,默認(rèn)段寄存器是DS;4、在指令中,如果使用段前綴的方式,則顯式段寄存器優(yōu)先。32位地址的尋址方式列舉幾個(gè)32位地址尋址指令及其內(nèi)存操作數(shù)的段寄存器。MOV AX,[123456H] ;默認(rèn)段寄存器DSMOV EAX,[EBX+EBP] ;默認(rèn)段寄存器DSMOV EBX,[EBP+EBX] ;默認(rèn)段寄存器SSMOV EBX,[EAX+100H] ;默認(rèn)段寄存器DSMOV EDX,ES:[EAX*4+200H] ;顯式段寄存器ESMOV [ESP+EDX*2],AX ;默認(rèn)段寄存器SSMOV EBX,GS:[EAX+EDX*2+300H] ;顯式段寄存器GSMOV AX,[ESP] ;默認(rèn)段寄存器SS32位地址的尋址方式3.1.3數(shù)據(jù)尋址與數(shù)據(jù)結(jié)構(gòu)的關(guān)系多種尋址方式能方便、靈活的存取操作數(shù),支持高級語言的某些數(shù)據(jù)結(jié)構(gòu)
1.簡單變量尋址2.數(shù)組或表格數(shù)據(jù)的尋址3.記錄型數(shù)組的尋址
1.簡單變量尋址
存取簡單變量有時(shí)使用直接尋址方式,如果變量有基本地址,就將基本地址->BX\/SI\/DI,則存取某個(gè)變量EA=BX\/SI\/DI2.數(shù)組或表格數(shù)據(jù)的尋址
表格數(shù)據(jù)的存取也可當(dāng)作是數(shù)組的存取,均可用寄存器、寄存器相對、基址變址喝相對基址變址等尋址方式。(1)存取基本數(shù)組:數(shù)組的基本地址->BX,某個(gè)元素到數(shù)組基本地址的距離->SI\/DI,則:
EA=BX+{SI\/DI}
或者位移量DISP=數(shù)組開始地址,BX\/SI\/DI=數(shù)組元素到數(shù)組開始地址的距離,則:
EA=BX+{BX\/SI\/DI}+DISP2.數(shù)組或表格數(shù)據(jù)的尋址(2)對于賦值語句A(i)=B(j)應(yīng)指出兩個(gè)變址寄存器。如對應(yīng)元素ai可使用DI;對應(yīng)元素bj用SI,則兩組元素的地址分別為:
EA=SI+DISP
EA=DI+DISP(3)存取二維數(shù)組A(i,j):數(shù)組起始地址->BX,BX兼行元素相對數(shù)組起始地址變址,而列元素又相對行元素的變址量->SI\/DI,則存取某個(gè)元素應(yīng)有:
EA={BX+SI}\/{BX+DI}若DISP=數(shù)組元素的起始地址,BX=行元素變址量,SI或DI=列元素相對行元素的變址,則存取某個(gè)元素應(yīng)有:
EA=BX+{SI\/DI}+DISP3.記錄型數(shù)組的尋址數(shù)組和記錄結(jié)合使用。設(shè)雇員的記錄有四個(gè)數(shù)據(jù)項(xiàng)(雇員、保險(xiǎn)號、雇齡和工資),由多個(gè)雇員的記錄組成一個(gè)數(shù)組,則任一雇員記錄項(xiàng)地址的形式描述為F=f(M,I,J)
其中,F為數(shù)組記錄項(xiàng)的地址,M為數(shù)組的基本地址,I為數(shù)組的元素(記錄),J為元素的數(shù)據(jù)項(xiàng),f則表示記錄型數(shù)組。對此,存取任一記錄中的數(shù)據(jù)項(xiàng)(如雇齡項(xiàng))的操作數(shù)尋址對應(yīng)描述為:偏移地址=f(基址,變址,位移)3.記錄型數(shù)組的尋址(續(xù))假定基址指針再BX,與數(shù)組元素相一致的變址值在SI,記錄中項(xiàng)的位置用DISP表示,則
EA=BX+SI+DISP。4.堆棧數(shù)據(jù)結(jié)構(gòu)尋址堆棧采用以BP為基址指針的尋址,方便數(shù)據(jù)結(jié)構(gòu)相同而參數(shù)不同的數(shù)據(jù)存取。當(dāng)存取堆棧中的簡單變量時(shí)
EA=BP+DISP
若存取堆棧中的數(shù)據(jù)和記錄,則
EA=BP+{SI\/DI}+DISP3.1.4程序轉(zhuǎn)移尋址尋址方式對多數(shù)指令而言,是要計(jì)算出操作數(shù)的地址,但是也由少數(shù)指令是為了形成程序轉(zhuǎn)移的地址(如無條件轉(zhuǎn)移指令JMP、調(diào)用指令CALL等)。程序正常順序執(zhí)行時(shí),每取出一條指令執(zhí)行IP+n->IP,其中n為取出指令的字節(jié)數(shù);然后形成下一條指令的地址:PA=CS*24+IP但是如果程序發(fā)生轉(zhuǎn)移時(shí),需要計(jì)算出轉(zhuǎn)移偏移地址EA并修改IP,有時(shí)還需要修改CS的值。這種情況操作的對象是一個(gè)地址,地址的內(nèi)容是要取出的指令,而不是上述講到的操作數(shù),因此稱之為程序轉(zhuǎn)移尋址。程序轉(zhuǎn)移方式:段內(nèi)轉(zhuǎn)移是指程序在同一段代碼內(nèi),僅改變IP的值而不改變CS的值所發(fā)生的轉(zhuǎn)移。而段間轉(zhuǎn)移是程序要從一個(gè)代碼段轉(zhuǎn)移到另一個(gè)代碼段,則不僅改變IP的值,同時(shí)也要改變CS的值。無論是段內(nèi)還是段間發(fā)生的轉(zhuǎn)移都有直接和間接的形式,因此程序轉(zhuǎn)移有四種尋址。段內(nèi)轉(zhuǎn)移圖示段內(nèi)直接轉(zhuǎn)移和間接轉(zhuǎn)移尋址如下圖:1.段內(nèi)直接尋址(IntrasegmentDirectAddressing)
轉(zhuǎn)移偏移地址EA是指令中8位或16位位移量(DISP8,16)與指令指針I(yè)P當(dāng)前內(nèi)容之和。即:
EA=IP+DISP8,16->IP2.段內(nèi)間接尋址(IntrasegmentIndirectAddressing)
轉(zhuǎn)移偏移地址EA如果指定的是16位的寄存器,則將寄存器的內(nèi)容->IP。如果指定的是存儲器中的一個(gè)字,則將該存儲單元的內(nèi)容->IP。
(EA)->IP段內(nèi)轉(zhuǎn)移過程段間轉(zhuǎn)移圖示程序段間的直接或間接轉(zhuǎn)移如下圖:段間轉(zhuǎn)移過程1.段間直接尋址(IntersegmentDirectAddressing)
轉(zhuǎn)移偏移地址EA->IP
轉(zhuǎn)移段地址->CS2.段間間接尋址(IntersegmentIndirectAddressing)(EA)->IP(EA+2)->CS3.2實(shí)方式32位指令地址
實(shí)地址方式32位指令尋址,指在32位的PC機(jī)上使用16位的存儲機(jī)制,執(zhí)行32位的非保護(hù)方式及非虛擬方式的指令,達(dá)到直接存取32位寄存器和32位存儲器操作數(shù)的目的。3.2.1數(shù)據(jù)與地址類型 幾個(gè)概念位域:一個(gè)相鄰的位系列,在該序列中每一個(gè)作為一個(gè)獨(dú)立的單位處理,一個(gè)位域可以從任何字節(jié)的任何位置開始。位串:相鄰位的序列,可以從任何字節(jié)的任何位置開始。串:字節(jié)、字、雙字的序列。實(shí)方式的近程指針:16位的段內(nèi)偏移值。3.2.232位的指令尋址方式偏移地址EA
EA={基址}+{變址}×{比例因子}+{位移量}基址寄存器可以是任意一個(gè)32位通用寄存器。變址寄存器是指除了堆棧指針ESP以外的7個(gè)通用寄存器。比例因子是1、2、4、8可以分別用于字節(jié)、字、雙字、四字的變址。常數(shù)位移量可以指8位或32位。32位的尋址方式圖示如果使用ESPEBP為基址寄存器,則SS是默認(rèn)的段寄存器,也可用CS、DS、ES、FS、GS來替換SS;使用EAX、EBX、ECX、EDX、ESI、EDI為基址寄存器,則DS是默認(rèn)的段寄存器,同樣也能用CS、SS、ES、FS、GS來越段替換DS32位的指令尋址方式示例: MOVAX,DS:[BP]MOVFS:[EBP],ECX;DS、FS分別替換了缺省段SS32位的指令尋址方式示例(續(xù))為了取得指令代碼,只能用CS;PUSH、POP等指令與堆棧有關(guān),也只能用SS。此外,在指令代碼32位的程序堆棧操作時(shí),要確保ESP/SP的內(nèi)容(地址)總是為4的倍數(shù)。例如:PUSH12345678H;ESP/SP-4->ESP/SP,12345678->[ESP/SP]POPEAX;([ESP/SP])->EAX,ESP/SP+4->ESP/SP3.2.3實(shí)地址32位指令尋址32位的指令尋址包括數(shù)據(jù)尋址和程序轉(zhuǎn)移尋址。一般尋址的基本概念與16位匯編尋址概念相似,特殊的尋址方式如上敘述。現(xiàn)介紹如下:1、非存儲器的數(shù)據(jù)尋址方式示例(1)立即尋址
MOVEAX,19461201H;19461201H->EAX
與16位尋址相似。(2)寄存器尋址MOVEAX,ECX;ECX->EAX
與16位尋址相似2、 存儲器的數(shù)據(jù)尋址方式示例(1)直接尋址MOVEAX,[4612H];EA=4612,(EA)->EAX
與16位尋址相似。(2)寄存器間接尋址MOV[ECX],EDX;[ECX]間接指示存放操作數(shù)EA在EAX中,EA=ECX,EDX->EA,與16位尋址相似。存儲器的數(shù)據(jù)尋址方式示例(續(xù))(3)寄存器相對尋址MOVECX,[EAX+24];EA=EAX,(EA)->ECX(4)基址變址尋址MOVEAX,[EBX][ESI];EA=EBX+ESI,(EA)->EAX(5)相對基址變址尋址SUBEAX,[EBX+ESI+0FF0H];EA=EBX+ESI+0FF0H,EAX-(EA)->EAX存儲器的數(shù)據(jù)尋址方式示例(續(xù))(6)帶比例因子的變址MOVECX,[ESI*4];EA=ESI×4,(EA)->ECX(7)基址與帶比例因子的變址尋址MOVECX,[EAX][EDX*8];EA=EAX+EDX×8,(EA)->ECX(8)基址與帶位移量及比例因子的變址尋址MOVEAX,LTAB[EDI*4][EBP+80];EA=LTAB+EDI×4+EBP+80,(EA)->EAX3.程序轉(zhuǎn)移尋址方式 有相對EIP的段內(nèi)直接尋址,段內(nèi)間接尋址、段間直接尋址和段間間接尋址。4.前綴代碼67H或66H32位機(jī)匯編指令或有32位操作數(shù)的情形識別涉及指令機(jī)器碼格式的有關(guān)前綴表示。這些在相應(yīng)的匯編列表文件(*.LST)或DEBUG過程中可以看到,如前綴代碼67H或66H。(1)機(jī)器指令操作數(shù)長度屬性前綴碼66H66|83E00FANDEAX,0FH;EAX^0FH->EAX66|8BCBMOVECX,EAX(2)機(jī)器指令尋址長度續(xù)性前綴67|8B147500000026MOVDX,26H[ESI*2]67|66|8B04B0MOVEAX,[EAX+ESI*4]3.3實(shí)方式指令系統(tǒng)指令系統(tǒng)是一臺機(jī)器所有指令的集合。
Pentium系列機(jī)指令系統(tǒng)龐大、類型多樣,約有300多條指令,其中包括基本指令100多條。具有支持多進(jìn)程、多任務(wù)、虛擬存儲器和多媒體等功能的32位指令。3.3.1常用指令類型集1.數(shù)據(jù)傳送類指令2.算術(shù)運(yùn)算類指令3.邏輯和移位操作類指令4.串操作與重復(fù)前綴類指令5.控制轉(zhuǎn)移類指令6.處理機(jī)控制類指令7.其它指令本講義約定:OPD表示目的操作數(shù);OPS表示源操作數(shù);(OPS)表示OPS的內(nèi)容;(OPD)表示OPD的內(nèi)容;->表示傳送;R表示通用寄存器;Sr表示段寄存器;M表示主存儲器;XXXX:XXXX表示組合號,“:”表示其前后組成一個(gè)數(shù);L表示操作數(shù)的長度;d表示立即數(shù);B/W/D表示字節(jié)或字或雙字。3.3.2數(shù)據(jù)傳送類指令通用數(shù)據(jù)傳送指令堆棧操作指令標(biāo)志寄存器傳送指令地址傳送指令輸入輸出指令通用數(shù)據(jù)傳送指令1.傳送指令MOV2.數(shù)據(jù)交換指令XCHG3.查表轉(zhuǎn)換指令XLAT語句格式:MOVOPD,OPS功能:將源操作數(shù)傳送入目的地址,源地址內(nèi)容不變。即(OPS)→OPD。下圖描述了MOV指令在傳送數(shù)據(jù)時(shí)允許傳送的路徑及類型。1.傳送指令MOV注意:(1)OPD,OPS的類型(8/16/32位)必須一致.(2)OPD不能使用立即數(shù)。(3)雙操作數(shù)不能同時(shí)為內(nèi)存中的數(shù)據(jù)。(4)段寄存器不能直接送立即數(shù).(5)指令執(zhí)行后不影響FLAGS的標(biāo)志位的狀態(tài).(6)不能任意改變CS示例:存儲器與寄存器間數(shù)據(jù)傳送。MOVAX,BUF;BUF是變量,源操作數(shù)為直接尋址MOVBH,[DI];源操作數(shù)為寄存器間接尋址MOVDI,ES:3[SI];源操作數(shù)為變址尋址,使用跨段前綴MOVBP,3[BX+SI];源操作數(shù)為基址加變址尋址MOVBUFA,DL;BUFA是一字節(jié)變量MOV[BP],AX;使用SS段寄存器MOVDS:[BP],DL;使用跨段前綴MOVBUF,DS ;BUF是個(gè)字變量MOVES,BUF2.數(shù)據(jù)交換指令XCHG語句格式:XCHGOPD,OPS功能:將源地址與目的地址中的內(nèi)容互換。即(OPD)→OPS,(OPS)→OPD。寄存器與存儲器之間數(shù)據(jù)交換。MOV AX,5678H ;(AX)=5678HMOV BX,0FFFFH ;(BX)=0FFFFHXCHG AX,BX ;(AX)=0FFFH,(BX)=5678HMOVSX和MOVZX指令格式:MOVSXOPD,OPS
MOVZXOPD,OPS它們將OPS的內(nèi)容->OPD,但是對于OPD左邊空缺的位,MOVSX全部用OPS的符號填充(作符號延伸),可以對有符號的數(shù)進(jìn)行符號擴(kuò)展;而MOVZX是全部以零(0)填充,可對無符號數(shù)進(jìn)行0擴(kuò)展.
注意:OPD的位數(shù)比OPS的位數(shù)長示例:MOVCL,88HMOVZXAX,CL;AX=0088HMOVSXBX,CL;BX=FF88H另外也可如下書寫指令:MOVSXCX,BLMOVSXEAX,BUFMOVZXAX,CLMOVSXEBX,ALMOVZXESI,BUFMOVZXEDX,DI3.查表轉(zhuǎn)換指令XLA語句格式:XLATOPS或XLAT功能:將(BX)為首址(AL)為位移量的字節(jié)存儲單元中的數(shù)據(jù)送AL寄存器。即([BX+AL])→AL。堆棧操作指令1.進(jìn)棧指令PUSH2.出棧指令POP3.PUSHA/PUSHAD指令4.POPA/POPAD指令1.進(jìn)棧指令PUSH語句格式:
PUSHOPS;W/D,R/Sr/M/d功能:將寄存器、段寄存器、立即數(shù)或存儲器中的一個(gè)字?jǐn)?shù)據(jù)壓入堆棧頂部,指令視操作數(shù)長度為字(2字節(jié))或雙字(4字節(jié))和地址為16位/32位,先將SP/ESP-2/4->SP/ESP,后將OPS->[SP]/[ESP]。2.出棧指令POP語句格式:POPOPD;W/D,R/Sr/M/d功能:視OPD長度為字或雙字,先將當(dāng)前SP/ESP指向的內(nèi)容->OPD,后將SP/ESP+2/4->SP/ESP。從POP指令功能可看出,該指令為PUSH指令的逆過程,一般成對使用。3.PUSHA/PUSHAD指令格式:
PUSHA;壓入8個(gè)字通用寄存器.
PUSHAD;壓入8個(gè)雙字通用寄存器.4.POPA/POPAD指令格式:
POPA;彈出到8個(gè)16位通用寄存器
POPAD;彈出到8個(gè)32位通用寄存器標(biāo)志寄存器傳送指令1.標(biāo)志送AH指令LAHF2.AH送標(biāo)志指令SAHF3.標(biāo)志寄存器進(jìn)棧指令PUSHF4.標(biāo)志寄存器出棧指令POPF1.標(biāo)志送AH指令LAHF語句格式:LAHF功能:將標(biāo)志寄存器的低8位送入AH寄存器。即(FLAGS)7-0→AH。該指令的執(zhí)行對標(biāo)志位無影響?!纠繕?biāo)志寄存器傳送。執(zhí)行前:(FLAGS)=0485H,(AX)=0FFFFH執(zhí)行指令:LAHF執(zhí)行后:AH=85H2.AH送標(biāo)志指令SAHF語句格式:SAHF功能:將AH的內(nèi)容送入標(biāo)志寄存器的低8位,高8位不變。即(AH)→FLAGS7-0。從該指令功能可看出,SAHF為LAHF的逆過程。3.標(biāo)志寄存器進(jìn)出棧指令PUSHF/POPF語句格式:PUSHF
功能:將標(biāo)志寄存器的內(nèi)容壓入堆棧。即(FLAGS)->堆棧。POPF功能:將堆棧頂端的內(nèi)容送到標(biāo)志寄存器。即堆棧->(FLAGS)。
地址傳送指令1.傳送偏移地址指令LEA2.傳送偏移地址及數(shù)據(jù)段首址指令LDS3.傳送偏移地址及附加數(shù)據(jù)段指令LES1.傳送偏移地址指令LEA語句格式:LEAOPD,OPS;OPS的EA->OPD
;OPD是16/32位的R,OPS是M功能:主存按源地址的尋址方式計(jì)算偏移地址,將偏移地址送入指定寄存器?!纠恐鞔嫫频刂返墨@取。MOVBX,0100H ;(BX)=0100HMOVSI,0210H ;(SI)=0210HLEABX,1234[BX+SI] ;(BX)=1544H2.LDS/LES/LFS/LGS/LSS指令語句格式:LDS/LES/LFS/LGS/LSSOPD,OPS;EA=OPS功能:地址傳送LDS等指令中,OPD為R(16位),OPS為M(32位).操作對FLAGS無影響,執(zhí)行后結(jié)果為:(EA)->R;全程指針的偏移地址(EA+2)->LDS/LES/LFS/LGS/LSS;全程指針的段地址輸入輸出指令1.輸入指令I(lǐng)N2.輸出指令OUT1.輸入指令I(lǐng)N輸入指令用來從指定的外設(shè)寄存器取信息送入累加器。它有四種形式:(1)語句格式:IN AL,PORT
功能:(PORT) →AL(2)語句格式:IN AX,PORT
功能:(PORT) →AX(3)語句格式:IN AL,DX
功能:([DX]) →AL(4)語句格式:IN AX,DX
功能:([DX]) →AX2.輸出指令OUT輸出指令用來把累加器的內(nèi)容送往指定的外設(shè)存儲器,它有四種形式:(1)語句格式:OUT PORT,AL
功能:(AL) →PORT(2)語句格式:OUT PORT,AX
功能:(AX) →PORT(3)語句格式:OUT DX,AL
功能:(AL) →[DX](4)語句格式:OUT DX,AX
功能:(AX) →[DX]3.3.3位操作類指令邏輯運(yùn)算指令1.求反指令NOT2.邏輯乘指令A(yù)ND3.測試指令TEST4.邏輯加指令OR5.按位加指令XOR語句格式:NOTOPD功能:將目的地址中的內(nèi)容逐位取反后送入目的地址。即(OPD)求反→OPD【例】邏輯非運(yùn)算。MOV AX,878AH;(AX)=878AHNOT AX ;(AX)=7875H1.求反指令NOT語句格式:ANDOPD,OPS 功能:將目的操作數(shù)和源操作數(shù)進(jìn)行邏輯乘運(yùn)算,結(jié)果存目的地址。即(OPD)∧(OPS)→OPD。該指令用于清除目的操作數(shù)中與源操作數(shù)置0的對應(yīng)位。說明:邏輯乘的運(yùn)算法則為:1∧1=1,1∧0=0,0∧1=0,0∧0=0【例】將AL中第3位和第7位清零。MOV AL,0FFHAND AL,77H2.邏輯乘指令A(yù)ND語句格式:TESTOPD,OPS功能:源地址和目的地址的內(nèi)容執(zhí)行按位的邏輯乘運(yùn)算,結(jié)果不送入目的地址。即(OPD)∧(OPS)?!纠繙y試AX中的第12位是否為0,不為0則轉(zhuǎn)L。TEST AX,1000HJNE L
3.測試指令TEST語句格式:OROPD,OPS功能:將目的操作數(shù)和源操作數(shù)進(jìn)行邏輯加運(yùn)算,結(jié)果存目的地址。即(OPD)∨(OPS)→OPD。說明:邏輯加的運(yùn)算法則為:1∨1=1,1∨0=1,0∨1=1,0∨0=0。【例】將AL寄存器中第3位和第7位置1。MOV AL,0OR AL,88H4.邏輯加指令OR語句格式:XOROPD,OPS功能:目的操作數(shù)與源操作數(shù)做按位加運(yùn)算,結(jié)果送入目的地址。即(OPD)⊕(OPS)→OPD。說明:按位加的運(yùn)算法則為;1⊕1=0,1⊕0=1,0⊕1=1,0⊕0=0?!纠堪次患舆\(yùn)算。MOV AL,45H ;(AL)=45HXOR AL,31H ;(AL)=74H5.按位加指令XOR移位指令
移位指令包括算術(shù)移位指令、邏輯移位指令和循環(huán)移位指令,分別進(jìn)行左移和右移操作。這些指令均有統(tǒng)一的語句格式:SAL/SHLOPD,OPS;左移SAROPD,OPS;算術(shù)右移SHROPD,OPS;邏輯右移其中,OPD是8/16/32位的R/M;OPS是計(jì)數(shù)值(即移位次數(shù)),有三種情形:OPS即可是8位的立即數(shù)或CL的內(nèi)容(移位前次數(shù)->CL)。其功能為將目的操作數(shù)的所有位按操作符規(guī)定的方式移動1位或按寄存器CL規(guī)定的次數(shù)(0~255)移動,結(jié)果送入目的地址。目的操作數(shù)是8位(或16位)的寄存器數(shù)據(jù)或存儲器數(shù)據(jù)。語句格式:SALOPD,1或SHLOPD,1
SALOPD,CL或SHLOPD,CL功能:將(OPD)向左移動CL指定的次數(shù),最低位補(bǔ)入相應(yīng)的0,CF的內(nèi)容為最后移入位的值。1.算術(shù)左移和邏輯左移指令SAL(SHL)語句格式:SAROPD,1或SAROPD,CLCF功能:將(OPD)向右移動CL指定的次數(shù)且最高位保持不變;CF的內(nèi)容為最后移入位的值。2.算術(shù)右移指令SARMOV BH,0F4H ;(BH)=0F4HMOV CL,2 ;(CL)=2SAR BH,CL ;(BH)=0FDH,(CF)=0該例語句“SAR
BH,CL”實(shí)際上完成了(BH)/4→BH的運(yùn)算,所以,用SAR指令可以實(shí)現(xiàn)對有符號數(shù)除2n的運(yùn)算(n為移位次數(shù))?!纠克阈g(shù)右移運(yùn)算語句格式:SHROPD,1或SHROPD,CL功能:將(OPD)向右移動CL規(guī)定的次數(shù),最高位補(bǔ)入相應(yīng)個(gè)數(shù)的0,CF的內(nèi)容為最后移入位的值。3.邏輯右移指令SHR語句格式:ROLOPD,1或ROLLPD,CL功能:將目的操作數(shù)的最高位與最低位連成一個(gè)環(huán),將環(huán)中的所有位一起向左移動CL規(guī)定的次數(shù)。CF的內(nèi)容為最后移入位的值。4.循環(huán)左移指令ROL語句格式:ROROPD,1或ROROPD,CL功能:將目的操作數(shù)的最高位與最低位連成一個(gè)環(huán),將環(huán)中的所有位一起向右移動CL規(guī)定的次數(shù),CF的內(nèi)容為最后移入位的值。
07CF5.循環(huán)右移指令ROR語句格式:RCLOPD,1或RCLOPD,CL功能:將目的操作數(shù)連同CF標(biāo)志一起向左循環(huán)移動CL規(guī)定的次數(shù)。6.帶進(jìn)位的循環(huán)左移指令RCL語句格式:RCROPD,1或RCROD,CL功能:將目的操作數(shù)連同CF標(biāo)志一起向右循環(huán)移動所規(guī)定的次數(shù)。7.帶進(jìn)位的循環(huán)右移指令RCR3.4字符設(shè)備I/O功能調(diào)用
本節(jié)主要介紹DOS子程序調(diào)用方式、鍵盤輸入、屏幕顯示和打印機(jī)輸出的DOS系統(tǒng)功能調(diào)用。DOS子程序調(diào)用方式調(diào)用之前:設(shè)置子程序的入口參數(shù)。調(diào)用請求:執(zhí)行“INT21H”軟中斷指令調(diào)用。調(diào)用之后:可能有出口參數(shù),也可能無出口參數(shù)。如果有出口參數(shù),可根據(jù)程序需要,判斷本次調(diào)用是否成功或者分析執(zhí)行情況。1從鍵盤輸入一個(gè)字符AH=01H
從鍵盤讀入一個(gè)字符,送到顯示器輸出,并將該字符的ASCII碼值->AL(出口參數(shù));如果檢測到讀入的字符是Ctrl+Break,則中止程序執(zhí)行。例:MOVAH,H鍵盤輸入子程序,功能1->AHINT21HDOS子程序調(diào)用,等待鍵入一個(gè)字符調(diào)用后,輸入字符的ASCII碼值->AL2、顯示輸出一個(gè)字符AH=02H將DL寄存器重的字符(ASCII碼值)送到標(biāo)準(zhǔn)輸出設(shè)備上輸出。若檢測到Ctrl+Break間,則執(zhí)行中斷“INT23H”中止程序的執(zhí)行。例:MOVDL,AL;AL內(nèi)容是字符的ASCII碼->DL
MOVAH,2;功能號2->AH
INT21H;調(diào)用顯示一個(gè)字符3.打印機(jī)輸出一個(gè)字符AH=05H將要打印的字符->DL,然后調(diào)用就可以打印輸出。如果有標(biāo)準(zhǔn)打印設(shè)備不輸出,可在執(zhí)行時(shí)用DOS命令鍵Ctrl+Break進(jìn)行幫助。例:MOVDL,AL;AL的字符ASCII碼->DL
MOVAH,5;功能號5->AH
INT21H;調(diào)用打印一個(gè)字符4、直接控制臺輸入AH=07H輸入時(shí)不回顯,例如,從鍵盤輸入一個(gè)字符,在屏幕上不顯示,出口參數(shù)AL=鍵入的字符??捎脕碓O(shè)置保密口令。例:
PASSWORDDB10DUP(0)...MOVCX,6MOVSI,0AGAIN:MOVAH,7INT21HMOVPASSWORD[SI],ALMOVDL,’*’MOVAH,2INT21HINCSILOOPAGAIN5、顯示輸出字符串AH=09H例:執(zhí)行下語句后屏幕顯示輸出“WELCOME!”STRINGDB‘WELCOME!’,13,10,’$’
…MOVAX,SEGSTRINGMOVDS,AXLEADX,STRINGMOVAH,9INT21H6、緩沖區(qū)鍵盤輸入AH=0AH如果需要鍵入最大的字符數(shù)位N,則由“DS:DX”指向的緩沖區(qū)可分為3個(gè)字段。第一個(gè)字段:定義緩沖區(qū)可存放的字符數(shù)N+1,使機(jī)器自動控制檢查,若鍵入實(shí)際的字符數(shù)個(gè)數(shù)超過N,則響鈴報(bào)警。第二個(gè)字段:定義緩沖區(qū),當(dāng)鍵盤輸入調(diào)用退出后,系統(tǒng)自動計(jì)數(shù)并存放實(shí)際輸入的字符。第三個(gè)字段:定義可存放字符的緩沖區(qū),調(diào)用退出后,存放實(shí)際輸入的字符,最后一個(gè)字節(jié)總是回車符。0AH調(diào)用示例例:編寫在實(shí)地址方式(.586與USE16)下,定義一個(gè)能最多可輸入20個(gè)字符到BUF緩沖區(qū)的程序。.586STACKSEGMENTUSE16;定義16位段
DB256DUP(0)STACKENDSDATASSEGMENTUSE16NEQU20BUFDBN+1;定義第一個(gè)字段,BUF位21COUNTDB0;定義第二個(gè)字段CHARDBN+1DUP(0);定義第三個(gè)字段PROMPTDB‘Pleaseinput:’,13,10,‘$’DATASENDS0AH調(diào)用示例(續(xù))CODESSEGMENTUSE16ASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXLEADX,prompt;取prompt的偏移地址->dx
MOVAH,9
INT21H
LEADX,BUF;取BUF的偏移地址->dx
MOVAH,0AH
INT21H
MOVAH,4CH
INT21HCODESENDS
ENDSTART7、返回DOS調(diào)用AH=4CH功能:返回DOS入口參數(shù):AH=4CH,AL=返回碼出口參數(shù):第3章操作數(shù)的尋址方式微機(jī)系統(tǒng)有七種基本的尋址方式:立即尋址方式、寄存器尋址方式、直接尋址方式、寄存器間接尋址方式、寄存器相對尋址方式、基址加變址尋址方式、相對基址加變址尋址方式等。其中,后五種尋址方式是確定內(nèi)存單元有效地址的五種不同的計(jì)算方法,用它們可方便地實(shí)現(xiàn)對數(shù)組元素的訪問。另外,在32位微機(jī)系統(tǒng)中,為了擴(kuò)大對存儲單元的尋址能力,增加了一種新的尋址方式——32位地址的尋址方式。第3章操作數(shù)的尋址方式3.1立即尋址方式操作數(shù)作為指令的一部分而直接寫在指令中,這種操作數(shù)稱為立即數(shù),這種尋址方式也就稱為立即數(shù)尋址方式。立即數(shù)可以是8位、16位或32位數(shù),該數(shù)值緊跟在操作碼之后。如果立即數(shù)為16位或32位,那么,它將按“高高低低”的原則進(jìn)行存儲。例如:MOVAH,80HADDAX,1234HMOVECX,123456HMOVB1,12HMOVW1,3456HADDD1,32123456H其中:B1、W1和D1分別是字節(jié)、字和雙字單元。立即數(shù)尋址方式通常用于對通用寄存器或內(nèi)存單元賦初值。第3章操作數(shù)的尋址方式下圖是指令“MOVAX,4576H”的存儲形式和執(zhí)行情況示意圖。第3章操作數(shù)的尋址方式3.2寄存器尋址方式指令所要的操作數(shù)已存儲在某寄存器中,或把目標(biāo)操作數(shù)存入寄存器。把在指令中指出所使用寄存器(即:寄存器的助憶符)的尋址方式稱為寄存器尋址方式。指令中可以引用的寄存器及其符號名稱如下:8位寄存器有:AH、AL、BH、BL、CH、CL、DH和DL等;16位寄存器有:AX、BX、CX、DX、SI、DI、SP、BP和段寄存器等;32位寄存器有:EAX、EBX、ECX、EDX、ESI、EDI、ESP和EBP等。
寄存器尋址方式是一種簡單快捷的尋址方式,源和目的操作數(shù)都可以是寄存器。由于指令所需的操作數(shù)已存儲在寄存器中,或操作的結(jié)果存入寄存器,這樣,在指令執(zhí)行過程中,會減少讀/寫存儲器單元的次數(shù)。通常情況下,我們提倡應(yīng)盡可能地使用寄存器尋址方式,但也不要絕對化。第3章操作數(shù)的尋址方式3.3直接尋址方式指令所要的操作數(shù)存放在內(nèi)存中,在指令中直接給出該操作數(shù)的有效地址,這種尋址方式為直接尋址方式。通常情況下,操作數(shù)存放在數(shù)據(jù)段中,所以,其物理地址將由數(shù)據(jù)段寄存器DS和指令中給出的有效地址直接形成,但如果使用段超越前綴,那么,操作數(shù)可存放在其它段。第3章操作數(shù)的尋址方式例3.1假設(shè)有指令:MOVBX,[1234H],在執(zhí)行時(shí),(DS)=2000H,內(nèi)存單元21234H的值為5213H。問該指令執(zhí)行后,BX的值是什么?解:根據(jù)直接尋址方式的尋址規(guī)則,把該指令的具體執(zhí)行過程如下圖所示。第3章操作數(shù)的尋址方式3.4寄存
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 湘教版數(shù)學(xué)九年級上冊《小結(jié)練習(xí)》聽評課記錄4
- 部審人教版九年級數(shù)學(xué)下冊聽評課記錄28.2.2 第2課時(shí)《利用仰俯角解直角三角形》
- 人教版歷史八年級上冊第16課《毛澤東開辟井岡山道路》聽課評課記錄
- 部編版八年級歷史上冊《第10課中華民國的創(chuàng)建》表格式聽課評課記錄
- 人教版地理七年級上冊第三章第四節(jié)《世界的氣候第2課時(shí)》聽課評課記錄
- 北師大版歷史八年級下冊第8課《艱苦創(chuàng)業(yè)年代的英雄模范》聽課評課記錄
- 蘇教版四年級下冊數(shù)學(xué)口算練習(xí)
- 華東師大版數(shù)學(xué)八年級上冊《11.1.1 平方根》聽評課記錄
- 大型商場商鋪?zhàn)赓U合同范本
- 二零二五年度舞臺搭建安全規(guī)范與責(zé)任落實(shí)協(xié)議
- 江蘇省2023年對口單招英語試卷及答案
- 易制毒化學(xué)品安全管理制度匯編
- GB/T 35506-2017三氟乙酸乙酯(ETFA)
- GB/T 25784-20102,4,6-三硝基苯酚(苦味酸)
- 特種設(shè)備安全監(jiān)察指令書填寫規(guī)范(特種設(shè)備安全法)參考范本
- 硬筆書法全冊教案共20課時(shí)
- 《長方形的面積》-完整版課件
- PDCA降低I類切口感染發(fā)生率
- 工業(yè)企業(yè)現(xiàn)場監(jiān)測工況核查表
- 沉淀池及排水溝清理記錄表
- 急診急救信息化課件
評論
0/150
提交評論