計(jì)算機(jī)軟硬件設(shè)計(jì)與實(shí)踐:3指令系統(tǒng)的基本指令_第1頁
計(jì)算機(jī)軟硬件設(shè)計(jì)與實(shí)踐:3指令系統(tǒng)的基本指令_第2頁
計(jì)算機(jī)軟硬件設(shè)計(jì)與實(shí)踐:3指令系統(tǒng)的基本指令_第3頁
計(jì)算機(jī)軟硬件設(shè)計(jì)與實(shí)踐:3指令系統(tǒng)的基本指令_第4頁
計(jì)算機(jī)軟硬件設(shè)計(jì)與實(shí)踐:3指令系統(tǒng)的基本指令_第5頁
已閱讀5頁,還剩100頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、指令系統(tǒng)的基本指令 數(shù)據(jù)傳送指令算術(shù)運(yùn)算指令邏輯指令串處理指令控制轉(zhuǎn)移指令處理機(jī)控制指令數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令,能夠?qū)崿F(xiàn)內(nèi)部寄存器之間的數(shù)據(jù)傳送,內(nèi)部寄存器與存儲器之間的數(shù)據(jù)傳送,通用數(shù)據(jù)傳送指令堆棧操作指令標(biāo)志寄存器傳送指令地址傳送指令輸入輸出指令通用數(shù)據(jù)傳送指令MOV指令XCHG指令XLAT和XLATB指令MOV總結(jié)可在CPU內(nèi)或CPU和存儲器之間傳送字或字節(jié)傳送的信息可從寄存器到寄存器立即數(shù)到寄存器立即數(shù)到存儲單元存儲單元到寄存器寄存器到存儲單元寄存器或存儲單元到除CS外的段寄存器段寄存器到寄存器或存儲單元MOV總結(jié)MOV指令的目的操作數(shù)不允許用立即數(shù)方式,也不允許用CS寄存器。除源操

2、作數(shù)為立即數(shù)的方式外,兩操作數(shù)必須有一個是寄存器。不允許在兩個段寄存器之間直接傳送數(shù)據(jù)不允許在兩個存儲器之間直接傳送數(shù)據(jù)立即數(shù)不能直接送段寄存器XCHG指令XCHG D,S ;(D)(S)功能:將源操作數(shù)和目的操作數(shù)的內(nèi)容相互交換。注意:源操作數(shù)和目的操作數(shù)可以是通用寄存器或存儲器,但D和S不得同時(shí)是存儲器操作數(shù)。 XLAT和XLATB指令XLATB ;(AL)(BX)+(AL)該指令為換碼指令,常用于查表,并約定BX中裝入的是表的起始偏移地址,AL是相對表頭的偏移量,因而(BX)+(AL)表示所要查找的元素的有效地址,指令執(zhí)行后,該元素將送至AL寄存器,所以稱該指令為換碼指令,即從表中換取與

3、AL中的序號相對應(yīng)的碼值。 XLAT指令XLAT ;無操作數(shù)XLAT Source-table ;設(shè)置形式操作數(shù)XLAT 段寄存器:Source-table;帶段超越的操作數(shù)堆棧操作指令PUSH指令POP指令進(jìn)棧指令PUSH語句格式: PUSH OPS功能:將寄存器、段寄存器或存儲器中的一個字?jǐn)?shù)據(jù)壓入堆棧,堆棧指針減2。(SP)SP(OPS)158SP(SP)SP(OPS)70SP指令的操作數(shù):可以是16位的通用寄存器,段寄存器和存儲器。出棧指令POP語句格式: POP OPD功能: 將棧頂元素彈出送至某一寄存器、段寄存器(除CS外)或存儲器,堆棧指針加2。從POP指令功能可看出,該指令為PU

4、SH指令的逆過程。(SP)(OPD)70(SP)+SP (SP)(OPD)158(SP)+SP目的操作數(shù)可以是16位通用寄存器、段寄存器和存儲器,但是代碼段CS不能作為目的操作數(shù)出棧指令。標(biāo)志寄存器傳送指令標(biāo)志送AH指令LAHFAH送標(biāo)志指令SAHF標(biāo)志寄存器進(jìn)棧指令PUSHF標(biāo)志寄存器出棧指令POPF標(biāo)志送AH指令LAHF語句格式:LAHF功能:將標(biāo)志寄存器的低8位送入AH寄存器。即(FLAGS)7-0AH。該指令的執(zhí)行對標(biāo)志位無影響?!纠繕?biāo)志寄存器傳送。執(zhí)行前:(FLAGS)=0485H,(AX)=0FFFFH執(zhí)行指令:LAHF執(zhí)行前:(FLAGS)=0485H,(AX)=085FFHA

