微機原理第四章-指令系統(tǒng)_第1頁
微機原理第四章-指令系統(tǒng)_第2頁
微機原理第四章-指令系統(tǒng)_第3頁
微機原理第四章-指令系統(tǒng)_第4頁
微機原理第四章-指令系統(tǒng)_第5頁
已閱讀5頁,還剩165頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 信息工程學(xué)院信息工程學(xué)院 電子信息教研室電子信息教研室郵箱:郵箱:電話:電話第4章章 指指 令令 系系 統(tǒng)統(tǒng)4.1 數(shù)據(jù)類型及其存儲規(guī)則(了解)數(shù)據(jù)類型及其存儲規(guī)則(了解)4.2 計算機指令格式(了解)計算機指令格式(了解)4.3 8086的尋址方式(的尋址方式(重點重點)4.4 8086的指令系統(tǒng)(的指令系統(tǒng)(重點重點)4.5 DOS和和BIOS中斷(中斷(重點重點)4.1 數(shù)據(jù)類型及其存儲規(guī)則數(shù)據(jù)類型及其存儲規(guī)則 4.1.1 基本數(shù)據(jù)類型及其存儲基本數(shù)據(jù)類型及其存儲 數(shù)據(jù)在存儲器中常以數(shù)據(jù)在存儲器中常以字節(jié)字節(jié)為單位進行存儲,一個字節(jié)占用為單位進行存儲,一個字節(jié)

2、占用內(nèi)存的一個地址,稱為一個存儲單元。內(nèi)存的一個地址,稱為一個存儲單元。 8086微處理器指令系統(tǒng)中的基本數(shù)據(jù)類型為:微處理器指令系統(tǒng)中的基本數(shù)據(jù)類型為:字節(jié)字節(jié)、字字。 當(dāng)多于一個字節(jié)的數(shù)據(jù)存儲時,其當(dāng)多于一個字節(jié)的數(shù)據(jù)存儲時,其存儲規(guī)則存儲規(guī)則是高位字節(jié)存是高位字節(jié)存儲在地址號高的存儲單元中,低位字節(jié)存儲在地址號低的存儲儲在地址號高的存儲單元中,低位字節(jié)存儲在地址號低的存儲單元中。單元中。 圖圖4-1 基本數(shù)據(jù)類型的結(jié)構(gòu)形式基本數(shù)據(jù)類型的結(jié)構(gòu)形式4.1 數(shù)據(jù)類型及其存儲規(guī)則數(shù)據(jù)類型及其存儲規(guī)則 4.1.2 數(shù)字數(shù)據(jù)類型數(shù)字數(shù)據(jù)類型數(shù)字數(shù)據(jù)類型包含三部分,即:數(shù)字數(shù)據(jù)類型包含三部分,即: 無

3、符號整數(shù)無符號整數(shù)。 當(dāng)選擇字節(jié)時,范圍是當(dāng)選擇字節(jié)時,范圍是0255; 當(dāng)選擇字時,范圍是當(dāng)選擇字時,范圍是065535。 帶符號整數(shù)。帶符號整數(shù)。 當(dāng)選擇字節(jié)時,范圍是當(dāng)選擇字節(jié)時,范圍是-128+127; 當(dāng)選擇字時,范圍是當(dāng)選擇字時,范圍是-32768+32767。 浮點數(shù)。浮點數(shù)。 帶符號數(shù)的表示方法帶符號數(shù)的表示方法 計算機中的帶符號的數(shù),用二進制編碼表示,數(shù)的符號計算機中的帶符號的數(shù),用二進制編碼表示,數(shù)的符號也用二進制表示。也用二進制表示。帶符號的數(shù)有三種表示方法:帶符號的數(shù)有三種表示方法: 1、原碼、原碼 2、反碼、反碼 3、補碼、補碼數(shù)數(shù)X的原碼記作的原碼記作X原原反碼記作

4、反碼記作X反反補碼記作補碼記作X補補 在進行運算時,負數(shù)的符號位不能與其數(shù)值部分一道參加運算,在進行運算時,負數(shù)的符號位不能與其數(shù)值部分一道參加運算,而必須利用單獨的線路確定和的符號位,從而使計算機的結(jié)構(gòu)而必須利用單獨的線路確定和的符號位,從而使計算機的結(jié)構(gòu)變得復(fù)雜化。為了解決機器內(nèi)復(fù)數(shù)變得復(fù)雜化。為了解決機器內(nèi)復(fù)數(shù) 的符號位參加運算的問題,引入的符號位參加運算的問題,引入了反碼和了反碼和補碼補碼兩種機器數(shù)形式。兩種機器數(shù)形式。補補 充充 知知 識識 帶符號數(shù)的表示方法(續(xù))帶符號數(shù)的表示方法(續(xù))補補 充充 知知 識識 原碼表示法:原碼表示法: 原碼用數(shù)的最左邊一位(原碼用數(shù)的最左邊一位(M

5、SB)表示數(shù)的正負,)表示數(shù)的正負,即在即在D7或或D15位加位加0或或1。 符號位:符號位:0表示正,表示正,1表示負;表示負; 數(shù)值位:真值的絕對值。數(shù)值位:真值的絕對值。 反碼表示法:反碼表示法: 若若X0 ,則,則 X反反=X原原 若若X0, 則則X補補= X反反= X原原若若X9 0000 0110 加加6調(diào)整調(diào)整 0001 0100 0000 1111 清高清高4位位 0000 0100 AL=4 CF=1,AF=1,AH=1結(jié)果為結(jié)果為AX=0104H,表示非壓縮十進制數(shù)表示非壓縮十進制數(shù)14。 調(diào)整過程為:調(diào)整過程為: 若若AL低低4位位9或或半進位標(biāo)志半進位標(biāo)志AF=1,則:

6、,則: ALAL+6; 用與操作(用與操作()將)將AL高高4位清位清0; AF置置1,CF置置1,AHAH+1。否。否則,僅將則,僅將AL寄存器的高寄存器的高4位清位清0。格式格式:DAA功能功能:將兩個將兩個壓縮壓縮BCD數(shù)數(shù)相加后的結(jié)果調(diào)整為正確的壓縮相加后的結(jié)果調(diào)整為正確的壓縮BCD數(shù)。相加后的結(jié)果必須在數(shù)。相加后的結(jié)果必須在AL中,才能使用中,才能使用DAA指令。指令。調(diào)整過程為:調(diào)整過程為: 做加法后做加法后AL中的低半字節(jié)中的低半字節(jié)9或或AF=1,則,則ALAL+6,對低半字節(jié)進行調(diào)整。對低半字節(jié)進行調(diào)整。 做加法后做加法后AL中高半字節(jié)結(jié)果中高半字節(jié)結(jié)果9或或CF=l,則,則

7、ALAL+60H,對高半字節(jié)進行調(diào)整,并使對高半字節(jié)進行調(diào)整,并使CF置置l,否則,否則CF置置0。 u 加法指令加法指令 DAA(Decimal Adjust for Addition)加法的十進)加法的十進制調(diào)整指令(制調(diào)整指令(壓縮壓縮BCD碼加法累加器調(diào)整指令)碼加法累加器調(diào)整指令) 例例4-9 若若AL寄存器中存放寄存器中存放BCD碼數(shù)碼數(shù)88,BL寄存器中存放寄存器中存放BCD碼數(shù)碼數(shù)49,寫出兩寄存器相加的指令語句。,寫出兩寄存器相加的指令語句。解:指令代碼如下:解:指令代碼如下:ADD AL,BLDAA 1000 1000 88 0100 1001 49 1101 0001 A

8、F=1 0000 0110 加加6調(diào)整調(diào)整 1101 0111 調(diào)整后高半字節(jié)調(diào)整后高半字節(jié) 9 0110 0000 加加60H調(diào)整調(diào)整 0011 0111 結(jié)果為結(jié)果為AL=BCD 37,CF=1u 減法指令減法指令 SUB (Subtraction)不帶借位的減法指令)不帶借位的減法指令格式:格式:SUB DST,SRC操作:操作:DSTDSTSRC。 SBB (Subtract with Borrow)帶借位的減法指令)帶借位的減法指令格式:格式:SBB DST,SRC操作:操作: DSTDSTSRCCF DEC(Decrement)減)減1指令指令格式:格式:DEC OPR操作:操作:

