微機(jī)原理 第三章3_第1頁(yè)
微機(jī)原理 第三章3_第2頁(yè)
微機(jī)原理 第三章3_第3頁(yè)
微機(jī)原理 第三章3_第4頁(yè)
微機(jī)原理 第三章3_第5頁(yè)
已閱讀5頁(yè),還剩31頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第3章Pentium的指令系統(tǒng)3.2.2算術(shù)運(yùn)算指令(Arithmetic)功能:提供加、減、乘、除、類型轉(zhuǎn)換五種基本算術(shù)操作;

利用十進(jìn)制調(diào)整指令和ASCII調(diào)整指令對(duì)BCD碼表示的十進(jìn)制數(shù)進(jìn)行算術(shù)運(yùn)算;

對(duì)帶符號(hào)數(shù)與無(wú)符號(hào)數(shù)進(jìn)行乘、除運(yùn)算。特點(diǎn):大部分都影響標(biāo)志位,不同指令影響不同:

都可以用于字節(jié)、字、雙字的運(yùn)算;

雙操作數(shù)指令當(dāng)源不為立即數(shù)時(shí),必須有一個(gè)操作數(shù)為寄存器;單操作數(shù)指令不能為立即數(shù)。

+-×÷2024/7/811)數(shù)的表示范圍

a.無(wú)符號(hào)數(shù)

N位二進(jìn)制數(shù)可表示的無(wú)符號(hào)數(shù)范圍為0~2N-1。例如,8位二進(jìn)制數(shù)00H~0FFH表示0~255,16位二進(jìn)制數(shù)0000H~0FFFFH表示0~65535。

b.有符號(hào)數(shù)

N位二進(jìn)制補(bǔ)碼數(shù)可以表示的帶符號(hào)數(shù)范圍為-2N-1~2N-1-1。例如,8位二進(jìn)制數(shù)可以表示-128~127,16位二進(jìn)制數(shù)可以表示-32768~32767。

CF=1OF=1第3章Pentium的指令系統(tǒng)溢出問(wèn)題2024/7/82這樣兩個(gè)有/無(wú)符號(hào)數(shù)進(jìn)行加減運(yùn)算時(shí),如果運(yùn)算結(jié)果超出可表示的數(shù)值范圍,會(huì)發(fā)生出錯(cuò),產(chǎn)生溢出現(xiàn)象。溢出只能出現(xiàn)在兩個(gè)同號(hào)數(shù)相加和兩個(gè)異號(hào)數(shù)相減的情況下。通常判別溢出的方法用雙高位法:所謂雙高位判別,即規(guī)定符號(hào)位(用CS表示)有進(jìn)位時(shí),CS=1,否則CS=0。數(shù)值部分最高位(CP表示)有進(jìn)位時(shí)CP=1,否則CS=0。若CS⊕CP=1("異或"運(yùn)算),則有溢出產(chǎn)生。

D7

D6

D5

D4

D3

D2

D1

D0CSCPCS⊕CP=1溢出第3章Pentium的指令系統(tǒng)如何判別溢出2024/7/831.加法類指令(Addition)

ADDdest,src

;(dest)

(dest)+(src)立即數(shù),寄存器,存儲(chǔ)器寄存器,存儲(chǔ)器1)不帶進(jìn)位位的加法指令A(yù)DDADD CX,1000H

ADD DI,SI

ADD [BX+DI],AXADD EAX,[BX+2000H]第3章Pentium的指令系統(tǒng)2024/7/84MOVAL,7EH ;(AL)=7EH MOVBL,5BH ;(BL)=5BH ADDAL,BL ;(AL)=7EH+5BH=D9H影響標(biāo)志位的情況:SF=1 ,結(jié)果最高位=1ZF=0 ,結(jié)果不等于0AF=1 ,D3位向D4有進(jìn)位

PF=0 ,”1”的個(gè)數(shù)為奇數(shù)

CF=0 ,無(wú)進(jìn)位

OF=1 ,和超過(guò)+127

