計(jì)算機(jī)硬件技術(shù)基礎(chǔ)第3章_第1頁
計(jì)算機(jī)硬件技術(shù)基礎(chǔ)第3章_第2頁
計(jì)算機(jī)硬件技術(shù)基礎(chǔ)第3章_第3頁
計(jì)算機(jī)硬件技術(shù)基礎(chǔ)第3章_第4頁
計(jì)算機(jī)硬件技術(shù)基礎(chǔ)第3章_第5頁
已閱讀5頁,還剩30頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、13.3.3 邏輯運(yùn)算和移位指令邏輯運(yùn)算指令(AND、OR、XOR、NOT) 運(yùn)算規(guī)則:按位操作,無進(jìn)/借位 對(duì)標(biāo)志位的影響(除NOT指令外): CF OF SF ZF PF AF 0 0 * * * 無定義 根據(jù)運(yùn)算結(jié)果設(shè)置 清空CF/OF有時(shí)利用這一點(diǎn)2(1) 邏輯”與” AND對(duì)兩個(gè)操作數(shù)進(jìn)行按位邏輯“與”操作。格式:AND dest, src用途:保留操作數(shù)的某幾位,清零其他位。例1:保留AL中低4位,高4位清0。 AND AL, 0FH例2:AL中有字符az, 將其轉(zhuǎn)換成大寫。 AND AL, 01011111B3例3:測試AL的bit7,bit5,bit2是否都是1。AND AL,

2、 10100100BCMP AL, 10100100B JZ YES ; if match, go to YES ; if not match YES: ; goes here if all 1 4對(duì)兩個(gè)操作數(shù)進(jìn)行按位邏輯”或”操作。格式:OR dest, src用途:對(duì)操作數(shù)的某幾位置1;對(duì)兩操作數(shù) 進(jìn)行組合。(2) 邏輯”或” OR5例:OR BX,00FFH ;BH保持不變,BL置為0FFH例:把AL的第5位置為1 OR AL, 00100000B6對(duì)操作數(shù)進(jìn)行按位邏輯”非”操作。格式:NOT mem/reg例:NOT CX NOT BYTE PTRDI(3) 邏輯“非”(取反) NOT

3、7對(duì)兩個(gè)操作數(shù)按位進(jìn)行”異或”操作。格式:XOR dest, src用途:對(duì)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)移指令一起用。例:測試AL的內(nèi)容是否為負(fù)數(shù)。 TEST AL,80H ;檢查AL中D7=1? JNZ MINUS ;是1(負(fù)數(shù)),轉(zhuǎn)MINUS ;否則(正數(shù))不轉(zhuǎn)移MINUS:

4、 (5) 測試指令TEST92.移位指令(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時(shí)1 ;移位位數(shù)等于1時(shí)10移位指令執(zhí)行的操作如下圖所示:最低位最高位CF0(a)算術(shù)/邏輯左移 SAL/SHL最低位最高位CF(b)算術(shù)右移 SAR最低位最高位CF(c)邏輯右移 SHR0非循環(huán)移位指令功能示意圖11算術(shù)移

5、位把操作數(shù)看做有符號(hào)數(shù); 邏輯移位把操作數(shù)看做無符號(hào)數(shù)。移位位數(shù)放在CL寄存器中,如果只移1位,也 可以直接寫在指令中。例如: MOV CL,4 SHR AL,CL ;AL中的內(nèi)容右移4位影響C,P,S,Z,O標(biāo)志。結(jié)果未溢出時(shí): 左移1位操作數(shù)*2 右移1位操作數(shù)/212例:把AL中的數(shù)x乘10因?yàn)?0=8+2=23+21,所以可用移位實(shí)現(xiàn)乘10操作。程序如下:SAL AL,1 ; 2xMOV AH,AL SAL AL,1 ; 4x SAL AL,1 ; 8x ADD AL,AH ; 8x+2x = 10 x13用移位操作代替乘除法可提高運(yùn)算速度例:前例中計(jì)算 x10。(1)采用乘法指令:

6、MOVBL,10 MULBL 共需7077個(gè)T周期。(2)采用移位和加法指令: SALAL,1 ; 2T MOVAH,AL ; 2T SALAL,1 ; 2T SALAL,1 ; 2T ADDAL,AH ; 3T 只需11個(gè)T周期,僅相當(dāng)于乘法的1/7。14 不含進(jìn)位位的循環(huán)左移指令 ROL 不含進(jìn)位位的循環(huán)右移指令 ROR 含進(jìn)位位的循環(huán)左移指令 RCL 含進(jìn)位位的循環(huán)右移指令 RCR格式同非循環(huán)移位指令。移位位數(shù)放在CL寄存器中,如果只移1位, 也可以直接寫在指令中。循環(huán)移位指令只影響標(biāo)志位CF和OF。(2)循環(huán)移位指令15這4條指令的功能如下圖示:最低位最高位CF(a) ROL最低位最高

