微機(jī)原理課件第6講(電子ok)_第1頁
微機(jī)原理課件第6講(電子ok)_第2頁
微機(jī)原理課件第6講(電子ok)_第3頁
微機(jī)原理課件第6講(電子ok)_第4頁
微機(jī)原理課件第6講(電子ok)_第5頁
已閱讀5頁,還剩47頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第3章8086的尋址方式和指令系統(tǒng)

第6講教學(xué)目的和要求【教學(xué)目標(biāo)】通過8086指令結(jié)構(gòu)的講解,使學(xué)生了解并掌握乘法、除法類指令、邏輯運(yùn)算類指令和移位指令的結(jié)構(gòu)、功能和使用方法。【教學(xué)重點(diǎn)】①乘法指令;②移位指令;【教學(xué)難點(diǎn)】算術(shù)運(yùn)算指令和邏輯運(yùn)算指令的區(qū)別。乘法指令指令含義時鐘數(shù)MUL無符號數(shù)乘法70~139+EAIMUL整數(shù)乘法80~160+EAAAM乘法的ASCII調(diào)整83①M(fèi)UL無符號數(shù)乘法指令MUL無符號數(shù)乘法指令

(Multiplyunsigned)格式

MULsrc。功能

將源操作數(shù)和累加器中的數(shù)都當(dāng)成無符號數(shù),然后將兩數(shù)相乘,src可以是字(0~65535)和字節(jié)(0~255)。操作數(shù)要求可以是寄存器、存儲單元,但不能是立即數(shù);源操作數(shù)是存儲單元時,必須在操作數(shù)前加B或W說明是字節(jié)還是字。①M(fèi)UL無符號數(shù)乘法指令運(yùn)算情況

源操作數(shù)是一個字節(jié)源操作數(shù)與累加器AL中的內(nèi)容相乘,乘積為雙倍長的16位數(shù),高8位送到AH,低8位送AL。即

AX

AL×源。AL被乘數(shù)8位操作數(shù)乘數(shù)×8位AX乘積16位①M(fèi)UL無符號數(shù)乘法指令運(yùn)算情況

源操作數(shù)是一個字源操作數(shù)與累加器AX的內(nèi)容相乘,結(jié)果為32位數(shù),高位字放在DX寄存器中,低位字放在AX寄存器中。即

(DX,AX)

AX×源AX被乘數(shù)16位操作數(shù)乘數(shù)×16位AX乘積32位DX

舉例MULCL ;AL乘CL,結(jié)果在AX中MULBX;AX乘BX,結(jié)果在DX:AX中MULBYTE[DI];AL乘存儲器(8位),結(jié)果在AX中MULWORD[BX];AX乘存儲器字,結(jié)果在DX:AX中

如果運(yùn)算結(jié)果的高半部分(在AH或DX中)為零,則狀態(tài)標(biāo)志位(CF)=(OF)=0,否則(CF)=(OF)=1。因此,狀態(tài)標(biāo)志位(CF)=(OF)=1,表示AH或DX中包含著乘積的有效位。

①M(fèi)UL無符號數(shù)乘法指令

舉例

MOV AL,14H ;(AL)=14H--20 MOV CL,05H ;(CL)=05H--5 MUL CL ;(AX)=0064H--100

本例中結(jié)果的高半部分(AH)=0,因此,狀態(tài)標(biāo)志位(CF)=(OF)=0,通過檢測標(biāo)志,可以去除結(jié)果中的前導(dǎo)無效零。

有了乘法(和除法)指令,使有些運(yùn)算程序的編程變得簡單方便。但是必須注意,乘法指令的執(zhí)行速度很慢,除法指令也是如此。①M(fèi)UL無符號數(shù)乘法指令②IMUL整數(shù)乘法指令I(lǐng)MUL整數(shù)乘法指令

(IntegerMultiply)格式

IMULsrc。功能

將源操作數(shù)和累加器中的數(shù)都當(dāng)成有符號數(shù),然后將兩數(shù)相乘,src可以是字(-32768~32767)和字節(jié)(-128~127)。操作數(shù)要求和運(yùn)算情況

