指令系統(tǒng)4(邏輯運算和移位指令、串操作指令)(樓俊君.ppt
《指令系統(tǒng)4(邏輯運算和移位指令、串操作指令)(樓俊君.ppt》由會員分享,可在線閱讀,更多相關《指令系統(tǒng)4(邏輯運算和移位指令、串操作指令)(樓俊君.ppt(37頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1,4.3.3邏輯運算和移位指令,邏輯運算指令(與/或/異或/非)運算規(guī)則:按位操作,無進/借位對標志位的影響(除NOT指令外):,CFOFSFZFPFAF00*無定義,根據(jù)運算結果設置,注意:非指令NOT對標志無影響,2,邏輯運算類指令表,3,(1)邏輯”與”AND,對兩個操作數(shù)進行按位邏輯“與”操作。格式:ANDdest,src用途:保留操作數(shù)的某幾位,清零其他位。例1:保留AL中低4位,高4位清0。ANDAL,0FH例2:AL中有字符az,將其轉換成大寫。ANDAL,01011111B,4,例3:測試AL的bit7,bit5,bit2是否都是1。ANDAL,10100100BCMPAL,10100100BJZYES;ifmatch,gotoYES;ifnotmatchYES:;goeshereifall1,5,對兩個操作數(shù)進行按位邏輯”或”操作。格式:ORdest,src用途:對操作數(shù)的某幾位置1;對兩操作數(shù)進行組合。例1:把AL中的非壓縮BCD碼變成相應十進制數(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ù)進行按位邏輯”非”操作。格式:NOTmem/reg例:NOTCXNOTBYTEPTRDI,(3)邏輯“非”(取反)NOT,8,對兩個操作數(shù)按位進行”異或”操作。格式:XORdest,src用途:對reg清零(自身異或)把reg/mem的某幾位變反(與1異或)例1:把AX寄存器清零。例2:把DH的bit4,3變反MOVAX,0XORDH,18HXORAX,AXANDAX,0SUBAX,AX,(4)邏輯”異或”XOR,9,操作與AND指令類似,但不將”與”的結果送回,只影響標志位。AND與TEST間的區(qū)別類似于SUB與CMP間的區(qū)別作用:TEST指令常用于位測試,與條件轉移指令一起用。例:測試AL的內(nèi)容是否為負數(shù)。TESTAL,80H;檢查AL中D7=1?JNZMINUS;是1(負數(shù)),轉MINUS;否則(正數(shù))不轉移MINUS:,(5)測試指令TEST,10,移位操作類指令表,2.移位指令,11,移位指令功能示意,算術左移指令,算術右移指令,邏輯左移指令,邏輯右移指令,小循環(huán)右移指令,小循環(huán)左移指令,大循環(huán)左移指令,大循環(huán)右移指令,CF=,12,2.移位指令,(1)非循環(huán)移位指令算術左移指令SAL(ShiftArithmeticLeft)算術右移指令SAR(ShiftArithmeticRight)邏輯左移指令SHL(ShiftLeft)邏輯右移指令SHR(ShiftRight)這4條指令的格式相同,以SAL為例:SALmem/reg,CL;移位位數(shù)1時1;移位位數(shù)=1時,13,移位指令執(zhí)行的操作如下圖所示:,最低位,最高位,CF,0,(a)算術/邏輯左移SAL/SHL,最低位,最高位,CF,(b)算術右移SAR,最低位,最高位,CF,(c)邏輯右移SHR,0,非循環(huán)移位指令功能示意圖,14,算術移位把操作數(shù)看做有符號數(shù);邏輯移位把操作數(shù)看做無符號數(shù)。移位位數(shù):一般放在CL寄存器中,但如果只移1位,也可以直接寫在指令中。例如:MOVCL,4SHRAL,CL;AL中的內(nèi)容右移4位對Flags影響:影響CF,PF,SF,ZF,OF標志。移位效果:結果未溢出時:左移1位操作數(shù)2右移1位操作數(shù)2,15,例:把AL中的數(shù)x10因為10=8+2=23+21,所以可用移位實現(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的影響:只影響標志位CF和OF。,(2)循環(huán)移位指令,17,這4條指令的功能如下圖示:,最低位,最高位,CF,(a)ROL,最低位,最高位,CF,(c)RCL,最低位,最高位,CF,(b)ROR,最低位,最高位,CF,(d)RCR,循環(huán)移位指令功能示意圖,18,用移位操作代替乘除法可提高運算速度例:前例中計算x10。(1)采用乘法指令:MOVBL,10MULBL共需7077個T周期。(2)采用移位和加法指令:SALAL,1;2TMOVAH,AL;2TSALAL,1;2TSALAL,1;2TADDAL,AH;3T只需11個T周期,僅相當于乘法的1/7。,19,循環(huán)移位舉例:,例1:將AL的高4位與低4位互換。MOVCL,4ROLAL,CL例2:MOVAL,82HRORAL,1執(zhí)行結果為:AL=41H,CF=0,OF=1,20,4.3.4串操作指令,串:順序放在內(nèi)存中的一組相同類型的數(shù)據(jù)。串操作:對串中的元素進行相同的操作。串操作的尋址方式:源操作數(shù)指針DS:SI(DS可超越)目的操作數(shù)指針ES:DI數(shù)據(jù)塊長度CX功能:可完成兩個存儲單元之間的傳送MOVS、比較CMPS、搜索SANS、讀LODS、寫STOS5種操作(也僅是串指令可以)。一次操作對象為16位(W)或8位(B)數(shù)據(jù),但為下一次操作做了準備。,21,串操作指令執(zhí)行動作示意圖,自動循環(huán)-加前綴REPREPE/REPZREPNE/REPNZ,(a)方向標志DF=0,(b)方向標志位DF=1,22,每次串操作后(輔助動作):串操作指令自動修改SI和DI字節(jié)1,字2。DF標志決定,DF=0增地址方向;DF=1減地址方向。(注意:退出串操作后,指針指向最后操作的元素的下一個元素)重復前綴有的串操作指令前面可加上重復前綴REP。當使用REP前綴時,該指令重復執(zhí)行,重復執(zhí)行次數(shù)由CX決定(帶有REP前綴的串操作指令每執(zhí)行一次,CX自動減1)。重復前綴包括:REPCX0時重復執(zhí)行REPE/REPZCX0ZF=1時重復執(zhí)行REPNE/REPNZCX0ZF=0時重復執(zhí)行,23,串操作指令表,24,串指令使用的一般方法:,設置源串地址,設置目標串地址,設置串長度,設置操作方向DF,串指令,MOVSI,源串首地址(或LEASI,源串),MOVDI,目的串首地址(或LEADI,目的串),MOVCX,串長度,CLD(或STD),串指令,注意:DS與ES一般在完整程序的開始處設置,在此串指令的程序段中不必重復設置,25,指令執(zhí)行的操作為:MOVSB:ES:DIDS:SISISI1,DIDI1MOVSW:ES:DI+1DIDS:SI+1SISISI2,DIDI2指令也可寫成:MOVSdest,src(即無B或W標識)但要求:src用DS:SI尋址,dest用ES:DI尋址傳送是字節(jié)還是字,由操作數(shù)的類型決定,串傳送指令MOVSB/MOVSW,26,串傳送指令使用舉例,用串傳送指令實現(xiàn)200個字節(jié)的數(shù)據(jù)傳送:LEASI,MEM1LEADI,MEM2MOVCX,200CLDREPMOVSBHLT,27,串比較指令CMPSB/CMPSW,指令執(zhí)行的操作為:CMPSB:ES:DI-DS:SISISI1,DIDI1CMPSW:ES:DI+1DI-DS:SI+1SISISI2,DIDI2比較的結果只反映在標志位上,串本身無變化。本指令可用來檢查兩個串是否相等。,格式:CMPSOPRD1,OPRD2CMPSBCMPSW,28,串比較指令舉例,JZSTOPDECSIMOVAL,SIMOVBX,SISTOP:HLT,測試內(nèi)存中兩塊200個字節(jié)數(shù)據(jù)是否相同,并找出第一個不相等字符的地址,將該地址和字符存貯起來。,LEASI,MEM1LEADI,MEM2MOVCX,200CLDREPECMPSB,29,串掃描SCASB/SCASW,執(zhí)行的操作:對字節(jié):ALES:DIDIDI1對字:AXES:DI1DIDIDI2搜索指令執(zhí)行的仍是比較(減法)操作,結果只影響標志位。要搜索的關鍵字放在AL(字節(jié))或AX(字)中。本指令用于在串中查找指定的信息。,格式:SCASOPRDSCASBSCASW,30,SCAS指令加上重復前綴后,可對串進行連續(xù)掃描比較:若前綴為REPZ,則表示比較結果相等且(ZF=1)且串未結束(CX0),則繼續(xù)比較。若前綴為REPNZ,則表示比較結果不相等(ZF=0)且串未結束(CX0)就繼續(xù)比較。,31,例:在ES段的偏移1000H開始處存有10個ASCII碼。搜索E,若找到則記下搜索次數(shù)及存放地址,并在屏幕上顯示Y;若未找到則顯示N。(見右圖)在屏幕上顯示一個字符的指令段如下:(參見附錄C.3DOS功能調(diào)用)MOVDL,MOVAH,2INT21H實現(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;搜索關鍵字=ECLD;從低地址到高地址進行搜索REPNZSCASB;若未找到,繼續(xù)搜索JZFOUND;找到,轉至FOUNDMOVDL,N;串中無E,(DL)NJMPDONE;轉至DONEFOUND:DECDI;指針回退MOVADDR,DI;ADDRE的地址SUBDI,1000HMOVNUM,DI;NUM搜索次數(shù)MOVDL,Y;(DL)YDONE:MOVAH,2INT21H;顯示字符HLT,33,執(zhí)行的操作為:對字節(jié):ALDS:SISISI1對字:AXDS:SI+1SISISI2串裝入指令通常不加重復前綴。LODSB等價于:LODSW等價于:MOVAL,SIMOVAX,SIINCSIINCSIINCSI,串裝入指令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,結果,.,.,07H,07H,02H,06H,265836196277,LEASI,STRING1LEADI,STRING2LEABX,SUMMOVCX,4CLCAGAIN:MOVAL,SIADCAL,DIAAAMOVBX,ALINCSIINCDIINCBXDECCXJNZAGAIN,35,下面要求將兩個4字節(jié)的ASCII碼數(shù)據(jù)求和,并將和的結果送顯示。為此,要先化成ASCII碼再送顯示,程序段如下:LEASI,SUM+3;(SI)SUM+3MOVCX,4;(CX)和長度STD;置DF=1,減量修改SIMOVAH,02;(AH)功能號LP:LODSB;取BCD碼至AL,且SISI-1ADDAL,30H;轉換為ASCII碼MOVDL,AL;(DL)字符INT21H;顯示字符DECCXJNZLP,36,指令的操作為:對字節(jié):ES:DIALDIDI1對字:ES:DI+1DIAXDIDI2本指令用于把一塊存儲區(qū)域填充成某一初始值(即對存儲區(qū)進行初始化)。存儲區(qū)域的首地址要預先設置到ES:DI中。要存儲到串中的數(shù)據(jù)要預先存到AL(AX)中。,串存儲指令STOSB/STOSW,格式:STOSOPRDSTOSBSTOSW,37,例:把從A000H開始的2KB內(nèi)存單元清零。程序段如下:MOVDI,0A000HMOVAX,0MOVCX,1024CLDREPSTOSW,- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創(chuàng)性部分享有著作權。
- 關 鍵 詞:
- 指令系統(tǒng) 邏輯運算 移位 指令 操作 樓俊君
裝配圖網(wǎng)所有資源均是用戶自行上傳分享,僅供網(wǎng)友學習交流,未經(jīng)上傳用戶書面授權,請勿作他用。
鏈接地址:http://italysoccerbets.com/p-11542916.html