(兩個(gè)正數(shù)相加,結(jié)果為負(fù);反之亦是)第3章Pentium的指令系統(tǒng)例:2024/7/85ADC AX,SI ADC DX,[SI] ADC BX,3000H 2)帶進(jìn)位位的加法指令A(yù)DCADCdest,src

;(dest)←(dest)+(src)+CFCF:

進(jìn)位標(biāo)志CF的現(xiàn)行值(上條指令CF值)用途:主要用于多字節(jié)運(yùn)算中。第3章Pentium的指令系統(tǒng)2024/7/86計(jì)算兩個(gè)多字節(jié)數(shù)相加3B74AC60F8H+20D59E36C1H=?流程圖多字節(jié)數(shù)內(nèi)存存放兩個(gè)多字節(jié)數(shù)存放在:DATA1,DATA2的開(kāi)始單元。舉例:第3章Pentium的指令系統(tǒng)2024/7/87程序:

MOVCX,5 MOVSI,0 ;清SI

CLC

;清CFLOOPER: MOVAL,DATA2[SI]

ADCDATA1[SI],AL INCSI ;(SI)+1

(SI) DECCX ;(CX)-1(CX) JNZLOOPER ;(CX)0轉(zhuǎn)

HLT ;停機(jī)第3章Pentium的指令系統(tǒng)2024/7/883)字交換加法指令XADDXADDdest,src

;(dest)→(src),(dest)+(src)→(dest)例:已知[EAX]=20000002H,

1000H開(kāi)始的內(nèi)存單元中為30000003H

執(zhí)行指令XADD[1000H],EAX[EAX]=30000003H,

1000H開(kāi)始的內(nèi)存單元中為50000005H源操作數(shù)必須是寄存器。目的操作數(shù)可以是存儲(chǔ)器和寄存器方式。第3章Pentium的指令系統(tǒng)2024/7/894)增量指令I(lǐng)NCINC dest

;(dest)←(dest)+1寄存器、存儲(chǔ)器。不能是段寄存器(Incrementby1)

功能:對(duì)指定的目標(biāo)操作數(shù)+1

操作數(shù)單元。用途:用于在循環(huán)程序中修改地址指針和循環(huán)次數(shù)。標(biāo)志位影響情況:

影響SF,ZF,AF,PF,OF。不影響CF。

INCDL ;8位寄存器+1INCSI ;16位寄存器+1INCBYTEPTR[BX][SI];存儲(chǔ)器+1(字節(jié)操作)INCWORDPTR[DI] ;存儲(chǔ)器+1(字操作)

INCDS ;第3章Pentium的指令系統(tǒng)2024/7/8102.減法類指令

(Subtraction)1)不考慮借位的減法指令SUBSUBdest,src

;(dest)

(dest)-(src)立即數(shù),寄存器,存儲(chǔ)器寄存器,存儲(chǔ)器SUB EBX,ECX SUB [BP+2],CL SUB SI,5010H SUB WORDPTR[DI],1000H第3章Pentium的指令系統(tǒng)2024/7/8112)考慮借位的減法指令SBB(Subtractionwithborrow)SBB AX,2530HSBB WORDPTR[EDI+2],1000HSBBdest,src

;(dest)

(dest)-(src)-CF

用途:用于多字節(jié)數(shù)相減3)減量指令DEC(Decrementby1)

DECdest

;(dest)←(dest)-1寄存器、存儲(chǔ)器。不能是段寄存器第3章Pentium的指令系統(tǒng)2024/7/812DEC用途舉例:

… MOVAX,0FFFFH CYC:DECAX JNZCYC HLT …用于延時(shí)時(shí)間。第3章Pentium的指令系統(tǒng)2024/7/8134)求補(bǔ)指令NEG(Negate)NEGdest

;(dest)←0-(dest)寄存器、存儲(chǔ)器操作:

把操作數(shù)按位求反后末位+1。(dest)←0FFFFH-(dest)+11。操作數(shù)的原值為正數(shù),求補(bǔ)后變?yōu)槠湄?fù)數(shù)的補(bǔ)碼。2。操作數(shù)的原值為負(fù)數(shù)(以補(bǔ)碼形式表示),求補(bǔ)后變?yōu)槠鋵?duì)應(yīng)的正數(shù)。3。影響各標(biāo)志位。4。操作數(shù)不能為段寄存器。NEG EAX NEG ECX第3章Pentium的指令系統(tǒng)2024/7/814求絕對(duì)值在內(nèi)存中,從AREA1開(kāi)始存放100個(gè)帶符號(hào)數(shù)。求各數(shù)的絕對(duì)值將其存于AREA2的開(kāi)始單元。流程圖第3章Pentium的指令系統(tǒng)應(yīng)用舉例2024/7/815程序:

LEASI,AREA1 LEADI,AREA2 MOVCX,100CHECK:MOVAL,[SI] ORAL,AL;(AL)內(nèi)容不變,置標(biāo)志

JNSNEXT ;SF=0轉(zhuǎn)NEXT

NEGAL

;負(fù)數(shù)求補(bǔ)

NEXT:MOV[DI],AL;送目標(biāo)

INCSI INCDI DECCX JNZCHECK HLT2024/7/8165)比較指令CMP(Compare)CMPdest,src

;(dest)-(src)立即數(shù),寄存器,存儲(chǔ)器寄存器,存儲(chǔ)器影響標(biāo)志:A、C、O、P、S、Z。只置標(biāo)志位CMP AX,2000H CMP EAX,[EBX+EDI+100]CMPEDX,EDI 第3章Pentium的指令系統(tǒng)2024/7/817用途:用比較指令來(lái)比較兩個(gè)數(shù)之間的關(guān)系: 兩者是否相等,兩個(gè)數(shù)中哪個(gè)大。(1)根據(jù)Z標(biāo)志,判斷兩者是否相等;(2) 根據(jù)CF標(biāo)志,判斷兩個(gè)無(wú)符號(hào)數(shù)的大??;(3) 用SF、OF標(biāo)志,判斷二個(gè)帶符號(hào)數(shù)的大小。

CMPAX,BX ZF=1,(AX)=(BX),兩者相等ZF=0,(AX)=(BX),兩者不相等比較AX,BX寄存器,將大數(shù)

(AX)

CMPAX,BX JNCNEXT;CF=0轉(zhuǎn)NEXT XCHGAX,BXNEXT:……結(jié)論:CF=0,(AX)>(BX);CF=1,(AX)<(BX)第3章Pentium的指令系統(tǒng)2024/7/818四種情況討論(操作數(shù)以8位為例):ABCMPA,B結(jié)論75A>0,B>0SF=0,OF=0則:A>B57情況A>0,B>0SF=1,OF=0則:A<B-525-7-2-5-71-7-5-5-(-7)+2A<0,B<0SF=1,OF=0則:A<BA<0,B<0SF=0,OF=0則:A>B-7-(-5)-2

3+127-63A>0,B<0OF=1,SF=1則:A>B+127-(-63)+190

4-63+127A<0,B>0SF=0,OF=1則:A<B-63-(+127)-1907-52第3章Pentium的指令系統(tǒng)2024/7/8196)比較并交換指令CMPXCHGCMPXCHGdest,src

;目的數(shù)與累加器比較寄存器寄存器,存儲(chǔ)器只影響ZF標(biāo)志:ZF=1源操作數(shù)→目的

ZF=0目的操作數(shù)→累加器舉例:[EBX]=76543210H,[ECX]=01234567H,[EAX]=01234567H,則執(zhí)行指令CMPXCHGECX,EBX后:[EBX]=76543210H,[ECX]=76543210H,[EAX]=01234567H,第3章Pentium的指令系統(tǒng)2024/7/8207)8字節(jié)比較指令CMPXCHG8BCMPXCHG8Bdest

