版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
微機(jī)原理與接口技術(shù)(第3版)4尋址方式與指令系統(tǒng)指令系統(tǒng)概述8086尋址方式8086指令系統(tǒng)例題解析4.1.1指令的基本概念指令是要求計算機(jī)執(zhí)行特定操作的命令。計算機(jī)所能執(zhí)行的全部指令的集合稱為指令系統(tǒng)。指令以二進(jìn)制編碼的形式存放在存儲器中,用二進(jìn)制編碼形式表示的指令稱為機(jī)器指令。用符號表示的指令稱為符號指令,匯編語言程序中的指令就是符號指令。具有直觀、易理解和可幫助記憶的特點(diǎn)。4.1指令系統(tǒng)概述4尋址方式與指令系統(tǒng)
表4.1SUB指令機(jī)器指令(二進(jìn)制)十六進(jìn)制匯編指令功能010010114BHDECBX將寄存器BX的內(nèi)容減14.1指令系統(tǒng)概述4.1.2指令格式
匯編指令由操作碼字段和操作數(shù)字段構(gòu)成。操作碼字段操作數(shù)字段指令字長度:一個指令字中包含二進(jìn)制代碼的位數(shù)。機(jī)器字長:指計算機(jī)能直接處理的二進(jìn)制數(shù)據(jù)的位數(shù),它決定了計算機(jī)的運(yùn)算精度。單字長指令:指令字長度等于機(jī)器字長的指令。半字長指令:指令字長度等于半個機(jī)器字長度的指令。雙字長指令:指令字長度等于2個機(jī)器字長度的指令。在一個指令系統(tǒng)中,如果各種指令字長度是相等的,稱為等長指令字結(jié)構(gòu);如果各種指令字長度隨指令功能而異,比如有的指令是單字長指令,有的指令是雙字長指令,就稱為變字長指令字結(jié)構(gòu)。4.1.38086匯編語言格式8086指令的一般格式:
標(biāo)號:操作碼
操作數(shù) ;注釋其中,標(biāo)號和注釋都是可選項(xiàng)。標(biāo)號表示該指令在代碼段中的偏移地址;注釋對該指令進(jìn)行說明,不參加指令的執(zhí)行。4.1指令系統(tǒng)概述
操作碼:說明指令的性質(zhì)與功能。操作數(shù):參與運(yùn)算的操作數(shù)或存放操作數(shù)的地址。(數(shù)值、寄存器、存儲器)分固定長度和可變長度。X86系列CPU(CISC)采用可變長度,ARM(RISC)采用固定長度。
8086CPU的機(jī)器指令長度為1~6個字節(jié)。如:匯編指令MOVAX,05C7H的機(jī)器指令編碼為B8C705H,轉(zhuǎn)換成二進(jìn)制為:
10111000
1100011100000101B4.1指令系統(tǒng)概述1.雙操作數(shù)指令(兩地址指令)
MOVAX,5;傳送指令。
ADDAX,BX ;加法指令。
目的操作數(shù)源操作數(shù)2.單操作數(shù)指令(一地址指令)INCAX ;加1指令。
MUL ;乘法指令。
PUSHAX;進(jìn)棧指令。
JMPLA1;無條件轉(zhuǎn)移指令。目的操作數(shù)4.1指令系統(tǒng)概述3.無操作數(shù)指令(零地址指令)CBW ;字節(jié)轉(zhuǎn)換為字指令
CLC ;進(jìn)位標(biāo)志CF清零
NOP ;不操作指令
HLT ;停機(jī)指令4.三操作數(shù)指令(三地址指令)
IMULEBX,[ESI],7;乘法指令。(80386機(jī)器指令)操作數(shù)存在方式
?
操作數(shù)包含在指令中——即指令的操作數(shù)部分就包含著操作數(shù)本身。
MOVAX,1234ADDAL,2
?操作數(shù)包含在CPU的某一個內(nèi)部寄存器中——這時指令中的操作數(shù)是CPU內(nèi)部的某一個寄存器
MOVDS,AX
?操作數(shù)在內(nèi)存的數(shù)據(jù)區(qū)中——這時指令中的操作數(shù)包含著此操作數(shù)的地址
MOVAX,[2000]MOVbuffer[SI],AX操作數(shù)在I/O端口寄存器中?!@時指令中的操作數(shù)包含著此操作數(shù)的所在端口地址INAL,n;n是端口號4.28086尋址方式1.立即尋址(ImmediateAddressing)4.28086尋址方式
操作數(shù)直接存放在指令中,緊跟在操作碼之后,作為指令的一部分,存放在代碼段里,這種操作數(shù)稱為立即數(shù)。常用來給寄存器賦值。指令:MOV
AL,07H
MOVAL,‘A’指令:MOV
AX,1A2BH
立即數(shù)只能做源操作數(shù)。 (×)MOV
3,AL
源、目的操作數(shù)的字長必須一致。
(×)MOVAH,3064H1AH2BHB8H操作碼立即數(shù)低高4.28086尋址方式2.寄存器尋址:(RegisterAddressing)操作數(shù)存放在CPU的內(nèi)部寄存器reg中:8位寄存器R8:AH、AL、BH、BL、CH、CL、DH、DL16位寄存器R16:AX、BX、CX、DX、SI、DI、BP、SP4個段寄存器Seg:CS、DS、SS、ES寄存器名表示其內(nèi)容(操作數(shù))4.28086尋址方式▲由于操作數(shù)在寄存器中,指令執(zhí)行時,操作就在CPU
的內(nèi)部進(jìn)行,不需要訪問存儲器來取得操作數(shù),因而執(zhí)行速度快?!拇嫫鞣柋葍?nèi)存地址短,匯編后機(jī)器碼長度最短?!拇嫫鲗ぶ贩绞郊瓤捎糜贒ST,也可用于SRC,還可以兩者都用寄存器尋址。★
當(dāng)指令中的DST和SRC均為寄存器時,必須采用同樣長度的寄存器;★兩個操作數(shù)不能同時為段寄存器;★目的操作數(shù)不能是代碼段寄存器。【例】MOVCL,DL;(DL)=50HMOVAX,BX;(BX=1234H)目的、源操作數(shù)采用寄存器尋址50HDLCLAX12H34HBX說明:4.28086尋址方式3.存儲器尋址(MemoryAddressing)
操作數(shù)存放在存儲器中,CPU取出指令后,為了獲得操作數(shù)(對于源操作數(shù))或操作數(shù)的存放地址(對于目的操作數(shù))還要再次訪問存儲器。指令中以邏輯地址(有效地址EA)表示操作數(shù)存放的位置,可能存放在存儲器的任意一個邏輯段中,CPU必須計算出操作數(shù)的物理地址才能完成存儲單元的讀、寫。存儲器尋址既可用于源操作數(shù),也可用于目的操作數(shù),但兩者不能同時使用。用方括號對[]表示存儲器尋址。
邏輯地址LA:段地址:偏移地址
物理地址PA:段地址×16+偏移地址
有效地址EA:偏移地址存儲器操作數(shù)具有三個屬性:段地址:操作數(shù)所在的邏輯段的段地址。偏移地址:相對段地址的偏移量。
數(shù)據(jù)類型:操作數(shù)是一個字節(jié)/字,用BYTEPTR/WORDPTR區(qū)分。存放在基址寄存器中的內(nèi)容,常用來指向數(shù)據(jù)段中數(shù)組或字符串的首地址存放在變址寄存器中的內(nèi)容,常用來訪問數(shù)組中的某個元素或字符串中的某個字符存放在指令中的一個8位、16或32位的數(shù),但它不是立即數(shù),而是一個地址指令中,不允許使用AX、CX、DX等作偏移地址4.28086尋址方式尋址方式有效地址EA默認(rèn)的段寄存器直接尋址(③)[DISP]DS寄存器間接尋址(①/②)[BX]DS[BP]SS[SI]DS[DI]DS基址尋址(①+③)[BX+DISP]DS[BP+DISP]SS變址尋址(②+③)[SI+DISP]DS[DI+DISP]DS基址加變址尋址(①+②+③)[BX+SI+DISP(或無DISP)]DS[BX+DI+DISP(或無DISP)]DS[BP+SI+DISP(或無DISP)]SS[BP+DI+DISP(或無DISP)]SS①直接尋址有效地址EA在指令中直接給出,默認(rèn)段是DS。EA:操作數(shù)的偏移地址PA:(DS)×16+EA4.28086尋址方式段地址偏移地址操作數(shù)存儲器指令DS寄存器4.28086尋址方式153000HDS:30000H+1000H────31000H×16執(zhí)行結(jié)果(AX)=3412H10H00HA1H...12H34H代碼段數(shù)據(jù)段操作碼偏移地址31000H指令MOVAX,[1000H]的示意圖ALAH根據(jù)指令中給出的有效地址,得到存儲單元的物理地址:PA=DS×16+1000H=31000H把該內(nèi)存單元中的內(nèi)容送到AX中;字在內(nèi)存中占兩個內(nèi)存單元,低字節(jié)在前(低地址),高字節(jié)在后(高地址);并以低字節(jié)的地址作為字的地址。4.28086尋址方式★在匯編語言指令中,可以用符號地址代替數(shù)值地址
【例】VALUE
DB
12H,34H,56H;數(shù)據(jù)定義
MOVAL,VALUEMOVAL,[VALUE]
但要注意變量的屬性MOVAH,VALUE;與MOVAH,[VALUE]等效
MOVAX,VALUE×MOVAX,WORDPTRVALUE√★直接尋址允許數(shù)據(jù)存于附加段、堆棧段、代碼段,這稱為“段跨越”。
但需要使用段跨越前綴,例如MOVAX,ES:[2000H]中,數(shù)據(jù)存于附加段中,
操作數(shù)物理地址PA為:ESx16+0100H②寄存器間接尋址4.28086尋址方式▲把內(nèi)存操作數(shù)的有效地址存儲于寄存器中,指令中給出存放地址的寄存器名;▲因?yàn)橛行У刂肥?6位,存放地址所使用的寄存器必須是16位的:▲可以用于間接尋址的寄存器有基址寄存器BX、BP
和變址寄存器
SI、DI?!鵀榱藚^(qū)別于寄存器尋址,寄存器名用“[]”括起?!畈煌募拇嫫魉[含對應(yīng)的段不同。
采用SI、DI、BX寄存器,數(shù)據(jù)存于數(shù)據(jù)段中;
采用BP寄存器,數(shù)據(jù)存于堆棧段中;操作數(shù)的物理地址計算式為:
PA=DSX16+SI/DI/BXPA=SSx10H+BP4.28086尋址方式MOVAX,[BX] ;源操作數(shù)在數(shù)據(jù)段,EA=BX,PA=DS×16+EAMOVAX,[DI] ;源操作數(shù)在數(shù)據(jù)段,EA=DI,PA=DS×16+EAMOV[SI],AL ;目的操作數(shù)在數(shù)據(jù)段,EA=SI,PA=DS×16+EAMOV[BP],DI ;目的操作數(shù)在堆棧段,EA=BP,PA=SS×16+EA有效地址EA由寄存器(BX,BP,SI,DI)間接給出。當(dāng)EA=(BX)/(SI)/(DI)時:PA=(DS)×16+EA
當(dāng)EA=(BP)時:PA=(SS)×16+EA不允許使用AX、CX、DX、SP存放EA:(×)MOVAX,[CX]源、目的操作數(shù)不能同時帶方括號:(×)MOV[BX],[SI]立即數(shù)和存儲器尋址方式同時使用時應(yīng)明示數(shù)據(jù)類型:
(×)MOV[BX],20H③寄存器相對尋址4.28086尋址方式☆寄存器相對尋址時,操作數(shù)的有效地址分為兩部分:
▲一部分存于寄存器中,指令中給出該寄存器名;▲另一部分以偏移量的方式直接在指令中給出。有效地址EA為基址寄存器(BX,BP)的內(nèi)容加偏移量。當(dāng)EA=(BX)+DISP時:PA=(DS)×16+EA
當(dāng)EA=(BP)+DISP時:PA=(SS)×16+EADS×10HAXBX+DISPSS×10HBP+DISP4.28086尋址方式偏移量是符號數(shù),8位偏移量的取值范圍為:0-0FFH(即+127~-128)
16位偏移量的范圍:0~0FFFFH(即+32767~-32768)IBM匯編允許用三種形式表示相對尋址,
它們的效果是一樣的,如:
MOVAX,[BX]+6;標(biāo)準(zhǔn)格式
MOVAX,6[BX];先寫偏移值
MOVAX,[BX+6];偏移值寫在括號內(nèi)④基址加變址尋址4.28086尋址方式☆基址變址尋址時操作數(shù)的EA分為兩部分,分別存于兩個寄存器中:▲一部分存于基址寄存器(BX或BP)中;▲另一部分存于變址寄存器(SI或DI)中;▲指令中分別給出兩個寄存器名。操作數(shù)的有效地址為:
EA1=BX+SI/DI
或
EA2=BP+SI/DI基址寄存器變址寄存器基地址段地址操作數(shù)存儲器段寄存器偏移地址基址寄存器指令中變地址變址寄存器4.28086尋址方式①
根據(jù)指令中給出的寄存器名及寄存器內(nèi)容,得到存儲單元的PA為:
SS×16+BP+SI=43200H【例】MOVAL,[BP][SI]設(shè):SS=4000H,BP=2000H,SI=1200H,源操作數(shù)的尋址過程如圖所示
②
把該內(nèi)存單元中的內(nèi)容送到AL中
存儲器…30000H32100HAX00H50H(ES)×10H=30000H(BX)=1000H(DI)=1100H32100H+存儲器…56H40000H43200HAL(SS)×10H=40000H(BP)=2000H(SI)=1200H43200H+MOVES:[BX][DI],AX4.28086尋址方式總結(jié):有效地址EA為基址寄存器(BX,BP)加變址寄存器(SI,DI)的內(nèi)容。
PA=(DS)×16+EA,當(dāng)基址寄存器為BX時PA=(SS)×16+EA,當(dāng)基址寄存器為BP時MOV[BX+DI],AX ;目的操作數(shù)在數(shù)據(jù)段EA=(BX)+(DI),PA=(DS)×16+EAMOVDX,[BX][SI]
;源操作數(shù)在數(shù)據(jù)段
EA=(BX)+(SI),PA=(DS)×16+EAMOV
[BP][DI],BX ;目的操作數(shù)在堆棧段
EA=(BP)+(DI),PA=(SS)×16+EAMOVCX,[BP+SI] ;源操作數(shù)在堆棧段EA=(BP)+(SI),PA=(SS)×16+EA⑤相對基址加變址尋址4.28086尋址方式☆采用相對基址變址尋址時,操作數(shù)的有效地址分為三部分:▲一部分存于變址寄存器SI或DI
中;▲一部分存于基址寄存器BX
或BP中;▲一部分為偏移量?!噶钪蟹謩e給出兩個寄存器名及8位或16位的偏移量。操作數(shù)的有效地址EA為:☆當(dāng)基址寄存器選用BP時,數(shù)據(jù)隱含存于堆棧段中,
操作數(shù)的物理地址PA為:
PA1=DS×10H+EA1
PA2=SS×10H+EA1☆當(dāng)基址寄存器選用BX時,數(shù)據(jù)隱含存于數(shù)據(jù)段中;
4.28086尋址方式①由指令中給出寄存器名、寄存器內(nèi)容及偏移量,得到存儲單元的物理地址:
SS×10H+BP+SI+10H=53060H②把寄存器CX中的內(nèi)容送到該地址內(nèi)存單元中。
【例】MOVDATA[BP][SI],CX等同于MOV10H[BP][SI],CX
★
相對基址變址尋址的尋址過程:設(shè):SS=5000H;
BP=2000H;SI=1050H
源操作數(shù)的尋址過程如圖所示。存儲器…50000H53060H20HCX50H(SS)×10H=50000H(BP)=2000H(SI)=1050HDATA=10H53060H+4.I/O端口尋址(I/OPortAddressing)4.28086尋址方式I/O接口電路由接口寄存器組成,需要用編號區(qū)別各個寄存器:
編號=地址I/O地址是接口電路中寄存器的編號端口是I/O地址的通俗說法系統(tǒng)通過這些端口與外設(shè)進(jìn)行通信采用十六進(jìn)制數(shù)來表達(dá)端口Intel8086支持64K個8位端口I/O地址可以表示為:0000H~FFFFHPC機(jī)支持1K個8位端口I/O地址可以表示為:000H~3FFH4.28086尋址方式(1)端口直接尋址方式端口地址用8位立即數(shù)(0~255)表示。例如:INAL,21H
…7FH…接口端口0端口1端口33端口25500H01H21HFFHAL(2)端口間接尋址方式當(dāng)I/O端口地址大于FFH時,必須事先將端口地址存放在DX寄存器中。例如:MOVDX,120HOUTDX,AX……接口端口0端口1端口288端口655350000H0001H0120HFFFFHAX10F0H0120HDX4.2.2指令尋址方式4.28086尋址方式28/95●
程序的執(zhí)行,一般是從存儲器MEM中代碼段順序取指令執(zhí)行;指令地址是由指令指針寄存器IP自動增量形成?!裨谀承l件下,程序的執(zhí)行要跳轉(zhuǎn)到另外一段程序開始順序執(zhí)行。
這種運(yùn)行方式稱為:轉(zhuǎn)移。轉(zhuǎn)移指令中應(yīng)給出轉(zhuǎn)移地址操作數(shù)。●它也可以分為:立即數(shù)、寄存器操作數(shù)、存儲器操作數(shù);即要轉(zhuǎn)移的目標(biāo)地址包含在指令中或存放在寄存器、內(nèi)存儲器中。●根據(jù)跳轉(zhuǎn)的距離遠(yuǎn)近,轉(zhuǎn)移又分為:段內(nèi)轉(zhuǎn)移和段間轉(zhuǎn)移?!穸蝺?nèi)轉(zhuǎn)移:轉(zhuǎn)移的目標(biāo)地址在當(dāng)前的代碼段內(nèi)。轉(zhuǎn)移指令中要指出轉(zhuǎn)到的目標(biāo)地址,CPU根據(jù)轉(zhuǎn)移指令中指明的目標(biāo)地址,修改IP的值,即修改指令指針,從新址開始執(zhí)行●段間轉(zhuǎn)移:轉(zhuǎn)移的目標(biāo)地址在另一個代碼段內(nèi),轉(zhuǎn)移指令中要指出轉(zhuǎn)到的代碼段的段基址及在該段內(nèi)的目標(biāo)地址,CPU據(jù)此修改CS和IP中的值,從而使CPU轉(zhuǎn)到另一個代碼段中取指令并執(zhí)行程序。4.28086尋址方式29/95②段間間接尋址:在轉(zhuǎn)移指令中給出一個存儲單元的地址,用該地址所指的兩個相鄰字單元的內(nèi)容(32位)來取代(CS)和(IP)中的內(nèi)容,從而達(dá)到段間轉(zhuǎn)移的目的?!?/p>
段內(nèi)轉(zhuǎn)移的尋址方式:②
段內(nèi)間接尋址:由轉(zhuǎn)移指令中指定一個16位寄存器或存儲器字單元的內(nèi)容做為轉(zhuǎn)移的有效地址,直接取代(IP)的內(nèi)容?!穸伍g轉(zhuǎn)移的尋址方式:①段間直接尋址:轉(zhuǎn)移指令中直接給出了轉(zhuǎn)向目標(biāo)的段基址和段內(nèi)偏移地址,用此地址分別取代(CS)和(IP)中的內(nèi)容,
完成從當(dāng)前段向另一個段的轉(zhuǎn)移①段內(nèi)直接尋址:在轉(zhuǎn)移指令中直接給出8
位或16
位的相對位移量,指令轉(zhuǎn)向的有效地址為:(當(dāng)前IP的內(nèi)容+相對位移量)(IP)
位移量為8位時,稱段內(nèi)直接短轉(zhuǎn)移;位移量為16位時,稱段內(nèi)直接近轉(zhuǎn)移4.28086尋址方式SHORT:表示位移量在-128~127字節(jié)之間,稱為短轉(zhuǎn)移,位移量用一個字節(jié)(8位)來表示。NEAR:表示在同一段內(nèi)轉(zhuǎn)移,位移量在-32768~32767字節(jié)范圍內(nèi),稱為近轉(zhuǎn)移,位移量用16位表示,
因?yàn)槌绦蚩刂迫匀辉诋?dāng)前代碼段,所以只修改IP的值,CS的值不變。FAR:表示轉(zhuǎn)移距離超過±32K字節(jié),或是在不同段之間轉(zhuǎn)移,稱為遠(yuǎn)轉(zhuǎn)移,因?yàn)槌绦蚩刂瞥隽水?dāng)前代碼段,所以CS和IP都必須修改為新的值。例:段內(nèi)直接尋址方式
1060:000DEB04JMPSHORTNEXT
IP當(dāng)前值→1060:000F……
1060:0011……
1060:00130207NEXT:ADDAL,[BX]
CPU在執(zhí)行JMP指令時,IP指向了下一條指令,其值為000F,JMPSHORTNEXT指令的機(jī)器語言為EB04,EB為操作碼,04為位移量,所以轉(zhuǎn)向的有效地址應(yīng)為:000F+0004=00130013正是標(biāo)號NEXT的地址。JMP指令執(zhí)行后,將IP寄存器修改為0013,代碼段寄存器CS不變。
緊接著CPU根據(jù)CS:IP的指示,取出1060:0013中的ADD指令開始執(zhí)行,這樣實(shí)現(xiàn)了程序的轉(zhuǎn)移。4.28086尋址方式例:段內(nèi)間接尋址方式假設(shè)(DS)=2000H,(BX)=1256H,(SI)=528FH,(264E5H)=2450H。JMPBX;則執(zhí)行該指令后(IP)=1256HJMP[BX][SI];則指令執(zhí)行后(IP)=(16d×(DS)+(BX)+(SI)) =(20000H+1256H+528FH) =(264E5H)=2450HJMPFAR
PTROUTSEG例:段間直接尋址方式因?yàn)槭嵌伍g轉(zhuǎn)移,CS和IP都要更新,這個新的段地址和偏移地址由OUTSEG,只要將指令中OUTSEG的低字裝入IP,高字裝入CS,就完成了從一個段到另一個段轉(zhuǎn)移的工作。例:段間間接尋址方式JMPDWORDPTR[SI];(IP)=(16d×(DS)+(SI))
;(CS)=(16d×(DS)+(SI)+2)
JMPDWORDPTR[TABLE+BX];(IP)=(16d×(DS)+(BX)+TABLE)
;(CS)=(16d×(DS)+(BX)+TABLE+2)
4.28086尋址方式訪問存儲器的方式
默認(rèn)的段寄存器可跨越的段寄存器偏移地址取指令CS無IP堆棧操作SS無SP一般數(shù)據(jù)訪問DSCSESSS有效地址EABP作為基址的尋址SSCSDSESBP串操作的源操作數(shù)DSCSESSSSI串操作的目的操作數(shù)ES無DI段寄存器的使用規(guī)定4.38086指令系統(tǒng)擁有138條基本指令,按功能分成六類:
(1)數(shù)據(jù)傳送指令
(2)算術(shù)運(yùn)算指令(3)邏輯運(yùn)算指令
(4)串操作指令(5)控制轉(zhuǎn)移指令(6)處理器控制指令4.3.1數(shù)據(jù)傳送指令
數(shù)據(jù)傳送:負(fù)責(zé)把數(shù)據(jù)、地址或立即數(shù)送到寄存器或存儲單元中。4.38086指令系統(tǒng)分為四個類型:①通用數(shù)據(jù)傳送指令②地址傳送指令③標(biāo)志位傳送指令④專用累加器傳送指令(輸入、輸出指令)1.傳送字或字節(jié)指令
MOV
格式:MOVdst,src;
功能:srcdst段寄存器DS、SS、ES存儲器立即數(shù)通用寄存器AX、BXCX、DXBP、SPSI、DI4.38086指令系統(tǒng)src是立即數(shù)時,dst不能是段寄存器,必須通過通用寄存器作中介;MOV指令的特點(diǎn)這里的傳送實(shí)際上是復(fù)制,把src的內(nèi)容復(fù)制帶dst,src內(nèi)容不變;src和dst必須類型一致(都是8位或者是16位);dst不能是立即數(shù);兩個操作數(shù)不能都是存儲器操作數(shù);兩個操作數(shù)不能都是段寄存器操作數(shù);⑴立即數(shù)傳送給通用寄存器或存儲器MOVAL,12H ;8位數(shù)據(jù)傳送,將12H傳送到寄存器AL中MOVAX,3456H ;16位數(shù)據(jù)傳送,將3456H傳送到寄存器AX中⑵通用寄存器之間相互傳送MOVAX,BX ;16位數(shù)據(jù)傳送,將BX中的數(shù)據(jù)傳送到寄存器AX中MOVCL,BH ;8位數(shù)據(jù)傳送,將BH中的數(shù)據(jù)傳送到寄存器CL中⑶通用寄存器和存儲器之間相互傳送MOVAX,[BX] ;16位數(shù)據(jù)傳送,將BX指定的連續(xù)2個字節(jié)中的數(shù)據(jù)傳送到AX中MOV[SI],DH ;8位數(shù)據(jù)傳送,將DH中的數(shù)據(jù)傳送到由SI指定的內(nèi)存單元中⑷段寄存器與通用寄存器、存儲器之間的相互傳送MOVDS,AXMOVBX,ESMOVES,[SI]MOV[DI],SSCS和IP不能作為目的操作數(shù),CS可以作為源操作數(shù)。CS和IP的值只在控制轉(zhuǎn)移指令中修改。對非控制轉(zhuǎn)移指令,取完指令后IP值自動指向下條指令。段寄存器CS的值,只在MOV、PUSH中可作操作數(shù),--源操作數(shù)且這兩條指令執(zhí)行結(jié)果不改變CS值。MOVAX,CSPUSHCSIP、FLAGS兩個寄存器不作為操作數(shù)在指令中出現(xiàn)。MOVIP,1234HMOVFLAGS,0F0FHFLAGS狀態(tài)寄存器的狀態(tài)位值由指令執(zhí)行后確定,不同的指令對各標(biāo)志的影響不同。4.38086指令系統(tǒng)4.38086指令系統(tǒng)出棧格式:POPdst;dst:{MEM,REG,SEG}
功能:將當(dāng)前棧頂?shù)淖謴棾龅絛st中,CS除外2.堆棧操作指令入棧格式:PUSHsrc;src:{MEM,REG,SEG}
功能:將src指示的字?jǐn)?shù)據(jù)壓入當(dāng)前棧頂,IP除外堆棧是一個“先進(jìn)后出”的主存區(qū)域,位于堆棧段中,使用SS段寄存器記錄其段地址。棧只有一個出口,即當(dāng)前棧頂。棧頂是地址較小的一端(低端),它用堆棧指針寄存器SP指定。注意幾點(diǎn):
(1)因?yàn)槎褩V羔楽P總是指向已經(jīng)存入數(shù)據(jù)的棧頂(不是空單元),所以PUSH指令是先將(SP)減2,后將內(nèi)容壓棧(即先修改SP使之指向空單元,后壓入數(shù)據(jù)),而POP是先從棧頂彈出一個字,后將堆棧指針SP加2。
(2)PUSHCS是合法的,但是POPCS是不合法的。
(3)因?yàn)镾P總是指向棧頂,而用PUSH和POP指令存取數(shù)時都是在棧頂進(jìn)行的,所以堆棧是“先進(jìn)后出”或叫“后進(jìn)先出”的。棧底在高地址,堆棧是從高地址向低地址延伸的,所以棧底就是最初的棧頂。
(4)用PUSH指令和POP指令時只能按字訪問堆棧,不能按字節(jié)訪問堆棧。
(5)PUSH和POP指令都不影響標(biāo)志。4.38086指令系統(tǒng)建棧
MOVAX,1050HMOVSS,AXMOVSP,000EH
進(jìn)棧
PUSHAX(設(shè)AX=1234H)
PUSHBX(設(shè)BX=5CF8H)1050FH10500H初始棧頂(棧底)SP=0EHSS=1050H堆棧起地址棧的范圍SP=0EH12H34HSP=0CH5CHF8HSP=0AH10500H(不變)1050FHSS=1050H-2-2當(dāng)前棧頂進(jìn)棧后的SP和SS的值SP=000AHSS=1050H進(jìn)棧前SP和SS的值SP=000EHSS=1050H
(變化)(AX)(BX)8086通過賦值SS和SP建棧進(jìn)棧操作:先SP減2,再內(nèi)容進(jìn)棧。高低4.38086指令系統(tǒng)出棧操作:先棧頂內(nèi)容出棧,再修改SP,使SP加2。-(字操作)出棧POPCXPOPDSSP=0EH12H34HSP=0CH5CHF8HSP=0AH10500H(不變)1050FHSS=1050H-2-
2當(dāng)前棧頂出棧前的SP和SS的值SP=000AHSS=1050H
(變化)SP=0EHCX=5CF8HDS=1234HSS=1050H出棧后SP和SS的值SP=000EHSS=1050H
SP=0AHSP=0CH+2+2F8H
5CH34H12H1050FH高低3.地址傳送指令4.38086指令系統(tǒng)例子:LEABX,[BX+DI+2000H]指令執(zhí)行前:BX=4000H,DI=0100H指令執(zhí)行后:BX=4000+0100+2000H=6100H①有效地址EA傳送指令
LEA
格式:LEAREG,MEM;
功能:將MEM操作數(shù)的有效地址EA送到寄存器REG中注意:源操作數(shù)必須是存儲器操作數(shù),而目的操作數(shù)必須是16位通用寄存器。不影響標(biāo)志位4.38086指令系統(tǒng)②數(shù)據(jù)段寄存器傳送指令LDS
格式:LDSREG,MEM;[MEM]REG[MEM+2]DS
功能:從源操作數(shù)所指定的存儲器單元中取出4個字節(jié)的變量地址指針,把前兩個字節(jié)(變量的偏移地址)傳送到目標(biāo)操作數(shù),后兩個字節(jié)(變量的段基址)傳送到DS段寄存器中。例子:LDSSI,[1000H]指令執(zhí)行前:DS=6000H,(61000H)=0600H,(61002H)=2000H指令執(zhí)行后:SI=0600H,DS=2000H注意:變量的16位地址偏移量必須傳送至一個16位的通用寄存器,典型為SI。不影響標(biāo)志位4.38086指令系統(tǒng)③附加段寄存器傳送指令LES
格式:LESREG,MEM;[MEM]REG[MEM+2]ES
功能:從源操作數(shù)所指定的存儲器單元中取出4個字節(jié)的變量地址指針,把前兩個字節(jié)(變量的偏移地址)傳送到目的操作數(shù),后兩個字節(jié)(變量的段基址)傳送到ES段寄存器中。例:設(shè)某雙字存儲單元偏移地址為3000H,雙字?jǐn)?shù)據(jù)為12345678H,則LDSSI,[3000H];DS=1234H,SI=5678HLESDI,[3000H];ES=1234H,DI=5678H4.標(biāo)志寄存器傳送指令4.38086指令系統(tǒng)
④FR寄存器出棧指令POPF
格式:POPF;FR[SS×16+SP]SP+2SP①FR寄存器低八位傳送至AH指令LAHF
格式:LAHF;FR-LAH②AH內(nèi)容送FR寄存器低八位指令SAHF
格式:SAHF;AHFR-L
③FR寄存器壓棧指令PUSHF
格式:PUSHF;FR[SS×16+SP-2]OFDFIFTFSFZFAFPFCFAHFLAGOFDFIFTFSFZFAFPFCFAHFLAG5.數(shù)據(jù)交換指令4.38086指令系統(tǒng)格式:XCHGOPR1,OPR2
;功能:將兩個操作數(shù)(字或字節(jié))相互交換位置操作數(shù):兩操作數(shù)可以是通用寄存器和存儲器。注意點(diǎn):兩操作數(shù)不能都是存儲器操作數(shù);兩操作數(shù)類型必須一致。例:設(shè)AX=31B0H,DS=3000H,BX=1800H,(31800H)=1995H,執(zhí)行指令XCHGAX,[BX]的過程為:執(zhí)行指令前AX31B0H31800H31801H31800H31801H執(zhí)行指令后AX95H19H31HB0H1995H6.換碼指令執(zhí)行的操作:AL←[(BX)+(AL)]又叫查表轉(zhuǎn)換指令,它可根據(jù)表項(xiàng)序號查出表中對應(yīng)代碼的內(nèi)容。執(zhí)行時先將表的首地址(偏移地址)送到BX中,表項(xiàng)序號存于AL中。例如:內(nèi)存數(shù)據(jù)段有一張16進(jìn)制數(shù)的ASCII碼表,設(shè)首地址為2000H,如欲查出表中第11個代碼(代碼序號從0開始)即十六進(jìn)制數(shù)B的ASCII碼。ASCII表在DS段中,并假設(shè)(DS)=4000H。4.38086指令系統(tǒng)303132...394142...4546...42000H+042000H+0BH‘0’‘1’‘2’‘9’‘A’‘B’‘E’‘F’十六進(jìn)制數(shù)ASCII碼表存儲器MOVBX,2000H;(BX)←表首地址MOVAL,0BH;(AL)←序號XALT;查表轉(zhuǎn)換執(zhí)行后得到:(AL)=42H=’B’注意:轉(zhuǎn)換表長度最大為256個表項(xiàng)(字節(jié))。7.輸入/輸出數(shù)據(jù)傳送指令:輸入輸出(I/O)指令4.38086指令系統(tǒng)②間接尋址I/O指令:INAL,DX;[DX]ALINAX,DX;[DX]AL,[DX+1]AHOUTDX,AL;AL[DX]OUTDX,AX;AL[DX],AH[DX+1]
只能使用AL或AX寄存器與I/O設(shè)備進(jìn)行數(shù)據(jù)交換
不影響FR①直接尋址I/O指令:INAL,PORT;[PORT]ALINAX,PORT;[PORT]AL,[PORT+1]AHOUTPORT,AL;AL[PORT]OUTPORT,AX;AL[PORT],AH[PORT+1]●間接尋址I/O指令必須使用DX為間址寄存器,指明I/O端口地址4.38086指令系統(tǒng)分為五個類型:加法指令減法指令乘法指令除法指令十進(jìn)制調(diào)整指令1.加法與減法指令
(1)
ADDDST,SRC
源操作數(shù):通用寄存器、存儲器、立即數(shù)目的操作數(shù):通用寄存器、存儲器執(zhí)行的操作:DST
DST+SRC
注:該指令影響標(biāo)志位注意:該指令適合有符號數(shù)和無符號數(shù)的運(yùn)算。DST+SRC
OSZAPC00100
1
00
0
4.3.2算術(shù)運(yùn)算指令4.38086指令系統(tǒng)例:MOVDX,4652HADDDX,0f0f0H4652+f0f0374210100011001010010+111100001111000000110111010000111執(zhí)行后:(DX)=3742HZ=0S=0C=1O=0
對無符號數(shù)溢出結(jié)果錯對有符號數(shù)不溢出結(jié)果正確問:對帶符號數(shù)和無符號數(shù)怎樣判斷是否溢出?帶符號數(shù)的溢出用溢出標(biāo)志O判斷;無符號數(shù)的溢出用進(jìn)位標(biāo)志C判斷。4.38086指令系統(tǒng)(2)ADCDST,SRC
源操作數(shù):通用寄存器、存儲器、立即數(shù)目的操作數(shù):通用寄存器、存儲器執(zhí)行的操作:DST
DST+SRC+C
功能:主要用于多字節(jié)運(yùn)算
注:該指令影響標(biāo)志位
注意:該指令適合有符號數(shù)和無符號數(shù)的運(yùn)算。DST+SRC+C
OSZAPC
00100
1
00
0
4.38086指令系統(tǒng)(3)INCOPRD
操作數(shù):通用寄存器、存儲器(不能是段寄存器或立即數(shù))執(zhí)行的操作:OPRD
OPRD+1
功能:用于在循環(huán)中修改地址指針及循環(huán)次數(shù)等。注:該指令影響標(biāo)志位
例:INCBXINCbyteptr[SI]
注意:(1)該指令將操作數(shù)視為無符號數(shù);
(2)該指令不影響進(jìn)位標(biāo)志COPRD+1
OSZAP00100
1
00
0
4.38086指令系統(tǒng)(4)減法指令
SUBDST,SRC
源操作數(shù):通用寄存器、存儲器、立即數(shù)目的操作數(shù):通用寄存器、存儲器執(zhí)行的操作:DST
DST-SRC
注:該指令影響標(biāo)志位注意:該指令適合有符號數(shù)和無符號數(shù)的運(yùn)算。
DST-SRC
OSZAPC00100
1
00
0
4.38086指令系統(tǒng)(5)SBBDST,SRC
源操作數(shù):通用寄存器、存儲器、立即數(shù)目的操作數(shù):通用寄存器、存儲器執(zhí)行的操作:DST
DST-SRC–C
注:該指令影響標(biāo)志位
注意:該指令適合有符號數(shù)和無符號數(shù)的運(yùn)算。DST–SRC-C
OSZAPC00100
1
00
0
4.38086指令系統(tǒng)注意:同加法指令有符號數(shù)的溢出用溢出標(biāo)志O判斷;無符號數(shù)的溢出用進(jìn)位標(biāo)志C判斷。例:SUBDH,[BP+4](DH)=41H(SS)=0000H(BP)=00E4H(00E8H)=5AH結(jié)果:(DH)=0E7HS=1Z=0C=1O=0
如果為有符號數(shù)則結(jié)果正確(無溢出)如果為無符號數(shù)則結(jié)果錯誤(有溢出)41-5AE701000001-0101101011100111114.38086指令系統(tǒng)(6)DECOPRD
操作數(shù):通用寄存器、存儲器(不能是段寄存器或立即數(shù))執(zhí)行的操作:OPRD
OPRD-1
功能:用于在循環(huán)中修改地址指針及循環(huán)次數(shù)等。注:該指令影響標(biāo)志位
例:DECBXDECwordptr[SI]
注意:(1)該指令將操作數(shù)視為無符號數(shù);
(2)該指令不影響進(jìn)位標(biāo)志COPRD-1
OSZAP00100
1
00
0
4.38086指令系統(tǒng)(7)NEGOPRD
操作數(shù):通用寄存器、存儲器執(zhí)行的操作:求補(bǔ)指令,將操作數(shù)按位取反后加1,再送回操作數(shù)。
對正數(shù)的補(bǔ)碼求補(bǔ)變?yōu)槠湄?fù)數(shù)的補(bǔ)碼,對負(fù)數(shù)的補(bǔ)碼求補(bǔ)變?yōu)槠湔龜?shù)的補(bǔ)碼。利用NEG指令可以求負(fù)數(shù)的絕對值。
注:該指令影響標(biāo)志位OPRD
OSZAPC00100
1
00
0
4.38086指令系統(tǒng)(8)CMPDST,SRC
源操作數(shù):通用寄存器、存儲器、立即數(shù)目的操作數(shù):通用寄存器、存儲器執(zhí)行的操作:
DST-SRC注:該指令影響標(biāo)志位注意:(1)該指令同SUB,但其不保存運(yùn)算結(jié)果;
(2)該指令后面通常跟一條轉(zhuǎn)移指令,根據(jù)標(biāo)志位產(chǎn)生不同的程序分支。DST-SRC
OSZAPC00100
1
00
0
4.38086指令系統(tǒng)比較指令主要用于兩個數(shù)之間的關(guān)系:大、小、相等。如:A,B1.比較相等。只要看Z標(biāo)志。Z=1——相等
Z=0——不相等。2.比小大小。分兩種情況。
?無符號數(shù)看進(jìn)(借)位C標(biāo)志。
1結(jié)論:C=1A<BC=0A>B
A=A0H10100000A=53H01010011B=53H-01010011B=A0H-10100000
01001101
00110011A>BA<B4.38086指令系統(tǒng)?帶符號數(shù)*同號:不會溢出O=0,用符號位S判斷
A=24H00100100B=44H-01000100O=0
S=0A>B11100000S=1A<B*異號:可能會溢出,用溢出位O和符號位S
判斷有溢出:
A=7FH01111111B=F0H-11110000O=1S=1A>B10001111S=0A<B
無溢出:
A=3FH00111111B=F0H-11110000O=0S=0A>B
01001111S=1A<B
結(jié)論:O⊕S=0A>BO⊕S=1A<B4.38086指令系統(tǒng)有符號數(shù)比較條件轉(zhuǎn)移指令:無符號數(shù)比較條件轉(zhuǎn)移指令:
JG標(biāo)號地址;dst>srcJA標(biāo)號地址;dst>src
JL標(biāo)號地址
;dst<srcJB標(biāo)號地址;dst<src
JGE標(biāo)號地址;dst≥srcJAE標(biāo)號地址;dst≥src
JLE標(biāo)號地址;dst≤srcJBE標(biāo)號地址
;dst≤src在分支程序設(shè)計中,常用CMP指令來產(chǎn)生條件,其后往往跟著一條條件轉(zhuǎn)移指令,由CMP指令為條件轉(zhuǎn)移指令提供控制轉(zhuǎn)移的依據(jù)。2.乘法指令與除法指令4.38086指令系統(tǒng)(1)MULSRC——無符號數(shù)乘法
源操作數(shù):通用寄存器、存儲器(不能是立即數(shù))目的操作數(shù):DX,AX(隱含)執(zhí)行的操作:字節(jié)操作(AH,AL)(AL)(SRC)字操作(DX,AX)(AX)(SRC)注:該指令影響標(biāo)志位AL
SRC
OC00100
1
00
0
注意:若結(jié)果的高半部分(字節(jié)相乘為AH,字相乘為DX)為0則C=0,O=0
為1則C=1,O=14.38086指令系統(tǒng)IMULSRC——帶符號數(shù)乘法
源操作數(shù):通用寄存器、存儲器(不能是立即數(shù))目的操作數(shù):DX,AX(隱含)執(zhí)行的操作:字節(jié)操作(AH,AL)(AL)(SRC)字操作(DX,AX)(AX)(SRC)
注:該指令影響標(biāo)志位AL
SRC
OC00100
1
00
0
注意:若結(jié)果的高半部分不是低半部分的符號擴(kuò)展的話,
則C=1,O=1
否則C=0,O=04.38086指令系統(tǒng)
(2)
除法指令
無符號數(shù)除法指令:DIVSRC
帶符號數(shù)除法指令:IDIVSRC
執(zhí)行操作:
字節(jié)操作(AL)
(AX)/(SRC)的商
(AH)
(AX)/(SRC)的余數(shù)字操作(AX)
(DX,AX)/(SRC)的商
(DX)
(DX,AX)/(SRC)的余數(shù)注意:*AX(DX,AX)為隱含的被除數(shù)寄存器。*AL(AX)為隱含的商寄存器。*AH(DX)為隱含的余數(shù)寄存器。*SRC不能為立即數(shù)。*對所有條件標(biāo)志位均無定義。如何判別結(jié)果有效?3.符號擴(kuò)展指令4.38086指令系統(tǒng)字?jǐn)U展成雙字指令CWD
格式:CWD;功能:將AX中的有符號數(shù)的符號位擴(kuò)展到DX中,
DX,AX中的數(shù)成為一個帶符號雙字●該類指令為隱含操作數(shù)字節(jié)擴(kuò)展成字指令CBW
格式:CBW;功能:將AL中的符號位擴(kuò)展到AH中,
AX為一個帶符號的16為數(shù)4.十進(jìn)制算術(shù)運(yùn)算指令(BCD碼調(diào)整指令)4.38086指令系統(tǒng)調(diào)整指令的約定:被調(diào)整的BCD碼運(yùn)算結(jié)果應(yīng)放在AL
中,調(diào)整后的正確結(jié)果返回AL中
●該類指令為隱含操作數(shù)
●有六種調(diào)整指令①壓縮BCD碼加法調(diào)整指令(不影響OF的狀態(tài))
注意點(diǎn):必須緊跟在加法指令之后且只能對AL中的內(nèi)容進(jìn)行調(diào)整。格式:DAA;指令功能:對在AL中兩個壓縮型BCD數(shù)相加的結(jié)果,調(diào)整成壓縮型BCD數(shù)在AL中;調(diào)整規(guī)律:AL低4位>9或AF=1AL=AL+06H,AF=1AL高4位>9或CF=1AL=AL+60H,CF=1標(biāo)志寄存器:影響CF、PF、AF、ZF、SF,其中CF=1說明結(jié)果大于99。例:MOVBL,35HMOVAL,85HADDAL,BLDAA
結(jié)果AL=20H,CF=1,AF=1,PF=0,ZF=0,SF=0壓縮BCD碼調(diào)整指令4.38086指令系統(tǒng)②壓縮BCD碼減法調(diào)整指令(不影響OF的狀態(tài))注意點(diǎn):必須緊跟在減法指令之后且只能對AL中的內(nèi)容進(jìn)行調(diào)整。指令功能:對在AL中兩個壓縮型BCD數(shù)相減的結(jié)果,調(diào)整成壓縮型BCD數(shù)在AL中;調(diào)整規(guī)律:AL低4位>9或AF=1AL=AL-06H,AF=1AL高4位>9或CF=1AL=AL-60H,CF=1
標(biāo)志寄存器:同DAA指令。
格式:DAS
;例:MOV AL,63H;(AL)=63H,表示壓縮BCD碼63MOV BL,28H;(BL)=28H,表示壓縮BCD碼28SUB AL,BL ;二進(jìn)制減法:(AL)=63H-28H=
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025屆云南省怒江州貢山三中高三二診模擬考試數(shù)學(xué)試卷含解析
- 天津市東麗區(qū)民族中學(xué)2025屆高三下第一次測試語文試題含解析
- 甘孜市重點(diǎn)中學(xué)2025屆高考數(shù)學(xué)四模試卷含解析
- 2025屆湖南省長沙市寧鄉(xiāng)縣第一高級中學(xué)高考數(shù)學(xué)五模試卷含解析
- 專題08 閱讀理解(匹配)20篇(原卷版)-2024-2025學(xué)年七年級英語上學(xué)期期末名校真題進(jìn)階練(深圳專用)
- 貴州省三都民族中學(xué)2025屆高考數(shù)學(xué)考前最后一卷預(yù)測卷含解析
- 西藏日喀則市南木林中學(xué)2025屆高三下第一次測試數(shù)學(xué)試題含解析
- 常州市“12校合作聯(lián)盟”2025屆高三(最后沖刺)數(shù)學(xué)試卷含解析
- 江西省南昌市2025屆高三考前熱身語文試卷含解析
- 湖南G10教育聯(lián)盟2025屆高三二診模擬考試語文試卷含解析
- 人教版三年級數(shù)學(xué)上冊復(fù)習(xí)計劃
- 機(jī)電傳動控制自動運(yùn)輸線-課程設(shè)計
- 知行合一 - 社會實(shí)踐?創(chuàng)新創(chuàng)業(yè)(江西師范大學(xué))知到智慧樹章節(jié)答案
- 城市排水系統(tǒng)維護(hù)員合同范例
- 人教版英語八年級上冊《Unit 10 If you go to the party,you'll have a great time!》大單元整體教學(xué)設(shè)計2022課標(biāo)
- Unit5《Lovely faces》(說課稿)-2024-2025學(xué)年滬教版(五四制)(2024)英語一年級上冊
- 2024年度文化旅游產(chǎn)業(yè)投資與運(yùn)營合同6篇
- 胸痛的診斷及護(hù)理
- 2025年專項(xiàng)債券投向及申報要求
- 列管式(正丁醇)換熱器設(shè)計
- 工廠配電系統(tǒng)培訓(xùn)
評論
0/150
提交評論