5、H送標(biāo)志指令SAHF語句格式:SAHF功能:將AH的內(nèi)容送入標(biāo)志寄存器的低8位,高8位不變。即(AH) FLAGS7-0。從該指令功能可看出,SAHF為LAHF的逆過程。 標(biāo)志寄存器進(jìn)棧指令PUSHF語句格式:PUSHF功能:將標(biāo)志寄存器的內(nèi)容壓入堆棧。即(FLAGS)(SP)。標(biāo)志寄存器出棧指令POPF功能: 將棧頂內(nèi)容彈出送入標(biāo)志寄存器中。即(SP)FLAGS。POPF指令與PUSHF指令互為逆過程?!纠繉?biāo)志寄存器的單步標(biāo)志TF置位。PUSHF;(FLSGS)(SP)POP AX;(SP)AXOR AX, 0100H;設(shè)置D8=TF=1PUSH AX;(AX)(SP)POPF;(SP)

6、FLAGS,即(AX)FLAGS地址傳送指令傳送偏移地址指令 LEA傳送偏移地址及數(shù)據(jù)段首址指令LDS傳送偏移地址及附加數(shù)據(jù)段指令LES共同特點(diǎn):把變量的偏移地址( LEA )或段地址和偏移地址( LDS、 LES )送給寄存器,以提供訪問變量的工具。指定的寄存器不能使用段寄存器源操作數(shù)必須使用除立即數(shù)和寄存器方式外的其它尋址方式。傳送偏移地址指令 LEA語句格式: LEA OPD,OPS功能:按源地址的尋址方式計(jì)算偏移地址,將偏移地址送入指定寄存器?!纠恐鞔嫫频刂返墨@取。MOV BX,0100H;(BX)=0100HMOV SI, 0210H;(SI) =0210HLEA BX,1234

7、BX+SI;(BX)=1544HLEA SI,BX+SI+20H;(SI)(BX)+(SI)+20HLDS指令LDS REG,SRC;(REG)(SRC)(DS)(SRC +2) 功能:把源操作數(shù)指定的4個相繼的字節(jié)送到由指令指定的寄存器及DS寄存器中。該指令常指定SI寄存器。 LES指令LES REG,SRC;(REG)(SRC)(ES)(SRC +2) 功能:將主存某字單元內(nèi)容送指定寄存器。(OPS)OPD,(OPS+2)ES 該指令常指定DI寄存器。輸入輸出指令輸入指令I(lǐng)N輸出指令OUT外部設(shè)備最多可有65536個I/O端口。端口地址為0000H0FFFFH其中,前256個(0 0FFH

8、)端口可以直接在指令中指定算術(shù)運(yùn)算類指令加法指令減運(yùn)算指令乘運(yùn)算指令除運(yùn)算指令符號擴(kuò)展指令 十進(jìn)制調(diào)整指令加法指令加1指令 INC加指令A(yù)DD帶進(jìn)位加指令A(yù)DC加法運(yùn)算除INC不影響CF位外,其余都影響條件標(biāo)志位(CF ZF SF OF PF AF)CF位是根據(jù)最高有效位是否有向高位的進(jìn)位設(shè)置的。有,CF1OF根據(jù)操作數(shù)的符號及變化情況來設(shè)置若兩操作數(shù)符號相同,結(jié)果的符號與之相反,OF1OF表示帶符號數(shù)的溢出CF表示無符號數(shù)的溢出加運(yùn)算指令語句格式:INC OPD功能:將目的操作數(shù)加1,結(jié)果送目的地址。即(OPD)+1OPD。INC指令是一個單操作數(shù)指令,操作數(shù)可以是寄存器或存儲器操作數(shù)。如:

9、INC BX,即(BX)+1BX。用法:加1指令可用于對計(jì)數(shù)器和地址指針進(jìn)行調(diào)整,由于對CF無影響,所以無需保護(hù)狀態(tài)標(biāo)志位。 加1指令 INC語句格式:ADD OPD, OPS功能:將目的操作數(shù)與源操作數(shù)相加,結(jié)果存入目的地址中,源地址的內(nèi)容不改變。即(OPD)+(OPS)(OPD)。加指令A(yù)DD語句格式:ADC OPD,OPS功能:將目的操作數(shù)加源操作數(shù)再加低位進(jìn)位,結(jié)果送目的地址。用法:該指令常用于多精度加法的計(jì)算。即(OPD)+(OPS)+CF (OPD)?!纠繜o符號雙字加法運(yùn)算。MOVAX,4652H;(AX)=4652HADDAX,0F0F0H;(AX)=3742H,CF=1MOV

