第2章 8086的指令系統(tǒng)(二)_第1頁
第2章 8086的指令系統(tǒng)(二)_第2頁
第2章 8086的指令系統(tǒng)(二)_第3頁
第2章 8086的指令系統(tǒng)(二)_第4頁
第2章 8086的指令系統(tǒng)(二)_第5頁
已閱讀5頁,還剩47頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第2章8086的指令系統(tǒng)(二)2.2算術(shù)運(yùn)算類指令四則運(yùn)算是計(jì)算機(jī)經(jīng)常進(jìn)行的一種操作。算術(shù)運(yùn)算指令實(shí)現(xiàn)二進(jìn)制(和十進(jìn)制)數(shù)據(jù)的四則運(yùn)算請注意算術(shù)運(yùn)算類指令對標(biāo)志的影響掌握:ADD/ADC/INC、SUB/SBB/DEC/NEG/CMP熟悉:MUL/IMUL、DIV/IDIV理解:CBW/CWD、DAA/DAS、AAA/AAS/AAM/AAD2加法指令A(yù)DDADD指令將源與目的操作數(shù)相加,結(jié)果送到目的操作數(shù)ADD指令按狀態(tài)標(biāo)志的定義相應(yīng)設(shè)置3ADDreg,imm/reg/mem

;reg←reg+imm/reg/memADDmem,imm/reg

;mem←mem+imm/reg例題2.17amoval,0fbh

;al=0fbh不影響標(biāo)志位addal,07h

;al=02h標(biāo)志位設(shè)置如下:;11111011;00000111;------------;(1)00000010;CFOFSFPFZFAF;1000014DEBUG演示!5例2.17a:加法運(yùn)算moval,0fbh

;al=0fbhaddal,07h

;al=02hmovwordptr[200h],4652h

;[200h]=4652hmovbx,1feh

;bx=1fehaddal,bl

;al=00haddwordptr[bx+2],0f0f0h

;[200h]=3742h6ADD注意:標(biāo)志位的設(shè)置,如教材。帶進(jìn)位加法指令A(yù)DCADC指令將源與目的操作數(shù)相加,再加上進(jìn)位CF標(biāo)志,結(jié)果送到目的操作數(shù)ADC指令按狀態(tài)標(biāo)志的定義相應(yīng)設(shè)置ADC指令主要與ADD配合,實(shí)現(xiàn)多精度加法運(yùn)算7ADCreg,imm/reg/mem

;reg←reg+imm/reg/mem+CFADCmem,imm/reg

;mem←mem+imm/reg+CF例題2.17b8例2.17b:用ADD、ADC指令執(zhí)行兩個(gè)雙字加法運(yùn)算。注:雙字表示方法——DX:AX、BX:CX

計(jì)算:0002F360H

+0005E020H=0008D380H設(shè)執(zhí)行指令前:

(DX)=0002H,(AX)=F360H,

(BX)=0005H,(CX)=E020HADDAX,CXADCDX,BX

執(zhí)行第一條指令A(yù)DD:

F360H

+E020H(AX)=D380H,SF=1,ZF=0CF=1,OF=0執(zhí)行第二條指令A(yù)DC:

0002H+0005H+1H

(CF)

(DX)=0008H,SF=0,ZF=0CF=0,OF=01←D380H0008H增量指令I(lǐng)NC(increment)INC指令對操作數(shù)加1(增量)INC指令不影響進(jìn)位CF標(biāo)志,按定義設(shè)置其他狀態(tài)標(biāo)志9INCreg/mem;reg/mem←reg/mem+1例:INCCX設(shè)指令執(zhí)行前:(CX)=0005H

指令執(zhí)行后:(CX)=0006H

ADDCX,1

(一般不用這種方式)

減法指令SUB(subtract)SUB指令將目的操作數(shù)減去源操作數(shù),結(jié)果送到目的操作數(shù)SUB指令按照定義相應(yīng)設(shè)置狀態(tài)標(biāo)志10SUBreg,imm/reg/mem