9、OPROPR1格式:格式:AAS功能:在用功能:在用SUB或或SBB指令對兩個指令對兩個非壓縮十進制數(shù)非壓縮十進制數(shù)或以或以ASCII碼表示的十進制數(shù)進行相減后,對碼表示的十進制數(shù)進行相減后,對AL中所得結(jié)果進行調(diào)中所得結(jié)果進行調(diào)整,在整,在AL中得到一個正確的非壓縮十進制數(shù)之差。如果有借中得到一個正確的非壓縮十進制數(shù)之差。如果有借位,則位,則CF置置1。AAS指令必須緊跟在指令必須緊跟在SUB或或SBB指令之后。指令之后。調(diào)整過程為:若調(diào)整過程為:若AL寄存器的低寄存器的低4位位9或或AF=1,則:,則:ALAL6,AF置置1;將將AL寄存器高寄存器高4位清零;位清零;AHAH1,CF置置1

10、。否則,不需要調(diào)整。否則,不需要調(diào)整。 AAS(ASCII Adjust for Subtraction) 減法的減法的ASCII調(diào)整指令調(diào)整指令u 減法指令減法指令 DAS(Decirnal Adjust for Subtraction) 減法的十進減法的十進制調(diào)整指令制調(diào)整指令u 減法指令減法指令格式:格式:DAS功能:在兩個功能:在兩個壓縮十進制數(shù)壓縮十進制數(shù)用用SUB或或SBB相減后,結(jié)果已存相減后,結(jié)果已存在在AL中的情況下,對所得結(jié)果進行調(diào)整,在中的情況下,對所得結(jié)果進行調(diào)整,在AL中得到正確的壓中得到正確的壓縮十進制數(shù)。同樣,它也要對縮十進制數(shù)。同樣,它也要對AL中高半字節(jié)和低半

11、字節(jié)分別進中高半字節(jié)和低半字節(jié)分別進行調(diào)整。行調(diào)整。調(diào)整過程為:調(diào)整過程為:如果如果AL寄存器的低寄存器的低4位位9或或AF=1,則:,則:ALAL6,AF置置1。如果此時如果此時AL高半字節(jié)高半字節(jié)9或標(biāo)志位或標(biāo)志位CF=1,則:,則:ALAL60H,CF置置1 。 NEG (Negate)取負指令(取補指令)取負指令(取補指令)格式:格式:NEG OPR;按位取反加;按位取反加1(包括符號位)(包括符號位)操作:操作:OPR0OPR(或(或OPROPR)。)。注意:取補指令不同于補碼!注意:取補指令不同于補碼!舉例:舉例:MOV AL,73H NEG AL;AL=? u 減法指令減法指令答

12、案:答案:AL=8DH CMP (Compare)比較指令)比較指令 格式:格式:CMP DST,SRC 功能:即:功能:即:DST-SRC,結(jié)果不回送到目的操作,結(jié)果不回送到目的操作數(shù)中,僅將結(jié)果反映在標(biāo)志位上,可用條件跳轉(zhuǎn)指數(shù)中,僅將結(jié)果反映在標(biāo)志位上,可用條件跳轉(zhuǎn)指令決定程序的去向。令決定程序的去向。 說明:比較指令主要用在希望比較兩個數(shù)的大說明:比較指令主要用在希望比較兩個數(shù)的大小,而又不破壞原操作數(shù)的情況。小,而又不破壞原操作數(shù)的情況。 u 減法指令減法指令u 乘法指令乘法指令 MUL (Multiply)無符號數(shù)乘法指令)無符號數(shù)乘法指令格式:格式:MUL SRC操作:字節(jié)操作數(shù):

13、操作:字節(jié)操作數(shù):AXALSRC 字操作數(shù):(字操作數(shù):(DX,AX)AXSRC說明:說明:SRC可以是寄存器,或是存儲單元,但不能是立即可以是寄存器,或是存儲單元,但不能是立即數(shù)。當(dāng)數(shù)。當(dāng)SRC是存儲單元時,必須在操作數(shù)前加是存儲單元時,必須在操作數(shù)前加B或或W說明是字說明是字節(jié)還是字。節(jié)還是字。舉例:舉例: MUL BYTE PTRSI MUL WORD PTRBX MUL DL說明:說明:MUL指令執(zhí)行后影響指令執(zhí)行后影響CF和和OF標(biāo)志。乘法指令使標(biāo)志。乘法指令使AF、PF、SF和和ZF的狀態(tài)不定。的狀態(tài)不定。 如果結(jié)果的高半部分(字節(jié)操作為如果結(jié)果的高半部分(字節(jié)操作為AH、字操作為

14、、字操作為DX)不)不為零,表明其內(nèi)容是結(jié)果的有效位,則為零,表明其內(nèi)容是結(jié)果的有效位,則CF和和OF均置均置1。否則,。否則,CF和和OF均清均清0。 MUL (Multiply)無符號數(shù)乘法指令(續(xù))無符號數(shù)乘法指令(續(xù))u 乘法指令乘法指令 IMUL (Integer Multiply)帶符號數(shù)乘法指令)帶符號數(shù)乘法指令u 乘法指令乘法指令格式:格式:IMUL SRC 操作:同操作:同MUL指令。指令。功能:把乘數(shù)和累加器中的數(shù)都作為帶符號數(shù),進行相乘。功能:把乘數(shù)和累加器中的數(shù)都作為帶符號數(shù),進行相乘。乘積的符號符合一般代數(shù)運算規(guī)則。乘積的符號符合一般代數(shù)運算規(guī)則。說明:說明: 如果乘

15、積的高半部分不是低半部分的符號擴展(不是全如果乘積的高半部分不是低半部分的符號擴展(不是全零或全零或全1),則視高位部分為有效位,表示它是積的一部),則視高位部分為有效位,表示它是積的一部分,于是置分,于是置CF=1,OF=1。 若結(jié)果的高半部分為全零或全若結(jié)果的高半部分為全零或全1,表明它僅包含了符號,表明它僅包含了符號位,那么使位,那么使CF=0,OF=0。 利用這兩個標(biāo)志狀態(tài)可決定是否需要保存積的高位字節(jié)利用這兩個標(biāo)志狀態(tài)可決定是否需要保存積的高位字節(jié)或高位字。或高位字。IMUL指令執(zhí)行后,指令執(zhí)行后,AF、PF、SF和和ZF不定。不定。 DIV(Division unsigned)無符