10、DX,0234H;(DX)=0234HADCDX,0F0F0H;(DX)=0F325H,CF=0帶進(jìn)位加指令A(yù)DC減1指令DEC減指令SUB帶借位減指令 SBB求補(bǔ)指令NEG比較指令 CMP減運(yùn)算指令減運(yùn)算指令減法運(yùn)算的條件碼設(shè)置與加法運(yùn)算類似OF根據(jù)操作數(shù)的符號及變化情況來設(shè)置若兩操作數(shù)符號相反,結(jié)果的符號與減數(shù)相同,則OF1OF表示帶符號數(shù)的溢出CF表示無符號數(shù)的溢出語句格式:DEC OPD 功能:將目的操作數(shù)減1,結(jié)果送目的地址。即(OPD)1(OPD)。標(biāo)志位:除CF標(biāo)志位不受影響外,其余狀態(tài)標(biāo)志均受影響。目的操作數(shù):可以放在通用寄存器和存儲器中。如:DEC CX。即(CX)1CX。減

11、1指令DEC也一般用于對計(jì)數(shù)器和地址指針的調(diào)整。減1指令DEC語句格式:SUB OPD,OPS功能:目的操作數(shù)減源操作數(shù),結(jié)果存于目的地址,源地址內(nèi)容不變。即(OPD)(OPS)(OPD)指令將對CF、AF、SF、ZF、PF、OF狀態(tài)標(biāo)志位有影響,使用的操作數(shù)組合與ADD指令相同。減指令SUB語句格式:SBB OPD ,OPS功能:目的操作數(shù)減源操作數(shù)再減低位借位CF,結(jié)果送目的地址。即(OPD)(OPS)CF ( OPD)用法:SBB指令常用于多精度的減法運(yùn)算中。帶借位減指令 SBB語句格式:NEG OPD功能:將目的操作數(shù)的每一位求反(包括符號位)后加1,結(jié)果送目的地址。即(OPD)(OP

12、D)?;?FFFFH(OPD)1(OPD)。操作數(shù):可以是通用寄存器或存儲器。標(biāo)志位:影響SF、ZF、AF、PF、OF,在一般情況下,總使CF=1,除非操作數(shù)為零時(shí),才使CF=0;OF標(biāo)志一般情況下為0,但當(dāng)操作為80H或8000H,NEG指令對其求補(bǔ),結(jié)果與原操作數(shù)相同,此時(shí)OF=1。求補(bǔ)指令NEG比較指令 CMP語句格式:CMP OPD,OPS功能:目的操作數(shù)減源操作數(shù),結(jié)果只影響標(biāo)志位,不送入目的地址。即(OPD)(OPS)。用法:此指令常用于比較兩個數(shù)的大小,當(dāng)比較指令與條件轉(zhuǎn)移指令結(jié)合使用時(shí),可以完成各種條件判斷和相應(yīng)的程序轉(zhuǎn)移。乘運(yùn)算指令無符號數(shù)乘法指令MUL有符號乘指令I(lǐng)MUL特

13、點(diǎn):目的操作數(shù)必須是累加器,源操作數(shù)可以使用除立即數(shù)方式以外的任一種尋址方法乘運(yùn)算指令對CF和OF以外的條件碼無定義(狀態(tài)不定)對MUL指令,若乘積的高一半為0,CF和OF為0對MUL指令,若乘積的高一半為低一半的符號擴(kuò)展,CF和OF為0無符號數(shù)乘法指令MUL語句格式: MUL OPS功能: 若是字節(jié)數(shù)據(jù)相乘,(AL)與OPS相乘得到字?jǐn)?shù)據(jù)存入AX中;若是字?jǐn)?shù)據(jù)相乘,則(AX)與OPS相乘得到雙字?jǐn)?shù)據(jù),高字存入DX、低字存入AX中。即字節(jié)乘法:(AL)* (OPS) (AX),字乘法:(AX) * (OPS) (DX,AX)有符號乘指令I(lǐng)MUL語句格式:IMUL OPS功能:字節(jié)乘法:(AL)