;reg←reg-imm/reg/memSUBmem,imm/reg

;mem←mem-imm/reg例題2.18a例2.18a:減法運(yùn)算moval,0fbh

;al=0fbhsubal,07h

;al=0f4h,CF=0movwordptr[200h],4652h

;[200h]=4652hmovbx,1feh

;bx=1fehsubal,bl

;al=0f6hsubwordptr[bx+2],0f0f0h

;[200h]=5562h,CF=111SUB帶借位減法指令SBBSBB指令將目的操作數(shù)減去源操作數(shù),再減去借位CF(進(jìn)位),結(jié)果送到目的操作數(shù)。SBB指令按照定義相應(yīng)設(shè)置狀態(tài)標(biāo)志SBB指令主要與SUB配合,實(shí)現(xiàn)多精度減法運(yùn)算12SBBreg,imm/reg/mem

;reg←reg-imm/reg/mem-CFSBBmem,imm/reg

;mem←mem-imm/reg-CF例題2.18b例2.18b:雙字減法movax,4652h ;ax=4652hsubax,0f0f0h ;ax=5562h,CF=1movdx,0234h ;dx=0234hsbbdx,0f0f0h ;dx=1143h,CF=1;DX.AX=02344652H

-F0F0F0F0H

=11435562H13SBB減量指令DEC(decrement)DEC指令對操作數(shù)減1(減量)DEC指令不影響進(jìn)位CF標(biāo)志,按定義設(shè)置其他狀態(tài)標(biāo)志14DECreg/mem;reg/mem←reg/mem-1INC指令和DEC指令都是單操作數(shù)指令主要用于對計(jì)數(shù)器和地址指針的調(diào)整求補(bǔ)指令NEG(negative)NEG指令對操作數(shù)執(zhí)行求補(bǔ)運(yùn)算:用零減去操作數(shù),然后結(jié)果返回操作數(shù)求補(bǔ)運(yùn)算也可以表達(dá)成:將操作數(shù)按位取反后加1NEG指令對標(biāo)志的影響與用零作減法的SUB指令一樣15NEGreg/mem;reg/mem←0-reg/mem例題2.19

求補(bǔ)運(yùn)算不等于求負(fù)數(shù)的補(bǔ)碼!例2.19:求補(bǔ)運(yùn)算movax,0ff64hnegal;ax=ff9ch,OF=0、SF=1、ZF=0、PF=1、CF=1subal,9dh;ax=ffffh,OF=0、SF=1、ZF=0、PF=1、CF=1negax;ax=0001h,OF=0、SF=0、ZF=0、PF=0、CF=1decal;ax=0000h,OF=0、SF=0、ZF=1、PF=1、CF=1negax;ax=0000h,OF=0、SF=0、ZF=1、PF=1、CF=016NEG比較指令CMP(compare)CMP指令將目的操作數(shù)減去源操作數(shù),按照定義相應(yīng)設(shè)置狀態(tài)標(biāo)志CMP指令執(zhí)行的功能與SUB指令,但結(jié)果不回送目的操作數(shù)17CMPreg,imm/reg/mem ;reg-imm/reg/memCMPmem,imm/reg ;mem-imm/reg例題2.20例2.20:比較AL與100

cmpal,100

;al-100

jbbelow

;al<100,跳轉(zhuǎn)到below執(zhí)行

subal,100

;al≥100,al←al-100

incah

;ah←ah+1below: ...18

執(zhí)行比較指令之后,可以根據(jù)標(biāo)志判斷兩個(gè)數(shù)是否相等、大小關(guān)系等CMP19例:x、y、z均為雙精度數(shù),分別存放在地址為X,X+2;Y,Y+2;Z,Z+2的存儲(chǔ)單元中,用指令序列實(shí)現(xiàn)wx+y+24-z,并用W,W+2單元存放w。

