微機原理與接口第4章4-邏輯運算及串操作指令解讀課件_第1頁
微機原理與接口第4章4-邏輯運算及串操作指令解讀課件_第2頁
微機原理與接口第4章4-邏輯運算及串操作指令解讀課件_第3頁
微機原理與接口第4章4-邏輯運算及串操作指令解讀課件_第4頁
微機原理與接口第4章4-邏輯運算及串操作指令解讀課件_第5頁
已閱讀5頁,還剩43頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、三、邏輯類指令 (位操作指令)這一類指令包括邏輯運算指令、移位指令和循環(huán)移位指令等三組。位操作類指令以二進制位為基本單位進行數據的操作當需要對字節(jié)或字數據中的各個二進制位操作時,可以考慮采用位操作類指令注意這些指令對標志位的影響 邏輯運算指令AND OR XOR NOT TEST移位指令SHL SHR SAR 循環(huán)移位指令ROL ROR RCL RCR1三、邏輯類指令 (位操作指令)這一類指令包括邏輯運算指令、1. 邏輯運算指令邏輯運算類指令與算術運算指令不同算術指令是按字節(jié)或字進行算術運算,而邏輯運算指令是把操作數按位來進行邏輯運算?!芭c”運算指令格式:AND dst, src“或”運算指令

2、格式: OR dst, src“非”運算指令格式:NOT opr“異或”運算指令格式:XOR dst, src測試指令格式:TEST dst, src說明:TEST相當于AND運算,但是不保存結果,僅影響標志。21. 邏輯運算指令21 邏輯運算指令邏輯運算指令NOT 目的 ;取反指令AND 目的,源 ;按位與指令OR 目的,源 ;按位或指令XOR 目的,源 ;按位異或指令TEST 目的,源 ;測試指令,與AND指令操作相同,只是不改變目的操作數的內容單操作數邏輯指令NOT不影響標志位,操作數與INC、DEC和NEG一樣:31 邏輯運算指令邏輯運算指令3邏輯與指令AND對兩個操作數執(zhí)行邏輯與運算

3、,結果送目的操作數AND dest,src;destdestsrc 只有相“與”的兩位都是1,結果才是1;否則,“與”的結果為04邏輯與指令AND對兩個操作數執(zhí)行邏輯與運算,結果送目的操作數邏輯或指令OR對兩個操作數執(zhí)行邏輯或運算,結果送目的操作數OR dest,src;destdestsrc只要相“或”的兩位有一位是1,結果就是1;否則,結果為05邏輯或指令OR對兩個操作數執(zhí)行邏輯或運算,結果送目的操作數O邏輯異或指令XOR對兩個操作數執(zhí)行邏輯異或運算,結果送目的操作數XOR dest,src;destdestsrc只有相“異或”的兩位不相同,結果才是1;否則,結果為06邏輯異或指令XOR對

4、兩個操作數執(zhí)行邏輯異或運算,結果送目的操測試指令TEST對兩個操作數執(zhí)行邏輯與運算,結果并不送目的操作數,僅按AND指令影響標志TEST dest,src;destsrc AND與TEST指令的關系,同SUB與CMP指令的關系一樣7測試指令TEST對兩個操作數執(zhí)行邏輯與運算,結果并不送目的操邏輯非指令NOT對一個操作數執(zhí)行邏輯非運算NOT reg/mem;reg/memreg/mem 按位取反,原來是“0”的位變?yōu)椤?”;原來是“1”的位變?yōu)椤?”8邏輯非指令NOT對一個操作數執(zhí)行邏輯非運算NOT reg/m例 邏輯運算mov al,75h;AL75Hand al,32h;AL30H;CFOF

