《微機原理與接口技術(shù)》課件-第3章8086指令系統(tǒng)3-2_第1頁
《微機原理與接口技術(shù)》課件-第3章8086指令系統(tǒng)3-2_第2頁
《微機原理與接口技術(shù)》課件-第3章8086指令系統(tǒng)3-2_第3頁
《微機原理與接口技術(shù)》課件-第3章8086指令系統(tǒng)3-2_第4頁
《微機原理與接口技術(shù)》課件-第3章8086指令系統(tǒng)3-2_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1微機原理與接口技術(shù)2§3-38086的指令系統(tǒng)

——算術(shù)運算指令二、算術(shù)運算指令算術(shù)運算指令可處理4種類型的數(shù):無符號二進制整數(shù)帶符號二進制整數(shù)無符號壓縮十進制整數(shù)(PackedDecimal)無符號非壓縮十進制整數(shù)(UnpackedDecimal)一個8位二進制數(shù)可看成4種不同類型的數(shù),所表示的數(shù)值亦不同。3§3-38086的指令系統(tǒng)

——算術(shù)運算指令數(shù)的表示:二進制數(shù):可以是8位或16位,若是帶符號數(shù),則用補碼表示。壓縮十進制數(shù):一個字節(jié)中存放兩個BCD碼十進制數(shù)。非壓縮十進制數(shù):一個字節(jié)的低半字節(jié)存放十進制數(shù),高半字節(jié)為全零。例如,對十進制數(shù)字58:壓縮十進制數(shù)表示:只需一個字節(jié),即01011000B;非壓縮十進制數(shù)表示:需兩個字節(jié),即00000101B和00001000B。4§3-38086的指令系統(tǒng)

——算術(shù)運算指令8086/8088指令系統(tǒng)提供:加、減、乘、除運算指令:處理無符號或帶符號的8位/16位二進制數(shù)的算術(shù)運算;調(diào)整操作指令:進行壓縮的或非壓縮的十進制數(shù)的算術(shù)運算;加法和減法運算指令:帶符號數(shù)和無符號數(shù)的加法和減法的運算可以用同一條加法或減法指令來完成。乘法和除法運算:分別設(shè)置無符號數(shù)和帶符號數(shù)的乘、除法指令。絕大部分算術(shù)運算指令都影響狀態(tài)標志位!5§3-38086的指令系統(tǒng)

——算術(shù)運算指令加法減法ADD加法SUB減法ADC帶進位的加法SBB帶借位的減法INC增量DEC減量AAA加法的ASCII調(diào)整NEG取負DAA加法的十進制調(diào)整CMP比較除法AAS減法的ASCII調(diào)整DIV無符號數(shù)除法DAS減法的十進制調(diào)整IDIV整數(shù)除法乘法AAD除法的ASCII調(diào)整MUL無符號數(shù)乘法CBW把字節(jié)轉(zhuǎn)換成字IMUL整數(shù)乘法CWD把字轉(zhuǎn)換成雙字AAM乘法的ASCII調(diào)整算術(shù)運算指令61.加法指令(Addition)⑴ADD加法指令(Addition)

指令格式:ADD目的,源指令功能:目的←源十目的⑵ADC帶進位的加法指令(AdditionwithCarry)

指令格式:ADC目的,源指令功能:目的←源十目的十CF注意:源操作數(shù)可以是寄存器、存儲器、立即數(shù);目的操作數(shù):只能用寄存器、存儲單元。源、目的操作數(shù)不能同時為存儲器,且類型必須一致,均為字節(jié)或字;這兩條指令影響的標志位為:CF、OF、PF、SF、ZF和AF?!?-38086的指令系統(tǒng)

——算術(shù)運算指令7§3-38086的指令系統(tǒng)

——算術(shù)運算指令例:兩種加法指令的實例

ADDAL,18H ;AL←

AL十18HADCBL,CL ;BL←

BL十CL十CFADCAX,DX ;AX←

AX十DX十CFADDAL,COST[BX];AL內(nèi)容和地址=DS:(COST+BX);的存儲字節(jié)相加,結(jié)果送ALADDCOST[BX],BL;將BL與物理地址=DS:(COST十BX)