14、*(OPS)(AX),字乘法:(AX)*(OPS)(DX、AX)。IMUL指令除計(jì)算對象是帶符號二進(jìn)制數(shù)外,其他都與MUL一樣,但計(jì)算結(jié)果不同。 【例】有符號數(shù)0B4H與11H相乘。MOVAL,0B4H;(AL)=B4HMOVBL,11H;(BL)=11HIMULBL ;(AX)=0FAF4H除運(yùn)算指令無符號除指令DIV有符號除指令I(lǐng)DIV特點(diǎn):目的操作數(shù)必須存放在AX或DX,AX中源操作數(shù)可以使用除立即數(shù)方式以外的任一種尋址方法除法指令對所有條件碼均無定義無符號除指令DIV語句格式:DIV OPS功能:字節(jié)除法:(AX)/(OPS) (AL)(商)、(AH)(余數(shù))字除法:(DX、AX)/(

15、OPS) (AX)(商)、(DX)(余數(shù))【例】寫出實(shí)現(xiàn)無符號數(shù)0400H / 0B4H運(yùn)算的程序段。MOVAX,0400H;(AX)=0400HMOVBL,0B4H;(BL)=0B4HDIVBL ;商(AL)=05H,余數(shù)(AH)=7CH 語句格式:IDIV OPS功能:字節(jié)除法:(AX)/(OPS) (AL)(商)、(AH)(余數(shù))字除法:(DX,AX)/(OPS) (AX )(商)、(DX)(余數(shù))除法指令DIV和IDIV雖然對標(biāo)志的影響未定義,但可產(chǎn)生溢出?!纠繉懗鰧?shí)現(xiàn)有符號數(shù)0400H /0B4H運(yùn)算的程序段。有符號除指令I(lǐng)DIVMOVAX,0400H;(AX)=0400HMOVB

16、X,0B4H;(BX)=0B4HIDIVBX;(AL)=0F3H,(AH)=24H符號擴(kuò)展指令 字節(jié)轉(zhuǎn)換成字指令CBW將字轉(zhuǎn)換成雙字指令CWD語句格式:CBW功能:將AL中的符號位數(shù)據(jù)擴(kuò)展至AH?!纠繉⒆止?jié)數(shù)據(jù)擴(kuò)展成字?jǐn)?shù)據(jù)。MOVAL,0A5HCBWADDAL,70HCBW字節(jié)轉(zhuǎn)換成字指令CBW;(AL)=0A5H;(AX)=0FFA5H;(AL)=25H;(AX)=0025H語句格式:CWD功能:將AX中的符號位數(shù)據(jù)擴(kuò)展至DX ?!纠繉⒆?jǐn)?shù)據(jù)擴(kuò)展成雙字?jǐn)?shù)據(jù)。MOVDX, 0MOVAX, 0FFABHCWD將字轉(zhuǎn)換成雙字指令CWD;(DX)=0;(AX)=0FFABH;(DX)=0FFFF

17、H (AX)=0FFABH十進(jìn)制調(diào)整指令壓縮BCD碼調(diào)整指令DAA(decimal adjust for addition)DAS (decimal adjust for subtraction)非壓縮BCD碼調(diào)整指令A(yù)AA(ASCII adjust for addition)AAS (ASCII adjust for subtraction)AAM (ASCII adjust for multiplication)AAD (ASCII adjust for division)加法的十進(jìn)制調(diào)整指令DAA 語句格式:DAA功能:如果AL寄存器中低4位大于9或輔助進(jìn)位(AF)=1,則(AL)=(A

18、L)+6且(AF)=1;如果(AL)=0A0H或(CF)=1,則(AL)=(AL)+60H且(CF)=1。同時(shí),SF、ZF、PF均有影響。對OF無影響減法的十進(jìn)制調(diào)整指令DAS語句格式:DAS功能:如果(AF)=1或AL寄存器中低4位大于9,則(AL)=(AL)6且(AF)=1;如果(AL)=0A0H或(CF)=1,則(AL)=(AL)60H且(CF)=1。同時(shí)SF、ZF、PF均受影響。非壓縮BCD碼調(diào)整指令加法的非壓縮BCD碼調(diào)整指令A(yù)AA減法的非壓縮BCD碼調(diào)整指令A(yù)AS乘法的非壓縮BCD碼調(diào)整指令A(yù)AM除法的非壓縮BCD碼調(diào)整指令A(yù)AD語句格式:AAA 功能:未組合的BCD加法調(diào)整指令,

19、亦可以作為ASCII碼加法調(diào)整指令。用法:必須將其和放在累加器AL中,AAA指令要緊跟在加法指令之后使用。如果AL的低4位大于9或(AF)=1,則:(AL)=(AL)+6 (AH)=(AH)+1(AF)=(CF)=1 且AL高4位清零。否則:(CF)=(AF)=0 AL高4位清零。加法的非壓縮BCD碼調(diào)整指令語句格式:AAS 功能:是未組合BCD碼減法調(diào)整指令,可對AL中的兩個未組合的十進(jìn)制數(shù)相減的結(jié)果進(jìn)行調(diào)整,使差成為正確的十進(jìn)制數(shù)。如果AL的低4位大于9或(AF)=1,則:(AL)=(AL)6 (AH)=(AH)1 (AF)=(CF)=1 AL高4位清零。否則:(CF)=(AF)=0 AL