5、0, SF0,ZF0,PF1or al,71h;AL71H;CFOF0,SF0,ZF0,PF1xor al,0f1h;AL80H;CFOF0,SF1,ZF0,PF0not al;AL7FH 標志不變9例 邏輯運算mov al,75h;AL75H9邏輯運算指令的應用and bl,11110110b;BL中D0和D3清0,其余位不變or bl,00001001b;BL中D0和D3置1,其余位不變xor bl,00001001b;BL中D0和D3求反,其余位不變 AND指令可用于復位某些位(同0相與),不影響其他位 OR指令可用于置位某些位(同1相或),不影響其他位 XOR指令可用于求反某些位(同1

6、相異或),不影響其他位10邏輯運算指令的應用and bl,11110110b AND 例4.7 從偏移地址TABLE開始的內存區(qū)中,存放著100個字節(jié)型數據,要求將這些數進行累加,并將累加和的低位存SUM單元,高位存SUM+1單元。程序如下: LEA BX,TABLE;(BX)數據表地址指針 MOV CL,100 ;(CL)數據塊長度 XOR AX,AX ;清AL、AH,并清進位CFLOOPER:ADD AL,BX ;加一個數到AL JNC GOON ;如(CF)=0,轉移到GOON INC AH ;否則,AH加1 GOON:INC BX ;地址指針加1 DEC CL ;計數值減1 JNZ L

7、OOPER ;如(CL)0,轉移到LOOPER MOV SUM,AX ;否則,(SUM)(AL),(SUM+1)(AH) HLT ;停止11 例4.7 從偏移地址TABLE開始的內存區(qū)中,存放常見的用法 清進位標志位: AND AX,AX 或 OR AL,AL等 清零操作數:XOR AX,AX 不僅把AX清零,而且也影響了狀態(tài)標志 把某幾位取反:用XOR指令,把要取反的位和1異或,不變的位和0異或 清零或置位某幾位:用AND指令清零,用OR指令置位12常見的用法122 移位指令將操作數移動一位或多位,分成邏輯移位和算術移位,分別具有左移或右移操作移位指令的第一個操作數是指定的被移位的操作數,可

8、以是寄存器或存儲單元;后一個操作數表示移位位數:該操作數為1,表示移動一位該操作數為CL,CL寄存器值表示移位位數 (移位位數大于1只能CL表示)按照移入的位設置進位標志CF,根據移位后的結果影響SF、ZF、PF132 移位指令將操作數移動一位或多位,分成邏輯移位和算術移位邏輯左移指令SHL(shift logical left)SHL reg/mem,1/CL;reg/mem左移1或CL位;最低位補0,最高位進入CFSHL和SAL指令的功能演示14邏輯左移指令SHL(shift logical left)SSHL和SAL指令的功能15SHL和SAL指令的功能15 例4.8 將一個16位無符號

9、數乘以10。該數原來存放在以FACTOR為首地址的兩個連續(xù)的存儲單元中(低位在前,高位在后)。 因為FACTOR10=(FACTOR8)+(FACTOR2),故可用左移指令實現以上乘法運算。編程如下:MOV AX,FACTOR;(AX)被乘數SHL AX,1 ;(AX)=FACTOR2MOV BX,AX ;暫存BXSHL AX,1 ;(AX)=FACTOR4SHL AX,1 ;(AX)=FACTOR8ADD AX,BX ;(AX)=FACTOR10 HLT 以上程序的執(zhí)行時間大約需26個時鐘。如用乘法指令編程,執(zhí)行時間將超過130個時鐘。 16 例4.8 將一個16位無符號數乘以10。該數原來

10、存邏輯右移指令SHR(shift logical right)SHR reg/mem,1/CL;reg/mem右移1/CL位;最高位補0,最低位進入CF17邏輯右移指令SHR(shift logical right) 例4.9 將一個16位無符號數除以512。該數原來存放在以DIVIDAND為首地址的兩個連續(xù)的存儲單元中。 因為DIVIDAND512=(DIVIDAND2)256,故可用邏輯右移指令完成上述除法運算。編程如下:MOV AX,DIVIDAND ;(AX)被除數SHR AX,1 ;(AX)=DIVIDAND2XCHG AL,AH ;(AL)(AH),相當于循環(huán)右移8位CBW ;清A