16、號數(shù)除法指令)無符號數(shù)除法指令u 除法指令除法指令格式:格式:DIV SRC操作:操作: 字節(jié)除數(shù):字節(jié)除數(shù):ALAX/SRC的商;的商; AHAX/SRC的余數(shù)。的余數(shù)。 字除數(shù):字除數(shù): AX(DX,AX)/SRC的商;的商; DX(DX,AX)/SRC的余數(shù)。的余數(shù)。說明:被除數(shù)、除數(shù)、商及余數(shù)均為無符號數(shù)。說明:被除數(shù)、除數(shù)、商及余數(shù)均為無符號數(shù)。6個狀態(tài)標(biāo)志均無定義。個狀態(tài)標(biāo)志均無定義。 IDIV(Integer Division )帶符號數(shù)除法指令)帶符號數(shù)除法指令u 除法指令除法指令格式:格式:IDIV SRC操作:操作: 字節(jié)除數(shù):字節(jié)除數(shù):ALAX/SRC的商;的商; AHA

17、X/SRC的余數(shù)。的余數(shù)。 字除數(shù):字除數(shù): AX(DX,AX)/SRC的商;的商; DX(DX,AX)/SRC的余數(shù)。的余數(shù)。說明:被除數(shù),除數(shù)、商及余數(shù)均為帶符號數(shù),商的符號說明:被除數(shù),除數(shù)、商及余數(shù)均為帶符號數(shù),商的符號符合一般代數(shù)運算的符號規(guī)則,余數(shù)的符號與被除數(shù)相同。符合一般代數(shù)運算的符號規(guī)則,余數(shù)的符號與被除數(shù)相同。6個個狀態(tài)標(biāo)志均無定義。狀態(tài)標(biāo)志均無定義。商超過了目標(biāo)寄存器商超過了目標(biāo)寄存器AL或或AX所能存放數(shù)的范圍。這時系所能存放數(shù)的范圍。這時系統(tǒng)會自動產(chǎn)生一個中斷類型號為統(tǒng)會自動產(chǎn)生一個中斷類型號為0的除法錯中斷,相當(dāng)于執(zhí)行了的除法錯中斷,相當(dāng)于執(zhí)行了除數(shù)為除數(shù)為0的運算

18、,所得的商和余數(shù)都不確定。的運算,所得的商和余數(shù)都不確定。 這類指令的功能是對操作數(shù)最高位進行擴展,用于處理這類指令的功能是對操作數(shù)最高位進行擴展,用于處理帶符帶符號數(shù)號數(shù)運算時的操作類型匹配問題。運算時的操作類型匹配問題。 CBW(Convert Byte to Word)把字節(jié)擴展為字指令)把字節(jié)擴展為字指令 格式:格式:CBW 功能:功能:AL中字節(jié)的符號位擴展到中字節(jié)的符號位擴展到AH中(即把中(即把AL中的最中的最高位送入高位送入AH的所有位)的所有位) CWD(Convert Word to DoubleWord)把字擴展成雙字指令)把字擴展成雙字指令 格式:格式:CWD 功能:把

