




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、1,3.3.3 邏輯運算和移位指令,邏輯運算指令 運算規(guī)則:按位操作,無進/借位 對標(biāo)志位的影響(除NOT指令外):,CF OF SF ZF PF AF 0 0 * * * 無定義,根據(jù)運算結(jié)果設(shè)置,2,(1) 邏輯”與” AND,對兩個操作數(shù)進行按位邏輯“與”操作。 格式:AND dest, src 用途:保留操作數(shù)的某幾位,清零其他位。 例1:保留AL中低4位,高4位清0。 AND AL, 0FH 例2:AL中有字符az, 將其轉(zhuǎn)換成大寫。 AND AL, 01011111B,3,例3:測試AL的bit7,bit5,bit2是否都是1。 AND AL, 10100100B CMP AL,
2、10100100B JZ YES ; if match, go to YES ; if not match YES: ; goes here if all 1,4,對兩個操作數(shù)進行按位邏輯”或”操作。 格式:OR dest, src 用途:對操作數(shù)的某幾位置1;對兩操作數(shù) 進行組合。 例1:把AL中的非壓縮BCD碼變成相應(yīng)十進制 數(shù)的ASCII碼。 OR AL, 30H,(2) 邏輯”或” OR,5,例2:把AH和AL中的非壓縮BCD碼組合成壓 縮的BCD碼, 放到AL中。 MOV CL, 4 SHL AH, CL OR AL, AH 例3:把AL的第5位置為1 OR AL, 00100000
3、B,6,對操作數(shù)進行按位邏輯”非”操作。 格式:NOT mem/reg 例:NOT CX NOT BYTE PTRDI,(3) 邏輯“非”(取反) NOT,7,對兩個操作數(shù)按位進行”異或”操作。 格式:XOR dest, src 用途:對reg清零(自身異或) 把reg/mem的某幾位變反(與1異或) 例1:把AX寄存器清零。 例2:把DH的bit4,3變反 MOV AX,0 XOR DH,18H XOR AX,AX AND AX,0 SUB AX,AX,(4) 邏輯”異或” XOR,8,操作與AND指令類似,但不將”與”的結(jié)果送回,只影響標(biāo)志位。 TEST指令常用于位測試,與條件轉(zhuǎn)移指令一起
4、用。 例:測試AL的內(nèi)容是否為負(fù)數(shù)。 TEST AL,80H ;檢查AL中D7=1? JNZ MINUS ;是1(負(fù)數(shù)),轉(zhuǎn)MINUS ;否則(正數(shù))不轉(zhuǎn)移 MINUS: ,(5) 測試指令TEST,9,2.移位指令,(1)非循環(huán)移位指令 算術(shù)左移指令 SAL(Shift Arithmetic Left) 算術(shù)右移指令 SAR(Shift Arithmetic Right) 邏輯左移指令 SHL(Shift Left) 邏輯右移指令 SHR(Shift Right) 這4條指令的格式相同,以SAL為例: SAL mem/reg,CL ;移位位數(shù)大于1時 1 ;移位位數(shù)等于1時,10,移位指令執(zhí)
5、行的操作如下圖所示:,最低位,最高位,CF,0,(a)算術(shù)/邏輯左移 SAL/SHL,最低位,最高位,CF,(b)算術(shù)右移 SAR,最低位,最高位,CF,(c)邏輯右移 SHR,0,非循環(huán)移位指令功能示意圖,11,算術(shù)移位把操作數(shù)看做有符號數(shù); 邏輯移位把操作數(shù)看做無符號數(shù)。 移位位數(shù)放在CL寄存器中,如果只移1位,也 可以直接寫在指令中。例如: MOV CL,4 SHR AL,CL ;AL中的內(nèi)容右移4位 影響C,P,S,Z,O標(biāo)志。 結(jié)果未溢出時: 左移1位操作數(shù)*2 右移1位操作數(shù)/2,12,例:把AL中的數(shù)x乘10 因為10=8+2=23+21,所以可用移位實現(xiàn)乘10操作。程序如下:
6、SAL AL,1 ; 2x MOV AH,AL SAL AL,1 ; 4x SAL AL,1 ; 8x ADD AL,AH ; 8x+2x = 10 x,13,不含進位位的循環(huán)左移指令 ROL 不含進位位的循環(huán)右移指令 ROR 含進位位的循環(huán)左移指令 RCL 含進位位的循環(huán)右移指令 RCR 格式同非循環(huán)移位指令。 移位位數(shù)放在CL寄存器中,如果只移1位, 也可以直接寫在指令中。 循環(huán)移位指令只影響標(biāo)志位CF和OF。,(2)循環(huán)移位指令,14,這4條指令的功能如下圖示:,最低位,最高位,CF,(a) ROL,最低位,最高位,CF,(c) RCL,最低位,最高位,CF,(b) ROR,最低位,最高
7、位,CF,(d) RCR,循環(huán)移位指令功能示意圖,15,用移位操作代替乘除法可提高運算速度 例:前例中計算 x10。 (1)采用乘法指令: MOVBL,10 MULBL 共需7077個T周期。 (2)采用移位和加法指令: SALAL,1 ; 2T MOVAH,AL ; 2T SALAL,1 ; 2T SALAL,1 ; 2T ADDAL,AH ; 3T 只需11個T周期,僅相當(dāng)于乘法的1/7。,16,循環(huán)移位舉例:,例1:將AL的高4位與低4位互換。 MOV CL,4 ROL AL,CL 例2:將1A00H內(nèi)存單元中的雙字循環(huán)左移1位。 CMP 1A00H,8000H CMC RCL WORD
8、 PTR1A02H,1 RCL WORD PTR1A00H,1,17,例:設(shè)在1000H開始存有四個壓縮的BCD碼12、34、56、78。要求把它們轉(zhuǎn)換為ASCII碼存放在3000H開始的單元中。 假定DS、ES都已設(shè)置為 數(shù)據(jù)段的段基址。 程序見下頁。,1000H,3000H,12,34,56,78,32H,31H,34H,33H,36H,35H,38H,37H,18,MOV SI,1000H;SIBCD首址 MOV DI,3000H;DIASCII首址 MOV BX,4;置計數(shù)器初值 BBB: MOV AL,SI ;ALBCD碼,第一次取12H AND AL,0FH;屏蔽高4位02H OR
9、 AL,30H;轉(zhuǎn)換為ASCII碼32H STOSB ;保存結(jié)果 LODSB MOV CL,4 SHR AL,CL ;邏輯右移4位 OR AL,30H ;得到高4位ASCII碼 STOSB ;保存結(jié)果 DEC BX ;(BX)(BX)-1 JNZ BBB ;(BX)0,則繼續(xù)循環(huán),19,作業(yè),P152-P153 3.1、 3.2、 3.7、 3.9、 3.13 、3.16,20,3.3.4 串操作指令,串:順序放在內(nèi)存中的一組相同類型的數(shù)據(jù)。 串操作:對串中的元素進行相同的操作。 串操作的尋址方式: 源操作數(shù)指針DS:SI(DS可超越) 目的操作數(shù)指針ES:DI 每次串操作后: 串操作指令自動
10、修改SI和DI字節(jié)1,字2。DF標(biāo)志決定。(注意:退出串操作后,指針指向最后操作的元素的下一個元素) 可完成兩個存儲單元之間的傳送和比較操作(也僅是串指令可以),21,重復(fù)前綴 有的串操作指令前面可加上重復(fù)前綴REP。當(dāng)使用REP前綴時,該指令重復(fù)執(zhí)行,重復(fù)執(zhí)行次數(shù)由CX決定(帶有REP前綴的串操作指令每執(zhí)行一次,CX自動減1)。 重復(fù)前綴包括: REP CX0 時重復(fù)執(zhí)行 REPE/REPZ CX0ZF=1時重復(fù)執(zhí)行 REPNE/REPNZ CX0ZF=0時重復(fù)執(zhí)行,22,串指令使用的一般方法,設(shè)置源串地址,設(shè)置目標(biāo)串地址,設(shè)置串長度,設(shè)置操作方向DF,串指令,MOV SI, 源串首地址 (
11、或LEA SI, 源串),MOV DI, 目的串首地址 (或LEA DI, 目的串),MOV CX, 串長度,CLD(或STD),串指令,23,指令執(zhí)行的操作為: MOVSB: (ES):(DI)(DS):(SI) SI1, DI1 MOVSW: (ES):(DI+1)(DI)(DS):(SI+1)(SI) SI2, DI2 指令也可寫成:MOVS dest,src 但要求: src用DS:SI尋址,dest用ES:DI尋址 傳送是字節(jié)還是字,由操作數(shù)的類型決定,串傳送指令MOVSB / MOVSW,24,串傳送指令使用舉例,用串傳送指令實現(xiàn)200個字節(jié)的數(shù)據(jù)傳送: LEA SI,MEM1 L
12、EA DI,MEM2 MOV CX,200 CLD REP MOVSB HLT,25,串比較指令CMPSB / CMPSW,指令執(zhí)行的操作為: CMPSB: (DS):(SI)-(ES):(DI) SI1, DI1 CMPSW: (DS):(SI+1)(SI)-(ES):(DI+1)(DI) SI2, DI2 指令也可寫成:CMPS dest, src 比較的結(jié)果只反映在標(biāo)志位上,串本身無變化。 本指令可用來檢查兩個串是否相等。,26,串掃描SCASB / SCASW,執(zhí)行的操作: 對字節(jié):(AL)(ES):(DI) DI1 對字: (AX)(ES):(DI1)(DI) DI2 搜索指令執(zhí)行的
13、仍是比較(減法)操作,結(jié)果只影響標(biāo)志位。 要搜索的關(guān)鍵字放在AL(字節(jié))或AX(字)中。 本指令用于在串中查找指定的信息。,27,SCAS指令加上重復(fù)前綴后,可對串進行連續(xù)掃描比較: 若前綴為REPZ,則表示比較結(jié)果相等且(ZF=1)且串未結(jié)束(CX0),則繼續(xù)比較。 若前綴為REPNZ,則表示比較結(jié)果不相等(ZF=0)且串未結(jié)束(CX0)就繼續(xù)比較。,28,例:在ES段的偏移1000H開始處存有10個ASCII碼。搜索E,若找到則記下搜索次數(shù)及存放地址,并在屏幕上顯示Y;若未找到則顯示N。(見右圖) 在屏幕上顯示一個字符的 指令段如下:(參見附錄C.3) MOV DL, MOV AH,2 I
14、NT 21H 實現(xiàn)題目要求的程序段見下頁:,1000H,41,42,43,44,45,46,A,B,C,D,F,. . .,ES段,E,29,MOV DI, 1000H ;(DI)串偏移地址 MOV CX, 0AH ;(CX)串長度 MOV AL, E ;搜索關(guān)鍵字=E CLD ;從低地址到高地址進行搜索 REPNZ SCASB ;若未找到, 繼續(xù)搜索 JZ FOUND ;找到, 轉(zhuǎn)至FOUND MOV DL, N ;串中無E,(DL)N JMP DONE ;轉(zhuǎn)至DONE FOUND:DEC DI ;指針回退 MOV ADDR, DI ;ADDRE的地址 SUB DI, 1000H MOV N
15、UM, DI ;NUM搜索次數(shù) MOV DL, Y ;(DL)Y DONE: MOV AH, 2 INT 21H ;顯示字符 HLT,30,執(zhí)行的操作為: 對字節(jié):(AL)(DS):(SI) SI1 對字:(AX)(DS):(SI+1)(SI) SI2 串裝入指令通常不加重復(fù)前綴。 LODSB等價于: LODSW等價于: MOV AL,SI MOV AX,SI INC SI INC SI INC SI,串裝入指令LODSB / LODSW,31,36H,32H,39H,31H,STRING1,STRING2,38H,35H,36H,33H,被加數(shù),加數(shù),數(shù)據(jù)段,8,5,6,2,9,1,6,3,
16、SUM,結(jié)果,.,.,07H,07H,02H,06H,32,下面要求將和的結(jié)果送顯示,為此,要先化成ASCII碼再送顯示,程序段如下: LEA SI,SUM+3 ;(SI)SUM+3 MOV CX,4 ;(CX)和長度 STD ;置DF=1,減量修改SI MOV AH,02 ;(AH)功能號 LP: LODSB ;取BCD碼至AL,且(SI)(SI)-1 ADD AL,30H ;轉(zhuǎn)換為ASCII碼 MOV DL,AL ;(DL)字符 INT 21H ;顯示字符 DEC CX JNZ LP ,33,指令的操作為: 對字節(jié):(ES):(DI)(AL) DI1 對字:(ES):(DI+1)(DI)(AX) DI2 本指令用于把一塊存儲區(qū)域填充成某一初始值(即對存儲區(qū)進行初始化)。 存儲區(qū)域的首地址要預(yù)先設(shè)置到ES:DI
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 內(nèi)部購車合同范本
- 制作柜子合同范本
- 單位內(nèi)部變更合同范本
- app研發(fā)合同范本
- 2025年云南省安全員C證考試題庫
- 立德樹人背景下高職體育教學(xué)改革研究
- 勞動合同范本 深圳
- 眾籌二手車合同范本
- 企業(yè)轉(zhuǎn)移員工勞動合同范本
- 半導(dǎo)體行業(yè)晶圓良率提升專項總結(jié)
- 《物流無人機垂直起降場選址與建設(shè)規(guī)范(征求意見稿)》
- CAS鋁鎂質(zhì)保溫施工施工方法及工藝技術(shù)
- 北師大版四年級下冊認(rèn)識三角形和四邊形
- 2023風(fēng)電機組預(yù)應(yīng)力混凝土塔筒與基礎(chǔ)結(jié)構(gòu)設(shè)計標(biāo)準(zhǔn)
- 統(tǒng)編版小學(xué)語文四年級下冊《十萬個為什么》整本書閱讀(教案)
- GB/T 748-2023抗硫酸鹽硅酸鹽水泥
- 《傳染病》PPT課件完美版-2024鮮版
- 投資項目可行性研究指南
- 糖尿病膳食指南2024
- 健康證用工合同
- 2024年事業(yè)單位考試?yán)ッ魇蠥類《職業(yè)能力傾向測驗》深度預(yù)測試題含解析
評論
0/150
提交評論