MOVAX,XMOVDX,X+2ADDAX,YADCDX,Y+2;x+yADDAX,24ADCDX,0;x+y+24SUBAX,ZSBBDX,Z+2;x+y+24-zMOVW,AXMOVW+2,DX;結(jié)果存入W,W+2單元2.2.3乘法指令MULr8/m8;無符號(hào)字節(jié)乘法;AX←AL×r8/m8MULr16/m16;無符號(hào)字乘法;DX.AX←AX×r16/m16IMULr8/m8;有符號(hào)字節(jié)乘法;AX←AL×r8/m8IMULr16/m16;有符號(hào)字乘法;DX.AX←AX×r16/m1620例題2.21說明乘法指令的功能乘法指令分無符號(hào)和有符號(hào)乘法指令乘法指令的源操作數(shù)顯式給出,隱含使用另一個(gè)操作數(shù)AX和DX字節(jié)量相乘:AL與r8/m8相乘,得到16位的結(jié)果,存入AX字量相乘:AX與r16/m16相乘,得到32位的結(jié)果,其高字存入DX,低字存入AX乘法指令利用OF和CF判斷乘積的高一半是否具有有效數(shù)值21乘法指令對標(biāo)志的影響乘法指令如下影響OF和CF標(biāo)志:MUL指令——若乘積的高一半(AH或DX)為0,則OF=CF=0;否則OF=CF=1IMUL指令——若乘積的高一半是低一半的符號(hào)擴(kuò)展,則OF=CF=0;否則均為1乘法指令對其他狀態(tài)標(biāo)志沒有定義22

對標(biāo)志沒有定義:指令執(zhí)行后這些標(biāo)志是任意的、不可預(yù)測(就是誰也不知道是0還是1)對標(biāo)志沒有影響:指令執(zhí)行不改變標(biāo)志狀態(tài)例2.21:乘法運(yùn)算moval,0b4h ;al=b4h=180movbl,11h ;bl=11h=17mulbl ;ax=Obf4h=3060;OF=CF=1,AX高8位不為0moval,0b4h ;al=b4h=-76movbl,11h ;bl=11h=17imulbl ;ax=faf4h=-1292;OF=CF=1,AX高8位含有效數(shù)字23分析:如果將上例中BL值改為1,則標(biāo)志位為?2.2.4除法指令DIVr8/m8 ;無符號(hào)字節(jié)除法:AL←AX÷r8/m8的商,Ah←AX÷r8/m8的余數(shù)DIVr16/m16

;無符號(hào)字除法:;AX←DX.AX÷r16/m16的商,DX←DX.AX÷r16/m16的余數(shù)24IDIVr8/m8 ;有符號(hào)字節(jié)除法:AL←AX÷r8/m8的商,Ah←AX÷r8/m8的余數(shù)IDIVr16/m16

;有符號(hào)字除法:;AX←DX.AX÷r16/m16的商,DX←DX.AX÷r16/m16的余數(shù)例題2.22說明除法指令的功能除法指令分無符號(hào)和有符號(hào)除法指令除法指令的除數(shù)顯式給出,隱含使用另一個(gè)操作數(shù)AX和DX作為被除數(shù)字節(jié)量除法:AX除以r8/m8,8位商存入AL,8位余數(shù)存入AH字量除法:DX.AX除以r16/m16,16位商存入AX,16位余數(shù)存入DX除法指令對標(biāo)志沒有定義除法指令會(huì)產(chǎn)生結(jié)果溢出25除法錯(cuò)中斷當(dāng)被除數(shù)遠(yuǎn)大于除數(shù)時(shí),所得的商就有可能超出它所能表達(dá)的范圍。如果存放商的寄存器AL/AX不能表達(dá),便產(chǎn)生溢出,8086CPU中就產(chǎn)生編號(hào)為0的內(nèi)部中斷——除法錯(cuò)中斷對DIV指令,除數(shù)為0,或者在字節(jié)除時(shí)商超過8位,或者在字除時(shí)商超過16位對IDIV指令,除數(shù)為0,或者在字節(jié)除時(shí)商不在-128~127范圍內(nèi),或者在字除時(shí)商不在-32768~32767范圍內(nèi)26例2.22:除法運(yùn)算movax,0400h ;ax=400h=1024movbl,0b4h ;bl=b4h=180divbl ;商al=05h=5