19、功能:把AX中字的符號位擴展到中字的符號位擴展到DX中(即把中(即把AH中的最中的最高位送入高位送入DX的所有位)的所有位) 標(biāo)志:不影響任何標(biāo)志位標(biāo)志:不影響任何標(biāo)志位 。u 符號擴展指令符號擴展指令補充例題:補充例題:MOV AL,10011010B;CBW ;AX1111111110011010B=0FF9AHAL10011010B=9AHMOV DX, 0 ;MOV AX,0FFABH;CWD ;(DX)=0(AX)=0FFABH(DX)=0FFFFH,(,(AX)=0FFABH4.4 8086的指令系統(tǒng)的指令系統(tǒng) 4.4.3 邏輯運算與移位指令邏輯運算與移位指令 邏輯運算和移位指令對

20、邏輯運算和移位指令對字節(jié)字節(jié)或或字字操作數(shù)進行操作數(shù)進行按位操按位操作作,這類運算可分成:,這類運算可分成: 邏輯運算邏輯運算(Logical Operations) 算術(shù)邏輯移位算術(shù)邏輯移位(shift Arithmetic and Shift Logical) 循環(huán)移位循環(huán)移位(Rotate)u 邏輯運算指令邏輯運算指令 邏輯與指令邏輯與指令A(yù)ND 格式:格式:AND DEST,SRC 操作:操作:DEST(DEST) (SRC) 說明:說明: 運算法則為:運算法則為:11=1,10=0,01=0,00=0u 邏輯運算指令邏輯運算指令 邏輯或指令邏輯或指令OR 格式:格式:OR DEST,

21、SRC 操作:操作:DEST(DEST) (SRC) 說明:說明: 運算法則為:運算法則為:11=1,10=1,01=1,00=0。 格式:格式:XOR DEST,SRC;(;(DEST)(DEST) (SRC ) 說明:說明: 運算法則為:運算法則為:1 1=0,1 0=1,0 1=1,0 0=0。u 邏輯運算指令邏輯運算指令 邏輯異或指令邏輯異或指令XOR 測試指令測試指令TEST 格式:格式:TEST DEST,SRC;FLAGS(DEST) (SRC ) 功能:源地址和目的地址的內(nèi)容執(zhí)行按位的邏輯乘運算,結(jié)果功能:源地址和目的地址的內(nèi)容執(zhí)行按位的邏輯乘運算,結(jié)果不送入目的地址,只影響標(biāo)

22、志位。不送入目的地址,只影響標(biāo)志位。u 邏輯運算指令邏輯運算指令 邏輯非指令邏輯非指令NOT: 格式:格式:NOT DEST ;DEST ( ) 功能:將目的地址中的內(nèi)容功能:將目的地址中的內(nèi)容逐位取反逐位取反后送入目的后送入目的地址。地址。DEST 補充知識:邏輯運算指令小結(jié)補充知識:邏輯運算指令小結(jié)u 邏輯運算指令的操作均是邏輯運算指令的操作均是按位進行按位進行的。的。u 邏輯非邏輯非NOT指令指令只有一個操作數(shù)。目的操作數(shù)可以是只有一個操作數(shù)。目的操作數(shù)可以是8位或位或16位寄存器或位寄存器或存儲器。對于存儲器操作數(shù),要說明其類型是字節(jié)還是字。指令執(zhí)行后,對標(biāo)存儲器。對于存儲器操作數(shù),要

23、說明其類型是字節(jié)還是字。指令執(zhí)行后,對標(biāo)志位無影響。志位無影響。其余邏輯運算指令均為雙操作數(shù)指令其余邏輯運算指令均為雙操作數(shù)指令,SRC可以是可以是8位或位或16位立位立即數(shù)、寄存器或存儲器,即數(shù)、寄存器或存儲器,DST只能是寄存器或存儲器,兩個操作數(shù)不能同時為只能是寄存器或存儲器,兩個操作數(shù)不能同時為存儲器。指令執(zhí)行后,均將存儲器。指令執(zhí)行后,均將CF和和OF清清0,ZF、SF和和PF反映操作結(jié)果,反映操作結(jié)果,AF未未定義,源操作數(shù)不變。定義,源操作數(shù)不變。u AND指令常用來對一個數(shù)據(jù)的指定位清零;指令常用來對一個數(shù)據(jù)的指定位清零;u OR指令可用來對一些指定的位置置指令可用來對一些指定

24、的位置置1;u XOR指令可用于將操作數(shù)的某些位取反;指令可用于將操作數(shù)的某些位取反;u TEST指令則常用于檢測某些數(shù)據(jù)的指定位是指令則常用于檢測某些數(shù)據(jù)的指定位是1還是還是0。小結(jié)小結(jié)u 算術(shù)邏輯移位指令算術(shù)邏輯移位指令 算術(shù)左移指令算術(shù)左移指令SAL 格式:格式:SAL DST,CNT最低位CF0最高位SAL移動 邏輯左移指令邏輯左移指令SHL 格式:格式:SHL DST,CNT最低位CF0最高位SHL移動u 算術(shù)邏輯移位指令算術(shù)邏輯移位指令 算術(shù)右移指令算術(shù)右移指令SAR 格式:格式:SAR DST,CNT 邏輯右移指令邏輯右移指令SHR 格式:格式:SHR DST,CNT最低位最高位

25、CFSAR移動0最低位最高位CFSHR移動移位指令實現(xiàn)對操作數(shù)的移位操作。移位指令實現(xiàn)對操作數(shù)的移位操作。 邏輯移位把操作數(shù)看成無符號數(shù)來移位,右移時,最高位補邏輯移位把操作數(shù)看成無符號數(shù)來移位,右移時,最高位補0,左移時,最低位補,左移時,最低位補0 算術(shù)移位則把操作數(shù)看做有符號數(shù),右移時最高位算術(shù)移位則把操作數(shù)看做有符號數(shù),右移時最高位(符號位符號位)保持不變,左移時,最低位補保持不變,左移時,最低位補0DST可以是可以是8位、位、16位寄存器或存儲器操作數(shù)。位寄存器或存儲器操作數(shù)。CNT為移位計為移位計數(shù)值,可以設(shè)定為數(shù)值,可以設(shè)定為1,也可以由寄存器,也可以由寄存器CL確定其值。確定其

26、值。小結(jié)小結(jié)小小 結(jié)結(jié) SHL和和SAL兩條指令的功能完全相同,在機器中實際對應(yīng)同一種操作。兩條指令的功能完全相同,在機器中實際對應(yīng)同一種操作。 對標(biāo)志位影響的情況是:對標(biāo)志位影響的情況是:AF總是無定義。總是無定義。PF、SF和和ZF在指令執(zhí)行后被修改。在指令執(zhí)行后被修改。CF總是等于目的操作數(shù)最后被移出去的那一位的值??偸堑扔谀康牟僮鲾?shù)最后被移出去的那一位的值。OF的值多次移位的情況下的值多次移位的情況下是不確定。在移位次數(shù)為是不確定。在移位次數(shù)為1的情況下,如果最高位(符號位)的值被改變,則的情況下,如果最高位(符號位)的值被改變,則OF標(biāo)志置標(biāo)志置1,否則,否則OF清清0。 移位操作還

27、可以實現(xiàn)對一個數(shù)乘以移位操作還可以實現(xiàn)對一個數(shù)乘以2n或除以或除以2n的運算,這種方法的運算速度的運算,這種方法的運算速度要比直接使用乘除法高很多。要比直接使用乘除法高很多。 邏輯移位指令適用于邏輯移位指令適用于無符號數(shù)運算無符號數(shù)運算,SHL用來乘以用來乘以2n,SHR用于除以用于除以2n; 算術(shù)移位指令用于對算術(shù)移位指令用于對帶符號數(shù)運算帶符號數(shù)運算,SAL用來乘以用來乘以2n,SAR用于除以用于除以2n。 小小 結(jié)(續(xù))結(jié)(續(xù))小結(jié)小結(jié)u 循環(huán)移位指令循環(huán)移位指令 不帶進位位的循環(huán)左移指令不帶進位位的循環(huán)左移指令ROL 格式:格式:ROL DST,CNT 不帶進位位的循環(huán)右移指令不帶進位

28、位的循環(huán)右移指令ROR 格式:格式:ROR DST,CNTCFROLROL移動CFRORROR移動u 循環(huán)移位指令循環(huán)移位指令 帶進位位的循環(huán)左移指令帶進位位的循環(huán)左移指令RCL 格式:格式:RCL DST,CNT 帶進位位的循環(huán)右移指令帶進位位的循環(huán)右移指令RCR 格式:格式:RCR DST,CNTCFRCLRCL移動CFRCRRCR移動小小 結(jié)結(jié)小結(jié)小結(jié)4條指令都按指令中計數(shù)值規(guī)定的移位次數(shù)進行循環(huán)移位,移位后的結(jié)條指令都按指令中計數(shù)值規(guī)定的移位次數(shù)進行循環(huán)移位,移位后的結(jié)果仍送回目的操作數(shù)。果仍送回目的操作數(shù)。目的操作數(shù)可以是目的操作數(shù)可以是8/16位的寄存器操作數(shù)或內(nèi)存操作數(shù),循環(huán)移位

29、的次位的寄存器操作數(shù)或內(nèi)存操作數(shù),循環(huán)移位的次數(shù)可以是數(shù)可以是1,也可以由,也可以由CL寄存器的值指定。寄存器的值指定。這這4條指令中,條指令中,ROL和和ROR指令沒有把進位標(biāo)志指令沒有把進位標(biāo)志CF包含在循環(huán)中,而包含在循環(huán)中,而RCL和和RCR指令把指令把CF作為整個循環(huán)的一部分,一起參加循環(huán)移位。作為整個循環(huán)的一部分,一起參加循環(huán)移位。OF位只位只有在移位次數(shù)為有在移位次數(shù)為1的時候才有效,在移位后當(dāng)前最高有效位(符號位)發(fā)生變的時候才有效,在移位后當(dāng)前最高有效位(符號位)發(fā)生變化時,則化時,則OF標(biāo)志置標(biāo)志置1,否則,否則OF置置0。在多位循環(huán)移位時,。在多位循環(huán)移位時,OF的值是不

30、確定的。的值是不確定的。CF的值總是由最后一次被移出的值決定。的值總是由最后一次被移出的值決定。 4.4 8086的指令系統(tǒng)的指令系統(tǒng) 4.4.4 串操作指令串操作指令 字符串(字符串(String)是指一系列存放在存儲器中的字或字節(jié)數(shù))是指一系列存放在存儲器中的字或字節(jié)數(shù)據(jù)。字符串長度可達據(jù)。字符串長度可達64K字節(jié),組成字符串的字節(jié),組成字符串的字節(jié)或字字節(jié)或字稱為字符稱為字符串元素,每種字符串指令對字符串中的元素只進行同一種操作。串元素,每種字符串指令對字符串中的元素只進行同一種操作。8086提供提供5條條1字節(jié)的字符串操作指令,專門對存儲器中的字節(jié)串字節(jié)的字符串操作指令,專門對存儲器中

31、的字節(jié)串和字串?dāng)?shù)據(jù)進行。和字串?dāng)?shù)據(jù)進行。 分類:傳送(分類:傳送(Move String)、比較()、比較(Compare String)、掃)、掃描(描(Scan String)、存儲()、存儲(Store String)、裝入()、裝入(Load String)。)。 u 字符串的傳送字符串的傳送MOVS格式格式1:MOVSB ;(;(ES:DI) (DS:SI),), SI SI1 , ; DI DI1格式格式2: MOVSW; (ES:DI) (DS:SI),), SI SI2 , ; DI DI2功能:功能: 將以將以SI為指針的源串中的一個字節(jié)(或字)存儲單元中的為指針的源串中的一