;的存儲字節(jié)相加,結(jié)果留在該存儲單元中例:用加法指令對兩個8位16進制數(shù)5EH和3CH求和,并分析加法運算指令執(zhí)行后對標志位的影響。解:MOVAL,5EH ;AL=5EH(94)

MOVBL,3CH ;BL=3CH(60)

ADDAL,BL ;結(jié)果AL=9AH8§3-38086的指令系統(tǒng)

——算術(shù)運算指令討論ADD對標志位的影響:▲兩個數(shù)的相加過程:

010111105EH=94

+00111100即:

+3CH=60100110109AH=154運算后標志位:ZF=0,AF=1,CF=0,SF=1,PF=1,OF=1。思考:23467821H+4221A012H怎么寫程序?9§3-38086的指令系統(tǒng)

——算術(shù)運算指令⑶INC增量指令(Increment)

指令格式:INC目的指令功能:目的←目的十1

操作數(shù)的要求:通用寄存器、內(nèi)存。注意:▲這條指令主要用在循環(huán)程序中,對地址指針和循環(huán)計數(shù)器等進行修改;▲指令執(zhí)行后影響AF、OF、PF、SF和ZF,但不影響進位標志CF?!绻箖?nèi)存單元的內(nèi)容增1,程序中必須說明該存儲單元是字還是字節(jié)。例INCBYTEPTR[BX];內(nèi)存字節(jié)單元內(nèi)容增1INCWORDPTR[BX];內(nèi)存字單元內(nèi)容增110§3-38086的指令系統(tǒng)

——算術(shù)運算指令⑷AAA加法的ASCII調(diào)整指令(ASCIIAdjustforAddition)指令格式:AAA指令功能:在用ADD或ADC指令對兩個非壓縮十進制數(shù)或ASCII碼表示的十進制數(shù)作加法后,運算結(jié)果已存在AL中,用此指令將AL寄存器中的運算結(jié)果調(diào)整為一位非壓縮十進制數(shù),仍保留在AL中。如果AF=1,表示向高位有進位,則進到AH寄存器中。調(diào)整過程:若AL低4位>9或AF=1

則:①AL←AL十6;②用與操作(∧)將AL高4位清0③AF置1,CF置1,AH←AH十1

否則,僅將AL寄存器的高4位清0。11§3-38086的指令系統(tǒng)

——算術(shù)運算指令例若AL=BCD9,BL=BCD5,求兩數(shù)之和。解:設(shè)AH=0,則運算過程如下:ADDAL,BL;00001001…9;+00000101…5

AAA;00001110…低4為>9;+00000110…加6調(diào)整;00010100

;^00001111…清高4位;00000100…AL=4

;CF=1,AF=1,AH=1;結(jié)果為AX=0104H,表示非壓縮十進制數(shù)14

12§3-38086的指令系統(tǒng)

——算術(shù)運算指令例

求ASCII碼表示的數(shù)9(39H)與5(35H)之和。

設(shè)AH=0,則運算過程如下:MOVAL,‘9’;AL=39HMOVBL,‘5’;BL=35HADDAL,BL;00111001…’9’;+00110101…’5’AAA;01101110…低4為>9;+00000110…加6調(diào)整;01110100

;^00001111…清高4位;00000100…AL=4

;CF=1,AF=1,AH=1;結(jié)果為AX=0104H,表示非壓縮十進制數(shù)14

13§3-38086的指令系統(tǒng)

——算術(shù)運算指令⑸DAA加法的十進制調(diào)整指令(DecimalAdjustforAddition)

指令格式:DAA

指令功能:將兩個壓縮BCD數(shù)相加后的結(jié)果調(diào)整為正確的壓縮BCD數(shù)。注意:相加后的結(jié)果必須在AL中,才能使用DAA指令。

調(diào)整過程:①若AL的低4位>9或AF=1,則AL←AL十6,對低4位進行調(diào)整;②若此時AL的高4位>9或CF=1,則AL←AL十60H,對高4位進行調(diào)整,并使CF置1,否則CF置0。14§3-38086的指令系統(tǒng)

