pentium指令系統(tǒng)之邏輯運算和移位指令.ppt
《pentium指令系統(tǒng)之邏輯運算和移位指令.ppt》由會員分享,可在線閱讀,更多相關(guān)《pentium指令系統(tǒng)之邏輯運算和移位指令.ppt(52頁珍藏版)》請在裝配圖網(wǎng)上搜索。
三 邏輯運算和移位指令 一 邏輯運算指令1 AND Logicaland 邏輯 與 指令2 TEST Testornon destructivelogicaland 測試指令3 OR Lgicalinclusiveor 邏輯 或 指令4 XOR Logicalexclusiveor 邏輯 異或 指令5 NOT Logicalnot 邏輯 非 指令特點 邏輯運算是按位操作 操作數(shù)應該是位串而不是數(shù) 影響條件碼 NOT指令除外 其他指令同 SFZFPF 1 AND Logicaland 邏輯 與 指令格式 ANDdest src B W dest dest src src 立即數(shù) 寄存器 存儲器 dest 寄存器 存儲器 執(zhí)行操作 按位進行 與 運算 操作類型舉例 ANDAL 0FH 寄存器 立即數(shù)ANDCX DI 寄存器 寄存器ANDSI MEM NAME 寄存器 存儲器ANDALPHA DI AX 存儲器 寄存器ANDwordptr BX SI 0FFFEH 存儲器 立即數(shù) 與 指令的用途 對一個數(shù)據(jù)的指定位清0將指定位與 0 相與 例 若 AL 43HANDAL 0FH AL 03H AL 0 3不變 AL 4 7 00H 屏蔽高4位 與 指令應用舉例 例1 將英文小寫字母ASCII轉(zhuǎn)換成大寫 小寫英文字母ASCII為 a z 61H 7AH大寫英文字母ASCII為 A Z 41H 5AH程序 MOVAL z ANDAL 0DFH 例2 判斷鍵盤按下的字符是不是 Y MOVAH 7INT21H 鍵入無回顯 AL 輸入鍵的字符碼ANDAL 0DFHCMPAL Y JEYES YES 01100001 01000001 11011111 61H 41H DFH 2 TEST Testornon destructivelogicaland 測試指令格式 TESTdest src dest src src 立即數(shù) 寄存器 存儲器 dest 寄存器 存儲器 執(zhí)行操作 二個操作數(shù)相與的結(jié)果不存入目的 只影響標志位 操作類型舉例 TESTBH 7 寄存器 立即數(shù)TESTSI BP 寄存器 寄存器TESTDI TABLE BX 寄存器 存儲器TEST SI CH 存儲器 寄存器TESTwordptr BX DI 6ACEH 存儲器 立即數(shù) 例 判斷A單元中數(shù)據(jù)的奇偶性設 A 0AEH程序 MOVAL A AL 0AEHTESTAL 01HJZEVEN 結(jié)果 0為偶數(shù)轉(zhuǎn)EVEN 奇數(shù)處理 EVEN 偶數(shù)處理檢測 AL 的最低位是否為0 若為0轉(zhuǎn)EVEN 用途 常常用來檢測指定位是1 0 但又不希望改變原有的操作數(shù)的情況下 常在此指令后邊加一條條件轉(zhuǎn)移指令 3 OR Lgicalinclusiveor 邏輯 或 指令格式 ORdset src dset dset src dest 寄存器 存儲器 src 立即數(shù) 寄存器 存儲器 執(zhí)行操作 進行按位 或 運算用途 將操作數(shù)的指定位置1 操作類型舉例 ORBL 0F6H 寄存器立即數(shù)ORAH BL 寄存器寄存器ORCL BETA BX DI 寄存器存儲器ORGAMMA SI DX 存儲器寄存器ORBYTEPTRMEM BYTE 80H 存儲器立即數(shù) 4 XOR Logicalexclusiveor 邏輯 異或 指令格式 XORdset src B W dset dset src dest 寄存器 存儲器 src 立即數(shù) 寄存器 存儲器 執(zhí)行的操作 對指令的兩個操作數(shù)進行按位 異或 運算 操作類型舉例 XORDI 23F6HH 寄存器 立即數(shù)XORSI DX 寄存器 寄存器XORCL BUFFER 寄存器 存儲器XORMEM BX AX 存儲器 寄存器XORbyteptrTABLE BP SI 3DH 存儲器 立即數(shù) 用途 a對某些特定位求反 某些特定位與 1 其余位保持不變 保持不變與 0 b初始化時將某個寄存器清0應用舉例 例1 將 AL 中的第1 3 5 7位求反0 2 4 6位保持不變 MOVAL 0FHXORAL 0AAH例2 比較三條AX清 0 指令 XORAX AX 清AX 清CF 2個字節(jié) 3個T SUBAX AX 清AX 清CF 2個字節(jié) 3個T MOVAX 0 清AX 不影響標志位 3個字節(jié) 4個T XOR清 0 指令在多字節(jié)累加程序中十分有用 例3 將存放在TABLE開始的100個字節(jié)的16進制數(shù)進行累加 和存于SUM 1 SUM單元 程序 100個字節(jié)的16進制數(shù)進行累加 LEABX TABLEMOVCL 100XORAX AXLOOPER ADDAL BX JNCGOONINCAHGOON INCBXDECCLJNZLOOPERMOVSUM AXHLT 流程圖 5 NOT Logicalnot 邏輯 非 指令格式 NOTdest B W指令操作數(shù)只有一個 指令對操作數(shù)按位求反 執(zhí)行操作 字節(jié)求反 dest 0FFH dest 字求反 dest 0FFFFH dest 源操作數(shù) 寄存器 存儲器 不能是立即數(shù) 影響標志位 對標志位無影響 操作類型舉例 NOTAH 8位寄存器求反NOTCX 16位寄存器求反NOTBYTEPTR BP 8位存儲器求反NOTWORDPTRCOUNT 16位存儲器求反 綜合舉例 1 使某些位置 0 INAL 61H AL B 設備控制寄存器 想使此位為0執(zhí)行指令 ANDAL 0FDH即可 2 使某些位置 1 INAL 61H AL 執(zhí)行指令 ORAL 02 想使此位為 1 3 使某些位求反 INAL 61H AL 0 XORAL 02H 00000010 1 4 測試某些位 測奇偶性 測試 奇 偶 性 見TEST指令的用途例子 邏輯指令應用小結(jié) 1 AND指令用來對指令的指定位清 0 2 OR指令常用來對某些位置1 3 XOR指令用在程序開頭 使某個寄存器清 0 4 NOT指令對某個數(shù)據(jù)取反 1成補碼 5 TEST指令用來檢測指定位為1 還是0 1 算邏移位指令 4條 SHL SHR SAL SAR 1 SHL SAL Shiftlogicalleft shiftarithmeticleft 邏輯左移 算術(shù)左移指令 2 SHR Shiftlogicalright 邏輯右移指令 3 SAR Shiftarithmeticright 算術(shù)右移指令 2 循環(huán)移位 4條 ROL ROR RCL RCR 1 ROL Rotateleft 不含CF循環(huán)左移指令 2 ROR Rotateright 不含CF循環(huán)右移指令 3 RCL Rotateleftthroughcarry 含CF循環(huán)左移指令 4 RCR Rotaterightthroughcarry 含CF循環(huán)右移指令 二 移位指令 共同點 所有移位指令都可以作B W DW操作 指令中的dest 寄存器 存儲器尋址方式 cnt 表示移位次數(shù)cnt 1 31 移位的位數(shù)可直接在指令中寫出cnt 31 用CL存放移位次數(shù) 不能是其他寄存器 如 SALAX 1MOVCL 4SALAX CL利用移位指令編制 程序 執(zhí)行時間比直接用 指令快 速度可提高5 6倍 1 算邏移位指令 4條 SHL SHR SAL SAR 1 SHL SAL Shiftlogicalleft shiftarithmeticleft 邏輯左移 算術(shù)左移指令格式 SHLdest cnt 邏輯左移指令 B WSALdest cnt 算術(shù)左移指令 B Wdest 寄存器 存儲器尋址方式 cnt 表示移位次數(shù)cnt 1 31 常數(shù)可寫在指令中 cnt 31 用CL存放移位次數(shù) 執(zhí)行操作 相當于無符號數(shù)的 2功能 SHL SAL指令操作示意圖如下圖所示 指令格式舉例 SHLAH 1SALSI CLSALWORDPTR BX 5 1SHLBYTEPTR CL dest 2 SHR Shiftlogicalright 邏輯右移指令格式 SHRdest cnt 邏輯右移指令 B W執(zhí)行操作 相當于無符號數(shù)的 2功能 SHR指令操作示意圖如下圖所示 dest 寄存器 存儲器尋址方式 指令格式舉例 SHRBL 1SHRAX CLSHRBYTEPTR DI BP 1SHRWORDPTRBLOCK CL dest 3 SAR Shiftarithmeticright 算術(shù)右移指令格式 SARdest cnt 算術(shù)右移指令 B W執(zhí)行操作 SAR指令操作示意圖如下圖所示 dset dest 寄存器 存儲器尋址方式 指令格式舉例 SARAL 1SHRDL CLSHRWORDPTRTABLE SI 1SHRBYTEPTRSTATUS CL 2 循環(huán)移位 4條 ROL ROR RCL RCR 共同點 ROL ROR不含CF循環(huán)移位指令 操作數(shù)移動8次后還原 RCL RCR含CF循環(huán)移位指令 操作數(shù)移動9次后還原 影響標志OF CF 1 ROL Rotateleft 不含CF循環(huán)左移指令格式 ROLdest cnt 不含CF循環(huán)左移指令 B W執(zhí)行操作 ROL指令操作示意圖如下圖所示移動8次后操作數(shù)還原 dest 指令格式舉例 ROLBH 1ROLDX CLROLWORDPTRTABLE DI 1ROLBYTEPTRALPHA CL 影響標志OF CF情況 左循環(huán)移動1次后 移位后 最高有效位 符號位 是否發(fā)生變化 如果移位后 最高有效位與CF不等則 OF 1 否則 無變化時 OF 0CF根據(jù)各條指令的規(guī)定設置 左循環(huán)移動多次后 OF值不定 CF 從目標操作數(shù)移出的最后一位 SF ZF PF AF不影響 2 ROR Rotateright 不含CF循環(huán)右移指令格式 RORdest cnt 不含CF循環(huán)右移指令 B W執(zhí)行操作 ROR指令操作示意圖如下圖所示右移8次后操作數(shù)還原 dest 指令格式舉例 RORCX 1ROLBH CLROLBYTEPTRBETA 1ROLWORDPTRCOUNT CL 3 RCL Rotateleftthroughcarry 含CF循環(huán)左移指令格式 RCRdest cnt 含CF循環(huán)左移指令 B W執(zhí)行操作 RCL指令操作示意圖如下圖所示左移9次后操作數(shù)還原 dest 指令格式舉例 RCLBX 1RCLDL CLRCLBYTEPTRARRAY DI 1RCLWORDPTR SI BP CL影響標志 RCL與ROL影響標志OF CF情況相同 4 RCR Rotaterightthroughcarry 含CF循環(huán)右移指令格式 RCRdest cnt 含CF循環(huán)左移指令 B W執(zhí)行操作 RCR指令操作示意圖如下圖所示右移9次后操作數(shù)還原 dest 指令格式舉例 RCRDI 1RCRSI CLRCRWORDPTR SI BX 3 1RCLBYTEPTRPORT CL影響標志 RCR與ROR影響標志OF CF情況相同 小結(jié) 循環(huán)移位指令 Rotate 與移位指令 Shift 不同點 循環(huán)移位指令移位后 操作數(shù)中原來各數(shù)位的信息不會丟失 這是移動了位置 必要時可以恢復 循環(huán)移位指令可以對操作數(shù)進行測試 例 測試 AL 5 0 MOVCL 3ROLAL CLJNCZERO ZERO 3 雙精度移位指令SHLD SHRD 格式 SHLD shrddest src cnt 執(zhí)行操作 目的操作數(shù)和源操作數(shù)連續(xù)左移 右移cnt位 結(jié)果在目的操作數(shù)中 源操作數(shù)不變 注意 源操作數(shù)必須在寄存器中 目的操作數(shù)可以是寄存器 也可以是內(nèi)存單元 例 SHLDEAX EBX 3SHLDMEM WORD DX 8SHRDECX EDX 19SHRDEAX EBX CL 5種基本操作 1 MOVS Movestring 串傳送指令2 CMPS Comparestring 串比較指令3 SCAS Scanstring 串掃描指令 串檢索 4 LODS Loadfromstring 從串取指令5 STOS Storeintostring 存入串指令6 INS OUTS In Outstring I O串操作指令 四 串操作指令 Stringmanipulation 串 就是內(nèi)存中一段地址相連的字節(jié)或字 串操作 對串中各單元進行操作 也叫數(shù)據(jù)塊操作 共同點 可以只有源操作數(shù) 可以只有目標操作數(shù) 可能二者都有 源操作數(shù)用SI尋址 隱含DS值為段地址 可以用段跨越前綴指定其它段 目標操作數(shù)用DI尋址 隱含ES為段地址 每次操作對SI DI調(diào)整 DF 1 DI SI自動 1 字節(jié) 或 2 字 DF 0 DI SI自動 1 字節(jié) 或 2 字 與上述指令基本配合使用前綴有 REP Repeat 重復 REPE REPZ Repeatwhileequal zero 相等 為零則重復 REPNE REPNZ Repeatwhilenotequal notzero 不相等 不為零則重復 下面分二種情況來討論 一 與REP相配合工作的MOVS STOS LODS指令REP重復串操作直到 CX 0為止 二 與REPE REPZ和REPNE REPNZ聯(lián)合工作的CMPS和SCAS指令REPE REPZ當相等 為零時重復串操作REPNE REPNZ當不相等 不為零時重復串操作 一 與REP相配合工作的MOVS STOS LODS指令REP重復串操作直到 CX 0為止格式 REP串指令串指令可為 MOVS STOS LODS MOVS MoveString 串傳送LODS LoadfromString 從串取指令STOS StoreintoString 存入串指令 MOVS Movestring 串傳送串傳送有3種格式 1 MOVSB 字節(jié) 執(zhí)行操作 ES DI DS SI SI SI 1 DI DI 1 2 MOVSW 字 執(zhí)行操作 ES DI DS SI SI SI 2 DI DI 2當方向標志CLD DF 0時用 STD DF 1時用 該指令不影響條件碼 歸納在執(zhí)行MOVS指令時 應該先做好以下準備工作 1 數(shù)據(jù)段中源串首地址 如反向傳送到末地址 存入SI寄存器中 2 附加段中目的串首地址 或反向傳送末地址 存入DI寄存器中 3 數(shù)據(jù)串長度存入CX寄存器 4 建立方向標志建立方向標志介紹兩條指令 CLD cleardirectionflag 功能 DF 0 執(zhí)行串處理指令時可以使地址自動 1或 2 STD setdirectionflag 功能 DF 1 執(zhí)行串處理指令時可以使地址自動 1或 2 LODS Loadfromstring 取字符串指令取字符串指令有3種格式 1 LODSB 字節(jié) AL DS SI SI SI 1LODSW 字 AX DS SI SI SI 2 3 LODSD 雙字 EAX DS SI SI SI 4功能 該指令把由 SI 指定的數(shù)據(jù)段中某單元內(nèi)容 AL 或 AX 或 EAX 中 DF 0 SI SI 1或 2或 4DF 1 SI SI 1或 2或 4 LODS應用注意 1 指令允許用段跨越前綴來指定非數(shù)據(jù)段的存儲區(qū) 2 該指令不影響條件碼 一般說來 它不與REP聯(lián)用 每重復一次 累加器的內(nèi)容就改變一次 AL 中只能保持最后一個元素 有時緩沖區(qū)中的一串字符需要多次取出測試時可用本指令 適用于在一個循環(huán)中 用基本串操作指令構(gòu)成復雜串操作時很有用 存入串指令有3種格式 1 STOSB 字節(jié) ES DI AL DI DI 1STOSW 字 ES DI AX DI DI 2 3 STOSD 字 ES DI AX DI DI 4 用途 與REP聯(lián)用時 CX 緩沖區(qū)長度 用來建立一串相同的值 3STOS Storeintostring 存入串指令將 AL 或 AX ES DI DI 1或 2或 4 DI 例 在附加段STORE開始存5個空格程序 MOVAL 20H AL MOVCX 5MOVDI offsetSTORECLDREPSTOSB ES DI AL DI DI 1 學習LODS STOS指令應用例 內(nèi)存中有一個首地址為BLOCK補碼表示的有符號數(shù)的數(shù)據(jù)塊 要求將正 負數(shù)分開 分別存于二個緩沖區(qū) 存放正數(shù)的緩沖區(qū)首址為PLUS DATA 存放負數(shù)的緩沖區(qū)首址為MINUS DATA 設 源數(shù)據(jù)塊用SI尋址 正數(shù)的目的區(qū)用DI尋址 負數(shù)的目的區(qū)用BX尋址 循環(huán)次數(shù) CX 傳送過程 用LODS指令把源數(shù)據(jù)取入 AL 中 檢查其符號 確定正 負 若為正數(shù)用STOS指令送至正數(shù)緩沖區(qū) 若是負數(shù) 把 DI 與 BX 交換 仍使用STOS傳送 傳送完后再將 DI 與 BX 交換 恢復原值 程序 START MOVSI OFFSETBLOCKMOVDI OFFSETPLUS DATA 正數(shù)緩沖區(qū)MOVBX OFFSETMINUS DATA 負數(shù)緩沖區(qū)MOVCX COUNTCLDGOON LODSBTESTAL 80HJNZMINS 若負數(shù)轉(zhuǎn)MINSSTOSB 正數(shù) DI AL DI DI 1JMPAGAINMINS XCHGBX DISTOSB 負數(shù) DI AL DI DI 1XCHGBX DIAGAIN DECCXJNZGOONHLT 4I O串操作指令 In OutString INSB OUTSB INSW OUTSW INSD OUTSD INSB INSW INSD從一個輸入端口讀一串數(shù)據(jù)送到有EDI或DI指出的連續(xù)存儲單元 OUTSB OUTSW OUTSD從ESI或SI指出的連續(xù)存儲單元輸出一串數(shù)據(jù)到輸出端口 例 INSW 例 OUTSD 二 與REPE REPZ和REPNE REPNZ聯(lián)合工作的CMPS和SCAS指令REPE REPZ當相等 為零時重復串操作格式 REPE 或REPZ stringprimitive當相等重復前綴REPZStringprimitive可為 CMPS SCAS1 CMPS Comparestring 串比較指令2 SCAS Scanstring 串掃描指令 搜索指令 REPNE REPNZ當不相等 不為零時重復串操作格式 REPNE 或REPNZ stringprimitive當不相等重復前綴REPNZstringprimitive可為 CMPS SCAS1 CMPS Comparestring 串比較指令2 SCAS Scanstring 串掃描指令 搜索指令 注意 兩數(shù)相減 只影響標志 不影響操作數(shù) 其它操作規(guī)定與MOVS同 1 CMPS Comparestring 串比較指令 SI 作為源串地址 DI 目的串地址 串比較指令有3種格式 1 CMPSB 字節(jié) SI SI 1 DI DI 1 2 CMPSW 字 SI SI 2 DI DI 2 3 CMPSD 雙字 SI SI 4 DI DI 4 執(zhí)行操作 ES DI DS SI 結(jié)果不存 置標志 字節(jié)操作 SI SI 1 DI DI 1字操作 SI SI 2 DI DI 2雙字操作 SI SI 4 DI DI 4 MOVSI OFFSETSTRING1MOVDI OFFSETSTRING2MOVCX COUNTCLDREPZCMPSBJNZUNMAT 若串不同 在RESUL單元中置0FFHMOVAL 0 若串相等 在RESULT單元中置00HJMPOUTPTUNMAT MOVAL 0FFHOUTPT MOVRESULT ALHLT REPZCMPSB指令應用 例 利用CMPS指令對STRING1和STRING2二個字符串進行比較 相同在RESULT單元送00H 不同送0FFH 串掃描指令有3種格式 格式 SCASSCASB 字節(jié) AL ES DI DI DI 1SCASW 字 AX ES DI DI DI 2SCASD 雙字 AX ES DI DI DI 4 2 SCAS Scanstring 串掃描指令 搜索指令 DI 字符串起始地址 AL 或 AX 關(guān)鍵字 注意 AL 或 AX 目的串兩數(shù)相減 只影響標志 不影響操作數(shù) 其它特性與MOVS同 MOVDI OFFSETBLOCK 設置數(shù)據(jù)塊地址指針MOVCX COUNT 設置數(shù)據(jù)塊長度MOVAL CHAR 關(guān)鍵字送入AL或AXREPNESCASB CX 0 ZF 0繼續(xù)SCASBJZFOUNDMOVDI 0JMPDONEFOUND DECDIMOVPOINTR DIMOVBX OFFSETBLOCKSUBBX DIMOVDI BX 把搜索次數(shù)記下來 且記錄關(guān)鍵字地址DONE HLT REPNESCASB指令應用 例 要搜索的關(guān)鍵字放在 AL 或 AX 中 搜索某一數(shù)據(jù)塊或字符串中有無關(guān)鍵字 若有 把搜索次數(shù)記下來 且記錄關(guān)鍵字地址 若次數(shù)為0 表示沒有要搜索的關(guān)鍵字 LODB STOSB應用舉例 例 一個數(shù)據(jù)塊由大小寫英文字母 數(shù)字 其他符號組成 用CR ASCII碼0DH 結(jié)束 數(shù)據(jù)塊首地址為LOCK1 將其傳送到BLOCK2為首地址的內(nèi)存區(qū) 并將英文中小寫英文字母 a z 轉(zhuǎn)換成大寫英文字母 A Z 其余不變 分析 大小寫英文字母中相應ASCII碼的關(guān)系 a z 相應ASCII碼為 61H 7AH A Z 相應ASCII碼為 41H 5AH英文中小寫英文字母 a z 轉(zhuǎn)換成大寫英文字母 A Z 只要將小寫的ASCII碼減去20H即可 程序和流程圖如下 程序 LEASI BLOCK1LEADI BLOCK2CLDNEXT LODSBCMPAL 0DHJZDONECMPAL 61HJCOKCMPAL 7BHJNCOKSUBAL 20HOK STOSBJMPNEXTDONE HLT 流程圖 小結(jié) 串操作指令重復前綴 操作數(shù) 地址指針- 1.請仔細閱讀文檔,確保文檔完整性,對于不預覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認領(lǐng)!既往收益都歸您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- pentium 指令系統(tǒng) 邏輯運算 移位 指令
鏈接地址:http://www.820124.com/p-6399183.html