Win32ASM學習[12]:位測試指令位掃描指令

?

-----------------------------------------------------------------------------------------------------------------------

?一.BT 指令

格式: BT OPD,OPS

功能: 目的操作數OPD中由源操作數OPS指定的位送CF標志

說明: 1. 在指令中,目的操作數OPD只能是16/32位通用寄存器或存儲單元,用于指定要測試的數據;源操作數OPS必須是8位立即數或者是與目的操作數等長的16/32位通用寄存器,用于指定要測試的位. 如果目的操作數是寄存器,則源操作數除以16/32的余數就是要測試的位,它在0-15/31之間.
???????? 2. 舉例: MOV EAX 12345678H?????? ;EAX=12345678H
??????????????????????BT EAX,5????????????????????????? ?;EAX的D5位=1-->CF,EAX=12345678H

注意: 如果目的操作數是存儲單元, 則該單元的最低位為0.從這個最低位向地址高端每位依次增量,向地址代低端每位依次減量,這部分存儲器數據作為一個2G-1~-2G長的位串.此時,有符號源操作數就指示要測試的位.

?

二.BTS指令

格式: BTS OPD,OPS

功能: 報目的操作數OPD中由源操作數OPS指定的位送CF標志,然后對那一位置位.

說明: 1. 在指令中,目的操作數OPD只能是16/32位通用寄存器或存儲單元,用于指定要測試的數據;源操作數OPS必須是8位立即數或者是與目的操作數等長的16/32位通用寄存器,用于指定要測試的位.如果目的操作數是寄存器,則源操作數除以16/32的余數就是要測試的位,它在0-15/31之間.

?????? 2. 舉例: MOV EAX 12345678H?????? ;EAX=12345678H

???????????????????BTS??EAX,34?????????????????????? ;EAX的D2位=0-->CF,EAX=1224527CH
注意: 如果目的操作數是存儲單元,則該單元的最低位為0.從這個最低位向地址高端每位依次增量,向地址代低端每位依次減量,這部分存儲器數據作為一個2G-1~-2G長的位串.此時,有符號源操作數就指示要測試的位

?

三.BTC 指令

格式: BTC OPD,OPS

功能: 報目的操作數OPD中由源操作數OPS指定的位送CF標志,然后對那一位求反.

說明: 1. 在指令中, 目的操作數OPD只能是16/32位通用寄存器或存儲單元,用于指定要測試的數據;源操作數OPS必須是8位立即數或者是與目的操作數等長的16/32位通用寄存器,用于指定要測試的位.如果目的操作數是寄存器,則源操作數除以16/32的余數就是要測試的位,它在0-15/31之間.
?????? 2. 舉例: MOV EAX 12345678H?????? ;EAX=12345678H
??????????????????? BTC EAX,10????????????????????? ?;EAX的D10位=1-->CF,EAX=12345278H
????????? 注意: 如果目的操作數是存儲單元,則該單元的最低位為0.從這個最低位向地址高端每位依次增量,向地址代低端每位依次減量,這部分存儲器數據作為一個2G-1~-2G長的位串.此時,有符號源操作數就指示要測試的位.


?

?四.BTR 指令

格式: BTR OPD,OPS

功能: 報目的操作數OPD中由源操作數OPS指定的位送CF標志,然后對那一位復位.

說明: 1. 在指令中,目的操作數OPD只能是16/32位通用寄存器或存儲單元,用于指定要測試的數據;源操作數OPS必須是8位立即數或者是與目的操作數等長的16/32位通用寄存器,用于指定要測試的位.如果目的操作數是寄存器,則源操作數除以16/32的余數就是要測試的位,它在0-15/31之間.

?????? 2. 舉例: MOV EAX 12345678H?????? ;EAX=12345678H
????????????????????BTR EAX,20????????????????????????? ;EAX的D20位=1-->CF,EAX=12245278H

注意: 如果目的操作數是存儲單元,則該單元的最低位為0.從這個最低位向地址高端每位依次增量,向地址代低端每位依次減量,這部分存儲器數據作為一個2G-1~-2G長的位串.此時,有符號源操作數就指示要測試的位.

?---------------------------------------------------------------------------------------------------------------------------------