——算術(shù)運算指令例若AL=BCD88,BL=BCD49,求兩數(shù)之和。解運算過程為:MOVAL,88H;AL=88HMOVBL,49H;BL=49HADDAL,BL;10001000…88;+01001001…49DAA;11010001…AF=1;+00000110…加6調(diào)整;11010111…調(diào)整后高半字節(jié)>9

;+01100000…加60H調(diào)整;00110111…結(jié)果為AL=BCD37,CF=1

15§3-38086的指令系統(tǒng)

——算術(shù)運算指令2.減法指令(Subtration)

⑴SUB減法指令(Subraction)

指令格式:SUB目的,源指令功能:目的←目的-源

SUBAX,BX ;AX←AX-BXSUBDX,1850H;DX←DX-1850HSUBBL,[BX] ;BL中內(nèi)容減去物理地址=DS:(BX)處的字節(jié),結(jié)果存入BL

⑵SBB帶借位的減法指令(SubtractwithBorrow)

指令格式:SBB目的,源

指令功能:目的←目的-源-CF

(SBB主要用于多字節(jié)減法中)例

SBBAL,CL

;AL←AL-CL-CF16§3-38086的指令系統(tǒng)

——算術(shù)運算指令⑶DEC減量指令(Decrement)

指令格式:DEC目的指令功能:目的←目的-1

DECBX ;BX←BX-1DECWORDPTR[BP] ;堆棧段中位于[BP]偏置處的字減1⑷NEG取負指令(Negate)指令格式:NEG目的指令功能:目的←0-目的,即對目的操作數(shù)取負

NEGAX ;將AX中的數(shù)取負

NEGBYTEPTR[BX];對數(shù)據(jù)段中位于[BX]偏置處的字節(jié)取負

17§3-38086的指令系統(tǒng)

——算術(shù)運算指令⑸CMP比較指令(Compare)

指令格式:CMP目的,源指令功能:目的-源,結(jié)果不回送到目的操作數(shù)中,僅反映在標志位上。用途:用在比較兩個數(shù)大小又不破壞原操作數(shù)的場合。18§3-38086的指令系統(tǒng)

——算術(shù)運算指令減法指令小結(jié):①對于雙操作數(shù)指令(SUB、SBB、CMP):▲源操作數(shù)可以是寄存器、存儲器或立即數(shù);▲目的操作數(shù)可以是寄存器、存儲器,但不能為立即數(shù);▲兩個操作數(shù)不能同時為存儲器。②對于單操作數(shù)指令(DEC、NEG):▲目的操作數(shù)可以是寄存器、存儲器,但不能為立即數(shù);▲如果是存儲器操作數(shù),還必須說明其類型是字節(jié)還是字。③運算之后,除DEC指令不影響CF標志外,其它均影響OF、SF、ZF、AF、PF和CF標志。④在減法操作后,如果源操作數(shù)大于目的操作數(shù),需要借位時,進位/借位標志CF將被置1。

19§3-38086的指令系統(tǒng)

——算術(shù)運算指令

設(shè)AL=10110001B,DL=01001010B,求AL-DL。解:SUBAL,DL

;與加法操作一樣,對結(jié)果的解釋取決于參與運算的數(shù)的性質(zhì),運算過程如下:

二進制減法當成無符號數(shù)當成帶符號數(shù)

10110001177-79(11001111B)-01001010-74-)+7401100111103+103

運算后標志位ZF=0,AF=1,CF=0,SF=0,PF=0,OF=1。討論:▲兩數(shù)為無符號數(shù):表示177與74的差是103。CF=0表示沒有借位,SF和OF無意義。▲兩數(shù)為帶符號數(shù):表示-79-(+74),結(jié)果應(yīng)為-153。但結(jié)果卻為正數(shù)(103),這是由于-153溢出造成的。此時,SF和OF有重要意義。

20§3-38086的指令系統(tǒng)

——算術(shù)運算指令⑹AAS減法的ASCII調(diào)整指令(ASCIIAdjustforSubtraction)

指令格式:AAS

指令功能:將AL寄存器中的運算結(jié)果調(diào)整為正確的非壓縮十進制數(shù)之差,仍保留在AL中。使用前提:用SUB或SBB指令對兩個非壓縮十進制數(shù)或ASCII碼表示的十進制數(shù)作減法,運算結(jié)果已存在AL。