7、位CF(c) RCL最低位最高位CF(b) ROR最低位最高位CF(d) RCR循環(huán)移位指令功能示意圖16循環(huán)移位舉例:例1:將AL的高4位與低4位互換。 MOV CL,4 ROL AL,CL例3-25 執(zhí)行以下指令序列后AX=3347H,CF=1: MOV AX,99A3H ;AX置99A3H OR AX,0;AX值不變,但置CF為0 ROL AX,1;對(duì)AX進(jìn)行循環(huán)左移 17串傳送指令使用舉例例3-26 在數(shù)據(jù)段中偏移地址為1000H開始的存儲(chǔ)區(qū)內(nèi)有一(字節(jié))字符串,其長度為100,要求把它們傳送到附加段中偏移地址為2000H開始的一片緩沖區(qū)內(nèi)。實(shí)現(xiàn)該功能的程序片段如下: MOV SI,1

8、000H;置源串偏移地址 MOV DI,2000H;置目的串偏移地址 MOV CX,100 ;置串長度 CLD ;方向標(biāo)志復(fù)位 REP MOVSB ;字符串傳送3.3.4 串操作指令183.3.4 串操作指令串:順序放在內(nèi)存中的一組相同類型的數(shù)據(jù)。串操作:對(duì)串中的元素進(jìn)行相同的操作。串操作的尋址方式: 源操作數(shù)指針DS:SI(DS可超越) 目的操作數(shù)指針ES:DI每次串操作后: 串操作指令自動(dòng)修改SI和DI字節(jié)1,字2。DF標(biāo)志決定(DF=0,;DF=1,)。(注意:退出串操作后,指針指向最后操作的元素的下一個(gè)元素)可完成兩個(gè)存儲(chǔ)單元之間的傳送、比較、搜索、存取 操作(也僅是串指令可以)字符串

9、長度默認(rèn)在CX中,涉及存取或搜索的串操作指令,存取或搜索的關(guān)鍵字默認(rèn)在AL(或AX)中。19表3.2.2 重復(fù)前綴 (1) 若 (CX) 0或ZF = 1,則退出,否則CX = CX - 1;(2) 執(zhí)行后續(xù)指令;(3) 重復(fù) (1)、(2) 步驟。REPNE或REPNZ(1) 若 (CX) 0或ZF = 0,則退出,否則CX = CX - 1;(2) 執(zhí)行后續(xù)指令;(3) 重復(fù) (1)、(2) 步驟。REPE或REPZ(1) 若 (CX) 0,則退出,否則CX = CX - 1;(2) 執(zhí)行后續(xù)指令;(3) 重復(fù) (1)、(2) 步驟。REP功能重復(fù)前綴20串指令使用的一般方法設(shè)置源串地址設(shè)

