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.mzph.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;则需…