與MUL要求相同。

舉例IMULCL ;AL乘CL,結(jié)果在AX中IMULBX;AX乘BX,結(jié)果在DX:AX中IMULBYTE[DI];AL乘存儲器(8位),結(jié)果在AX中IMULWORD[BX];AX乘存儲器字,結(jié)果在DX:AX中

如果運(yùn)算結(jié)果的高半部分(在AH或DX中)為0或1,則狀態(tài)標(biāo)志位(CF)=(OF)=0,否則(CF)=(OF)=1。因此,狀態(tài)標(biāo)志位(CF)=(OF)=1,表示AH或DX中包含著乘積的有效位。為0,則表示高半部分是符號擴(kuò)展。

②IMUL整數(shù)乘法指令正數(shù),AH或DX為全0負(fù)數(shù),AH或DX為全1

舉例

MOV AX,04E8H;(AX)=04E8H MOV BX,4E20H;(BX)=4E20H IMUL?BX ;(DX:AX)=(AX)

(BX)以上指令的執(zhí)行結(jié)果為:(DX)=017FH,(AX)=4D00H,且(CF)=(OF)=1。實(shí)際上,以上指令完成帶符號數(shù)+1256和+20000的乘法運(yùn)算,得到乘積為+25120000。由于此時DX中結(jié)果的高半部分包含著乘積的有效數(shù)字,故狀態(tài)標(biāo)志位(CF)=(OF)=1。②IMUL整數(shù)乘法指令③AAM乘法的ASCII調(diào)整指令A(yù)AM乘法的ASCII調(diào)整指令(ASCIIAdjustforMultiply)格式

AAM。功能

對AL中的兩個非壓縮十進(jìn)制數(shù)相乘的乘積進(jìn)行十進(jìn)制數(shù)的調(diào)整,在AX中得到正確的非壓縮十進(jìn)制數(shù)的乘積,高位在AH中,低位在AL中。調(diào)整的過程

把AL寄存器內(nèi)容除以10,商放在AH中,余數(shù)在AL中。即:AH

AL/10所得的商;AL

AL/10所得的余數(shù).③AAM乘法的ASCII調(diào)整指令舉例

求兩個非壓縮十進(jìn)制數(shù)08和04之乘積。解:MOVAL,08H;置初值

MOVBL,04HMULBL;AL

08與04之乘積20HAAM;

調(diào)整得AH=03H(十位),AL=02H(個位)

結(jié)果:AX=0302H,即BCD數(shù)32。

若想轉(zhuǎn)換成ASCII碼,需再執(zhí)行

ORAX,3030H除法指令指令含義時鐘數(shù)DIV無符號除法80~168+EAIDIV整數(shù)除法101~190+EAAAD除法的ASCII調(diào)整60CBW把字節(jié)轉(zhuǎn)換成字2CWD把字轉(zhuǎn)換成雙字5①DIV無符號數(shù)除法指令DIV無符號數(shù)除法指令

(Divisionunsigned)格式

DIVsrc。功能

將兩個無符號數(shù)相除,被除數(shù)的長度必須是除數(shù)長度的兩倍,若不夠,必須擴(kuò)展被除數(shù)的長度。操作數(shù)要求可以是寄存器、存儲單元,但不能是立即數(shù);源操作數(shù)是存儲單元時,必須在操作數(shù)前加B或W說明是字節(jié)還是字。①DIV無符號數(shù)除法指令運(yùn)算情況

源操作數(shù)是一個字節(jié)

16位被除數(shù)必須放入AX中,src為8位。

AL

AX/src字節(jié)的商

AH

AX/src字節(jié)的余數(shù)

AX16位被除數(shù)操作數(shù)8位除數(shù)AL商

AH余數(shù)

①DIV無符號數(shù)除法指令運(yùn)算情況

源操作數(shù)是一個字

32位被除數(shù)必須放入(DX,AX)中,src為16位。