10、置目標(biāo)串地址設(shè)置串長度設(shè)置操作方向DF串指令MOV SI, 源串首地址(或LEA SI, 源串)MOV DI, 目的串首地址(或LEA DI, 目的串)MOV CX, 串長度CLD(或STD)串指令21指令執(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 / MOVSW22串傳送指令使用舉例例3-26 在數(shù)據(jù)段中

11、偏移地址為1000H開始的存儲(chǔ)區(qū)內(nèi)有一(字節(jié))字符串,其長度為100,要求把它們傳送到附加段中偏移地址為2000H開始的一片緩沖區(qū)內(nèi)。實(shí)現(xiàn)該功能的程序片段如下: MOV SI,1000H;置源串偏移地址 MOV DI,2000H;置目的串偏移地址 MOV CX,100 ;置串長度 CLD ;方向標(biāo)志復(fù)位 REP MOVSB ;字符串傳送23串比較指令CMPSB / CMPSW指令執(zhí)行的操作為:CMPSB: (DS):(SI)-(ES):(DI) SI1, DI1 CMPSW: (DS):(SI+1)(SI)-(ES):(DI+1)(DI) SI2, DI2 指令也可寫成:CMPS dest,

12、src比較的結(jié)果只反映在標(biāo)志位上,串本身無變化。本指令可用來檢查兩個(gè)串是否相等。24串比較指令使用舉例例3-27 在數(shù)據(jù)段中偏移地址為1000H開始的存儲(chǔ)區(qū)內(nèi)有一(字節(jié))字符串,其長度為100,同樣在附加段中偏移地址為2000H開始的存儲(chǔ)區(qū)內(nèi)也有一長度相等的(字節(jié))字符串,現(xiàn)要求找出它們之間不相匹配的位置。 實(shí)現(xiàn)上述功能的程序片段如下; MOV SI,1000H ;裝入源串偏移地址 MOV DI,2000H ;裝入目的串偏移地址 MOV CX,100 ;裝入字符串長度 CLD ;方向標(biāo)志復(fù)位 REPE CMPSB上述程序段執(zhí)行之后,SI或DI的內(nèi)容即為兩字符串中第一個(gè)不匹配字符的下一個(gè)字符的位

13、置。若兩字符串中沒有不匹配的字符,則當(dāng)比較完畢后,CX0。25串掃描SCASB / SCASW執(zhí)行的操作: 對(duì)字節(jié):(AL)(ES):(DI) DI1 對(duì)字: (AX)(ES):(DI1)(DI) DI2搜索指令執(zhí)行的仍是比較(減法)操作,結(jié)果只影響標(biāo)志位。要搜索的關(guān)鍵字放在AL(字節(jié))或AX(字)中。本指令用于在串中查找指定的信息。26 SCAS指令加上重復(fù)前綴后,可對(duì)串進(jìn)行連續(xù)掃描比較:若前綴為REPZ,則表示比較結(jié)果相等且(ZF=1)且串未結(jié)束(CX0),則繼續(xù)比較。若前綴為REPNZ,則表示比較結(jié)果不相等(ZF=0)且串未結(jié)束(CX0)就繼續(xù)比較。27串掃描指令使用舉例例3-28 在附

14、加段中偏移地址為2000H開始的存儲(chǔ)區(qū)內(nèi)有一長度為100的(字節(jié))字符串,要求在該字符串中搜索空格符(ASCII碼為20H)。 實(shí)現(xiàn)此功能的程序片段如下: MOV DI,2000H;裝入目的串偏移地址 MOV AL,20H;裝入關(guān)鍵字節(jié) MOV CX,100;裝入字符串長度 REPNE SCASB上述程序執(zhí)行之后,DI的內(nèi)容即為相匹配字符的下一個(gè)字符的地址,CX中是剩下還未比較的字符個(gè)數(shù)。若字符串中沒有所要搜索的關(guān)鍵字節(jié),則當(dāng)查完之后CX0。28例:在ES段的偏移1000H開始處存有10個(gè)ASCII碼。搜索E,若找到則記下搜索次數(shù)及存放地址,并在屏幕上顯示Y;若未找到則顯示N。(見右圖)在屏幕

15、上顯示一個(gè)字符的指令段如下: MOV DL, MOV AH,2 INT 21H 實(shí)現(xiàn)題目要求的程序段見下頁:1000H414243444546ABCDF. . .ES段E補(bǔ)29 MOV DI, 1000H ;(DI)串偏移地址 MOV CX, 0AH ;(CX)串長度 MOV AL, E ;搜索關(guān)鍵字=E CLD ;從低地址到高地址進(jìn)行搜索 REPNZ SCASB ;若未找到, 繼續(xù)搜索 JZ FOUND ;找到, 轉(zhuǎn)至FOUND MOV DL, N ;串中無E,(DL)N JMP DONE ;轉(zhuǎn)至DONEFOUND:DEC DI ;指針回退 MOV ADDR, DI ;ADDRE的地址 SU

16、B DI, 1000H MOV NUM, DI ;NUM搜索次數(shù) MOV DL, Y ;(DL)YDONE: MOV AH, 2 INT 21H ;顯示字符 HLT 補(bǔ)30指令的操作為: 對(duì)字節(jié):(ES):(DI)(AL) DI1 對(duì)字:(ES):(DI+1)(DI)(AX) DI2本指令用于把一塊存儲(chǔ)區(qū)域填充成某一初始值(即對(duì)存儲(chǔ)區(qū)進(jìn)行初始化)。存儲(chǔ)區(qū)域的首地址要預(yù)先設(shè)置到ES:DI中。要存儲(chǔ)到串中的數(shù)據(jù)要預(yù)先存到AL(AX)中。4.串存儲(chǔ)指令STOSB / STOSW31例1:把從A000H開始的2KB內(nèi)存單元清零。程序段如下: MOV DI,0A000H MOV AX,0 MOV CX,

17、1024 CLD REP STOSW 32例2:把1000H開始的100個(gè)存儲(chǔ)單元填入 ASCII碼2AH(*)。程序段如下: MOV DI, 1000H ; 首地址 MOV AL, 2AH ;* MOV CX, 100 ; 重復(fù)執(zhí)行100次 CLD ; 增量修改DI REPSTOSB33執(zhí)行的操作為: 對(duì)字節(jié):(AL)(DS):(SI) SI1 對(duì)字:(AX)(DS):(SI+1)(SI) SI2 串裝入指令通常不加重復(fù)前綴。LODSB等價(jià)于: LODSW等價(jià)于: MOV AL,SI MOV AX,SI INC SI INC SI INC SI 5.串裝入指令LODSB / LODSW3436H32H39H31HSTRING1STRIN

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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)論