;余數(shù)ah=7ch=124movax,0400h

;ax=400h=1024movbl,0b4h ;bl=b4h=-76idivbl ;商al=f3h=-13

;余數(shù)ah=24h=3627分析:如果將上例中BL值改為1,有什么問題?2.2.5符號(hào)擴(kuò)展指令CBW ;AL的符號(hào)擴(kuò)展至AH;如AL的最高有效位是0,則AH=00;AL的最高有效位為1,則AH=FFH。AL不變CWD ;AX的符號(hào)擴(kuò)展至DX;如AX的最高有效位是0,則DX=00;AX的最高有效位為1,則DX=FFFFH。AX不變28什么是符號(hào)擴(kuò)展符號(hào)擴(kuò)展指令常用于獲得倍長的數(shù)據(jù)例題2.23例題2.24符號(hào)擴(kuò)展的概念符號(hào)擴(kuò)展是指用一個(gè)操作數(shù)的符號(hào)位(即最高位)形成另一個(gè)操作數(shù),后一個(gè)操作數(shù)的各位是全0(正數(shù))或全1(負(fù)數(shù))。符號(hào)擴(kuò)展不改變數(shù)據(jù)大小對于數(shù)據(jù)64H(表示數(shù)據(jù)100),其最高位D7為0,符號(hào)擴(kuò)展后高8位都是0,成為0064H(仍表示數(shù)據(jù)100)對于數(shù)據(jù)FF00H(表示有符號(hào)數(shù)-256),其最高位D15為1,符號(hào)擴(kuò)展后高16位都是1,成為FFFFFF00H(仍表示有符號(hào)數(shù)-256)29例2.23:符號(hào)擴(kuò)展moval,80h ;al=80hcbw

;ax=ff80haddal,255

;al=7fhcbw

;ax=007fh30例2.24:AX÷BXcwd ;DX.AX←AXidivbx ;AX←DX.AX÷BX31

對有符號(hào)數(shù)除法,可以利用符號(hào)擴(kuò)展指令得到倍長于除數(shù)的被除數(shù)對無符號(hào)數(shù)除法,采用直接使高8位或高16位清0,獲得倍長的被除數(shù)。這就是零位擴(kuò)展2.2.6十進(jìn)制調(diào)整指令32BCD碼有壓縮和非壓縮兩種格式:例:(95)10=(10010101)BCD

壓縮的BCD碼:用四位二進(jìn)制數(shù)表示一位十進(jìn)制數(shù)非壓縮的BCD碼:用八位二進(jìn)制數(shù)表示一位十進(jìn)制數(shù)例:(95)10=(0000100100000101)BCD

BCD碼

BCD碼—>建立了二進(jìn)制與十進(jìn)制的聯(lián)系算術(shù)運(yùn)算指令只能完成二進(jìn)制運(yùn)算,十進(jìn)制數(shù)調(diào)整指令可二進(jìn)制運(yùn)算結(jié)果進(jìn)行調(diào)整,得到用BCD碼表示的十進(jìn)制數(shù)。33

8位非壓縮BCD碼的高4位可以是任意值,因此數(shù)字字符的ASCII碼看成一種非標(biāo)準(zhǔn)的壓縮的BCD碼例:5的ASCII碼為35H(00110101)B

十進(jìn)制調(diào)整指令共有6條指令,分為:

(1)壓縮的BCD碼調(diào)整指令(2)非壓縮的BCD碼調(diào)整指令5

(非壓縮的BCD碼)34例:十進(jìn)制計(jì)算28+36=64

28H+36H

5EH用指令進(jìn)行二進(jìn)制加法運(yùn)算的結(jié)果為:

寫成BCD碼應(yīng)為

:(00101000

)BCD+(00110110

)BCD=(01100100

)BCD

問題:逢十六進(jìn)位解決方法:

5EH+6H

64H

(01100100

)BCD加6補(bǔ)償加法的調(diào)整規(guī)則:

以壓縮的BCD碼加法調(diào)整指令為例介紹十進(jìn)制調(diào)整指令的基本思路和方法:35例:十進(jìn)制計(jì)算28+69=97

28H+69H

91H用指令進(jìn)行二進(jìn)制加法運(yùn)算的結(jié)果為:

寫成BCD碼為

:(00101000

)BCD+(01101001

)BCD=(10010111

)BCD

問題:逢十六進(jìn)位解決方法:

91H+6H

97H

(10010111

)BCD加6補(bǔ)償根據(jù)上述分析,總結(jié)加法的調(diào)整規(guī)則:兩個(gè)BCD碼數(shù)位相加后,若產(chǎn)生了進(jìn)位或和大于9,加6調(diào)整。36十進(jìn)制調(diào)整指令DAA:DAA

(AL)

把AL中存放的加法的和調(diào)整為壓縮的BCD碼

若AF=1,或(AL)0~3=A~F若CF=1,或(AL)4~7=A~F則(AL)←(AL)+

60H,CF=1則(AL)←(AL)+

06H,AF=1調(diào)整方法

37例:十進(jìn)制加法計(jì)算:28+69=97

設(shè)執(zhí)行指令前:(AL)=(00101000)BCD=28H(=28D)

(CL)=(01101001)BCD=69H(=69D)

執(zhí)行的指令為:ADDAL,CLDAA執(zhí)行ADD指令:(AL)=91H,CF=0,AF=1執(zhí)行DAA指令:(AL)←(AL)+06H=91H+06H=

97H

(AL)=(10010111)BCD=97D,CF=0,AF=1壓縮BCD碼加、減調(diào)整指令(ADDAL,i8/r8/m8)(ADCAL,i8/r8/m8)DAA;AL←將AL的加和調(diào)整為壓縮BCD碼(SUBAL,i8/r8/m8)(SBBAL,i8/r8/m8)DAS;AL←將AL的減差調(diào)整為壓縮BCD碼38使用DAA或DAS指令前,應(yīng)先執(zhí)行以AL為目的操作數(shù)的加法或減法指令DAA和DAS指令對OF標(biāo)志無定義,按結(jié)果影響其他標(biāo)志,例如CF反映壓縮BCD碼相加或減的進(jìn)位或借位狀態(tài)例題2.25a例題2.25b例題2.26例2.25a:壓縮BCD加法moval,68h;al=68h,壓縮BCD碼表示真值68movbl,28h;bl=28h,壓縮BCD碼表示真值28addal,bl;二進(jìn)制加法:al=68h+28h=90hdaa

;十進(jìn)制調(diào)整:al=96h;實(shí)現(xiàn)壓縮BCD碼加法:68+28=9639例2.25b:壓縮BCD減法moval,68h;al=68h,壓縮BCD碼表示真值68movbl,28h;bl=28h,壓縮BCD碼表示真值28subal,bl;二進(jìn)制減法:al=68h-28h=40hdas

;十進(jìn)制調(diào)整:al=40h;實(shí)現(xiàn)壓縮BCD碼加法:68-28=4040例2.26:壓縮BCD減法movax,1234hmovbx,4612hsubal,bldas

;34-12=22,CF=0xchgal,ahsbbal,bhdas