20、高4位清零。其他標(biāo)志位OF、PF、SF、ZF不確定。減法的非壓縮BCD碼調(diào)整指令A(yù)AM未組合的BCD碼乘法調(diào)整指令A(yù)AM功能:它將AX中未組合BCD碼的乘積調(diào)整為正確的未組合的BCD碼,高位在AH中,低位在AL中。AAM具體操作如下:AHAL/0AH ;除10取整商AHALAL%0AH ;除10取余ALAADAAD ;隱含操作數(shù)AH,AL指令功能:除法運(yùn)算前,先調(diào)整被除數(shù)AX內(nèi)容,將AX中的兩個未組合的BCD碼轉(zhuǎn)換成一個字節(jié)的二進(jìn)制數(shù),即把非壓縮型十進(jìn)制數(shù)變成二進(jìn)制數(shù)。其操作為:AL(AH)10+(AL)AH0邏輯指令邏輯運(yùn)算指令移位指令邏輯運(yùn)算指令求反指令NOT與指令A(yù)ND測試指令TEST或

21、指令OR異或指令XOR語句格式:NOT OPD功能:將目的地址中的內(nèi)容逐位取反后送入目的地址。即(OPD)(OPD)操作數(shù)可以是通用寄存器或存儲器,此指令對狀態(tài)標(biāo)志位無影響。 求反指令NOT語句格式:AND OPD, OPS功能:將目的操作數(shù)和源操作數(shù)進(jìn)行邏輯乘運(yùn)算,結(jié)果存目的地址。即(OPD)(OPS)(OPD)。說明:邏輯乘的運(yùn)算法則為: 11=1,10=0,01=0,00=0用法:常用于位屏蔽和位檢驗(yàn)操作。位屏蔽:是將目的操作數(shù)中指定的位設(shè)置為0。與指令A(yù)ND語句格式:TEST OPD,OPS功能:源地址和目的地址的內(nèi)容執(zhí)行按位的邏輯與運(yùn)算,結(jié)果不送入目的地址。即(OPD)(OPS)。測

22、試指令TEST語句格式:OR OPD,OPS功能:將目的操作數(shù)和源操作數(shù)進(jìn)行邏輯加運(yùn)算,結(jié)果存目的地址。即(OPD)(OPS)OPD。說明:邏輯加的運(yùn)算法則為:11=1,10=1,01=1,00=0。用法:常用于判斷一個數(shù)是否為零,或用于將BCD碼轉(zhuǎn)換成ASCII,以及判斷一個 數(shù)的正負(fù)?;蛑噶頞R語句格式: XOR OPD,OPS功能:目的操作數(shù)與源操作數(shù)做按位加運(yùn)算,結(jié)果送入目的地址。即(OPD)(OPS) (OPD)。說明:按位加的運(yùn)算法則為;11=0,10=1,01=1,00=0。即“相同為零,相異為1”,凡與1相“異或”的位將“求反”,凡與“0”相“異或” 的位保持不變。用法:根據(jù)該

23、指令特點(diǎn)可很容易地將寄存器清零,并同時(shí)也將進(jìn)位標(biāo)志位CF清零,異或指令XOR移位指令 移位指令包括算術(shù)移位指令、邏輯移位指令和循環(huán)移位指令,分別進(jìn)行左移和右移操作。這些指令均有統(tǒng)一的語句格式:標(biāo)號:操作符OPD,1或 標(biāo)號:操作符OPD,CL其功能為將目的操作數(shù)的所有位按操作符規(guī)定的方式移動1位或按寄存器CL規(guī)定的次數(shù)(0255)移動,結(jié)果送入目的地址。目的操作數(shù)是8位(或16位)的寄存器數(shù)據(jù)或存儲器數(shù)據(jù)。移位指令SHL(shift logic left) 邏輯左移SAL(shift arithmetic left) 算術(shù)左移SHR(shift logic right) 邏輯右移SAR(shi

24、ft arithmetic right)算術(shù)右移ROL(rotate left) 循環(huán)左移ROR(rotate right)循環(huán)右移RCL(rotate left through carry)帶進(jìn)位循環(huán)左移RCR(rotate right through carry)帶進(jìn)位循環(huán)右移語句格式:SAL OPD,1 或SHL OPD,1 SAL OPD,CL或SHL OPD,CL功能:將(OPD)向左移動CL指定的次數(shù),最低位補(bǔ)入相應(yīng)的,的內(nèi)容為最后移入位的值。算術(shù)左移和邏輯左移指令算術(shù)右移指令SAR語句格式:SAR OPD,1或SAR OPD,CL功能:將(OPD)向右移動CL指定的次數(shù)且最高位保