11、X的高8位,(AX)=DIVIDAND512HLT 當然,也可以將立即數9傳送到CL寄存器,然后用指令SHR AX,CL完成除以512的運算。但是相比之下,上面的程序執(zhí)行速度更快。 18 例4.9 將一個16位無符號數除以512。該數原來存算術左移指令SAL(shift arithmetic left)SAL reg/mem,1/CL;與SHL是同一條指令19算術左移指令SAL(shift arithmetic lefSHL和SAL指令的功能20SHL和SAL指令的功能20算術右移指令SAR(shift arithmetic right)SAR reg/mem,1/CL;reg/mem右移1/

12、CL位;最高位不變,最低位進入CF21算術右移指令SAR(shift arithmetic rigSAR指令的功能22SAR指令的功能22 3) 循環(huán)移位指令 8086/8088指令系統(tǒng)有四條循環(huán)移位指令,不帶進位標志CF的左循環(huán)移位指令ROL和右循環(huán)移位指令ROR(也稱小循環(huán)),以及帶進位標志CF的左循環(huán)移位指令RCL和右循環(huán)移位指令RCR(也稱大循環(huán))。 循環(huán)移位指令的操作數類型與移位指令相同,可以是8位或16位的寄存器或存儲器。指令中指定的左移或右移的位數也可以是1或由CL寄存器指定,但不能是1以外的常數或CL以外的其他寄存器。 所有循環(huán)移位指令都只影響進位標志CF和溢出標志OF,但OF

13、標志的含義對于左循環(huán)移位指令和右循環(huán)移位指令有所不同。 23 3) 循環(huán)移位指令23循環(huán)移位指令(rotate)循環(huán)移位指令類似移位指令,但要將從一端移出的位返回到另一端形成循環(huán)。分為:ROL reg/mem,1/CL;不帶進位循環(huán)左移ROR reg/mem,1/CL;不帶進位循環(huán)右移RCL reg/mem,1/CL;帶進位循環(huán)左移RCR reg/mem,1/CL;帶進位循環(huán)右移循環(huán)移位指令的操作數形式與移位指令相同,按指令功能設置進位標志CF,但不影響SF、ZF、PF、AF標志演示演示演示演示24循環(huán)移位指令(rotate)循環(huán)移位指令類似移位指令,但要將ROL指令的功能25ROL指令的功能