32、個字節(jié)(或字)存儲單元中的數(shù)據(jù)傳送至以數(shù)據(jù)傳送至以DI為指針的目的地址中去,并自動修改指針,為指針的目的地址中去,并自動修改指針,使之指向下一個字節(jié)(或字)存儲單元。使之指向下一個字節(jié)(或字)存儲單元。 在使用在使用MOVS指令進行字符串傳送時,傳送方向由指令進行字符串傳送時,傳送方向由DF控制??刂?。 如果源字符串與目標(biāo)字符串不重迭,則傳送方向可以任意。如果源字符串與目標(biāo)字符串不重迭,則傳送方向可以任意。 注意注意(a)源和目的不重疊,)源和目的不重疊, DF取值任意取值任意 源源串串目目的的串串低地址低地址高地址高地址 若源字符串與目標(biāo)字符串部分重迭,則傳送方向要特別若源字符串與目標(biāo)字符串

33、部分重迭,則傳送方向要特別注意。當(dāng)源字符串的地址注意。當(dāng)源字符串的地址低于低于目標(biāo)字符串的地址時,則應(yīng)該目標(biāo)字符串的地址時,則應(yīng)該自動減量(置自動減量(置DF=1),從),從高地址高地址開始傳送。開始傳送。(b)源和目的下重疊,)源和目的下重疊, DF=1 源源串串目目的的串串低地址低地址高地址高地址 當(dāng)源字符串的地址當(dāng)源字符串的地址高于高于目標(biāo)字符串的地址時,則應(yīng)該自動目標(biāo)字符串的地址時,則應(yīng)該自動增量(置增量(置DF=0),從),從低地址低地址開始傳送。開始傳送。源源串串目目的的串串低地址低地址高地址高地址(c)源和目的上重疊,)源和目的上重疊, DF=0 格式格式1:CMPSB ;FLA

34、GS (DS:SI)-(ES:DI) , ;SI SI1,DI DI1格式格式2:CMPSW;FLAGS (DS:SI)-(ES:DI),), ;SI SI2,DI DI2u 字符串的比較指令字符串的比較指令CMPS功能:功能: 將將SI所指的源串中的一個字節(jié)(或字)存儲單元中的數(shù)據(jù)所指的源串中的一個字節(jié)(或字)存儲單元中的數(shù)據(jù)與與DI 所指的目的串中的一個字節(jié)(或字)存儲單元中的數(shù)據(jù)相減,所指的目的串中的一個字節(jié)(或字)存儲單元中的數(shù)據(jù)相減,并根據(jù)相減的結(jié)果設(shè)置標(biāo)志,但結(jié)果并不保存。并根據(jù)相減的結(jié)果設(shè)置標(biāo)志,但結(jié)果并不保存。u 字符串的掃描指令字符串的掃描指令SCAS功能:功能: AL(字節(jié)

35、)或(字節(jié))或AX(字)中的內(nèi)容與(字)中的內(nèi)容與DI所指的目的串中的所指的目的串中的一個字節(jié)(或字)存儲單元中的數(shù)據(jù)相減,根據(jù)相減結(jié)果設(shè)置一個字節(jié)(或字)存儲單元中的數(shù)據(jù)相減,根據(jù)相減結(jié)果設(shè)置標(biāo)志位,結(jié)果不保存。標(biāo)志位,結(jié)果不保存。 利用利用SCAS指令,可在內(nèi)存中搜索所需要的數(shù)據(jù)。被搜索的指令,可在內(nèi)存中搜索所需要的數(shù)據(jù)。被搜索的數(shù)據(jù)也稱為數(shù)據(jù)也稱為關(guān)鍵字關(guān)鍵字。指令執(zhí)行前,先將關(guān)鍵字存在。指令執(zhí)行前,先將關(guān)鍵字存在AL(字節(jié))(字節(jié))或或AX(字)中,才能用(字)中,才能用SCAS指令進行搜索。指令進行搜索。格式格式1:SCASB ;FLAGS AL -(ES:DI) ,DI DI1格式