25、持不變;CF的內(nèi)容為最后移入位的值。說明:算術(shù)右移是針對有符號數(shù)而言的,有符號數(shù)經(jīng)算術(shù)右移后,其符號不變。語句格式:SHR OPD,1 或 SHR OPD,CL功能:將(OPD)向右移動CL規(guī)定的次數(shù),最高位補(bǔ)入相應(yīng)個數(shù)的,CF的內(nèi)容為最后移入位的值。注:邏輯右移1位,可使無符號數(shù)除以2。 邏輯右移指令SHR語句格式:ROL OPD,1或ROL LPD,CL功能:將目的操作數(shù)的最高位與最低位連成一個環(huán),將環(huán)中的所有位一起向左移動CL規(guī)定的次數(shù)。CF的內(nèi)容為最后移入位的值。循環(huán)左移指令ROL語句格式: ROR OPD,1或ROR OPD,CL功能:將目的操作數(shù)的最高位與最低位連成一個環(huán),將環(huán)中的

26、所有位一起向右移動CL規(guī)定的次數(shù),CF的內(nèi)容為最后移入位的值。循環(huán)右移指令ROR語句格式: RCL OPD, 1或RCL OPD,CL功能:將目的操作數(shù)連同CF標(biāo)志一起向左循環(huán)移動CL規(guī)定的次數(shù)。 帶進(jìn)位的循環(huán)左移指令語句格式:RCR OPD,1或RCR OD,CL功能:將目的操作數(shù)連同CF標(biāo)志一起向右循環(huán)移動所規(guī)定的次數(shù)。 帶進(jìn)位的循環(huán)右移指令重復(fù)前綴:REP REPE/REPZ REPNE/REPNZ數(shù)據(jù)串傳送指令MOVS數(shù)據(jù)串比較指令CMPS字符串掃描指令SCAS取數(shù)據(jù)串指令LODS存數(shù)據(jù)串指令STOS串操作指令用SI寄存器尋址源操作數(shù)用DI寄存器尋址目的操作數(shù)源操作數(shù)隱含的段寄存器為D

27、S,但允許段超越,目的操作數(shù)的段寄存器約定為ES,不允許段超越。每當(dāng)串操作指令執(zhí)行后,可以自動實(shí)現(xiàn)源變址或目的變址,地址的增量可正可負(fù),當(dāng)方向標(biāo)志位(DF)=0,地址增量為正;當(dāng)(DF)=1時(shí),地址增量為負(fù),地址增量的大小取決于串操作數(shù)的類型,當(dāng)操作數(shù)為字節(jié)屬性時(shí),地址增量為1,當(dāng)操作數(shù)為字屬性時(shí),地址增量為2串操作指令特點(diǎn)(1)REP REP前綴用在MOVS、STOS 、LODS指令前。功能:每執(zhí)行一次串指令(CX)1,直到(CX)=0,重復(fù)執(zhí)行結(jié)束。(2)REPZ 該指令一般用在CMPS、SCAS指令前。功能:每執(zhí)行一次串指令(CX)1,并判斷ZF標(biāo)志是否為0,只要(CX)=0或ZF=0,

28、則重復(fù)執(zhí)行結(jié)束。(3)REPNZ 該指令一般用在CMPS、SCAS 指令前。功能:每執(zhí)行一次串指令(CX)1,并判斷ZF標(biāo)志是否為0,只要(CX)=0或ZF=1,則重復(fù)執(zhí)行結(jié)束。重復(fù)前綴指令MOVS 目的串,源串MOVSBMOVSW功能:將DS:SI所規(guī)定的源數(shù)據(jù)串中的字節(jié)、字傳送至目的串,目的串的地址由ES:DI確定。每當(dāng)指令執(zhí)行后,變址寄存器SI、DI將依據(jù)傳送的操作數(shù)類型自動變址,其變址值可為1,2,分別對應(yīng)于字節(jié)、字傳送?!?”、“”號由DF標(biāo)志位的值確定,當(dāng)DF=0,變址取“”,當(dāng)DF=1,變址取“”。數(shù)據(jù)串傳送指令使用方法1、把存于數(shù)據(jù)段中的源串首/末地址放入SI寄存器2、把將要存