14、25ROR指令的功能26ROR指令的功能26RCL指令的功能27RCL指令的功能27RCR指令的功能28RCR指令的功能28 (1) 循環(huán)左移指令ROL (ROtate Left)。指令格式: ROL dst,1/CL ROL指令將目的操作數向左循環(huán)移動1位或移CL寄存器指定的位數。最高位移到進位標志CF,同時最高位移到最低位形成循環(huán),進位標志CF不在循環(huán)回路之內。ROL指令的操作如圖4.24所示。 圖4.24 ROL指令操作示意圖 29 (1) 循環(huán)左移指令ROL (ROtate Left ROL指令將影響CF和OF兩個狀態(tài)標志位。如果循環(huán)移位次數等于,且移位以后目的操作數新的最高位與CF不

15、相等,則(OF)=1,否則(OF)= 0。因此,OF的值表示循環(huán)移位前后符號位是否有所變化。如果移位次數不等于,則OF的值不確定。ROL指令的例子如下: ROL BH,1;寄存器循環(huán)左移1位ROL DX,CL ;寄存器循環(huán)左移(CL)位ROL WORD PTR DI,1 ;存儲器循環(huán)左移1位ROL BYTE PTR ALPHA,CL ;存儲器循環(huán)左移(CL)位 30 ROL指令將影響CF和OF兩個狀態(tài)標志位。如果循環(huán) (2) 循環(huán)右移指令ROR (ROtate Right)。指令格式: ROR dst,1/CL ROR指令將目的操作數向右循環(huán)移動1位或移CL寄存器指定的位數。最低位移到進位標志

16、CF,同時最低位移到最高位。該指令的操作如圖4.25表示。 ROR指令也將影響狀態(tài)標志位CF和OF。若循環(huán)移位次數等于且移位后新的最高位和次高位不等,則(OF)=1,否則(OF)=0。若循環(huán)移位次數不等于,則OF的值不確定。 圖4.25 ROR指令操作示意圖31 (2) 循環(huán)右移指令ROR (ROtate Right下面是ROR指令的幾個例子: ROR CX,1 ;寄存器循環(huán)右移1位 ROR BH,CL ;寄存器循環(huán)右移(CL)位ROR BYTE PTR BETA,1 ;存儲器循環(huán)右移1位 ROR WORD PTR ALPHA,CL ;存儲器循環(huán)右移(CL)位 32下面是ROR指令的幾個例子:

17、32 (3) 帶進位循環(huán)左移指令RCL (Rotate Left through Carry)。指令格式: RCL dst,1/CL RCL指令將目的操作數連同進位標志CF一起向左循環(huán)移動1位或移CL寄存器指定的位數。最高位移入CF,而CF移入最低位。該指令的操作如圖4.26所示。 RCL指令對狀態(tài)標志位的影響與ROL指令相同。 圖4.26 RCL指令操作示意圖33 (3) 帶進位循環(huán)左移指令RCL (Rotate (4) 帶進位循環(huán)右移指令RCR (Rotate Right through Carry)。指令格式:RCR dst,1/CL RCR指令將目的操作數與進位標志CF一起向右循環(huán)移動

18、1位或移CL寄存器指定的位數。最低位移入進位標志CF,CF則移入最高位。該指令的操作如圖4.27所示。RCR指令對狀態(tài)標志位的影響與ROR指令相同。 圖4.27 RCR指令操作示意圖34 (4) 帶進位循環(huán)右移指令RCR (Rotate R 這里介紹的四條循環(huán)移位指令與前面討論過的移位指令有所不同,循環(huán)移位之后,操作數中原來各位的信息不會丟失,而只是移到了操作數中的其他位或進位標志上,必要時還可以恢復。 利用循環(huán)移位指令可以對寄存器或存儲器中的任一位進行位測試。例如,要求測試AL寄存器中第5位的狀態(tài)是“0”還是“1”,可利用以下指令實現: MOV CL,5;(CL)移位次數ROL AL,CL;

19、(CF)AL的第5位JNC ZERO;若(CF)=0,轉ZERO ;否則ZERO: 35 這里介紹的四條循環(huán)移位指令與前面討論過的移位指令有所說明 邏輯移位適用于無符號數,算術移位適用于有符號數。 邏輯左移和算術左移的機器碼完全相同,是助記符的兩種寫法。ROL循環(huán)左移:操作數整體左移,最高位移到CF,最低位補原最高位ROR循環(huán)右移:操作數整體右移,最低位移到CF,最高位補原最低位RCL帶進位的循環(huán)左移:類似于ROL循環(huán)移位,CF加入到循環(huán)圈中。RCR帶進位的循環(huán)右移:類似于ROR循環(huán)移位,CF加入到循環(huán)圈中。36說明36四、串操作指令 串操作指令的特征是對數據塊(字符串)進行操作,并且其中部分

20、指令可以兩個操作數同時是存儲器操作數。MOVS (Move string) 串傳送CMPS (Compare string) 串比較SCAS (Scan string) 串掃描LODS (Load from string) 從串中取數據STOS (Store in to string) 存數據到串中37四、串操作指令 串操作指令的特征是對數據塊(字符串)進行操作說明 串操作指令每次執(zhí)行完成一個字節(jié)或一個字的操作。 通常使用重復前綴,用來完成數據塊的操作。重復前綴 REP 重復 REPE/REPZ 相等/為零則重復 REPNE/REPNZ 不相等/不為零則重復3838特點 串操作指令需要指明每次

21、操作的類型:B 字節(jié),W字例如:MOVSB, CMPSW等。串操作指令使用隱含尋址方式,源串地址為DS:SI,目的串地址為ES:DI,待處理串的長度放在CX中。使用DF來表示每次操作以后變址寄存器SI和DI的變化方向CLD ;DF=0 SI,DI做增量變化 B:+1或W:+2STD ;DF=1 SI,DI做減量變化 B:-1或W:-239特點39 MOVS指令(兩個操作數同時是存儲器操作數)MOVSB 或 MOVSW 以字節(jié)或字為單位在存儲單元之間傳送數據,可以使用REP前綴REP MOVS ES:dst_string,seg:src_stringREP MOVSBREP MOVSW (ES)

22、:(DI)(DS):(SI) (SI)(SI) 1,(DI)(DI) 1 (字節(jié)操作) (SI)(SI) 2,(DI)(DI) 2 (字操作)其中,DF=0時用“”,DF=1時用“”第一種格式的一個重要優(yōu)點是可以對源字符串進行段重設(但目的字符串的段地址只能在ES,不可進行段重設)。在第二種和第三種格式中,串操作指令字符的后面加上一個字母“B”或“W”,指出操作對象是字節(jié)串或字串。 40 MOVS指令(兩個操作數同時是存儲器操作數)40注意:在MOVSB、MOVSW這兩種指令下,指令后面不允許出現操作數。例如,以下指令都是合法的:REP MOVS DATA2,DATA1 ;操作數類型應預先定義

23、 MOVS BUFFER2,ES:BUFFER1 ;源操作數進行段重設REP MOVS WORD PTRDI,SI ;用變址寄存器表示操作數REP MOVSB ;字節(jié)串傳送 MOVSW ;字串傳送但以下表示方法是非法的: MOVSB DEST,ES:SRC41注意:在MOVSB、MOVSW這兩種指令下,指令后面不允許出 例4.10 將數據段中首地址為BUFFER1的200個字節(jié)傳送到附加數據段首地址為BUFFER2的內存區(qū)中。使用字節(jié)串傳送指令的程序段如下:LEA SI,BUFFER1;(SI)源串首地址指針LEA DI,BUFFER2 ;(DI)目的串首地址指針MOV CX,200 ;(CX

24、)字節(jié)串長度CLD ;清方向標志DFREP MOVSB ;傳送200個字節(jié)HLT ;停止42 例4.10 將數據段中首地址為BUFFER LODS指令LODSB 或 LODSW 從內存中取出字節(jié)或字到累加器AL或AX可以使用REP前綴,但意義不大。LODS seg:src_string ;可以段超越LODSB; (AL)(DS):(SI) LODSW; (AX)(DS):(SI) (AL)(DS):(SI) 或 (AX)(DS):(SI) (SI)(SI)1 (字節(jié)操作) (SI)(SI)2 (字操作) 其中,當DF=0時用“”,當DF=1時用“”。43 LODS指令LODSB 或 LODSW

25、 從內存中取出字節(jié) 例4.11 內存中以BUFFER為首址的緩沖區(qū)內有10個非壓縮型BCD碼形式存放的十進制數,它們的值可能是09中的任意一個,將這些十進制數順序顯示在屏幕上。根據題意可編程如下: LEA SI,BUFFER;(SI)緩沖區(qū)首址 MOV CX,10 ;(CX)字符串長度 CLD ;清狀態(tài)標志位DFGET: LODSB ;取一個BCD碼到AL ORAL,30H ;BCD碼轉換為ASCII碼 MOV AH,02H ;(AH)功能號 MOV DL,AL ;(DL)字符 INT 21H ;顯示 DEC CX ;(CX)(CX) 1 JNZ GET ;未完成10個字符則重復 HLT 44

26、 例4.11 內存中以BUFFER為首址的緩沖區(qū)內有 STOS指令STOSB 或 STOSW 從累加器中存字節(jié)或字到存儲器,可以使用REP前綴 REP STOSES:dst_string REP STOSB; (ES):(DI)(AL) REP STOSW; (ES):(DI)(AX) (ES):(DI)(AL) 或 (ES):(DI)(AX) (DI)(DI)1 (字節(jié)操作) (DI)(DI)2 (字操作)其中,當DF=0時用“”,當DF=1時用“”。 STOS指令對狀態(tài)標志位沒有影響。指令若加上重復前綴REP,則操作將一直重復進行下去,直到(CX)=0。45 STOS指令45 例4.12

27、將字符裝入以AREA為首址的100個字節(jié)中。LEA DI,AREAMOV AX,#MOV CX,50CLDREP STOSWHLT 程序采用了送存50個字(#),也可以采用送存100個字節(jié)(#)的方法。這兩種方法程序執(zhí)行的結果是相同的,但前者執(zhí)行速度要更快一些。 46 例4.12 將字符裝入以AREA為首址的100 例4.13 一個數據塊由大寫或小寫的英文字母、數字和各種其他符號組成,其結束符是回車符CR(ASCII碼為0DH),數據塊的首地址為BLOCK1。將數據塊傳送到以BLOCK2為首地址的內存區(qū),并將其中所用的英文小寫字母(az)轉換成相應的大寫字母(AZ),其余不變。實現:判斷,數據

28、搬家,轉換小寫字母為大寫。 前面已經討論過英文小寫字母與相應的大寫字母的ASCII碼之間有一定的關系,即只需將小寫字母的ASCII碼減20H,即可得到相應大寫字母的ASCII碼。程序如下: 47 例4.13 一個數據塊由大寫或小寫的英文字母、數字LEA SI,BLOCK1;(SI)源地址指針 LEA DI,BLOCK2 ;(DI)目標地址指針 CLD ;清方向標志DFNEXT:LODSB ;取一個字符到AL CMP AL,0DH ;是否回車符 JZ DONE ;是,則轉DONE CMP AL,61H ;否則,是否小于a JC OK ;C=1,是小于a,則轉OK CMP AL,7BH ;是否大于

29、z JNC OK ;C=0,是大于z ,則轉OK SUB AL,20H ;否則,AL減20HOK: STOSB ;送存 JMP NEXT ;轉移到NEXTDONE:HLT ;停止程序使用回車符控制結束。并沒有使用CX48LEA SI,BLOCK1;(SI)源地址指針48 CMPS指令CMPSB 或 CMPSW 以字節(jié)或字為單位進行兩個存儲器操作數的比較,可以使用REPE/REPZ前綴,用源操作數-目的操作數,但并不送目的操作數,與CMP指令可以比較。REPE/REPNE CMPS srg:src_string,ES:dst_stringREPE/REPNE CMPSBREPE/REPNE CM

30、PSW (DS):(SI) (ES):(DI) (SI)(SI) 1,(DI)(DI) 1 (字節(jié)操作) (SI)(SI) 2,(DI)(DI) 2 (字操作) CMPS指令與其他指令有所不同,指令中的源操作數在前,而目的操作數在后49 CMPS指令CMPSB 或 CMPSW 以字節(jié)或字為單位 例4.14 比較兩個字符串,找出其中第一個不相等字符的地址。如果兩個字符全部相同,則轉到ALLMATCH進行處理。這兩個字符串長度均為20,首地址分別為STRING1和STRING2。LEA SI,STRING1;(SI)字符串1首地址 LEA DI,STRING2;(DI)字符串2首地址 MOV CX,20 ;(CX)字符串長度 CLD

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論