36、格式2:SCASW; FLAGS AX-(ES:DI) ,DI DI2u 字符串的裝入指令字符串的裝入指令LODS格式格式1:LODSB ; AL (DS:SI),),SI SI1格式格式2:LODSW; AX (DS:SI),),SI SI2u 字符串的存儲指令字符串的存儲指令STOS格式格式1:STOSB ;(;(ES:DI) AL,DI DI1格式格式2:STOSW;(;(ES:DI) AX,DI DI2 為了加快串運算指令的執(zhí)行速度,可在基本指令前加為了加快串運算指令的執(zhí)行速度,可在基本指令前加重復(fù)前綴重復(fù)前綴,使數(shù)據(jù)串指令重復(fù)執(zhí)行。每重復(fù)執(zhí)行一次,地址指針使數(shù)據(jù)串指令重復(fù)執(zhí)行。每重復(fù)

37、執(zhí)行一次,地址指針SI和和DI都根據(jù)都根據(jù)方向標(biāo)志方向標(biāo)志DF自動進行修改,自動進行修改,CX的值則自動減的值則自動減1。 REP:REP前綴用在前綴用在MOVS指令前。指令前。 功能:每執(zhí)行一次串指令,(功能:每執(zhí)行一次串指令,(CX)1,直到(,直到(CX)=0,重,重復(fù)執(zhí)行結(jié)束。復(fù)執(zhí)行結(jié)束。 REPZ :該指令一般用在:該指令一般用在CMPS、SCAS指令前。指令前。 功能:每執(zhí)行一次串指令,(功能:每執(zhí)行一次串指令,(CX)1,并判斷,并判斷ZF標(biāo)志是否標(biāo)志是否為為0,只要(,只要(CX)=0或或ZF=0,則重復(fù)執(zhí)行結(jié)束。,則重復(fù)執(zhí)行結(jié)束。 REPNZ :該指令一般用在:該指令一般用在

38、CMPS、SCAS 指令前。指令前。 功能:每執(zhí)行一次串指令,(功能:每執(zhí)行一次串指令,(CX)1,并判斷,并判斷ZF標(biāo)志是否標(biāo)志是否為為0,只要(,只要(CX)=0或或ZF=1,則重復(fù)執(zhí)行結(jié)束。,則重復(fù)執(zhí)行結(jié)束。重復(fù)過程:重復(fù)過程:1、檢測、檢測CX。若。若CX=0,則退出串操作;否則繼續(xù)執(zhí)行,則退出串操作;否則繼續(xù)執(zhí)行2。2、完成一次串操作。、完成一次串操作。3、修改地址指針,、修改地址指針,SI SI1(或(或2)DI DI1(或(或2)。)。4、CX CX-15、若重復(fù)前綴為、若重復(fù)前綴為REP,則轉(zhuǎn),則轉(zhuǎn)1執(zhí)行;執(zhí)行; 若重復(fù)前綴為若重復(fù)前綴為REPZ,且,且ZF=1時,則轉(zhuǎn)時,則轉(zhuǎn)

39、1執(zhí)行;否則執(zhí)行;否則退出串操作;退出串操作; 若重復(fù)前綴為若重復(fù)前綴為REPNZ,且,且ZF=0時,則轉(zhuǎn)時,則轉(zhuǎn)1執(zhí)行;否則執(zhí)行;否則退出串操作。退出串操作。表表4-10 串操作指令及重復(fù)前綴串操作指令及重復(fù)前綴分組分組指令名稱指令名稱命令格式命令格式操操 作作串操串操作作指令指令串傳送串傳送(字節(jié),字串傳送字節(jié),字串傳送)MOVS DST,SRC(MOVSB, MOVSW)(ES:DI)(DS:SI),SISI1或或2, DIDI1或或2串比較串比較(字節(jié),字串比較字節(jié),字串比較)CMPS DST,SRC(CMPSB, CMPSW)(ES:DI)(DS:SI),SISI1或或2, DIDI

40、1或或2串掃描串掃描(字節(jié),字串掃描字節(jié),字串掃描)SCAS DST,SRC(SCASB,SCASW)AL或或AX (ES:DI),DIDI1或或2取串取串(取字節(jié),字串取字節(jié),字串)LODS SRC(LODSB,LODSW)AL或或AX (DS:SI),SISI1或或2存串存串(存字節(jié),字串存字節(jié),字串)STOS DST(STOSB,STOSW)(ES:DI) AL或或AX,DIDI1或或2重復(fù)重復(fù)前綴前綴無條件重復(fù)前綴無條件重復(fù)前綴REP使其后的串操作重復(fù)執(zhí)行,每執(zhí)行一次,使其后的串操作重復(fù)執(zhí)行,每執(zhí)行一次,CX的的內(nèi)容減內(nèi)容減1,直至,直至CX=0相等相等/為零重復(fù)前綴為零重復(fù)前綴REP

41、E/REPZ當(dāng)當(dāng)ZF=1且且CX0時,重復(fù)執(zhí)行其后的串操作,每時,重復(fù)執(zhí)行其后的串操作,每執(zhí)行一次,執(zhí)行一次,CX的內(nèi)容減的內(nèi)容減1,直至,直至ZF=0或或CX=0不相等不相等/不為零重復(fù)前不為零重復(fù)前綴綴REPNE/REPNZ當(dāng)當(dāng)ZF=0且且CX0時,重復(fù)執(zhí)行其后的串操作,每時,重復(fù)執(zhí)行其后的串操作,每執(zhí)行一次,執(zhí)行一次,CX的內(nèi)容減的內(nèi)容減1,直至,直至ZF=1或或CX=0小小 結(jié)結(jié)源串位于當(dāng)前數(shù)據(jù)段中,由源串位于當(dāng)前數(shù)據(jù)段中,由DS尋址,源串的元素由尋址,源串的元素由SI作指作指針,即源串字符的起始地址(或末地址)為針,即源串字符的起始地址(或末地址)為DS:SI,源串允許使用,源串允許

42、使用段超越前綴來修改段地址。段超越前綴來修改段地址。 目的串必須位于當(dāng)前附加段中,由目的串必須位于當(dāng)前附加段中,由ES尋址,目的串元素由尋址,目的串元素由DI作指針,即目的串字符的起始地址(或末地址)為作指針,即目的串字符的起始地址(或末地址)為ES:DI,但目,但目的串不允許使用段超越前綴修改的串不允許使用段超越前綴修改ES。如果要在同一段內(nèi)進行串運算,必須使如果要在同一段內(nèi)進行串運算,必須使DS和和ES指向同一段。指向同一段。 每執(zhí)行一次字符串指令,指針每執(zhí)行一次字符串指令,指針SI和和DI會自動進行修改,以便指會自動進行修改,以便指向下一待操作單元。向下一待操作單元。 DF標(biāo)志控制字符串

43、處理的方向。標(biāo)志控制字符串處理的方向。 要處理的字符串長度(字節(jié)或字數(shù))放在要處理的字符串長度(字節(jié)或字數(shù))放在CX寄存器中。寄存器中。 補補 充充 知知 識識如果已知兩個數(shù)據(jù)塊的內(nèi)容基本上是相同的,若要尋找其中是如果已知兩個數(shù)據(jù)塊的內(nèi)容基本上是相同的,若要尋找其中是否有不一致的地方,則應(yīng)使用否有不一致的地方,則應(yīng)使用CMP指令查找,并在指令查找,并在CMP指令前使指令前使用用REPE/REPZ前綴。前綴。如果已知兩個數(shù)據(jù)塊的內(nèi)容基本是不相同的,若要尋找其中相如果已知兩個數(shù)據(jù)塊的內(nèi)容基本是不相同的,若要尋找其中相一致的地方,則應(yīng)使用一致的地方,則應(yīng)使用CMP指令查找,并在指令查找,并在CMP指

44、令前使用指令前使用REPNE/REPNZ前綴。前綴。 例例4-22 要求把數(shù)據(jù)段要求把數(shù)據(jù)段DS中以中以SRC_MESS為偏移地址的一為偏移地址的一串字符串字符“HELLO!”,傳送到附加段,傳送到附加段ES中以中以NEW_LOC開始的開始的單單元中元中, 寫出其指令代碼?寫出其指令代碼?解:實現(xiàn)該操作的程序如下:解:實現(xiàn)該操作的程序如下:DATA SEGMENT ;數(shù)據(jù)段;數(shù)據(jù)段SRCMESS DBHELLO! ;源串;源串DATA ENDSEXTRA SEGMENT ;附加段;附加段NEWLOC DB 6 DUP(?) ;存放目的串;存放目的串EXTRA ENDSCODE SEGMENT

45、;代碼段;代碼段 ASSUME CS:CODE,DS:DATA,ES:EXTRA 程程 序序 頭頭 START: MOV AX,DATA MOV DS,AX ;DS數(shù)據(jù)段段址數(shù)據(jù)段段址 MOV AX,EXTRA MOV ES,AX ;ES附加段段址附加段段址 LEA SI,SRCMESS ;SI指向源串偏移地址指向源串偏移地址 LEA DI,NEWLOC ;DI指向目的串偏移地址指向目的串偏移地址 MOV CX,6 ;CX作串長度計數(shù)器作串長度計數(shù)器 CLD ;清方向標(biāo)志,地址增量;清方向標(biāo)志,地址增量DF=0 REP MOVSB ;重復(fù)傳送串中的各字節(jié)直到;重復(fù)傳送串中的各字節(jié)直到 ;CX=

46、0為止為止 CODE ENDS END START本例中的本例中的REP MOVSB指令也可用以下幾條指令代替:指令也可用以下幾條指令代替:AGAIN: MOVS NEWLOC,SRCMESS DEC CX JNZ AGAIN初初 始始 化化 例例4-23 在某一字符串中搜尋是否有字符在某一字符串中搜尋是否有字符A,若有,則把搜索次數(shù)記下來,若有,則把搜索次數(shù)記下來,送到送到BX寄存器中,若沒有查到,則將寄存器中,若沒有查到,則將BX寄存器清寄存器清0。寫出其指令代碼。寫出其指令代碼。解:設(shè)字符串起始地址解:設(shè)字符串起始地址STRING的的偏移地址為偏移地址為0,字符串長度為,字符串長度為CX

47、。 程序段如下:程序段如下: MOV DI,OFFSET STRING ;DI=字符串偏移地址字符串偏移地址(相對于(相對于LEA DI,STRING) MOV CX,COUNT ;CX=字符串長度字符串長度 MOV AL,A ;AL=關(guān)鍵字關(guān)鍵字A的的ASCII碼碼 CLD ;清方向標(biāo)志;清方向標(biāo)志 REPNE SCASB ;CX0(沒查完)和(沒查完)和ZF=0(不相等)時重復(fù)(不相等)時重復(fù) JZ FIND ;若;若ZF=1,表示已搜到,轉(zhuǎn)出,表示已搜到,轉(zhuǎn)出 MOV DI,0 ;若;若ZF=0,表示沒搜到,表示沒搜到,DI=0FIND: MOV BX,DI ;BX=搜索次數(shù)搜索次數(shù) H

48、LT ;停機;停機 例例4-24 若在數(shù)據(jù)段中有一個數(shù)據(jù)塊,起始地址為若在數(shù)據(jù)段中有一個數(shù)據(jù)塊,起始地址為BLOCK,數(shù)據(jù)塊中的數(shù)為,數(shù)據(jù)塊中的數(shù)為8位帶符號數(shù),要求將其中所含的正、負數(shù)分開,然后把正數(shù)送到附加段中始址位帶符號數(shù),要求將其中所含的正、負數(shù)分開,然后把正數(shù)送到附加段中始址為為PLUS_DATA的緩沖區(qū),負數(shù)則送到附加段中始址為的緩沖區(qū),負數(shù)則送到附加段中始址為MINUS_DATA的緩沖區(qū)的緩沖區(qū)。寫出其指令代碼。寫出其指令代碼。 解:可以將這塊數(shù)據(jù)看成一個數(shù)據(jù)串,用解:可以將這塊數(shù)據(jù)看成一個數(shù)據(jù)串,用SI作源串指針,作源串指針,DI和和BX分別作正、分別作正、負數(shù)目的緩沖區(qū)的指針

49、,負數(shù)目的緩沖區(qū)的指針,CX用于控制循環(huán)次數(shù),可寫出如下程序段:用于控制循環(huán)次數(shù),可寫出如下程序段: START: MOV SI, OFFSET BLOCK ;SI為源串指針為源串指針 MOV DI, OFFSET PLUS_DATA ;DI為正數(shù)目的區(qū)指針為正數(shù)目的區(qū)指針 MOV BX,OFFSET MINUS_DATA ;BX為負數(shù)目的區(qū)指針為負數(shù)目的區(qū)指針 MOV CX,COUNT ;CX放循環(huán)次數(shù)放循環(huán)次數(shù) CLD GOON: LODSB BLOCK ;AL取源串的一個字節(jié)取源串的一個字節(jié) TEST AL,80H ;是負數(shù);是負數(shù)? JNZ MINUS ;是,轉(zhuǎn);是,轉(zhuǎn)MINUS ST

50、OSB ;非負數(shù),將字節(jié)送正數(shù)區(qū);非負數(shù),將字節(jié)送正數(shù)區(qū) JMP AGAIN ;處理下一個字節(jié);處理下一個字節(jié) MINUS: XCHG BX,DI ;交換正負數(shù)指針;交換正負數(shù)指針 STOSB ;負數(shù)送入負數(shù)區(qū);負數(shù)送入負數(shù)區(qū) XCHG BX,DI ;恢復(fù)正負數(shù)指針;恢復(fù)正負數(shù)指針 AGAIN: DEC CX ;次數(shù)減;次數(shù)減1 JNZ GOON ;未處理完,繼續(xù)傳送;未處理完,繼續(xù)傳送 HLT ;停機;停機4.4 8086的指令系統(tǒng)的指令系統(tǒng) 4.4.5 控制轉(zhuǎn)移指令控制轉(zhuǎn)移指令 通常程序中的指令都是順序地逐條執(zhí)行的。利用通常程序中的指令都是順序地逐條執(zhí)行的。利用控制轉(zhuǎn)移控制轉(zhuǎn)移指指令可以令

51、可以改變改變CS和和IP的值的值,從而改變指令的執(zhí)行順序。,從而改變指令的執(zhí)行順序。 8086提供了如下幾種轉(zhuǎn)移指令:提供了如下幾種轉(zhuǎn)移指令: 無條件轉(zhuǎn)移(無條件轉(zhuǎn)移(Unconditional Transfer and CALL) 過程調(diào)用(過程調(diào)用(Call and Return) 條件轉(zhuǎn)移(條件轉(zhuǎn)移(Conditional Transfer) 循環(huán)控制(循環(huán)控制(Iteration Control) 中斷(中斷(Interrupt)補充知識補充知識-幾個概念的介紹幾個概念的介紹u 轉(zhuǎn)移轉(zhuǎn)移:控制程序轉(zhuǎn)向。:控制程序轉(zhuǎn)向。u 段間轉(zhuǎn)移(遠程轉(zhuǎn)移)段間轉(zhuǎn)移(遠程轉(zhuǎn)移):改變:改變CS和和IP

52、,用,用FAR表示。表示。u 段內(nèi)轉(zhuǎn)移(近程轉(zhuǎn)移)段內(nèi)轉(zhuǎn)移(近程轉(zhuǎn)移):改變:改變IP,用,用NEAR表示。表示。u 短轉(zhuǎn)移短轉(zhuǎn)移:段內(nèi)轉(zhuǎn)移,相對地址為:段內(nèi)轉(zhuǎn)移,相對地址為-128+127,用,用SHORT表示表示 。u 直接轉(zhuǎn)移直接轉(zhuǎn)移:指令直接給出目標(biāo)地址。:指令直接給出目標(biāo)地址。u 間接轉(zhuǎn)移間接轉(zhuǎn)移:轉(zhuǎn)移目標(biāo)地址由寄存器或存儲器間接給出。:轉(zhuǎn)移目標(biāo)地址由寄存器或存儲器間接給出。 這類指令又分成這類指令又分成2種類型:種類型:第一種類型:第一種類型:段內(nèi)轉(zhuǎn)移或近(段內(nèi)轉(zhuǎn)移或近(NEAR)轉(zhuǎn)移)轉(zhuǎn)移,轉(zhuǎn)移指令的目,轉(zhuǎn)移指令的目的地址和的地址和JMP指令在同一代碼段中,轉(zhuǎn)移時僅改變指令在同一

53、代碼段中,轉(zhuǎn)移時僅改變IP寄存器的內(nèi)寄存器的內(nèi)容,段地址容,段地址CS的值不變。的值不變。第二種類型:第二種類型:段間轉(zhuǎn)移或遠(段間轉(zhuǎn)移或遠(FAR)轉(zhuǎn)移)轉(zhuǎn)移,轉(zhuǎn)移指令的目的,轉(zhuǎn)移指令的目的地址和地址和JMP指令不在同一段中,發(fā)生轉(zhuǎn)移時,指令不在同一段中,發(fā)生轉(zhuǎn)移時,CS和和IP的值都要改的值都要改變,也就是說,程序要轉(zhuǎn)移到另一個代碼段去執(zhí)行變,也就是說,程序要轉(zhuǎn)移到另一個代碼段去執(zhí)行 無條件轉(zhuǎn)移指令可分成:無條件轉(zhuǎn)移指令可分成: 段內(nèi)直接轉(zhuǎn)移段內(nèi)直接轉(zhuǎn)移 段內(nèi)間接轉(zhuǎn)移段內(nèi)間接轉(zhuǎn)移 段間直接轉(zhuǎn)移段間直接轉(zhuǎn)移 段間間接轉(zhuǎn)移段間間接轉(zhuǎn)移u 無條件轉(zhuǎn)移指令無條件轉(zhuǎn)移指令JMP(Jump)格式:格式

54、:JMP SHORT 標(biāo)號標(biāo)號;段內(nèi)直接短轉(zhuǎn)移段內(nèi)直接短轉(zhuǎn)移操作:(操作:(IP)(當(dāng)前(當(dāng)前IP)8位位移量位位移量格式:格式:JMP NEAR PTR 轉(zhuǎn)移地址標(biāo)號轉(zhuǎn)移地址標(biāo)號(或(或JMP標(biāo)號);標(biāo)號);段段內(nèi)直接近轉(zhuǎn)移內(nèi)直接近轉(zhuǎn)移操作:(操作:(IP)(當(dāng)前(當(dāng)前IP)16位位移量位位移量注意:注意:在機器語言指令中,在機器語言指令中,8位或位或16位位移量用位位移量用帶符號數(shù)帶符號數(shù)表示,正位表示,正位移量表示向高地址方向轉(zhuǎn)移,負位移量表示向低地址方向轉(zhuǎn)移,移量表示向高地址方向轉(zhuǎn)移,負位移量表示向低地址方向轉(zhuǎn)移,負負位移量必須用位移量必須用補碼補碼表示。(范圍是表示。(范圍是-128

55、+127或或-32768+32767)由于由于IP為為16位長,當(dāng)它與位長,當(dāng)它與8位的位移量相加時,實際上是用符位的位移量相加時,實際上是用符號擴展法將號擴展法將8位位移量擴展成位位移量擴展成16位數(shù)后才相加的。位數(shù)后才相加的。 段內(nèi)直接轉(zhuǎn)移指令段內(nèi)直接轉(zhuǎn)移指令 段內(nèi)間接轉(zhuǎn)移指令段內(nèi)間接轉(zhuǎn)移指令格式:格式:JMP reg16;(;(IP)16位位reg內(nèi)容內(nèi)容補充格式:補充格式:JMP WORD PTR OPRD; IPEA說明:說明:EA為為OPRD 的的16位偏移地址,由尋址方式確定。位偏移地址,由尋址方式確定。OPRD僅為寄存器、存儲器操作數(shù)。僅為寄存器、存儲器操作數(shù)。舉例:舉例:JM

56、P WORD PTR 5BX 設(shè)指令執(zhí)行前,設(shè)指令執(zhí)行前,DS=2000 H,BX=100H,(,(20105H)=04F0H,則:指令執(zhí)行后,則:指令執(zhí)行后,IP=(20000 H+100 H+5H)=(20105H)=04F0H,即轉(zhuǎn)到代碼段內(nèi)偏移地址為,即轉(zhuǎn)到代碼段內(nèi)偏移地址為04F0H處執(zhí)行。處執(zhí)行。該指令的目的操作數(shù)前要加該指令的目的操作數(shù)前要加WORD PTR,表示進行的是字操作。,表示進行的是字操作。舉例:舉例:JMP WORD PTR 1234H 段間直接轉(zhuǎn)移指令段間直接轉(zhuǎn)移指令格式:格式:JMP FAR PTR 標(biāo)號標(biāo)號操作:(操作:(IP)轉(zhuǎn)移地址標(biāo)號的偏移地址轉(zhuǎn)移地址標(biāo)號

57、的偏移地址 (CS)轉(zhuǎn)移地址標(biāo)號的段地址轉(zhuǎn)移地址標(biāo)號的段地址功能:無條件轉(zhuǎn)移到指定標(biāo)號地址處并往下執(zhí)行。功能:無條件轉(zhuǎn)移到指定標(biāo)號地址處并往下執(zhí)行。舉例:舉例:JMP FAR PTR PROG_F 指令中用說明符指令中用說明符FAR PTR說明說明PROG_F為遠標(biāo)號,指令執(zhí)為遠標(biāo)號,指令執(zhí)行的操作為行的操作為(IP)PROG_F的段內(nèi)偏移量;的段內(nèi)偏移量;(CS)PROG_F所在段的段地址。所在段的段地址。 設(shè)標(biāo)號設(shè)標(biāo)號PROG_F所在段的基地址所在段的基地址=3500 H,偏移地址,偏移地址=080AH,則:指令執(zhí)行后,則:指令執(zhí)行后,IP=080AH,CS=3500 H,程序轉(zhuǎn),程序轉(zhuǎn)到

58、到3500:080AH處執(zhí)行。處執(zhí)行。 段間間接轉(zhuǎn)移指令段間間接轉(zhuǎn)移指令格式:格式:JMP DWORD PTR 存儲器尋址方式(存儲器尋址方式(mem32)操作:(操作:(IP)尋址到存儲單元的第一個字節(jié)尋址到存儲單元的第一個字節(jié) (CS)尋址到存儲單元的第三個字節(jié)尋址到存儲單元的第三個字節(jié)功能:無條件轉(zhuǎn)移到指定段的指定偏移地址處。功能:無條件轉(zhuǎn)移到指定段的指定偏移地址處。mem32是存是存放放4字節(jié)操作數(shù)的偏移地址,(字節(jié)操作數(shù)的偏移地址,(mem32)提供轉(zhuǎn)移目標(biāo)的偏移地)提供轉(zhuǎn)移目標(biāo)的偏移地址,(址,(mem322)提供轉(zhuǎn)移目標(biāo)的段地址。)提供轉(zhuǎn)移目標(biāo)的段地址。舉例:舉例: JMP DW

59、ORD PTRSI+0125H。 設(shè)指令執(zhí)行前,設(shè)指令執(zhí)行前,CS=1200H,IP=0005 H,DS=2500 H,SI=1300 H,內(nèi)存單元(,內(nèi)存單元(26425 H)=4500 H,(,(26427 H)=32F0 H。則。則:指令執(zhí)行后,:指令執(zhí)行后,IP=4500H,CS=32F0 H,程序轉(zhuǎn),程序轉(zhuǎn)到到32F0:4500H處執(zhí)行。處執(zhí)行。32F0:4500圖圖4-18 段間間接轉(zhuǎn)移指令的執(zhí)行過程段間間接轉(zhuǎn)移指令的執(zhí)行過程26425數(shù)據(jù)段數(shù)據(jù)段:FFAC25代碼段代碼段:0112005JMP指令操作碼指令操作碼DISP=01251200CS10H0005IP0045新新IP=4

60、500HF032新新CS=32F0H代碼段代碼段:JMP指令轉(zhuǎn)向地址指令轉(zhuǎn)向地址2500DS10H1300SI0125DISP小小 結(jié)結(jié)小結(jié)小結(jié)u 過程調(diào)用指令過程調(diào)用指令CALL和返回指令和返回指令 RET 在編程時,往往把某些完成特定功能而又經(jīng)常要用到的程在編程時,往往把某些完成特定功能而又經(jīng)常要用到的程序段,編寫成序段,編寫成獨立的模塊獨立的模塊,把它稱為,把它稱為過程過程(Procedure),也稱),也稱作作子程序子程序(Subroutine)。)。 在程序中用在程序中用CALL語句調(diào)用這些過程,調(diào)用過程的程序稱語句調(diào)用這些過程,調(diào)用過程的程序稱為為主程序主程序。 過程以語句過程以語

溫馨提示

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

評論

0/150

提交評論