AX

(DX,AX)/src字的商

DX

(DX,AX)/src字的余數(shù)

DX,AX32位被除數(shù)操作數(shù)16位除數(shù)AX商

DX余數(shù)

舉例MOV AX,0F05H ;(AX)=0F05HMOV DX,068AH;(DX)=068AHMOV CX,08E9H;(CX)=08E9HDIV CX ;

運(yùn)算完畢后,商(AX)=BBE1H,余數(shù)(DX)=073CH①DIV無符號數(shù)除法指令

注意事項(xiàng)

執(zhí)行DIV指令時,如果除數(shù)為0,或字節(jié)除法時AL寄存器中的商大于FFH,或字除法時AX寄存器中的商大于FFFFH,則CPU立即自動產(chǎn)生一個類型號為0的內(nèi)部中斷。

①DIV無符號數(shù)除法指令②IDIV整數(shù)除法指令I(lǐng)DIV整數(shù)除法指令

(IntegerDivision)格式

IDIVsrc。功能

將兩個帶符號數(shù)相除,被除數(shù)的長度必須是除數(shù)長度的兩倍,若不夠,必須用CBW或CWD擴(kuò)展被除數(shù)的長度。操作數(shù)要求與運(yùn)算情況

同DIV。

注意事項(xiàng)

執(zhí)行IDIV指令時,如果除數(shù)為0,或字節(jié)除法時AL寄存器中的商超出-128~127范圍,或字除法時AX寄存器中的商超出-32768~32767范圍,則CPU立即自動產(chǎn)生一個類型號為0的內(nèi)部中斷。

②IDIV整數(shù)除法指令②IDIV整數(shù)除法指令

關(guān)于余數(shù)的符號

在對有符號數(shù)進(jìn)行除法運(yùn)算時,例如-30除以8,可以得到商為-4,余數(shù)為+2;也可以得到商為-3,余數(shù)為-6,兩結(jié)果都是正確的。

對于8086,規(guī)定余數(shù)的符號和被除數(shù)的符號相同,因此第二種結(jié)果是8086執(zhí)行完以后的結(jié)果。被除數(shù)擴(kuò)展問題無論是無符號數(shù)還是有符號數(shù)除法時,必須滿足被除數(shù)長度是除數(shù)長度的兩倍。當(dāng)不夠時,涉及到被除數(shù)的擴(kuò)展。

無符號數(shù):被除數(shù)的擴(kuò)展比較簡單,添上足夠的零就可以了。以下指令將AL中的一個8位無符號數(shù)擴(kuò)展成為16位,存放在AX中。

MOV AL,0FBH ;(AL)=11111011B XOR AH,AH ;(AH)=00000000B

有符號數(shù):被除數(shù)的擴(kuò)展必須根據(jù)各自的符號來完成,因此,需要借助指令CBW和CWD完成。③CBW把字節(jié)轉(zhuǎn)換成字指令CBW把字節(jié)轉(zhuǎn)換成字指令

(ConvertBytetoWord)格式

CBW。功能

把寄存器AL中字節(jié)的符號位擴(kuò)充到AH的所有位。(AH被稱為AL的符號擴(kuò)充),不影響標(biāo)志位。擴(kuò)展方法

AL為正數(shù)(AL<80H)時,即D7=0時,使AH=00H。

AL為負(fù)數(shù)(AL>=80H)時,即D7=1時,使AH=0FFH。擴(kuò)展方法MOVAL,4FH ;(AL)=01001111BCBW;

由于AL<80H,或者說AL為正數(shù)時,符號位為0,AH應(yīng)補(bǔ)0,因此(AH)=00000000BMOVAL,0F4H ;(AL)=11110100B CBW ;

由于AL>7FH,或者說AL為負(fù)數(shù)時,符號位為1,AH應(yīng)補(bǔ)1,因此(AH)=11111111B③CBW把字節(jié)轉(zhuǎn)換成字指令④CWD把字轉(zhuǎn)換成雙字指令CWD把字轉(zhuǎn)換成雙字指令

