(6) 位操作指令

1、位扫描指令(Bit Scan Instruction)

指令的格式:BSF/BSR Reg, Reg/Mem ;80386+

受影响的标志位:ZF

位扫描指令是在第二个操作数中找第一个“1”的位置。如果找到,则该“1”的位置保存在第一操作数中,并置标志位ZF为1,否则,置标志位ZF为0。

根据位扫描的方向不同,指令分二种:正向扫描指令和逆向扫描指令。

a) 正向扫描指令BSF(Bit Scan Forward)从右向左扫描,即:从低位向高位扫描;

b) 逆向扫描指令BSR(Bit Scan Reverse)从左向右扫描,即:从高位向低位扫描。

例如:

MOV AX, 1234H

BSF CX, AX ;指令执行后,(CX)=2

BSR CX, AX ;指令执行后,(CX)=12

2、位检测指令(Bit Test Instruction)

指令的格式:BT/BTC/BTR/BTS Reg/Mem, Reg/Imm ;80386+

受影响的标志位:CF

位检测指令是把第一个操作数中某一位的值传送给标志位CF,具体的哪一位由指令的第二操作数来确定。(注意:第二操作数从左至右从低位向高位从0位开始)

根据指令中对具体位的处理不同,又分以下几种指令:

BT:把指定的位传送给CF;

BTC:把指定的位传送给CF后,还使该位变反;

BTR:把指定的位传送给CF后,还使该位变为0;

BTS:把指定的位传送给CF后,还使该位变为1;

例如:假设(AX)=1234H,分别执行下面指令。

BT AX, 2 ;指令执行后,CF=1,(AX)=1234h

BTC AX, 6 ;指令执行后,CF=0,(AX)=1274h

BTR AX, 10 ;指令执行后,CF=0,(AX)=1234h

BTS AX, 14 ;指令执行后,CF=0,(AX)=5234h

3、检测位指令TEST(Test Bits Instruction)

检测位指令是把二个操作数进行逻辑“与”操作,并根据运算结果设置相应的标志位,但并不保存该运算结果,所以,不会改变指令中的操作数。在该指令后,通常用JE、JNE、JZ和JNZ等条件转移指令。

指令的格式:TEST Reg/Mem, Reg/Mem/Imm

受影响的标志位:CF(0)、OF(0)、PF、SF和ZF(AF无定义)

例如:

TEST AX, 1 ;测试AX的第0位

TEST CL, 10101B ;测试CL的第0、2、4位