;12-46=66,CF=1xchgal,ah ;11234-4612=662241非壓縮BCD碼加、減調(diào)整指令(ADDAL,i8/r8/m8)(ADCAL,i8/r8/m8)AAA;AL←將AL的加和調(diào)整為非壓縮BCD碼;AH←AH+調(diào)整的進(jìn)位(SUBAL,i8/r8/m8)(SBBAL,i8/r8/m8)AAS;AL←將AL的減差調(diào)整為非壓縮BCD碼;AH←AH-調(diào)整的借位42使用AAA或AAS指令前,應(yīng)先執(zhí)行以AL為目的操作數(shù)的加法或減法指令A(yù)AA和AAS指令在調(diào)整中產(chǎn)生了進(jìn)位或借位,則AH要加上進(jìn)位或減去借位,同時(shí)CF=AF=1,否則CF=AF=0;它們對其他標(biāo)志無定義例題2.27a例題2.27b例2.27a:非壓縮BCD加movax,0608h;ax=0608h,非壓縮BCD碼表示真值68movbl,09h;bl=09h,非壓縮BCD碼表示真值9addal,bl;二進(jìn)制加法:al=08h+09h=11haaa;十進(jìn)制調(diào)整:ax=0707h;實(shí)現(xiàn)非壓縮BCD碼加法:68+9=7743例2.27b:非壓縮BCD減movax,0608h;ax=0608h,非壓縮BCD碼表示真值68movbl,09h;bl=09h,非壓縮BCD碼表示真值9subal,bl;二進(jìn)制減法:al=08h-09h=ffhaas;十進(jìn)制調(diào)整:ax=0509h;實(shí)現(xiàn)非壓縮BCD碼減法:68-9=5944非壓縮BCD碼乘、除調(diào)整指令(MULr8/m8)AAM;AX←將AX的乘積調(diào)整為非壓縮BCD碼AAD;AX←將AX中非壓縮BCD碼擴(kuò)展成二進(jìn)制數(shù)(DIVr8/m8)45AAM指令跟在字節(jié)乘MUL之后,將乘積調(diào)整為非壓縮BCD碼AAD指令跟在字節(jié)除DIV之前,先將非壓縮BCD碼的被除數(shù)調(diào)整為二進(jìn)制數(shù)AAM和AAD指令根據(jù)結(jié)果設(shè)置SF、ZF和PF,但對OF、CF和AF無定義例題2.27c例題2.27d例2.27c:非壓縮BCD乘movax,0608h;ax=0608h,非壓縮BCD碼表示真值68movbl,09h;bl=09h,非壓縮BCD碼表示真值9mulbl;二進(jìn)制乘法:al=08h×09h=0048haam;十進(jìn)制調(diào)整:ax=0702h;實(shí)現(xiàn)非壓縮BCD碼乘法:8×9=7246例2.27d:非壓縮BCD除movax,0608h;ax=0608h,非壓縮BCD碼表示真值68movbl,09h;bl=09h,非壓縮BCD碼表示真值9aam;二進(jìn)制擴(kuò)展:ax=68=0044hdivbl;除法運(yùn)算:商al=07h,余數(shù)ah=05h;實(shí)現(xiàn)非壓縮BCD碼初法:

68÷9=7(余5)47習(xí)題2.9設(shè)X、Y、Z、V均為16位帶符號(hào)數(shù),分別存放在X、Y、Z、V存儲(chǔ)單元中,閱讀如下程序段,得出它的運(yùn)算公式,并說明運(yùn)算結(jié)果存于何處?48VZYX65F3020024E00500習(xí)題2.9:算術(shù)運(yùn)算1movax,XimulY ;DX.AX=X×Ymovcx,axmovbx,dx ;BX.CX=X×Ymovax,Zcwdaddcx,axadcbx,dx ;BX.CX=X×Y+Z49習(xí)題2.9:算術(shù)運(yùn)算2subcx,540sbbbx,0;BX.CX=X×Y+Z-540movax,Vcwdsubax,cxsbbdx,bx;DX.AX=V-(X×Y+Z-540)idivX;DX.AX=(V-(X×Y+Z-540))÷X50教學(xué)提示在正確理解每條指令的功能基礎(chǔ)上,可以閱讀和編寫有實(shí)際意義的程序段51多多閱讀程序段2.3位操作類指令位操作類指令以二進(jìn)制位為基本單位進(jìn)行數(shù)據(jù)的操作注意這些指令對標(biāo)志位的影響1、邏輯運(yùn)算指令A(yù)NDORXORNOTTEST2、移位指令SHLSHRSAR3、循環(huán)移位指令ROLRORRCLRCR5253邏輯非指令:NOTOPR*OPR不能為立即數(shù)

執(zhí)行操作:(OPR)

(OPR)*不影響標(biāo)志位

邏輯與指令:ANDDST,SRC執(zhí)行操作:(DST)(DST)(SRC)邏輯或指令:ORDST,SRC執(zhí)行操作:(DST)(DST)(SRC)異或指令:XORDST,SRC執(zhí)行操作:(DST)(DST)(SRC)測試指令:TESTOPR1,OPR2

執(zhí)行操作:(OPR1)(OPR2)CFOFSFZFPFAF00***無定義

根據(jù)運(yùn)算結(jié)果設(shè)置2.3.1邏輯運(yùn)算指令例題:邏輯運(yùn)算moval,45h

;邏輯與al=01handal,31h ;CF=OF=0,SF=0、ZF=0、PF=0moval,45h

;邏輯或al=75horal,31h

;CF=OF=0,SF=0、ZF=0、PF=0moval,45h

;邏輯異或al=74hxoral,31h ;CF=OF=0,SF=0、ZF=0、PF=1moval,45h

;邏輯非al=0bahnotal

;標(biāo)志不變54例2.32:測試為0或1testal,01h ;測試AL的最低位D0jnzthere

;標(biāo)志ZF=0,即D0=1

;則程序轉(zhuǎn)移到there...;否則ZF=1,即D0=0,順序執(zhí)行there:...55TEST指令通常用于檢測一些條件是否滿足,但又不希望改變原操作數(shù)的情況TEST邏輯運(yùn)算指令的妙用56源操作數(shù)1—保留原值

0—置0特點(diǎn):

1010

0

011

目的操作數(shù)源操作數(shù)(1)邏輯與操作保留清00010

何時(shí)該用何種邏輯操作?邏輯運(yùn)算指令的妙用57源操作數(shù)1—置10—保留原值特點(diǎn):

10100

011

目的操作數(shù)源操作數(shù)(2)邏輯或操作置1保留1011

源操作數(shù)1—取反0—保留原值特點(diǎn):10100011

目的操作數(shù)源操作數(shù)(3)異或操作求反保留1001邏輯運(yùn)算指令的妙用58

如何確定源操作數(shù)?

例:將AL的D0位和D1位清0。

設(shè)(AL)=BFH,指令為AND AL,

?分析:10111111B

11111100B

(FCH)10111100B應(yīng)將源操作數(shù)取為立即數(shù)FCH,指令為:

ANDAL,0FCH

執(zhí)行指令后:(AL)=BCH

根據(jù)上述操作的特點(diǎn),可以確定該用什么操作實(shí)現(xiàn)需要的功能:保留某些位(其他位清0)用邏輯與操作某位置1

用邏輯或操作,某位求反用異或操作

邏輯運(yùn)算指令的妙用59例:將AL中的大寫字母轉(zhuǎn)換為小寫字母(AL)=41H即41H61H指令為:ORAL,?分析:01000001B(41H)

00100000B(20H)20H執(zhí)行指令后:(AL)=61H小寫轉(zhuǎn)換為大寫的指令為:

ANDAL,?0DFH∧

110

11111B