調(diào)整過程:若AL寄存器的低4位>9或AF=1,則:①AL←AL-6,AF置1②將AL寄存器高4位清零③AH←AH-1,CF置1

否則,不需要調(diào)整21§3-38086的指令系統(tǒng)

——算術(shù)運算指令⑺DAS減法的十進制調(diào)整指令(DecimalAdjustforSubtracion)

指令格式:DAS

指令功能:將AL中兩個壓縮BCD數(shù)相減后的結(jié)果調(diào)整為正確的壓縮BCD數(shù)。高4位和低4位分別進行調(diào)整。使用前提:在兩個壓縮十進制數(shù)用SUB或SBB相減后,結(jié)果在AL中。

調(diào)整過程:①如果AL寄存器的低4位>9或AF=1

則:AL←AL-6,AF置1②如果此時AL高半字節(jié)>9或標志位CF=1

則:AL←AL-60H,CF置122§3-38086的指令系統(tǒng)

——算術(shù)運算指令

設(shè)AL=BCD56,CL=BCD98,求兩數(shù)之差。解:運算過程如下:SUBAL,CL;01010110…BCD56;-10011000…BCD98DAS;10111110…低4位>9,CF=AF=1;-00000110…減6調(diào)整;10111000…調(diào)整后高半字節(jié)>9

;-01100000…減60H調(diào)整;01011000…BCD58,CF=1

;結(jié)果為:AL=BCD58,CF=1,表示有借位23§3-38086的指令系統(tǒng)

——算術(shù)運算指令

3.乘法指令(Multiply)⑴MUL無符號數(shù)乘法指令(Multiply)

指令格式:MUL源指令功能:把源操作數(shù)和累加器中的數(shù)都當成無符號數(shù),然后將兩個數(shù)相乘,操作數(shù)可以是字節(jié)或字。

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

AX←AL×源。

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

(DX,AX)←

AX×源24§3-38086的指令系統(tǒng)

——算術(shù)運算指令操作數(shù)要求:可以是寄存器、存儲單元,但不能是立即數(shù);源操作數(shù)是存儲單元時,必須在操作數(shù)前加BYTE或WORD說明是字節(jié)還是字。

MULDL ;AX←AL×DLMULCX;(DX,AX)←AX×CXMULBYTEPTR[SI];AX←AL×(內(nèi)存中某字節(jié)),B說明字節(jié)乘法

MULWORDPTR[BX];(DX,AX)←AX×(內(nèi)存中某字),W說明字乘法25§3-38086的指令系統(tǒng)

——算術(shù)運算指令注意:▲MUL指令執(zhí)行后影響CF和OF標志。如果結(jié)果的高半部分不為零,表明其內(nèi)容是結(jié)果的有效位,則CF和OF均置1。否則,CF和OF均清0。

據(jù)此可檢測并去除結(jié)果中的無效前導(dǎo)零。▲乘法指令使AF、PF、SF和ZF的狀態(tài)不定。

26§3-38086的指令系統(tǒng)

——算術(shù)運算指令

例試計算FFH×FFH。解:用二進制表示成如下形式:

11111111×111111111111111000000001▲作為無符號數(shù):表示255×255=65025,結(jié)果正確?!鳛閹Х枖?shù):表示(-1)×(-1)=-511,顯然結(jié)果不正確?!肕UL指令作帶符號數(shù)的乘法,會得到錯誤的結(jié)果,必須用IMUL指令,才能使(-1)×(-1)得到正確的結(jié)果0000000000000001。

27§3-38086的指令系統(tǒng)

——算術(shù)運算指令⑵IMUL整數(shù)乘法指令(IntegerMultiply)指令格式:IMUL源指令功能:把源操作數(shù)和累加器中的數(shù)都作為帶符號數(shù),進行相乘。