存儲(chǔ)器舉例:[EAX]=11111111H,[EBX]=22222222H,[ECX]=33333333H,[EDX]=44444444H,設(shè)DS段1000H所指單元開(kāi)始的8字節(jié)為4444444411111111H,執(zhí)行指令CMPXCHG8B [1000H]功能:1.[EDX:EAX]中存儲(chǔ)8個(gè)字節(jié)與存儲(chǔ)器中的8個(gè)字節(jié)比較2.ZF=1,將[ECX:EBX]中8個(gè)字節(jié)送到目的操作數(shù)中去3.ZF=0,將目的操作數(shù)送入[EDX:EAX]只影響ZF標(biāo)志第3章Pentium的指令系統(tǒng)2024/7/8213.乘法類指令

(Multiplication)1)無(wú)符號(hào)數(shù)的乘法指令MUL

MULSrc

;無(wú)符號(hào)字節(jié)/字/雙字乘法

*

AL(AX)(EAX)為隱含的乘數(shù)寄存器。*

AX(DX,AX)(EDX,EAX)為隱含的乘積寄存器。*

SRC不能為立即數(shù)、不能為段寄存器。*除CF和OF外,對(duì)條件標(biāo)志位無(wú)定義。注意:MUL CXMUL BYTEPTR[DI] MULWORDPTR[SI] 對(duì)標(biāo)志沒(méi)有定義:指令執(zhí)行后這些標(biāo)志是任意的、不可預(yù)測(cè)(就是誰(shuí)也不知道是0還是1)對(duì)標(biāo)志沒(méi)有影響:指令執(zhí)行不改變標(biāo)志狀態(tài)第3章Pentium的指令系統(tǒng)2024/7/822IMUL DX,BX,300 IMUL CX,23 IMUL EBP,200 IMUL ECX,EDX,2000 2)有符號(hào)數(shù)的乘法指令I(lǐng)MUL

IMUL CL IMUL BX,100 IMUL BYTEPTR[BX] IMUL WORDPTR[DI] 3)有符號(hào)數(shù)乘法指令的擴(kuò)充形式

IMUL BX,CX IMUL EDX,ECX IMUL DI,MEM_WORD IMUL EDX,MEM_DWORDIMULSrc

;有符號(hào)字節(jié)/字/雙字乘法

第3章Pentium的指令系統(tǒng)2024/7/8234.除法類指令

(Division)

DIVSrc

;無(wú)符號(hào)字節(jié)/字/雙字除法1)無(wú)符號(hào)數(shù)的除法指令DIV*

AX(DX,AX)(EDX,EAX)為隱含的被除數(shù)寄存器。*

AL(AX)(EAX)為隱含的商寄存器。*

AH(DX)(EDX)為隱含的余數(shù)寄存器。*

SRC不能為立即數(shù)、不能為段寄存器。*

對(duì)所有條件標(biāo)志位均無(wú)定義。注意:DIV CL DIV WORDPTR[DI] 第3章Pentium的指令系統(tǒng)2024/7/8242)有符號(hào)數(shù)的除法指令I(lǐng)DIVIDIV BX IDIV BYTEPTR[DI] 【例】:寫出實(shí)現(xiàn)帶符號(hào)數(shù)0400H/0B4H運(yùn)算的程序段。

MOVAX,0400H ;(AX)=0400H=1024MOVBL,0B4H ;(BL)=0B4H=-76IDIV BL

;商(AL)=0F3H=-13,

余數(shù)(AH)=24H=36

IDIVSrc

;有符號(hào)字節(jié)/字/雙字除法

第3章Pentium的指令系統(tǒng)2024/7/8255.轉(zhuǎn)換指令CBW

;AX←ALCWD

;DX、AX←AXCWDE

;EAX←AXCQD

;

EDX、EAX←EAX功能:在兩個(gè)長(zhǎng)度不等的數(shù)進(jìn)行運(yùn)算時(shí),將長(zhǎng)度短的數(shù)的位數(shù)擴(kuò)展,以使兩數(shù)的長(zhǎng)度一致,類型相同。對(duì)無(wú)符號(hào)數(shù),只須將高位字節(jié)或字、雙字補(bǔ)0;對(duì)帶符號(hào)數(shù),擴(kuò)展時(shí)高位補(bǔ)0或補(bǔ)1取決被擴(kuò)展數(shù)的符號(hào)位,正數(shù)則高位補(bǔ)0,負(fù)數(shù)補(bǔ)1。第3章Pentium的指令系統(tǒng)2024/7/826moval,80h