(ConvertWordtoDoubleWord)格式

CWD。功能

把寄存器AX中字的符號位擴(kuò)充到DX的所有位。擴(kuò)展方法

AX為正數(shù)(AX<8000H)時,即D15=0時,使DX=0000H。

AX為負(fù)數(shù)(AX>7FFFH)時,即D15=1時,使DX=0FFFFH。

CBW和CWD指令在帶符號數(shù)的乘法(IMUL)和除法(IDIV)運(yùn)算中十分有用,在字節(jié)或字的運(yùn)算之前,將AL或AX中數(shù)據(jù)的符號位進(jìn)行擴(kuò)展。例如:MOV AL,MUL_BYTE;(AL)←8位被乘數(shù)(帶符號數(shù))CBW ;擴(kuò)展成為16位帶符號數(shù),在AX中IMUL?BX;兩個16位帶符號數(shù)相乘,結(jié)果在DX:AX中

CBW和CWD⑤AAD除法的ASCII調(diào)整指令A(yù)AD除法的ASCII調(diào)整指令

(ASCIIAdjustforDivision)格式

AAD。功能

在做除法之前,將AX中BCD碼轉(zhuǎn)換成二進(jìn)制數(shù)并存入AL中。調(diào)整過程

AL←AH×10+AL;AH←00。位運(yùn)算指令(12條)①邏輯運(yùn)算②循環(huán)移位NOT取反ROL循環(huán)左移AND與ROR循環(huán)右移OR或RCL通過進(jìn)位的循環(huán)左移XOR異或RCR通過進(jìn)位的循環(huán)右移TEST測試③算術(shù)邏輯移位SHL/SAL邏輯/算術(shù)左移SHR邏輯右移SAR算術(shù)右移

位操作指令是對8位或16位的寄存器或存儲單元中的內(nèi)容按位進(jìn)行操作。邏輯運(yùn)算指令命令含義時鐘數(shù)NOT取反3~16+EAAND與3~17+EAOR或3~16+EAXOR異或3~17+EATEST測試3~11+EA①NOT取反指令NOT取反指令

(LogicalNot)格式

NOTdst。功能

dst←dst取反,執(zhí)行完后不影響標(biāo)志位。操作數(shù)要求①可以是8位或16位寄存器、存儲器。②對于存儲器操作,需指明是字還是字節(jié)。②AND邏輯與指令A(yù)ND邏輯與指令

(LogicalAND)格式

ANDdst,src。src可以是立即數(shù)。功能

dst←dst∧src,執(zhí)行完后影響標(biāo)志位。主要用于使操作數(shù)的某些位保留(和“1”相與),而使某些位清除(和“0”相與)。操作數(shù)要求①可以是8位或16位寄存器、存儲器,不能同時為men。②對于存儲器操作,需指明是字還是字節(jié)。③OR邏輯或指令OR邏輯或指令

(LogicalOR)格式

ORdst,src。src可以是立即數(shù)。功能

dst←dst∨src,執(zhí)行完后影響標(biāo)志位。主要用于使操作數(shù)的某些位保留(和“0”相或),而使某些位置1(和“0”相或)。操作數(shù)要求①可以是8位或16位寄存器、存儲器,不能同時為men。②對于存儲器操作,需指明是字還是字節(jié)。AND,OR,NOT舉例舉例

MOVAL,35H;AL=0011,0101BANDAL,0FH;

∧0000,1111B,得AL=05HORAL,70H;

0111,0000B,得AL=75HNOTAL;

取反得1000,1010B,即AL=8AH④XOR異或指令XOR異或指令

(ExclusiveOR)格式

XORdst,src。src可以是立即數(shù)。功能

dst←dst⊕src,執(zhí)行完后影響標(biāo)志位。主要用于使操作數(shù)的某些位保留(和“0”相異或),而使某些位取反(和“1”相異或)。操作數(shù)要求

①可以是8位或16位reg、men,不能同時為men。