29、放數(shù)據(jù)串的附加段的首/末地址放入DI寄存器3、把串長放入CX寄存器4、建立方向標(biāo)志(cld std)5、使用串指令傳送數(shù)據(jù)CMPS 源串,目的串CMPSB字節(jié)串比較CMPSW字串比較功能:將SI所指的源串中的一個字節(jié)(或字)存儲單元中的數(shù)據(jù)與DI所指的目的串中的一個字節(jié)(或字)存儲單元中的數(shù)據(jù)相減,并根據(jù)相減的結(jié)果設(shè)置標(biāo)志,但結(jié)果并不保存。(SI)(DI)。 修改串指針,使之指向串中的下一個元素。當(dāng)DF=0時(shí),(SI)和(DI)增量。當(dāng)DF=1時(shí),(SI)和(DI)減量。串比較指令源操作數(shù)的邏輯地址為DS:SI,可以段超越,目的操作數(shù)的邏輯地址為ES:DI。比較指令執(zhí)行后,變址寄存器SI、DI

30、會自動變址,地址是增還是減,由DF標(biāo)志位來確定,指令執(zhí)行時(shí)是將源操作數(shù)減去目的操作數(shù),該操作數(shù)將影響AF、CF、OF、PF、SF和ZF標(biāo)志指令前通常加重復(fù)前綴REPZ/REPE,從而當(dāng)發(fā)現(xiàn)兩個串不同時(shí)結(jié)束比較。數(shù)據(jù)串比較指令串搜索指令SCAS 目的串 SCASB字節(jié)串搜索 SCASW字串搜索功能:AL(字節(jié))或AX(字)中的內(nèi)容與DI所指的目的串中的一個字節(jié)(或字)存儲單元中的數(shù)據(jù)相減,根據(jù)相減結(jié)果設(shè)置標(biāo)志位,結(jié)果不保存, 字節(jié)操作:(AL)(DI), 字操作:(AX)(DI)。 修改指針使之指向串中的下一個元素。當(dāng)DF=0時(shí),(DI)增量。當(dāng)DF=1時(shí),(DI)減量。從源串中取數(shù)指令LODS

31、 LODSB從字節(jié)串中取數(shù) LODSW從字串中取數(shù)功能:將SI所指的源串中的一個字節(jié)(或字)存儲單元中的數(shù)據(jù)取出來送入AL(或AX)中。即: 字節(jié)操作:(SI)AL, 字操作:(SI)AX。 修改指針SI,使它指向串中的下一個元素。當(dāng)DF=0時(shí),(SI)增量。當(dāng)DF=1時(shí),(SI)減量。 STOS STOSB往字節(jié)串中存數(shù)STOSW往字串中存數(shù)功能:將AL或AX中的數(shù)據(jù)送入DI所指的目的串中的字節(jié)(或字)存儲單元中。即: 字節(jié)操作:(AL)DI, 字操作:(AX)DI。 修改指針DI,使之指向串中的下一個元素。當(dāng)DF=0時(shí),(DI)增量)。當(dāng)DF=1時(shí),(DI)減量。存數(shù)據(jù)串指令控制轉(zhuǎn)移類指令

32、用于改變程序中指令執(zhí)行路徑程序轉(zhuǎn)移指令循環(huán)指令 子程序調(diào)用指令中斷指令兩種不同類型無條件轉(zhuǎn)移:指令執(zhí)行與狀態(tài)無關(guān),指令將改變程序執(zhí)行的順序。條件跳轉(zhuǎn):指令的執(zhí)行要視指定的條件是否滿足,如條件滿足則轉(zhuǎn)移發(fā)生,否則順序執(zhí)行下一條指令,一般根據(jù)執(zhí)行上一指令后標(biāo)志寄存器的狀態(tài)而決定是否轉(zhuǎn)移程序轉(zhuǎn)移指令無條件轉(zhuǎn)移指令JMP OP段內(nèi)直接轉(zhuǎn)移段內(nèi)間接轉(zhuǎn)移段間直接轉(zhuǎn)移段間間接轉(zhuǎn)移段內(nèi)直接轉(zhuǎn)移當(dāng)跳轉(zhuǎn)的范圍在128 +127時(shí),稱為段內(nèi)直接短轉(zhuǎn)移。格式:JMP SHORT OPR當(dāng)跳轉(zhuǎn)的范圍超過一個字節(jié)所表達(dá)的有符號數(shù)范圍,但跳轉(zhuǎn)目的標(biāo)號仍在同一段內(nèi),稱為段內(nèi)直接近轉(zhuǎn)移。格式:JMP NEAR PTR OPR(

33、IP)+disp(IP)段內(nèi)間接轉(zhuǎn)移轉(zhuǎn)移指令的操作數(shù)是16位的通用寄存器或存儲器操作數(shù),轉(zhuǎn)移指令的目的地址為: JMP WORD PTR OPR(EA) (IP) ,EA由OPR的尋址方式確定,可使用除立即數(shù)方式以外的任一種尋址方式 段間直接轉(zhuǎn)移段間轉(zhuǎn)移是指轉(zhuǎn)移的目的地址是屬于另一個代碼段,因而在發(fā)生跳轉(zhuǎn)時(shí),CS和IP需要一起更改,用操作數(shù)的第一個字裝入IP,第二個字裝入CS,指令轉(zhuǎn)移標(biāo)號的屬性為遠(yuǎn)標(biāo)號。例如: JMP FAR PTR LABEL_NAME段間間接轉(zhuǎn)移段間間接轉(zhuǎn)移的操作數(shù)為32位存儲器操作數(shù),存儲器中的第一個字加載IP,第二字加載CS。例如:JMP DWORD PTR BX+S