.code
main proc
??? ;BT 把 10000001b 的第七位復制到 CF, 得知是 1
??? mov dx, 10000001b
??? bt? dx, 7
??? lahf
??? PrintHex ah ;47 - 01000111b (CF=1)
??? ;BT 把 10000001b 的第六位復制到 CF, 得知是 0
??? bt? dx, 6
??? lahf
??? PrintHex ah ;86 - 10000110b (CF=0)
???
??? ;BTS 在執行 BT 命令的同時, 把操作數的指定位置為 1
??? mov dx, 10000001b
??? bts dx, 6
??? PrintHex dl ;C1 - 11000001b
???
??? ;BTR 在執行 BT 命令的同時, 把操作數的指定位置為 0
??? mov dx, 10000001b
??? btr dx, 7
??? PrintHex dl ;01 - 00000001b
???
??? ;BTC 在執行 BT 命令的同時, 把操作數的指定位取反
??? mov dx, 10000001b
??? btc dx, 0
??? PrintHex dl ;80 - 10000000b
??? btc dx, 0
??? PrintHex dl ;81 - 10000001b
??? ret
main endp
end main

?------------------------------------------------------------------------------------------------------------------

五.BSF 指令

格式: BSF OPD,OPS
功能: 向前位掃描指令.本指令從最低位(第0位)開始測試OPS中的各位,當遇到有1的位時,ZF=0,且將該位的序號存入OPD中,如OPS的所有位都是0,則ZF=1且OPD中的值無意義.(執行邏輯移位前,決定應移位的次數)

?說明: 1. OPD和OPS應為同類型的16或32位的寄存器或存儲器操作數,OPD必須為寄存器操作數.
???????? 2. 舉例: 假定EBX中的數是12F234E0H,指令BSF EAX,EBX執行后,EAX=5,ZF=0

?

六.BSR 指令

格式: BSR OPD,OPS
功能: 向后位掃描指令.本指令從最高位(第15位或31位)開始測試OPS中的各位,當遇到有1的位時,ZF=0,且將該位的序號存入OPD中,如OPS的所有位都是0,則ZF=1且OPD中的值無意義.(執行邏輯移位前,決定應移位的次數)

?

說明: 1. OPD和OPS應為同類型的16或32位的寄存器或存儲器操作數,OPD必須為寄存器操作數.
??????? 2. 舉例: 假定EBX中的數是12F234E0H,指令BSR EAX,EBX執行后,EAX=28,ZF=0

-------------------------------------------------------------------------------------------------------------------

.code
main proc
??? ;掃描到時
??? mov dx, 0000111100001100b
??? bsf cx, dx
??? PrintDec cx ;2? - 也就是左數第 3 位
???
??? bsr cx, dx
??? PrintDec cx ;11 - 也就是左數第 12 位
???
??? ;掃描不到時
??? mov cx, 0FFFFh
??? mov dx, 0
??? bsf cx, dx
??? lahf
??? PrintHex ah ;C6 - 11000110 (ZF=1)
??? PrintHex cx ;FFFF - 找不到時不會影響到目的值
??? ret
main endp
end main

----------------------------------------------------------------------------------------------------------------

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/375360.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/375360.shtml
英文地址,請注明出處:http://en.pswp.cn/news/375360.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android WifiDisplay分析一:相關Service的啟動

網址:http://www.2cto.com/kf/201404/290996.html 最近在學習Android 4.4上面的WifiDisplay(Miracast)相關的模塊,這里先從WifiDisplay用到的各個Service講起,然后再從WifiDisplaySettings里面講解打開wfd的流程。首先看下面的主要幾個Servic…

mvc controller跳轉頁面方法

1、直接Redirect后加 Controller/Action Response.Redirect("/User/Edit"); // return Redirect("/User/Edit"); return RedirectToAction("about","Home"); Response.Redirect("/User/Edit"); 2、直接r…

Win32ASM學習[13]:移位指令SHL,SHR,SAL,SAR,ROL,ROR,RCL,RCR,SHLD,SHRD

