指令系統(tǒng)4(邏輯運(yùn)算和移位指令、串操作指令)(樓俊君.ppt
《指令系統(tǒng)4(邏輯運(yùn)算和移位指令、串操作指令)(樓俊君.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《指令系統(tǒng)4(邏輯運(yùn)算和移位指令、串操作指令)(樓俊君.ppt(37頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1,4.3.3邏輯運(yùn)算和移位指令,邏輯運(yùn)算指令(與/或/異或/非)●運(yùn)算規(guī)則:按位操作,無進(jìn)/借位●對標(biāo)志位的影響(除NOT指令外):,CFOFSFZFPFAF00***無定義,根據(jù)運(yùn)算結(jié)果設(shè)置,,注意:非指令NOT對標(biāo)志無影響,2,邏輯運(yùn)算類指令表,,3,(1)邏輯”與”AND,對兩個(gè)操作數(shù)進(jìn)行按位邏輯“與”操作。格式:ANDdest,src用途:保留操作數(shù)的某幾位,清零其他位。例1:保留AL中低4位,高4位清0。ANDAL,0FH例2:AL中有字符’a’~’z’,將其轉(zhuǎn)換成大寫。ANDAL,01011111B,4,例3:測試AL的bit7,bit5,bit2是否都是1。ANDAL,10100100BCMPAL,10100100BJZYES;ifmatch,gotoYES……;ifnotmatch……YES:……;goeshereifall‘1’,5,對兩個(gè)操作數(shù)進(jìn)行按位邏輯”或”操作。格式:ORdest,src用途:對操作數(shù)的某幾位置1;對兩操作數(shù)進(jìn)行組合。例1:把AL中的非壓縮BCD碼變成相應(yīng)十進(jìn)制數(shù)的ASCII碼。ORAL,30H,(2)邏輯”或”O(jiān)R,6,例2:把AH和AL中的非壓縮BCD碼組合成壓縮的BCD碼,放到AL中。MOVCL,4SHLAH,CLORAL,AH例3:把AL的第5位置為1ORAL,00100000B,7,對操作數(shù)進(jìn)行按位邏輯”非”操作。格式:NOTmem/reg例:NOTCXNOTBYTEPTR[DI],(3)邏輯“非”(取反)NOT,8,對兩個(gè)操作數(shù)按位進(jìn)行”異或”操作。格式:XORdest,src用途:對reg清零(自身異或)把reg/mem的某幾位變反(與’1’異或)例1:把AX寄存器清零。例2:把DH的bit4,3變反①M(fèi)OVAX,0XORDH,18H②XORAX,AX③ANDAX,0④SUBAX,AX,(4)邏輯”異或”XOR,,,,9,操作與AND指令類似,但不將”與”的結(jié)果送回,只影響標(biāo)志位。AND與TEST間的區(qū)別類似于SUB與CMP間的區(qū)別作用:TEST指令常用于位測試,與條件轉(zhuǎn)移指令一起用。例:測試AL的內(nèi)容是否為負(fù)數(shù)。TESTAL,80H;檢查AL中D7=1?JNZMINUS;是1(負(fù)數(shù)),轉(zhuǎn)MINUS……;否則(正數(shù))不轉(zhuǎn)移MINUS:…………,(5)測試指令TEST,10,移位操作類指令表,2.移位指令,11,移位指令功能示意,算術(shù)左移指令,算術(shù)右移指令,邏輯左移指令,邏輯右移指令,小循環(huán)右移指令,小循環(huán)左移指令,大循環(huán)左移指令,大循環(huán)右移指令,CF=,12,2.移位指令,(1)非循環(huán)移位指令算術(shù)左移指令SAL(ShiftArithmeticLeft)算術(shù)右移指令SAR(ShiftArithmeticRight)邏輯左移指令SHL(ShiftLeft)邏輯右移指令SHR(ShiftRight)這4條指令的格式相同,以SAL為例:SALmem/reg,,,CL;移位位數(shù)>1時(shí)1;移位位數(shù)=1時(shí),13,移位指令執(zhí)行的操作如下圖所示:,,,,最低位,最高位,CF,0,(a)算術(shù)/邏輯左移SAL/SHL,,,,,最低位,最高位,CF,(b)算術(shù)右移SAR,,,,,,,,,,,最低位,最高位,CF,(c)邏輯右移SHR,,,,,,0,非循環(huán)移位指令功能示意圖,,,,14,算術(shù)移位——把操作數(shù)看做有符號(hào)數(shù);邏輯移位——把操作數(shù)看做無符號(hào)數(shù)。移位位數(shù):一般放在CL寄存器中,但如果只移1位,也可以直接寫在指令中。例如:MOVCL,4SHRAL,CL;AL中的內(nèi)容右移4位對Flags影響:影響CF,PF,SF,ZF,OF標(biāo)志。移位效果:結(jié)果未溢出時(shí):左移1位≡操作數(shù)2右移1位≡操作數(shù)?2,15,例:把AL中的數(shù)x10因?yàn)?0=8+2=23+21,所以可用移位實(shí)現(xiàn)乘10操作。程序如下:SALAL,1;2xMOVAH,ALSALAL,1;4xSALAL,1;8xADDAL,AH;8x+2x=10 x,16,不含CF的(小)循環(huán)左移指令ROL不含CF的(小)循環(huán)右移指令ROR含CF的(大)循環(huán)左移指令RCL含CF的(大)循環(huán)右移指令RCR格式同非循環(huán)移位指令。移位位數(shù)一般放在CL寄存器中但如果只移1位,也可直接寫在指令中。對Flags的影響:只影響標(biāo)志位CF和OF。,(2)循環(huán)移位指令,17,這4條指令的功能如下圖示:,,,,,最低位,最高位,CF,(a)ROL,,,,,,,,最低位,最高位,CF,(c)RCL,,,,,,,,,最低位,最高位,CF,(b)ROR,,,,,,,,,最低位,最高位,CF,(d)RCR,,,,,循環(huán)移位指令功能示意圖,18,用移位操作代替乘除法可提高運(yùn)算速度例:前例中計(jì)算x10。(1)采用乘法指令:MOVBL,10MULBL共需70~77個(gè)T周期。(2)采用移位和加法指令:SALAL,1;2TMOVAH,AL;2TSALAL,1;2TSALAL,1;2TADDAL,AH;3T只需11個(gè)T周期,僅相當(dāng)于乘法的1/7。,19,循環(huán)移位舉例:,例1:將AL的高4位與低4位互換。MOVCL,4ROLAL,CL例2:MOVAL,82HRORAL,1執(zhí)行結(jié)果為:AL=41H,CF=0,OF=1,20,4.3.4串操作指令,串:順序放在內(nèi)存中的一組相同類型的數(shù)據(jù)。串操作:對串中的元素進(jìn)行相同的操作。串操作的尋址方式:源操作數(shù)指針——DS:SI(DS可超越)目的操作數(shù)指針——ES:DI數(shù)據(jù)塊長度——CX功能:可完成兩個(gè)存儲(chǔ)單元之間的傳送MOVS、比較CMPS、搜索SANS、讀LODS、寫STOS5種操作(也僅是串指令可以)。一次操作對象為16位(W)或8位(B)數(shù)據(jù),但為下一次操作做了準(zhǔn)備。,21,串操作指令執(zhí)行動(dòng)作示意圖,自動(dòng)循環(huán)-加前綴REPREPE/REPZREPNE/REPNZ,(a)方向標(biāo)志DF=0,(b)方向標(biāo)志位DF=1,22,,每次串操作后(輔助動(dòng)作):串操作指令自動(dòng)修改SI和DI——字節(jié)1,字2。DF標(biāo)志決定,DF=0增地址方向;DF=1減地址方向。(注意:退出串操作后,指針指向最后操作的元素的下一個(gè)元素)重復(fù)前綴有的串操作指令前面可加上重復(fù)前綴REP。當(dāng)使用REP前綴時(shí),該指令重復(fù)執(zhí)行,重復(fù)執(zhí)行次數(shù)由CX決定(帶有REP前綴的串操作指令每執(zhí)行一次,CX自動(dòng)減1)。重復(fù)前綴包括:REPCX≠0時(shí)重復(fù)執(zhí)行REPE/REPZCX≠0∧ZF=1時(shí)重復(fù)執(zhí)行REPNE/REPNZCX≠0∧ZF=0時(shí)重復(fù)執(zhí)行,23,串操作指令表,24,,,串指令使用的一般方法:,,,設(shè)置源串地址,設(shè)置目標(biāo)串地址,,設(shè)置串長度,,設(shè)置操作方向DF,,,,串指令,MOVSI,源串首地址(或LEASI,源串),MOVDI,目的串首地址(或LEADI,目的串),MOVCX,串長度,CLD(或STD),串指令,注意:DS與ES一般在完整程序的開始處設(shè)置,在此串指令的程序段中不必重復(fù)設(shè)置,25,指令執(zhí)行的操作為:MOVSB:ES:[DI]←DS:[SI]SI←SI1,DI←DI1MOVSW:ES:[DI+1][DI]←DS:[SI+1][SI]SI←SI2,DI←DI2指令也可寫成:MOVSdest,src(即無B或W標(biāo)識(shí))但要求:①src用DS:SI尋址,dest用ES:DI尋址②傳送是字節(jié)還是字,由操作數(shù)的類型決定,⒈串傳送指令MOVSB/MOVSW,26,串傳送指令使用舉例,用串傳送指令實(shí)現(xiàn)200個(gè)字節(jié)的數(shù)據(jù)傳送:LEASI,MEM1LEADI,MEM2MOVCX,200CLDREPMOVSBHLT,27,⒉串比較指令CMPSB/CMPSW,指令執(zhí)行的操作為:CMPSB:ES:[DI]-DS:[SI]SI←SI1,DI←DI1CMPSW:ES:[DI+1][DI]-DS:[SI+1][SI]SI←SI2,DI←DI2比較的結(jié)果只反映在標(biāo)志位上,串本身無變化。本指令可用來檢查兩個(gè)串是否相等。,格式:CMPSOPRD1,OPRD2CMPSBCMPSW,28,串比較指令舉例,JZSTOPDECSIMOVAL,[SI]MOVBX,SISTOP:HLT,測試內(nèi)存中兩塊200個(gè)字節(jié)數(shù)據(jù)是否相同,并找出第一個(gè)不相等字符的地址,將該地址和字符存貯起來。,LEASI,MEM1LEADI,MEM2MOVCX,200CLDREPECMPSB,29,⒊串掃描SCASB/SCASW,執(zhí)行的操作:對字節(jié):AL-ES:[DI]DI?DI1對字:AX-ES:[DI+1][DI]DI?DI2搜索指令執(zhí)行的仍是比較(減法)操作,結(jié)果只影響標(biāo)志位。要搜索的關(guān)鍵字放在AL(字節(jié))或AX(字)中。本指令用于在串中查找指定的信息。,格式:SCASOPRDSCASBSCASW,30,SCAS指令加上重復(fù)前綴后,可對串進(jìn)行連續(xù)掃描比較:若前綴為REPZ,則表示比較結(jié)果相等且(ZF=1)且串未結(jié)束(CX≠0),則繼續(xù)比較。若前綴為REPNZ,則表示比較結(jié)果不相等(ZF=0)且串未結(jié)束(CX≠0)就繼續(xù)比較。,31,例:在ES段的偏移1000H開始處存有10個(gè)ASCII碼。搜索’E’,若找到則記下搜索次數(shù)及存放地址,并在屏幕上顯示’Y’;若未找到則顯示’N’。(見右圖)在屏幕上顯示一個(gè)字符的指令段如下:(參見附錄C.3DOS功能調(diào)用)MOVDL,MOVAH,2INT21H實(shí)現(xiàn)題目要求的程序段見下頁:,,,,,,,,1000H,41,42,43,44,45,46,,,’A’,’B’,’C’,’D’,’F’,...,ES段,’E’,32,MOVDI,1000H;(DI)←串偏移地址MOVCX,0AH;(CX)←串長度MOVAL,’E’;搜索關(guān)鍵字=’E’CLD;從低地址到高地址進(jìn)行搜索REPNZSCASB;若未找到,繼續(xù)搜索JZFOUND;找到,轉(zhuǎn)至FOUNDMOVDL,’N’;串中無’E’,(DL)←’N’JMPDONE;轉(zhuǎn)至DONEFOUND:DECDI;指針回退MOVADDR,DI;ADDR←’E’的地址SUBDI,1000HMOVNUM,DI;NUM←搜索次數(shù)MOVDL,’Y’;(DL)←’Y’DONE:MOVAH,2INT21H;顯示字符HLT,33,執(zhí)行的操作為:對字節(jié):AL←DS:[SI]SI←SI1對字:AX←DS:[SI+1][SI]SI←SI2串裝入指令通常不加重復(fù)前綴。LODSB等價(jià)于:LODSW等價(jià)于:MOVAL,[SI]MOVAX,[SI]INCSIINCSIINCSI,⒋串裝入指令LODSB/LODSW,格式:LODSOPRDLODSBLODSW,34,,,,,36H,32H,,,,,39H,31H,,,STRING1,STRING2,38H,35H,36H,33H,,,,被加數(shù),加數(shù),數(shù)據(jù)段,,‘8’,‘5’,‘6’,‘2’,‘9’,‘1’,‘6’,‘3’,,,,,SUM,,,結(jié)果,...,...,07H,07H,02H,06H,265836196277,,?,LEASI,STRING1LEADI,STRING2LEABX,SUMMOVCX,4CLCAGAIN:MOVAL,[SI]ADCAL,[DI]AAAMOV[BX],ALINCSIINCDIINCBXDECCXJNZAGAIN,35,下面要求將兩個(gè)4字節(jié)的ASCII碼數(shù)據(jù)求和,并將和的結(jié)果送顯示。為此,要先化成ASCII碼再送顯示,程序段如下:LEASI,SUM+3;(SI)←SUM+3MOVCX,4;(CX)←和長度STD;置DF=1,減量修改SIMOVAH,02;(AH)←功能號(hào)LP:LODSB;取BCD碼至AL,且SI←SI-1ADDAL,30H;轉(zhuǎn)換為ASCII碼MOVDL,AL;(DL)←字符INT21H;顯示字符DECCXJNZLP……,36,指令的操作為:對字節(jié):ES:[DI]←ALDI?DI1對字:ES:[DI+1][DI]←AXDI?DI2本指令用于把一塊存儲(chǔ)區(qū)域填充成某一初始值(即對存儲(chǔ)區(qū)進(jìn)行初始化)。存儲(chǔ)區(qū)域的首地址要預(yù)先設(shè)置到ES:DI中。要存儲(chǔ)到串中的數(shù)據(jù)要預(yù)先存到AL(AX)中。,⒌串存儲(chǔ)指令STOSB/STOSW,格式:STOSOPRDSTOSBSTOSW,37,例:把從A000H開始的2KB內(nèi)存單元清零。程序段如下:MOVDI,0A000HMOVAX,0MOVCX,1024CLDREPSTOSW,- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 指令系統(tǒng) 邏輯運(yùn)算 移位 指令 操作 樓俊君
鏈接地址:http://www.820124.com/p-11542916.html