34、IJMP ALPHA BP+DI條件轉(zhuǎn)移指令簡單條件轉(zhuǎn)移指令無符號數(shù)條件轉(zhuǎn)移指令有符號數(shù)條件轉(zhuǎn)移指令 它們都有通用的語句格式和功能。語句格式: 標(biāo)號: 操作符 短標(biāo)號功能:如果條件滿足,則(IP)位移量IP。助記符 意義 測試條件JE/JZ 等于 (ZF)=1JNE/JNZ 不等于 (ZF)=0JC 有進(jìn)位或有借位 (CF)=1JNC 無進(jìn)位或無借位 (CF)=0JO 有溢出 (OF)=1JNO 無溢出 (OF)=0JP/JPE 奇偶位為1/偶 (PF)=1JNP/JPO 奇偶位為0/奇 (PF)=0JS 為負(fù) (SF)=1JNS 為正 (SF)=0JCXZ CX內(nèi)容為0 (CX)=0簡單條件

35、轉(zhuǎn)移指令無符號數(shù)條件轉(zhuǎn)移指令助記符 意義 測試條件JA/JNBE 大于或不小于等于 (CF)+(ZF)=0JAE/JNB 大于等于或不小于 (CF)=0JB/JNAE 小于或不大于等于 (CF)=1JBE/JNA 小于等于或不大于 (CF)+(ZF)=1 有符號數(shù)條件轉(zhuǎn)移指令 助記符 意義 測試條件JG/JNLE 大于或不小于等于 (SF)(OF)+(ZF)=0JGE/JNL 大于等于或不小于 (SF)(OF)=0JL/JNGE 小于或不大于等于 (SF)(OF)=1JLE/JNG 小于等于或不大于 (SF)(OF)+(ZF)=1 循環(huán)指令 共同特點(diǎn):指令用CX作為記數(shù)器,重復(fù)控制指令每執(zhí)行一

36、次CX減1,用CX是否減至為零來判斷循環(huán)轉(zhuǎn)移;指令長度為2字節(jié),第一字節(jié)是指令操作碼,第二字節(jié)是相對偏移量,均屬相對短轉(zhuǎn)移。循環(huán)指令LOOP相等/為零循環(huán)指令LOOPE不相等/不為零循環(huán)指令LOOPNE LOOPLOOP 短標(biāo)號功能:(CX)(CX)-1,測試CX的內(nèi)容是否為0,若(CX)0則轉(zhuǎn)移至目標(biāo)操作數(shù),否則順序執(zhí)行下一條指令。它等效于以下兩條指令組合: DEC CX JNE 短標(biāo)號相等/為零循環(huán)指令LOOPE語句格式: LOOPE 短標(biāo)號 LOOPZ 短標(biāo)號功能: (CX)1 0且ZF=1, 則程序轉(zhuǎn)移(循環(huán)); 否則,順序執(zhí)行。注意:狀態(tài)標(biāo)志ZF是LOOPZ/LOOPE之前的指令執(zhí)行時(shí)所生成的ZF標(biāo)志,CX寄存器減1并不影響ZF的狀態(tài)。不相等/不為零循環(huán)指令語句格式: LOOPNE 短標(biāo)號 LOOPNZ 短標(biāo)號功能: (CX)10, 則程序轉(zhuǎn)移(循環(huán)); 否則,順序執(zhí)行。除轉(zhuǎn)移條件需(ZF)=0以外,其余同LOOPZ。子程序調(diào)用CALL子程序是完成某一功能的特殊程序段,每當(dāng)程序需要這一功能時(shí),可以調(diào)用該子程序,而不必重復(fù)書寫這個代碼段,這樣可以主程序簡明,占用較少的內(nèi)存空間。 第一條指令返回子程序A調(diào)用子程序A下一

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論