▲存放結(jié)果的方式與MUL相同:源操作數(shù)為字節(jié):與AL相乘,雙倍長結(jié)果送到AX中;源操作數(shù)為字:與AX相乘,雙倍長結(jié)果送到DX和AX中,最后給乘積賦予正確的符號?!鴮酥疚坏挠绊懀撼朔e的高半部分不是低半部分的符號擴展(不是全0或全1),則高位部分為有效位,表示它是積的一部分,于是置CF=OF=1;結(jié)果的高半部分為全0或全1,表明它僅包含了符號位,那么使CF=OF=0。AF、PF、SF和ZF不定。28§3-38086的指令系統(tǒng)

——算術(shù)運算指令⑶AAM乘法的ASCII調(diào)整指令(ASCIIAdjustforMultiply)指令格式:AAM指令功能:對AL中的兩個非壓縮十進制數(shù)相乘的乘積進行十進制數(shù)的調(diào)整,在AX中得到正確的非壓縮十進制數(shù)的乘積,高位在AH中,低位在AL中。調(diào)整過程:把AL寄存器內(nèi)容除以10,商放在AH中,余數(shù)在AL中。即:AH←AL/10所得的商AL←AL/10所得的余數(shù)

29§3-38086的指令系統(tǒng)

——算術(shù)運算指令注意:▲兩個ASCII碼數(shù)相乘之前,先屏蔽掉每個數(shù)字的高半字節(jié),使每個字節(jié)包含一個非壓縮十進制數(shù)(BCD數(shù)),再用MUL指令相乘,乘積放到AL寄存器中,然后用AAM指令進行調(diào)整。▲標志位的影響:影響ZF、SF和PF,但AF、CF和OF無定義。▲8086的指令系統(tǒng)中,十進制乘法運算不允許采用壓縮十進制數(shù),故調(diào)整指令僅此一條。

30§3-38086的指令系統(tǒng)

——算術(shù)運算指令例求兩個非壓縮十進制數(shù)09和06之乘積。

解:MOVAL,09H ;置初值

MOVBL,06HMULBL ;AL

09與06之乘積36HAAM ;調(diào)整得AH=05H(十位),AL=04H(個位)

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

例如果AL和BL中分別存放9和6的ASCII碼,求兩數(shù)之積。解:用以下指令實現(xiàn):

ANDAL,0FH ;屏蔽高半字節(jié)

ANDBL,0FHMULBL ;相乘

AAM ;調(diào)整如要將結(jié)果轉(zhuǎn)換成ASCII碼,可用指令ORAX,3030H實現(xiàn),使AX=3534H。31§3-38086的指令系統(tǒng)

——算術(shù)運算指令

4.除法指令(Division)⑴DIV無符號數(shù)除法指令(Division,unsigned)

指令格式:DIV源指令功能:對兩個無符號二進制數(shù)進行除法操作。

▲源操作數(shù)為字節(jié):16位被除數(shù)必須放在AX中,8位除數(shù)為源操作數(shù)。

AL←AX/源(字節(jié))的商

AH←AX/源(字節(jié))的余數(shù)

若被除數(shù)只有8位,必須把它放在AL中,并將AH清0。32§3-38086的指令系統(tǒng)

——算術(shù)運算指令▲源操作數(shù)為字:32位被除數(shù)在(DX,AX)中,16位除數(shù)作源操作數(shù)。

AX←

(DX,AX)/源(字)的商

DX←

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

若被除數(shù)、除數(shù)都是16位,則將16位被除數(shù)送到AX中,再將DX清0。

注意:●源操作數(shù)可以是寄存器、存儲單元;

●DIV指令執(zhí)行后,所有標志位均無定義。

33§3-38086的指令系統(tǒng)

——算術(shù)運算指令⑵IDIV整數(shù)除法指令(IntegerDivision)

指令格式:IDIV源指令功能:對兩個帶符號二進制數(shù)進行除法操作(也稱為帶符號數(shù)除法)

注意:

▲操作與DIV相同;▲商和余數(shù)都是帶符號數(shù),且規(guī)定余數(shù)的符號和被除數(shù)的相同;▲指令執(zhí)行后,所有標志位均無定義。34§3-38086的指令系統(tǒng)

——算術(shù)運算指令⑶CBW把字節(jié)轉(zhuǎn)換為字指令(ConvertBytetoWord)

指令格式:CBW

溫馨提示

  • 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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論