(DFH)執(zhí)行指令后:(AL)=41H

01100001B(61H)

0100

0001B(41H)

根據(jù)需要的功能,先確定邏輯運(yùn)算指令,再利用邏輯運(yùn)算指令的特點(diǎn)確定源操作數(shù)。

邏輯運(yùn)算方法:2.3.2移位指令(shift)601)邏輯左移指令

SHLopr,count2)算術(shù)左移指令SAL opr,countoprCF補(bǔ)0SHL/SAL移位例:將BL中的值邏輯左移1位,設(shè)(BL)=AFHSHL BL,1101011110指令執(zhí)行前010

1111

01指令執(zhí)行后執(zhí)行指令后:(BL)=5EH(分為邏輯移位、算術(shù)移位和循環(huán)移位三類)2.3.2移位指令(shift)613)邏輯右移指令

SHRopr,count4)算術(shù)右移指令SAR opr,countoprCF補(bǔ)0SHR移位S保持符號(hào)SAR移位例:將BL中的值邏輯右移1位,設(shè)(BL)=AFH

SHR BL,1

1010

11110指令執(zhí)行前0

1010

1111指令執(zhí)行后執(zhí)行指令后:

(BL)=57H2.3.2移位指令(shift)62例:將BL中的值算術(shù)右移1位,設(shè)(BL)=AFHSAR BL,11

010

11110指令執(zhí)行前執(zhí)行指令后:(BL)=D7H1

10101111指令執(zhí)行后

邏輯移位總是補(bǔ)0

,算術(shù)移位保持符號(hào)。注意:

*OPR可用立即數(shù)以外的任何尋址方式*count

=1,SHLOPR,1

count

>1,MOVCL,count

SHLOPR,CL;以SHL為例*條件標(biāo)志位:

CF=移入的數(shù)值

OF=1count

=1時(shí),最高有效位的值發(fā)生變化

OF=0count

=1時(shí),最高有效位的值不變移位指令:

SF、ZF、PF根據(jù)移位結(jié)果設(shè)置

AF無定義63例2.33:移位指令movcl,4moval,0f0h

;al=f0hshlal,1

;al=e0h;CF=1,SF=1、ZF=0、PF=0,OF=0shral,1

;al=70h;CF=0,SF=0、ZF=0、PF=0、OF=1saral,1

;al=38h;CF=0,SF=0、ZF=0、PF=0、OF=0saral,cl

;al=03h;CF=1,SF=0、ZF=0、PF=164移位指令的妙用注意

邏輯左移一位相當(dāng)于無符號(hào)數(shù)乘以2

邏輯右移一位相當(dāng)于無符號(hào)數(shù)除以2算術(shù)左移一位相當(dāng)于有符號(hào)數(shù)乘以2算術(shù)右移一位相當(dāng)于有符號(hào)數(shù)除以265MOVAL,15SHRAL,1;(AL)=7,相當(dāng)于AL←(AL)÷2,CF=166PUSH BX ;保護(hù)BX寄存器的原來的值

SHL AX,1;左移一位,AX←(原AX)×2MOV BX,AX;BX←2(原AX)

SHL AX,1;左移一位,AX←4(原AX)

SHL AX,1 ;左移一位,AX←8(原AX)

ADD AX,BX;AX←原(8AX)+原(2AX)

POP BX ;恢復(fù)BX寄存器的原來的值[例]用移位指令實(shí)現(xiàn)AX←(AX)×10例2.34:移位實(shí)現(xiàn)乘實(shí)現(xiàn):DX=3*AX+7*BXmovsi,axshlsi,1 ;si←2×axaddsi,ax ;si←3×axmovdx,bxmovcl,03hshldx,cl ;dx←8×bxsubdx,bx ;dx←7×bxadddx,si ;dx←7×bx+3×ax6768例:已知:(BX)=84F0H,請寫一條指令完成以下要求:(1)(BX)為無

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論