;al=80hcbw

;ax=ff80hmovax,0BA45H

;ax=0BA45Hcwd

;dx=0ffffh,ax=0ba45h

單操作碼指令隱含對(duì)AL或AX進(jìn)行符號(hào)擴(kuò)展

不影響標(biāo)志位第3章Pentium的指令系統(tǒng)2024/7/827

MOVAX,XIMULY;x*y(DX,AX)MOVCX,AXMOVBX,DX;(DX,AX)(BX,CX)MOVAX,ZCWD;WORDDWORDADDCX,AXADCBX,DX;x*y+zSUBCX,540SBBBX,0;x*y+z-540MOVAX,VCWDSUBAX,CXSBBDX,BX;v-(x*y+z-540)IDIVX

;(v-(x*y+z-540))/x第3章Pentium的指令系統(tǒng)例:x,y,z,v均為16位帶符號(hào)數(shù),計(jì)算(v-(x*y+z-540))/x2024/7/8286.BCD碼指令

BCD碼:用二進(jìn)制編碼的十進(jìn)制數(shù),

又稱二--十進(jìn)制數(shù)組合BCD碼:用4位二進(jìn)制數(shù)表示1位十進(jìn)制數(shù)例:(59)10=(01011001)BCD非組合(分離)BCD碼:用8位二進(jìn)制數(shù)表示1位十進(jìn)制數(shù)例:(59)10=(0000010100001001)BCD

數(shù)字的ASCII碼是一種組合BCD碼DIGIT ASCII BCD0 00110000 000000001 00110001 000000012 00110010 00000010… … …9 00111001 00001001第3章Pentium的指令系統(tǒng)2024/7/829BCD數(shù)的運(yùn)算結(jié)果19組合BCD:00011001

+08+00001000

2700100001問(wèn)題的提出:

(00100111)BCD

AF=1+110

08組合BCD:00001000

+07+00000111

1500001111

(00010101)BCD

>9+110

第3章Pentium的指令系統(tǒng)2024/7/830

1)加減法的組合BCD調(diào)整指令:

;AL←將AL中和調(diào)整為組合BCD碼差DAA和DAS指令的調(diào)整方法:AF=1或(AL)0~3=A~F,則(AL)

(AL)

06H,AF=1CF=1或(AL)4~7=A~F,則(AL)

(AL)

60H,CF=1(DAA做‘+’,DAS做‘-’)注意:

*

隱含的操作寄存器為AL

*

緊接在加減指令之后使用

*影響條件標(biāo)志位(對(duì)OF無(wú)定義)第3章Pentium的指令系統(tǒng)(ADD/ADCAL,i8/r8/m8)

DAA

(SUB/SBBAL,i8/r8/m8)

DAS2024/7/831

2)加減法的分離BCD調(diào)整指令:

;AL←將AL中和/差調(diào)整為分離BCD碼

AH←AH+/-調(diào)整的進(jìn)位第3章Pentium的指令系統(tǒng)(ADD/ADCAL,i8/r8/m8)

AAA(SUB/SBBAL,i8/r8/m8)

AAS注意:*

隱含的操作寄存器為AL*

緊接在加減指令之后使用*

AAA和AAS指令在調(diào)整中產(chǎn)生了進(jìn)位或借位,則AH要加上進(jìn)位或減去借位,同時(shí)CF=AF=1,否則CF=AF=0;它們對(duì)其他標(biāo)志無(wú)定義2024/7/832例:設(shè)兩個(gè)以ASC

碼表示的十進(jìn)制數(shù)代碼‘7’‘5’,求出其相加后的分離式BCD碼,存入AX中。

0011011137H+0011010135H

01101100+00000110加06調(diào)整

(AL)=01110010進(jìn)位送AH

(AL)=01110010

+0000000100000000

(AH)=00000001

00001111(AL)^0FH^

0000000100000010AHAL12MOV

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論