一. SHL、SHR、SAL、SAR: 移位指令 ---------------------------------------------------------------------------------------------------- ;SHL(Shift Left): 邏輯左移 ;SHR(Shift Right): 邏輯右移 ;SAL(Shift Arithmetic Left): 算術左移 ;SAR(Shift Ari…

angular中的表單驗證

angular中的表單驗證很強大, 一共有5中驗證信息,$valid,$invalid,$pristine,$dirty,$error. $valid-----當驗證通過的時候,為true,不通過的時候為false $invalid----當驗證不通過的時候,為true,通過的時候為true $pris…

Cortex-A15 Memory Hierarchy

ARM 平臺為實現速度和成本的平衡,使用多個層次的內存架構。對于多核 CPU 組成的 SOC,每個CPU 內部都有一組高速緩存,包含:ICache、DCache 和 TLB。多個 CPU 共享一個更大的 L2 緩存。L2緩存再和 CPU 外部的DDR3 內存交互。ICache …

Win32ASM學習[14]:符號擴展指令: CBW,CWDE,CDQ,CWD

----------------------------------------------------------------------------------------------------------------------------------------------------------------- ;CBW(Convert Byte to Word): 將 AL 擴展為 AX ;CWDE(Convert Word to Extended Double): 將 …

Win32ASM學習[15]:加減指令: INC、DEC、NEG、ADD、ADC、SUB、SBB、CMP

------------------------------------------------------------------------------------------------------------------------------------------------------------------- ;INC(Increment): 加一 ;DEC(Decrement): 減一 ;NEG(Negate): 求補(求反) ;ADD(Add): 加 ;A…

UINavigationController的簡單使用

UINavigationController的使用步驟初始化UINavigationController設置UIWindow的rootViewController為UINavigationController根據具體情況,通過push方法添加對應個數的子控制器UINavigationController的子控制器UINavigationController以棧的形式保存子控制器proper…

Android 圖片的縮略圖

<1>簡介 之前往往是通過Bitmap、Drawable和Canvas配合完成&#xff0c;需要寫一系列繁雜的邏輯去縮小原有圖片&#xff0c;從而得到縮略圖。 現在我給大家介紹一種比較簡單的方法&#xff1a;&#xff08;網上有&#xff09; 在Android 2.2版本中&#xff0c;新增了一個T…

Win32ASM學習[16] :乘除指令: MUL、IMUL、DIV、IDIV

---------------------------------------------------------------------------------------------------------------------------------------------------------------------- 一. 無符號數乘法指令 MUL(MULtiply) 格式: MUL OPRD 功能: 乘法操作. 說明: 1. OPRD為通用…

Linux命令之man

一、引言 一直聽別人說linux下有個男人很厲害&#xff0c;遇到不會的不懂的都可以問他&#xff0c;自己也會幾個man命令&#xff0c;但是一直不知道到底man命令是怎么用的&#xff0c;比如查詢不同類的幫助該在man后跟數字幾&#xff0c;man后的數字有什么具體的意思&#xff0…

《JavaScript權威指南》學習筆記 第二天 下好一盤大棋

前段學習js的時候總是零零散散的&#xff0c;以至于很多東西都模棱兩可。時間稍微一久&#xff0c;就容易忘記。最主要的原因是這些東西&#xff0c;原來學的時候就不是太懂&#xff0c;以至于和其他知識無法形成記憶鏈&#xff0c;所以孤零零的知識特別容易忘記。重溫犀牛書&a…

Win32ASM學習[17]:條件跳轉

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 一.跳轉相關的標志位: 11 10 9 8 7 6 5 4 3 2 1 0 OF DF IF TF SF Z…

SUID或SGID程序中能不能用system函數

system()函數的聲明和說明如下&#xff1a; 注意它的描述那里&#xff0c;system()執行一個由command參數定義的命令&#xff0c;通過調用/bin/sh -c命令來實現這個功能。也就是說它的邏輯是這樣的&#xff01; 進程調用system函數&#xff0c;system函數調用fork創建一個子進程…

史上最全的maven pom.xml文件教程詳解

<project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd >; <!-- 父項目的坐標。如果項目中沒有規定某個元素的值&am…

Win32ASM學習[18]:串指令-MOVS*、CMPS*、SCAS*、LODS*、REP、REPE、REPNE

-------------------------------------------------------------------------------------------------------------------------------------------------------- 一.字符串傳送指令 MOVSB/MOVSW/MOVSD 格式: MOVS OPD,OPS 功能: OPD<--OPS. 說明: 1. 其中OPS為源串符…

Xamarin iOS編寫第一個應用程序創建工程

Xamarin iOS編寫第一個應用程序創建工程 在Xcode以及Xamarin安裝好后&#xff0c;就可以在Xamarin Studio中編寫程序了。本節將主要講解在Xamarin Studio中如何進行工程的創建以及編寫代碼等內容XamariniOS編寫第一個應用程序創建工程本文選自Xamarin iOS開發實戰大學霸。 1.3.…

Jade之Extends

Extends jade允許多個jade文件繼承一個jade文件。 jade&#xff1a; //- layout.jade doctype html htmlheadblock titletitle Default titlebodyblock content //- index.jade extends ./layout.jadeblock titletitle Article Titleblock contenth1 My Article html&#xff1…

Win32ASM學習[19]:結構與聯合

結構和聯合分別用 struct、union 定義, 都是 ends 結束定義. 它們使用方法相同, 并可以互相嵌套; 主要區別是后者的各成員共用同一個地址. -------------------------------------------------------------------------------------------------------------------------------…

hdu 1257 最少攔截系統(貪心)

題意&#xff1a; 最少需要多少個攔截系統才能將所有的導彈攔截下來。 思路&#xff1a; 第1枚導彈一定需要第一個攔截系統&#xff0c;第2枚導彈如果比第1個高度高&#xff0c;則需要第二個攔截系統。 考慮第i枚導彈&#xff0c;如果前i-1枚導彈的高度都比它小&#xff0c;則需…