②對于存儲器操作,需指明是字還是字節(jié)。⑤TEST測試指令TEST測試指令

(Test)格式

TESTdst,src。src可以是立即數(shù)。功能

dst∧src,執(zhí)行完后影響標(biāo)志位。但是與完后的結(jié)果不回送。主要用于對某些位數(shù)據(jù)的檢測,編程時,其后往往緊跟條件轉(zhuǎn)移指令。操作數(shù)要求①可以是8位或16位寄存器、存儲器,不能同時為men。②對于存儲器操作,需指明是字還是字節(jié)。邏輯運(yùn)算指令總結(jié)

除了NOT指令外,其他指令都影響狀態(tài)標(biāo)志位。這些指令將根據(jù)各自邏輯運(yùn)算的結(jié)果影響SF、ZF和PF狀態(tài)標(biāo)志位,同時將CF和OF置“0”,但AF的值不確定。

算術(shù)邏輯移位指令命令含義時鐘數(shù)SHL/SAL邏輯/算術(shù)左移2~20+EA+4*位SHR邏輯右移2~20+EA+4*位SAR算術(shù)右移2~20+EA+4*位①SHL/SAL邏輯算術(shù)左移指令SHL/SAL邏輯算術(shù)左移指令

(ShiftLogic/ArithmeticLeft)格式

SHL/SALdst,1/CL。功能

將寄存器或存儲器中的目的操作數(shù)的各位左移,每移一次,最低有效位LSB補(bǔ)0,而最高有效位MSB進(jìn)入標(biāo)志位CF。MSBLSB……0CF①SHL/SAL邏輯算術(shù)左移指令舉例MOVAH,06H;AH=06H=00000110BSALAH,1;將AH的內(nèi)容左移1次,AH=

00001100BMOVCL,03HSHLDI,CL;將DI的內(nèi)容左移3次SALBYTEPTR[BX];將內(nèi)存單元的字節(jié)左移1位

左移一次,相當(dāng)于乘以2,僅移位一次時,可以直接用立即數(shù)表示,否則,移位次數(shù)必須送入CL中。②SHR邏輯右移指令SHR邏輯右移指令

(ShiftLogicRight)格式

SHRdst,1/CL。功能

各位進(jìn)行右移。每移一次,低位進(jìn)入CF,最高位補(bǔ)0。MSBLSB……0CF②SHR邏輯右移指令說明

若目的操作數(shù)為無符號數(shù),每右移一次,目的操作數(shù)除以2,余數(shù)被丟掉。舉例用右移的方法作除法133/8=16…5。解:MOVAL,10000101B;AL=133MOVCL,03H;CL=移位次數(shù)SHRAL,CL;右移3次指令執(zhí)行后,AL=10H=16,余數(shù)5被丟失。標(biāo)志位CF、AF不定。③SAR算術(shù)右移指令SAR算術(shù)右移指令

(ShiftArithmeticRight)格式

SARdst,1/CL。功能

各位進(jìn)行右移。每移一次,低位進(jìn)入CF,最高位保持不變。所謂算術(shù)和邏輯的區(qū)別就是在右移時,是補(bǔ)符號位還是零。MSBLSB……CF③SAR算術(shù)右移指令說明

若目的操作數(shù)為帶符號數(shù),每右移一次,目的操作數(shù)除以2,余數(shù)被丟掉。舉例用右移的方法作除法-128/8=-16。解:

MOVAL,10000000B;AL=-128

MOVCL,03H;CL=移位次數(shù)

SHRAL,CL;右移3次指令執(zhí)行后,AL=1111,0000B=0F0H=-16。循環(huán)移位指令命令含義時鐘數(shù)ROL循環(huán)左移2~20+EA+4*位ROR循環(huán)右移2~20+EA+4*位RCL通過進(jìn)位的循環(huán)左移2~20+EA+4*位RCR通過進(jìn)位的循環(huán)右移2~20+EA+4*位①R

溫馨提示

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

最新文檔

評論

0/150

提交評論