汇编语言--微机CPU的指令系统(五)(位操作指令)的更多相关文章

  1. 汇编语言--微机CPU的指令系统(五)(数据传送指令)

    五.微机CPU的指令系统 1.汇编语言指令格式 汇编语言的指令格式如下: 指令助忆符 [操作数1 [, 操作数2 [, 操作数3]]] [;注释] 指令助忆符体现该指令的功能,它对应一条二进制编码的机 ...

  2. 汇编语言--微机CPU的指令系统(五)(标志位操作指令)

    (2)标志位操作指令 标志位操作指令是一组对标志位置位.复位.保存和恢复等操作的指令. 1.进位CF操作指令 Ø 清进位指令CLC(Clear Carry Flag):CF←0 Ø 置进位指令STC( ...

  3. 汇编语言--微机CPU的指令系统(五)(条件设置字节指令)

    (10)条件设置字节指令 条件设置字节指令(Set Byte Conditionally)是80386及其以后CPU所具有的一组指令.它们在测试条件方面与条件转移是一致的,但在功能方面,它们不是转移, ...

  4. 汇编语言--微机CPU的指令系统(五)(转移指令)

    (9)转移指令 转移指令是汇编语言程序员经常使用的一组指令.在高级语言中,时常有“尽量不要使用转移语句”的劝告,但如果在汇编语言的程序中也尽量不用转移语句,那么该程序要么无法编写,要么没有多少功能,所 ...

  5. 汇编语言--微机CPU的指令系统(五)(比较运算指令)

    (7)比较运算指令 在程序中,我们要时常根据某个变量或表达式的取值去执行不同指令,从而使程序表现出有不同的功能.为了配合这样的操作,在CPU的指令系统中提供了各种不同的比较指令.通过这些比较指令的执行 ...

  6. 汇编语言--微机CPU的指令系统(五)(循环指令)

    (8)循环指令 循环结构是程序的三大结构之一.为了方便构成循环结构,汇编语言提供了多种循环指令,这些循环指令的循环次数都是保存在计数器CX或ECX中.除了CX或ECX可以决定循环是否结束外,有的循环指 ...

  7. 汇编语言--微机CPU的指令系统(五)(移位操作指令)

    (5) 移位操作指令 移位操作指令是一组经常使用的指令,它包括算术移位.逻辑移位.双精度移位.循环移位和带进位的循环移位等五大类. 移位指令都有指定移动二进制位数的操作数,该操作数可以是立即数或CL的 ...

  8. 汇编语言--微机CPU的指令系统(五)(字符串操作指令)

    (11)字符串操作指令 字符串操作指令的实质是对一片连续存储单元进行处理,这片存储单元是由隐含指针DS:SI或ES:DI来指定的.字符串操作指令可对内存单元按字节.字或双字进行处理,并能根据操作对象的 ...

  9. 汇编语言--微机CPU的指令系统(五)(算术运算指令)

    (3)算术运算指令 算术运算指令是反映CPU计算能力的一组指令,也是编程时经常使用的一组指令.它包括:加.减.乘.除及其相关的辅助指令. 该组指令的操作数可以是8位.16位和32位(80386+).当 ...

随机推荐

  1. 四面美团,收割 offer

    阅读本文大概需要 6 分钟. 来源:https://blog.csdn.net/csuliyajin2012/article/details/49430659 美团我是在拉勾网上投的简历,之前也投过一 ...

  2. editormd实现Markdown编辑器写文章功能

    想在项目里引入Markdown编辑器实现写文章功能,网上找到一款开源的插件editormd.js 介绍网站:https://pandao.github.io/editor.md/examples/in ...

  3. yii学习笔记--url解析

    在通过yiic命令生成了一个app之后,我们通过浏览器访问会看到这样的一个页面.   点击home时,url为:http://localhost/blog/index.php?r=site/index ...

  4. Azure认知服务之Face API上手体验

    Azure认知服务:Face API Face API是Azure认知服务之一,Face API有两个主要功能: 人脸检测 Face API可在图像中以高精度人脸位置检测多达64个人脸.图像可以通过文 ...

  5. MFC控件编程进度条编写

    MFC控件编程进度条编写 一丶进度条编程需要用到的方法 进度条MFC已经帮我们封装好类了. 叫做 CProgressCtrl  进度条编程也很简单. 封装的方法也就那个那几个. GetPos()  获 ...

  6. MFC控件编程之 按钮编辑框.静态文本的使用,以及访问控件的七种方法.

    MFC控件编程之 按钮编辑框.静态文本的使用以及访问控件的七种方法. 一丶按钮.静态文本的通用属性. 他们都有一个属性.就是可以输入标题内容.以及可以自定义控件ID. 创建一个MFC Dlg对话框. ...

  7. 函数计算 Python 连接 SQL Server 小结

    python 连接数据库通常要安装第三方模块,连接 MS SQL Server 需要安装 pymssql .由于 pymsql 依赖于 FreeTDS,对于先于 2.1.3 版本的 pymssql,需 ...

  8. ElasticSearch实战:Linux日志对接Kibana

    本文由云+社区发表 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTFul web接口.ElasticSearch是用Java开发 ...

  9. XML概念定义以及如何定义xml文件编写约束条件java解析xml DTD XML Schema JAXP java xml解析 dom4j 解析 xpath dom sax

    本文主要涉及:xml概念描述,xml的约束文件,dtd,xsd文件的定义使用,如何在xml中引用xsd文件,如何使用java解析xml,解析xml方式dom sax,dom4j解析xml文件 XML来 ...

  10. MySQL:windows中困扰着我们的中文乱码问题

    前言:什么是mysql中的中文乱码问题? 话不多说,直接上图 这个东西困扰了我好久,导致我现在对windows映像非常不好,所以就想改成Linux,行了,牢骚就发到这里,直接说问题,明眼人一眼就看出来 ...