




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第三章尋址方式及指令系統(tǒng)
3.1基本概念3.2尋址方式
操作數(shù)的尋址方式轉(zhuǎn)移指令的尋址方式3.3指令系統(tǒng)傳送指令算術(shù)運算指令位運算指令CPU控制指令I/O類指令串操作指令轉(zhuǎn)移類指令3.4常用DOS系統(tǒng)功能調(diào)用和BIOS中斷調(diào)用
DOS系統(tǒng)功能調(diào)用常用DIOS中斷
3.1基本概念一、指令及指令系統(tǒng)指令是CPU可以理解并執(zhí)行的操作命令。指令系統(tǒng)是CPU的所有指令的集合。指令的兼容性:同一系列機的指令都是兼容的。二、程序執(zhí)行的基本流程程序是為了解決某一問題而編寫的有限指令序列。指令的執(zhí)行過程主要有兩個階段:取指階段和分析執(zhí)行階段。圖3.1程序執(zhí)行流程圖三、指令的級別機器級和匯編級機器指令是指由二進制代碼構(gòu)成的可由CPU直接理解并執(zhí)行的指令;匯編指令實質(zhì)上是機器指令符號化的結(jié)果,它與機器指令是一對一的。例如:MOVAL,1(易于理解、記憶、書寫不易出錯)
1011000000000001(難理解、難記憶、書寫易出錯)四、指令格式指令中應包含的信息:“做什么操作”“對什么操作”指令格式操作碼[操作數(shù)],[操作數(shù)]執(zhí)行何種操作參加操作的數(shù)據(jù)或數(shù)據(jù)存放的地址或操作數(shù)地址計算方法說明:①操作數(shù)的尋址方式是指尋找指令中操作數(shù)的方式。
操作數(shù)可能的存放方式:直接包含在指令中立即數(shù)立即尋址方式包含在某個寄存器中寄存器操作數(shù)寄存器尋址方式在內(nèi)存中存儲器操作數(shù)(內(nèi)存操作數(shù))存儲器尋址方式在端口中端口操作數(shù)端口尋址方式②操作數(shù)的分類:根據(jù)其在指令中的位置分為第一操作數(shù)和第二操作數(shù)以及隱含操作數(shù)(無操作數(shù),在指令中不會出現(xiàn)但會用到);根據(jù)操作數(shù)的作用分為源操作數(shù)(SRC)和目的操作數(shù)(DST);
例如:MOVAL,80根據(jù)操作數(shù)所對應的操作對象的字節(jié)數(shù)(也叫數(shù)據(jù)類型)分為字節(jié)操作數(shù)(Byte)、字操作數(shù)(Word)(8088/86字長為兩個字節(jié))、雙字操作數(shù)(DoubleWord)、8字節(jié)操作數(shù)(Octalbyets,LongWord)、十字節(jié)操作數(shù)(TenBytes)。按操作數(shù)的個數(shù)將指令分為零地址指令(無操作數(shù))、一地址指令(只有一個操作數(shù))、二地址指令(有二個操作數(shù))、多地址指令(多于二個操作數(shù));按指令級別分為機器指令和匯編指令;按是否轉(zhuǎn)移分為轉(zhuǎn)移指令和順序指令;按功能分為七大類:傳送類、算術(shù)運算類、位操作類、I/O類、串操作類、CPU控制類、轉(zhuǎn)移類;按指令長度(即指令占用的字節(jié)數(shù))分為一字節(jié)指令、二字節(jié)指令等,8088/86指令長度是不同的,叫變字長,不同的指令有不同的指令長度,從一字節(jié)到六字節(jié)均有;按指令執(zhí)行期間取操作數(shù)是否需要與總線打交道分為內(nèi)部指令(不需)和外部指令(需要)。五、指令分類
3.2尋址方式與數(shù)據(jù)有關(guān)的尋址方式與轉(zhuǎn)移地址有關(guān)的尋址方式(轉(zhuǎn)移指令)與數(shù)據(jù)有關(guān)的尋址方式:以MOV
指令為例立即尋址MOVAX,3069H寄存器尋址MOVAL,BH直接尋址MOVAX,[2000H]寄存器間接尋址MOVAX,[BX]
寄存器相對尋址MOVAX,COUNT[SI]
基址變址尋址MOVAX,[BP][DI]相對基址變址尋址MOVAX,MASK[BX][SI]存儲器尋址3.2.1操作數(shù)的尋址方式操作數(shù)直接存放在指令中,緊跟在操作碼之后,作為指令的一部分,存放在代碼段里,這種操作數(shù)稱為立即數(shù)。例如:MOVAL,5MOVAX,3064H
圖例MOVAL,‘A’主要用來給REG或M賦初值。3.2.1.1立即尋址方式AH
AL
AXCS段…………操作碼存儲器例:MOVAX,3064HB8H64H30H∴(AX)=3064H例3.1:MOV
AL,5 ;5為十進制字節(jié)常數(shù)MOV
AX,5 ;5為十進制字常數(shù)MOVAX,300H ;300H為十六進制字常數(shù)MOV
CX,N;在此之前N已定義為常量MOV
AX,DATA ;DATA為段名MOV
AX,5+2*3;5+2*3=11為常數(shù)表達式注意:立即數(shù)可以是:各種進制的常數(shù)、字符常數(shù)、符號常量、地址(段名、段地址、偏移地址)、常數(shù)表達式等。立即數(shù)只能作為源操作數(shù),不能作為目的操作數(shù)。立即數(shù)的數(shù)據(jù)類型由指令本身決定。字節(jié)數(shù)據(jù)的取值范圍為-128-+255,字數(shù)據(jù)的取值范圍為-32768-+65535。MOV40H,AL錯MOVAH,3064H錯3.2.1.2寄存器尋址方式指令中出現(xiàn)的寄存器名作為操作數(shù)的尋址方式叫寄存器尋址方式。操作對象是寄存器中的內(nèi)容。例3.2:MOV
AX,BXMOV
DH,CLMOV
DS,AX注意:匯編指令涉及到的寄存器名有20個。其中,字節(jié)寄存器只有
AHALBHBLCHCLDHDL寄存器尋址既可以作DST,也可以作SRC。源操作數(shù)和目的操作數(shù)的字長一致
圖例CS不能作為目的操作數(shù)如:MOVCS,AX錯例:MOVAX,BXAX
BX
若(AX)=1234H,(BX)=5678H,則CPU執(zhí)行上條指令后,(AX)=5678H,而(BX)不變。
又如:MOVCX,DL(語法錯誤)
錯誤原因:類型不一致。3.2.1.3存儲器尋址方式
指令中操作數(shù)是操作對象在內(nèi)存中的存放地址的尋址方式叫存儲器尋址方式。操作對象是內(nèi)存地址所對應的存儲單元中的內(nèi)容。存儲器尋址方式分為五種:直接尋址方式、寄存器間接尋址方式、寄存器相對尋址方式、基址變址尋址方式、相對基址變址方式。由段地址及段內(nèi)偏移地址確定內(nèi)存地址對應的SR及EA1、直接尋址方式—有效地址EA由指令直接給出
例:MOVAX,[2000H]
*
隱含的段為數(shù)據(jù)段DS*
可使用段超越前綴
例:
MOVES:[2000H],AL*
操作數(shù)地址常數(shù)、常量或常數(shù)表達式加[]表示,也可由變量名(符號地址)或變量名加減常量表示。例如:MOVBX,[N] ;N為常量名
MOVBX,ES:[2+3*5] MOVDX,A ;A為變量名
MOV
SI,A+5
EA=N圖例圖例AXCS段操作碼例1:MOVAX,[2000H]若DS為3000H,則:AH
AL
32000H32001H30000H
+DS……
……存儲器數(shù)據(jù)段20H00HA1H2000H
PA=32000H
3050CS段操作碼例2:MOVES:[2000H],AL若ES為2050H,則:AL
22500H20500H
+ES………存儲器附加數(shù)據(jù)段20H00H2000H
PA=22500H
前綴碼2、寄存器間接尋址(簡稱間接尋址)—EA在基址寄存器(BX/BP)或變址寄存器(SI/DI)中
MOVAX,[BX]PA=16(DS)+(BX)MOVAX,ES:[BX]PA=16(ES)+(BX)
MOVAX,[BP]PA=16(SS)+(BP)MOV
BP,[SI]PA=16(DS)+(SI)MOV
SP,SS:[DI]PA=16(SS)+(DI)
*不允許使用AX、CX、DX存放EAMOVAX,[CX]錯*BP默認相對SS段,其它則默認相對DS段。
EA=R
有效地址=(BX)(BP)(SI)(DI)+相對偏移量(8位或16位)3、寄存器相對尋址方式—EA為寄存器內(nèi)容加上一個相對偏移量
*相對偏移量可以是常數(shù)、常量、常數(shù)表達式以及變量名等EA=R+n例3.5:MOV
AX,[BX+6]MOV
BX,DS:[BP+N];N為常量名MOV
BP,A[SI];A為變量名,變量名常寫于“[”前MOV
SP,[DI][8];另一種書寫格式MOV
CX,8[DI];另一種書寫格式
例:MOVAX,COUNT[SI]
假設(DS)=3000H,(SI)=2000H,COUNT=3000H,PA=3000H×10H+(2000H+3000H)
則:PA=35000H
假設(35000H)=1234H,
那么(AX)=1234H
在相對偏移量為常數(shù)時,操作數(shù)所在單元的段地址以寄存器為準,若寄存器為BX、SI、DI,操作數(shù)默認在DS段中。若寄存器為BP,操作數(shù)默認在SS段中。在相對偏移量為變量時,操作數(shù)所在單元的段地址以變量為準,變量在哪個段定義的,就取該段的段地址。注意:例:若(DS)=1500H,TABLE為在DS段定義的一個字變量,且偏移地址為0004H,(BP)=0003H。
MOVAX,TABLE[BP]SRC的尋址方式為寄存器相對尋址。指令完成的操作為:
(AX)(DS:TABLE+(BP))PA=1500H×10H+(0004H+0003H)
則:PA=15007H4、基址變址尋址方式—EA為一個基址寄存器內(nèi)容加上一個變址寄存器的內(nèi)容*必須是一個基址寄存器和一個變址寄存器的組合
MOVAX,[BX][BP]錯
MOVAX,[SI][DI]錯*若用到BP則默認相對SS段,其它則默認相對DS段。有效地址=(BX)(SI)(BP)(DI)+EA=BR+IR例3.6
MOV
AX,[BX+SI]
MOV
BX,DS:[BP+SI]
MOV
DX,[BP][DI] ;另一種書寫格式
MOVAX,ES:[BX][SI]5、相對基址變址尋址方式—EA為一個基址寄存器內(nèi)容加上一個變址寄存器的內(nèi)容再加上一個相對偏移量默認段地址來源,同寄存器相對尋找方式例3.7:MOV
AX,[BX+SI+19]MOV
BX,DS:[BP][SI][8];另一種書寫格式MOV
BP,[BP+DI+N] ;N為常量名MOV
A[BX][DI],DX ;A為變量名相對偏移量(8位或16位)
有效地址=(BX)(SI)(BP)(DI)++EA=BR+IR+n例:設DS=1200H,BX=05A6H,SS=5000H,BP=40A0H,SI=2000H,DI=3000H,位移量DISP=1618H。試判斷下列指令的尋址方式,并求出在各種尋址方式下的EA和PA,并說明指令執(zhí)行的結(jié)果。MOVAX,[0618H]直接尋址EA=0618H執(zhí)行結(jié)果:將數(shù)據(jù)段12618H和12619H兩單元的內(nèi)容取出送AX。PA=DS左移4位+EA=12000H+0618H=12618H存儲器尋址實例(一)30MOVAX,[BX]寄存器間接尋址EA=BX=05A6H執(zhí)行結(jié)果:將數(shù)據(jù)段125A6H和125A7H兩單元的內(nèi)容取出送AX。PA=DS左移4位+EA=12000H+05A6H=125A6H存儲器尋址實例(二)31MOVAX,[BP]寄存器間接尋址EA=BP=40A0H執(zhí)行結(jié)果:將堆棧段540A0H和540A1H兩單元的內(nèi)容取出送AX。PA=SS左移4位+EA=50000H+40A0H=540A0H存儲器尋址實例(三)32MOVAL,[DI+DISP]寄存器相對尋址EA=DI+DISP=3000H+1618H=4618H執(zhí)行結(jié)果:將數(shù)據(jù)段16618H單元的內(nèi)容取出送AL。PA=DS左移4位+EA=12000H+4618H=16618H存儲器尋址實例(四)MOVAX,[BX+DI]基址加變址尋址EA=BX+DI=05A6H+3000H=35A6H執(zhí)行結(jié)果:將數(shù)據(jù)段155A6H和154A7H兩單元的內(nèi)容取出送AX。PA=DS左移4位+EA=12000H+35A6H=155A6H存儲器尋址實例(五)MOVAX,[BP+SI+DISP]基址變址相對尋址EA=BP+SI+DISP=40A0H+2000H+1618H=76B8H執(zhí)行結(jié)果:將堆棧段576B8H和576B9H兩單元的內(nèi)容取出送AX。PA=SS左移4位+EA=50000H+78B8H=576B8H存儲器尋址實例(六)圖3.3任一存儲單元可采用
五種存儲器尋址方式任一種
3.2.1.4端口尋址方式端口地址給出的方式有兩種:常數(shù)(端口直接尋址方式)
DX寄存器(端口間接尋址方式)端口直接尋址方式:指令直接提供8位端口地址。尋址范圍為0-255(00H--FFH),即一個字節(jié)的地址值。端口間接尋址方式:由DX寄存器給出16位端口地址。
DX的取值范圍為0-65535(0000H—FFFFH)。
例3.8: IN
AX,41H ;41H為端口直接尋址OUT
DX,AL ;DX為端口間接尋址
*端口操作數(shù)只能出現(xiàn)在I/O指令,即IN和OUT指令,端口操作數(shù)實質(zhì)上是指明端口的地址,操作對象是端口地址對應的端口中的內(nèi)容。3.3指令系統(tǒng)按功能分為:數(shù)據(jù)傳送類算術(shù)運算類邏輯運算和移位類串操作類程序控制轉(zhuǎn)移類
I/O類處理器控制類重點關(guān)注:指令的助記符指令的匯編格式指令的基本功能指令支持的數(shù)據(jù)類型指令支持的尋址方式指令的執(zhí)行對標志位的影響英文縮寫含義本書講解指令系統(tǒng)所用的一些英文縮寫如下:
SR:段寄存器N:立即數(shù)F:標志位
UR:通用寄存器
UR8:8位通用寄存器,UR16:16位通用寄存器
M或[EA]:存儲器操作數(shù)
B:字節(jié),W:字,DW:雙字
DST:目的操作數(shù),SRC:源操作數(shù)
OD:操作數(shù)
傳送類指令(12條)一般傳送交換傳送堆棧傳送地址傳送標志傳送POPF傳送類指令又可分為五小類:3.3.1.1一般傳送MOV(賦值)指令。助記符:MOV基本格式:MOV
DST,SRC數(shù)據(jù)類型:B/W功能:將第二操作數(shù)送給第一操作數(shù), 即DST←SRC對F影響:無尋址方式:注意:*DST不能是立即數(shù)和CS
*立即數(shù)不能直接送段寄存器
MOVDS,2000H錯
*DST、SRC不能同時為段寄存器
MOVDS,ES錯*DST、SRC不能同時為存儲器尋址
MOV
A,B錯注意:不能直接賦值可通過間接賦值來實現(xiàn)。例3.18:
MOV
AX,DATA
MOV
DS,AX ;實現(xiàn)將DATA段地址送DS
MOV
AX,CS
MOV
DS,AX ;實現(xiàn)將CS送DS
MOV
AL,A
MOV
B,AL;A、B為字節(jié)變量,實現(xiàn)將A的值送給BN→UR(注意數(shù)據(jù)表示范圍)例3.9:MOV
AL,80 ;AL=80=50HMOV
AX,80 ;AX=80=0050HMOV
BX,1200;BX=04B0HMOV
CX,N ;N為常量MOV
AX,DATA ;DATA為段名,段名代表段的段地址錯:MOV
CL,300 ;數(shù)據(jù)300超出字節(jié)表示范圍N→M
(注意類型明確)例3.10:MOV
A,8
;A為變量名,8的類型由A的變量類型決定MOV
BYTEPTR[BX],8;字節(jié)傳送MOVWORDPTR[BX],8;字傳送錯:MOV
[SI],8;類型不明確注:BYTEPTR和WORDPTR用來定義地址對應單元的數(shù)據(jù)類型UR→UR(注意類型匹配)例3.11:MOV
AL,AHMOV
BH,DLMOV
SP,AXMOV
CX,CX錯:MOV
CX,BL;類型不匹配UR→SR
(注意CS不能為目的操作數(shù)及類型匹配)例3.12:MOV
DS,AXMOV
ES,DX錯:MOV
CS,AX
;CS不能作為目的操作數(shù)錯:MOV
SS,CL
;CL為字節(jié)類型,類型不匹配UR→M
(類型由UR決定,若變量與UR類型不一致,則需類型轉(zhuǎn)換)例3.13:MOV
[20H],ALMOV
[BX],BXMOV
ES:[BP],CXMOV
A,DX ;假設A為字變量錯:MOV
A,DL
;或改為MOVBYTE
PTRA,DLSR→UR(注意類型匹配)例3.14:MOV
AX,CSMOV
BX,SS錯:MOV
CL,DS;類型不匹配SR→M
(M的類型必須為字)例3.15:MOV
CS:[BX],DSMOV
[BP],SS錯:MOV
B,CS
;若B為字節(jié)變量,則類型不匹配M→UR(類似于UR→M,只是方向相反)例3.16:MOV
AL,[20H]MOVBX,[BX]M→SR(類似于SR→M,只是方向相反,而且SR不能是CS)例3.17:MOV
DS,SS:[20H]MOV
SS,[BP]3.3.1.2交換傳送交換傳送有二條指令:XCHG(互換)和XLAT(換碼)1、XCHG指令:助記符:XCHG基本格式:XCHG
OD1,OD2數(shù)據(jù)類型:B/W功能:將第二操作數(shù)與第一操作數(shù)的值互換,即OD1
OD2對F影響 無尋址方式:注意:*SR不能參加互換XCHGBX,ES錯
*立即數(shù)不能參加互換XCHGAX,1234H錯*
M與M不能互換XCHG
A,B錯例3.20:
XCHG
AX,BX
XCHG
AL,AH
XCHG
CL,[BX][DI]
XCHG
A[DI],DX例3.21:A
B(A、B為字節(jié)變量)
MOV
AL,A
XCHG
AL,B
MOV
A,AL2、XLAT換碼指令(查表指令):助記符XLAT基本格式 XLAT[代碼表的起始地址]數(shù)據(jù)類型隱含尋址方式隱含功能(BX+AL)→AL對F影響 無XLAT常用于將序號碼轉(zhuǎn)換成ASCII碼、鍵盤按鍵代碼、顯示代碼等其它碼元。實際使用時的基本格式:
MOVBX,OFFSET代碼表;將代碼表的首地址送BX MOVAL,序號 ;將需轉(zhuǎn)換的第幾個送AL XLAT ;將DS:(BX+AL)對應存儲單元內(nèi)容送AL獲取操作對象的段內(nèi)偏移地址建立代碼轉(zhuǎn)換表:最大容量256字節(jié),將該表定位到內(nèi)存中某個邏輯段的一片連續(xù)地址中,并將表首地址的偏移量置入BX。
MOVBX,0030H例如:十進制數(shù)0~9的七段顯示碼表,被定位在當前數(shù)據(jù)段中,其起始地址的偏移地址值為0030H,將AL中待轉(zhuǎn)換的十進制數(shù)5轉(zhuǎn)換成對應的七段碼。CS=2000H,IP=007AH,DS=4000H。將待轉(zhuǎn)換的一個十進制數(shù)在表中的序號送入AL中。
MOVAL,5
執(zhí)行XLAT命令。
XLAT操作步驟:…D7……4079243019120278001020000HCS首地址2007AH40000HDS首地址40030H40031H40032H40033H40034H40035H40036H40037H40038H40039HBX+0BX+1BX+2BX+3BX+4BX+5BX+6BX+7BX+8BX+9+BX=0030HAL=5H查表指令例3.3.1.3堆棧傳送堆棧傳送有二條指令:PUSH(進棧)和POP(出棧)在程序調(diào)用、中斷調(diào)用的子程序中一般使用PUSH和POP指令實現(xiàn)現(xiàn)場信息的保護及恢復。堆棧是以后進先出(LIFO)的原則存取信息的一種存儲區(qū)域。堆棧的段地址存放在SS中,SP在任何時候都指向棧頂,進出棧后自動修改SP。在信息的存與取的過程中,棧頂是堆棧區(qū)的動端,而堆棧區(qū)的另一端則是固定不變的,這端稱為棧底。堆棧以字為單位進行壓入彈出操作。
8088/8086系統(tǒng)中,初始化后SP指向堆棧底+1單元的偏移地址。
堆棧:例如:若堆棧段定義空間大小為256字節(jié),則初始化后,(SP)=0100H(SP)=0100H……SS:0000HSS:00FFH256B的堆棧區(qū)棧底1、PUSH指令:助記符PUSH基本格式PUSH
SRC數(shù)據(jù)類型W,只能為字操作尋址方式SRC可以為SR、UR16、M16功能將SRC的內(nèi)容壓入棧頂,即①SP=SP-2②SRC→(SP)
對于8088分四步:①SP=SP-1②SRC高8位→(SP)③SP=SP-1④SRC低8位→(SP)對F影響無例:假設(AX)=2107H,執(zhí)行
PUSHAX********(SP)PUSHAX執(zhí)行前(SP)********07H21H低地址
高地址PUSHAX執(zhí)行后進棧方向例3.22:合法的例子如下:PUSH
CSPUSH
BXPUSH
A ;A為字變量PUSH
WORD
PTR
[BX]PUSH
[BX] ;一定為字操作,所以類型說明可省略非法的例子如下:PUSH
AL ;字節(jié)不能進棧PUSH
B ;若B為字節(jié)變量,則不對PUSH1000H ;立即數(shù)不能進棧*
PUSH指令只能對字操作,不能用立即尋址方式將常數(shù)壓入堆棧:MOVAX,OFFFFHPUSHAX2、POP指令:助記符POP基本格式POP
DST數(shù)據(jù)類型W,只能為字操作尋址方式DST可以為SR(除CS外)、UR16、M16功能將棧頂元素出棧給DST,即①(SP)→DST②SP=SP+2
對于8088分四步:①(SP)→DST低8位②SP=SP+1③(SP)→DST高8位④SP=SP+1對F影響無(SP)********07H21HPOPBX執(zhí)行前(SP)********07H21H低地址
高地址POPBX執(zhí)行后
(BX)=2107H例:POPBX出棧方向例3.23:合法的例子如下:POP
DSPOP
BXPOP
A ;A為字變量POP
WORD
PTR
[BX]POP
[BX];一定為字操作,所以類型說明可省略非法的例子如下:POP
AL ;字節(jié)不能出棧POP
B ;若B為字節(jié)變量,則不對POP
CS ;CS不能作為出棧對象*
POP指令只能是字操作,立即數(shù)、CS不能作為目的操作數(shù)例1:若(SS)=2000H,(SP)=0100H(AX)=1122H,(BX)=3344H,(CX)=5566H則CPU執(zhí)行以下指令:
PUSHAXPUSHBX
PUSH
CX;此時,棧頂單元的PA=
例1:若(SS)=2000H,(SP)=0100H(AX)=1122H,(BX)=3344H,(CX)=5566H則CPU執(zhí)行以下指令后,
POPAX;(AX)=
POPCX;(CX)=
POP
BX;(BX)=
;此時,(SP)=
例2:若CPU執(zhí)行
PUSHAXPUSHBX
PUSH
CX
指令組后,試將壓入堆棧的(AX)DX(用MOV指令實現(xiàn))。SS:SPMOVBP,SPMOVDX,[BP]+04HCLCHBLBHALAH+1+2+3+4BP例:PUSHDSSUBAX,AXPUSHAX…………RET例:PUSHAXPUSHBXPUSHCX……;其間用到AX、BX、CXPOPCX;后進先出
POPBXPOPAX常見應用:用PUSH和POP的組合也可實現(xiàn)兩數(shù)的互換例3.24(實現(xiàn)AX與BX的互換):PUSH
AX;①PUSH
BX;②POP
AX;③POP
BX;④圖3.6堆棧操作示意圖AXBX②①③SPSP④3.3.1.4地址傳送地址傳送有三條指令:LEA(送有效地址)LDS(置有效地址及DS段地址)LES(置有效地址及ES段地址)1、LEA指令:助記符LEA基本格式LEA
UR16,[EA]數(shù)據(jù)類型隱含功能將第二操作數(shù)存儲器操作數(shù)的偏移 地址送給第一操作數(shù)指定的16位通用寄存器,即EA→UR16。尋址方式包含在基本格式中對F影響無它傳送的不是操作數(shù)本身,而是操作數(shù)的有效地址。*源操作數(shù)必須是一個存儲器操作數(shù),目標操作數(shù)通常是間址寄存器(一般用BX、BP、SI、DI)。例3.25:LEA
SI,[2000H]
;SI=2000H,等價于:MOV
SI,2000HLEA
BX,TABLE圖例;TABLE的偏移地址送BX,即BX指向TABLE
等價于:MOVBX,OFFSETTABLELEA
DI,[BP]
;DI=BP,等價于:與MOV
DI,BP等價LEABX,[BX+SI+0F62H]77H88HDS:0010H99H66HDAT1TABLE
那么,CPU執(zhí)行LEABX,TABLE指令完成的功能是:
BX
將TABLE變量所具有的EA
∴(BX)=0012H
◆上述指令完成的功能等效于:
MOVBX,OFFSETTABLE
而CPU執(zhí)行MOVBX,TABLE指令完成的功能是:
BX(TABLE)
∴(BX)=9988H
LEA指令在程序中的應用例:將數(shù)據(jù)段中首地址為MEM1
的50個字節(jié)的數(shù)據(jù)傳送到同一邏輯段首地址為MEM2的區(qū)域存放。編寫相應的程序段。LEA指令在程序中的應用
開始取源地址取目標地址送數(shù)據(jù)塊長度到CL傳送一個字節(jié)修改地址指針修改計數(shù)值計數(shù)值=0?結(jié)束NYLEA指令在程序中的應用LEASI,MEM1LEADI,MEM2
MOVCL,50NEXT:MOVAL,[SI]MOV[DI],ALINCSIINCDIDECCLJNZNEXTHLT2、LDS與LES助記符LDS/LES基本格式 LDS/LES
UR16,[EA]數(shù)據(jù)類型隱含功能將存儲器操作數(shù)的第一字送給第一操作數(shù)指定的16位通用寄存器,并將存儲器操作數(shù)的第二字送給操作碼部分指明的段寄存器DS/ES。即(EA)→UR16
(EA+2)→DS/ES尋址方式包含在基本格式中對F影響無LDS/LES不但使指定的通用寄存器值發(fā)生變化,而且DS/ES也會發(fā)生變化。例如:LDS
BX,[SI]
;BX=(SI),DS=(SI+2)BXDSSIDS圖3.7
LDS
BX,[SI]的功能40H00H00H30HTABLE(DS):1000HMOVBX,TABLE;(BX)=0040HMOVBX,OFFSETTABLE;(BX)=1000HLEABX,TABLE;(BX)=1000HLDSBX,TABLE;(BX)=0040H;(DS)=3000HLESBX,TABLE;(BX)=0040H;(ES)=3000H注意:*SRC必須為存儲器尋址方式*DST是UR16間址寄存器例如:例:數(shù)M所在單元的地址指針在POINT雙字單元存放著,試將數(shù)MAL中。LDSBX,POINTMOVAL,[BX]20H01HPOINT15H1500H:0120H00H≈≈BXDSDS:BXM3.3.1.5標志傳送
標志傳送有四條指令:LAHF(PSW低8位送AH)SAHF(AH送PSW低8位)PUSHF(PSW進棧)POPF(出棧給PSW)1、LAHF/SAHF指令:助記符LAHF/SAHF基本格式LAHF/SAHF功能
PSW低8位→AH/AH→PSW低8位對F影響無/影響除OF外的其余5個狀態(tài)標志SF、ZF、
AF、PF和CF,AH的對應位去填充各標志位。SFZF
AFPFCF01234567AH圖3.8
LAHF的功能SFZF
AFPFCF01234567AH圖3.9
SAHF的功能注:這一對指令主要用于除OF外5個狀態(tài)標志位的保護和恢復。2、PUSHF/POPF指令:助記符PUSHF/POPF基本格式PUSHF/POPF功能
SP=SP-2,PSW→(SP)/(SP)→PSW,SP=SP+2對F影響無
/影響所有狀態(tài)標志(SF、ZF、AF、
PF、OF和CF)及所有控制標志(IF、
TF和DF),彈出的棧頂元素對應位去填充各標志位。注:PUSHF/POPF指令主要用于標志位的保存和恢復,PUSHF用于保存所有標志位到棧中,POPF用于從棧中恢復所有標志位。
標志傳送舉例例3.26設置SF=1,ZF=0,AF=0,PF=1,CF=0。
分析:要置5個狀態(tài)標志位可用SAHF指令,先按對應位填充一個立即數(shù)送AH,再用SAHF實現(xiàn)將AH
送PSW的低8位。;無關(guān)位一般填0,即84H解:MOVAH,10000100B
SAHF例3.27設置OF=1,DF=0,IF=1,TF=0,SF=1,ZF=0,AF=0,PF=1,CF=0。分析:要置9個狀態(tài)標志位可用POPF指令,先按對應位填充一個立即數(shù)送AX,再將AX進棧,而后再用POPF實現(xiàn)將棧頂元素出棧送PSW,即N→AX→?!鶳SW。解:MOVAX,0000101010000100B;即0A84HPUSHAX
POPF3.3.5I/O類指令(2條指令)
I/O指令只有兩條指令:輸入IN指令,輸出OUT指令。IN AL/AX,PORT/DX ;“/”代表或的關(guān)系,所以可一分為四
OUT
PORT/DX,AL/AX ;“/”代表或的關(guān)系,所以可一分為四
累加器專用傳送指令(只限使用AX或AL)
輸入指令I(lǐng)N(I/OCPU)
長格式:INAL,PORT(字節(jié))
INAX,PORT(字)執(zhí)行操作:(AL)(PORT)(字節(jié))
(AX)(PORT+1,PORT)(字)短格式:INAL,DX(字節(jié))
INAX,DX(字)執(zhí)行操作:(AL)((DX))(字節(jié))
(AX)((DX)+1,(DX))(字)
端口直接尋址:其取值范圍為0-255即00H-FFH端口間接尋址:其取值范圍為0-65535即0000H-FFFFH輸出指令OUT(CPUI/O)長格式:OUTPORT,AL(字節(jié))
OUTPORT,AX(字)執(zhí)行操作:(PORT)(AL)(字節(jié))
(PORT+1,PORT)(AX)(字)短格式:OUTDX,AL(字節(jié))
OUTDX,AX(字)執(zhí)行操作:((DX))(AL)(字節(jié))
((DX)+1,(DX))(AX)(字)注意:*不影響標志位*前256個端口號00H~FFH可直接在指令中指定(長格式)*如果端口號256,端口號
DX(短格式)例:INAX,28H MOVDATA_WORD,AX例:MOVDX,3FCHINAX,DX例:OUT5,AL
3.3.2算術(shù)運算類指令(20條)算術(shù)運算類指令可分為三小類:加減運算乘除運算BCD修正3.3.2.1加減運算(8條)1、單目運算指令三條:
INC(加1)、DEC(減1)、NEG(求補):助記符INC/DEC/NEG基本格式INC/DEC/NEGOD數(shù)據(jù)類型B/W尋址方式OD可以為UR及M功能OD=OD+1/OD=OD-1/OD=0-OD對F影響INC、DEC對CF標志位無影響,對其余
5個狀態(tài)標志位均有影響;NEG對6個狀態(tài)標志位均有影響。不能是段寄存器或立即數(shù)例3.26:INC
BX;BX=BX+1DEC
AL
;AL=AL-1INCBYTEPTR[BX]
;DS:BX對應的內(nèi)存字節(jié)單元加1DEC
WORDPTR[BP]
;SS:BP對應的內(nèi)存字單元減1例3.29理解下面的程序段,并填充結(jié)果。
;設CF=0
MOV AL,0
MOV AH,1
DEC AL
;AX=
H,CF=
。解:AL=00H-1=FFH,AH=01H,CF不變,所以AX=01FFH,CF=0。(其他5個標志位為:OF=0,SF=1,ZF=0,AF=1,PF=1)注:INC或DEC常用于循環(huán)程序中修改地址指針或循環(huán)計數(shù)等場合(如前例)。例:NEG
DL分析: NEG(求補)功能為:0-DL=-DL設:DL原始值為5,則執(zhí)行后DL為-5,即FBH(-5的補碼);6個標志位:
SF=1,PF=0,ZF=0,OF=0,CF=1,AF=1。注意:NEG實質(zhì)在對操作數(shù)按位取反后加1
(即求補操作)對標志位影響的規(guī)律總結(jié):INC加1指令只是當對7FH或7FFFH加1時OF=1。DEC減1指令只是當對80H或8000H減1時OF=1。NEG求補指令只有當對80H(8位,即-128)或8000H(16位,即-32768)求補時OF=1,其它情況下OF=0;只有當對0求補時CF=0,其它情況下CF=1。2、雙目運算指令5條:
ADD(加)、ADC(帶CF加)、SUB(減)、
SBB(帶CF減)、CMP(比較)基本格式
ADD/ADC/SUB/SBB/CMPDST,SRC功能
DST=DST+SRC/
DST=DST+SRC+CF/
DST=DST-SRC/DST=DST-SRC-CF/DST-SRC數(shù)據(jù)類型B/W尋址方式:源操作數(shù):8/16位通用寄存器,存儲器,立即數(shù)目的操作數(shù):8/16位通用寄存器,存儲器對F影響這5條指令對6個狀態(tài)標志位均有影響。影響的填充方法按通用填充方法填充。
提示:
目的操作數(shù)不能為立即數(shù);源操作數(shù)和目的操作數(shù)不能同時為存儲器;段寄存器不能作操作數(shù)。例3.30:ADD
AX,BX
;AX=AX+BX設指令執(zhí)行前AX=35C9H,BX=726DH,則執(zhí)行后AX=A836H,BX不變,SF=1,PF=1,ZF=0,OF=1,CF=0,AF=1例3.31:ADC
BH,DL
;BH=BH+DL+CF設指令執(zhí)行前BH=96H,DL=6DH,CF=1,則執(zhí)行后BH=04H,DL不變,SF=0,PF=0,ZF=0,OF=0,CF=1,AF=1注:
ADC指令多用于多字節(jié)數(shù)相加,使用前要先將CF清零。例:完成雙字相加,被加數(shù)存放在DX(高)與AX(低)中,加數(shù)放在BX(高)和CX(低)中,和放在DX與AX中。程序段如下:
ADDAX,CXADCDX,BX
;高位運算時要考慮低位的進位例3.32:SUB
CX,[BX]
;CX=CX-(BX),字操作設指令執(zhí)行前CX=1296H,DS=2000H,BX=100H,(20100H)=3DH,(20101H)=28H,則(BX)=283DH,執(zhí)行后CX=EA59H,BX、(BX)不變,SF=1,PF=1,ZF=0,OF=0,CF=1,AF=1例3.33:SBB
[DI],BL
;(DI)=(DI)-BL-CF,字節(jié)操作設指令執(zhí)行前DS=2000H,BL=76H,DI=6DH,(2006DH)=B2H,CF=1,則(DI)=B2H,執(zhí)行后(2006DH)=3BH,DI、BL不變,SF=0,PF=0,ZF=0,OF=1,CF=0,AF=1例3.34:CMP
AL,10H
;AL-10H,不保存結(jié)果,但影響標志,可用于數(shù)據(jù)大小比較。設指令執(zhí)行前AL=96H,則執(zhí)行后AL不變,AL-10=86H。SF=1,PF=0,ZF=0,OF=0,CF=0,AF=0注:用于比較兩個數(shù)的大小,可作為條件轉(zhuǎn)移指令轉(zhuǎn)移的條件判斷兩個數(shù)大?。簾o符號數(shù):根據(jù)借位標志CF判斷。
ZF=1,AX=BX;ZF=0,AXBXCF=0,表示無借位,即AX
BX;
CF=1,表示有借位,即AX<BX;
有符號數(shù):根據(jù)溢出標志OF和符號標志SF兩者的異或運算結(jié)果來判斷。
OFSF=0
(OF和SF狀態(tài)相同)時,則AXBX;
OFSF=1(OF和SF狀態(tài)相異)時,則AX<BX;通常,比較指令后面跟一條條件轉(zhuǎn)移指令,檢查標志位的狀態(tài)決定程序的轉(zhuǎn)向。
假設執(zhí)行比較指令:CMPAX,BX比較指令例例3.35理解下面的程序段,并填充結(jié)果。
MOV AX,’愛’
MOV BX,’AI’
CMP AX,BX;SF⊕OF=
,CF=
。分析:主要要理解ASCII碼、漢字內(nèi)碼,以及無符號數(shù)、有符號數(shù)的大小比較。ASCII碼最高位為0,漢字內(nèi)碼最高位為1,所以作為無符號數(shù)漢字比英文字符大,作為有符號數(shù)漢字比英文字符要小。解:SF⊕OF=1,CF=0。3.3.2.2乘除運算乘除運算共有六條指令:
MUL(無符號數(shù)乘)、IMUL(有符號數(shù)乘)、DIV(無符號數(shù)除)、IDIV(有符號數(shù)除)、CBW(字節(jié)擴展成字)、CWD(字擴展成雙字)。1、MUL、IMUL指令:助記符MUL/IMUL基本格式MUL/IMUL
SRC數(shù)據(jù)類型B/W功能與SRC的數(shù)據(jù)類型有關(guān),SRC若為字節(jié)則為 AL*SRC送AX;SRC若為字則為AX*SRC送 DX、AX,DX保存高16位,AX保存低16位。尋址方式SRC只能是UR或M,不能為N或SR。對F影響對6個狀態(tài)標志均有影響,但只有CF、OF有定義,其填充方法為若字節(jié)乘字節(jié)未超過字節(jié)表示范圍或字乘字未超過字范圍則CF=0、OF=
0,否則CF=1、OF=1。乘數(shù)對乘法指令主要注意:一是隱含操作數(shù):被乘數(shù)一定為AL或AX,積為AX或DX、AX,不需在指令中另行指明;二是對CF、OF的填充:無符號數(shù)只要判斷高位段是否為全0,若是則未超出范圍,有符號數(shù)只要判斷高位段是否為低位的符號位擴展,若是則未超出范圍。三是模擬計算:無符號數(shù)直接相乘即可,有符號數(shù)則需先用絕對值相乘,而后再加符號位(同號得正、異號得負)。例3.36:若AL為05H、BL為F7H則MUL
BL指令執(zhí)行后AX=?CF、OF=?無符號數(shù)乘法直接相乘,所以AX= 05*F7H=04D3H、CF=1、OF=1。例3.37:若AL為05H、BL為F7H則IMUL
BL指令執(zhí)行后AX、CF、OF=?有符號數(shù)乘法先用絕對值相乘、再加符號位,所以AX=-(05*09H)=-2DH
=FFD3H、CF=0、OF=0。例:(AX)=16A5H,(BX)=0611H
(1)IMULBL
;(AX)(AL)*(BL);A5*11-(5B*11)=-060BHF9F5H;(AX)=F9F5HCF=OF=1(2)MULBX;(DX,AX)(AX)*(BX);16A5*0611=00895EF5;(DX)=0089H(AX)=5EF5HCF=OF=12、DIV、IDIV指令:助記符DIV/IDIV基本格式DIV/IDIV
SRC數(shù)據(jù)類型B/W功能與SRC的數(shù)據(jù)類型有關(guān),SRC若為字節(jié)則為AX/SRC的商送AL、余數(shù)送AH;SRC若為字則為DX、AX/SRC的商送AX、
余數(shù)送DX。尋址方式SRC只能是UR或M,不能為N或SR。對F影響對6個狀態(tài)標志均有影響,但均無定義。指令要求被除數(shù)是除數(shù)的雙倍字長對除法指令主要注意:一是隱含操作數(shù),被除數(shù)一定為AX或DX、AX,商為AL或AX,余數(shù)為AH或DX,不需在指令中另行指明;二除法不允許出現(xiàn)除數(shù)為0或商溢出(除字節(jié)時,商超出AL或除字時,商超出AX范圍),若發(fā)生除數(shù)為0或商溢出則其結(jié)果沒有意義,并引起中斷。三是模擬計算,無符號數(shù)直接相除即可,有符號數(shù)則需先用絕對值相除,而后再加符號位商的符號為同號得正、異號得負,余數(shù)的符號則與被除數(shù)相同。例3.38:若AX為1005H、BL為17H則DIV
BL指令執(zhí)行后AX=?無符號數(shù)除法直接相除,所以1005H/17H=4101/23,商為178(176+2),余數(shù)為7,即AL=B2H、AH=07H,因此AX=07B2H。例3.39:若AX為FF05H、BL為17H則IDIV
BL指令執(zhí)行后AX=?有符號數(shù)除法先用絕對值相除、再加符號位,F(xiàn)F05H的絕對值為0-FF05H=FBH=251,251/23的商為10,余數(shù)為21,商的符號為負,余數(shù)的符號也為負,所以AL=-10=F6H,AH=-21=EBH,因此AX=EBF6H。例3.41理解下面的程序段,并填充結(jié)果。
MOV AL,200
MOV AH,-1
MOV BL,10
IDIV BL;AX=
H,商十進制為
。AX=FFC8H=-56,BL=10,商為-5即FBH,余數(shù)為-6即FAH解:AX=FAFBH,商十進制為-5。3、CBW和CWD指令:助記符CBW/CWD基本格式CBW/CWD數(shù)據(jù)類型隱含功能CBW為將AL有符號擴展成AX/CWD為將AX有符號擴展成DXAX尋址方式隱含對F影響對標志位無影響MOVAL,64H
;AL=64H(機器數(shù)),表示10進制數(shù)100(真值)CBW
;將符號0擴展,AX=0064H,仍然表示100MOVAX,0FF00H
;AX=FF00H,表示有符號10進制數(shù)-256CWD
;將符號位“1”擴展,DX.AX=FFFFFF00H
;仍然表示-256例:例3.40:設A,B,C,D為字節(jié)變量,且A除B不會溢出,試編寫無符號數(shù)或有符號數(shù)A/B商送C,余數(shù)送D。
;無符號數(shù)除;有符號數(shù)除MOV
AL,A
MOV
AL,AMOV
AH,0
CBWDIV
B
IDIV
BMOV
C,AL
MOV
C,ALMOV
D,AH
MOV
D,AH例:x,y,z,v均為16位帶符號數(shù),計算
(v-(x*y+z–540))/xMOVAX,XIMULY;x*y→(DX,AX)MOVCX,AXMOVBX,DXMOVAX,ZCWD;Z→(DX,AX)ADDCX,AXADCBX,DX;x*y+z→(BX,CX)SUBCX,540SBBBX,0;x*y+z-540MOVAX,VCWD;V→(DX,AX)SUBAX,CXSBBDX,BX;v-(x*y+z-540)IDIVX;(v-(x*y+z-540))/x→(AX) 余數(shù)→(DX)3.3.2.3
BCD修正BCD修正共有六條指令,可分為壓縮BCD碼修正指令和非壓縮BCD碼修正指令。壓縮BCD碼修正指令有:
DAA(加法修正)、DAS(減法修正)。非壓縮BCD碼修正指令有:
AAA(加法修正)、AAS(減法修正)、
AAM(乘法修正)、AAD(除法修正)。復習:BCD碼:用二進制編碼的十進制數(shù),又稱二--十進制數(shù)壓縮的BCD碼:用4位二進制數(shù)表示1位十進制數(shù)例:(59)10=(01011001)BCD非壓縮的BCD碼:用8位二進制數(shù)表示1位十進制數(shù)
例:(59)10=(0000010100001001)BCD數(shù)字的ASCII碼是一種非壓縮的BCD碼
DIGIT ASCII BCD0 30H 001100001 31H 001100012 32H 00110010…
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025房屋出租合同范本中介版
- 2025關(guān)于短期勞動合同的新政策
- 2025合作伙伴續(xù)簽合同申請書
- 離婚冷靜期離婚協(xié)議書范本
- 員工工資薪酬保密協(xié)議書范本
- 知識產(chǎn)權(quán)資源授權(quán)使用協(xié)議范本
- 二手商鋪購買合同
- 2024年份4月份跨境微小衛(wèi)星協(xié)議發(fā)射失敗賠償計算模型
- 2025人力資源資料合同續(xù)約審批簽訂制度
- 車輛入股協(xié)議書范文
- 第19課《十里長街送總理》 統(tǒng)編版語文(五四學制)六年級上冊
- 福建省廈門市湖里區(qū)2023-2024學年五年級下學期期中數(shù)學試卷
- 導游基礎(chǔ)知識基督教課件
- 肝癌TACE治療及護理
- 《唯品會網(wǎng)絡營銷策略研究(論文)10000字》
- 綜合防控兒童青少年近視PPT保護視力預防近視PPT課件(帶內(nèi)容)
- 新疆少數(shù)民族文化課件
- 作業(yè)現(xiàn)場安全監(jiān)督檢查卡(配電)
- 倉庫發(fā)貨清單
- 旅行管家實務全套ppt課件最全電子教案完整版教學教程整套全書課件ppt
- 校園車輛出入證辦理
評論
0/150
提交評論