汇编语言--微机CPU的指令系统(五)(位操作指令)
(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的指令系统(五)(位操作指令)的更多相关文章
- 汇编语言--微机CPU的指令系统(五)(数据传送指令)
五.微机CPU的指令系统 1.汇编语言指令格式 汇编语言的指令格式如下: 指令助忆符 [操作数1 [, 操作数2 [, 操作数3]]] [;注释] 指令助忆符体现该指令的功能,它对应一条二进制编码的机 ...
- 汇编语言--微机CPU的指令系统(五)(标志位操作指令)
(2)标志位操作指令 标志位操作指令是一组对标志位置位.复位.保存和恢复等操作的指令. 1.进位CF操作指令 Ø 清进位指令CLC(Clear Carry Flag):CF←0 Ø 置进位指令STC( ...
- 汇编语言--微机CPU的指令系统(五)(条件设置字节指令)
(10)条件设置字节指令 条件设置字节指令(Set Byte Conditionally)是80386及其以后CPU所具有的一组指令.它们在测试条件方面与条件转移是一致的,但在功能方面,它们不是转移, ...
- 汇编语言--微机CPU的指令系统(五)(转移指令)
(9)转移指令 转移指令是汇编语言程序员经常使用的一组指令.在高级语言中,时常有“尽量不要使用转移语句”的劝告,但如果在汇编语言的程序中也尽量不用转移语句,那么该程序要么无法编写,要么没有多少功能,所 ...
- 汇编语言--微机CPU的指令系统(五)(比较运算指令)
(7)比较运算指令 在程序中,我们要时常根据某个变量或表达式的取值去执行不同指令,从而使程序表现出有不同的功能.为了配合这样的操作,在CPU的指令系统中提供了各种不同的比较指令.通过这些比较指令的执行 ...
- 汇编语言--微机CPU的指令系统(五)(循环指令)
(8)循环指令 循环结构是程序的三大结构之一.为了方便构成循环结构,汇编语言提供了多种循环指令,这些循环指令的循环次数都是保存在计数器CX或ECX中.除了CX或ECX可以决定循环是否结束外,有的循环指 ...
- 汇编语言--微机CPU的指令系统(五)(移位操作指令)
(5) 移位操作指令 移位操作指令是一组经常使用的指令,它包括算术移位.逻辑移位.双精度移位.循环移位和带进位的循环移位等五大类. 移位指令都有指定移动二进制位数的操作数,该操作数可以是立即数或CL的 ...
- 汇编语言--微机CPU的指令系统(五)(字符串操作指令)
(11)字符串操作指令 字符串操作指令的实质是对一片连续存储单元进行处理,这片存储单元是由隐含指针DS:SI或ES:DI来指定的.字符串操作指令可对内存单元按字节.字或双字进行处理,并能根据操作对象的 ...
- 汇编语言--微机CPU的指令系统(五)(算术运算指令)
(3)算术运算指令 算术运算指令是反映CPU计算能力的一组指令,也是编程时经常使用的一组指令.它包括:加.减.乘.除及其相关的辅助指令. 该组指令的操作数可以是8位.16位和32位(80386+).当 ...
随机推荐
- 代码覆盖率 EclEmma
1. EclEmma的介绍 EclEmma是一个开源的软件测试工具,可以在编码过程中查看代码调用情况.也可以检测单覆盖率. 2. Eclipse下EclEmma安装 1. 选择Help->Ecl ...
- MySQL InnoDB 索引组织表 & 主键作用
InnoDB 索引组织表 一.索引组织表定义 在InnoDB存储引擎中,表都是根据主键顺序组织存放的,这种存储方式的表称为索引组织表(index organized table IOT). 在Inno ...
- 程序员IT计算机中常见英语单词
abstract 抽象的 abstract base class (ABC)抽象基类 abstract class 抽象类 abstraction 抽象.抽象物.抽象性 access 存取.访问 ac ...
- 安卓Listview和Adapter数据设计
ListView是一种用于垂直显示的列表控件,如果显示内容过多,则会自动出现垂直滚动条,每一行是一个View对象,在每一行上可以放置任何组件,Adapter适配器是数据和UI的桥梁,为数据显示提供了统 ...
- Redis 如何分析慢查询操作?
什么是慢查询 和mysql的慢SQL日志分析一样,redis也有类似的功能,来帮助定位一些慢查询操作. Redis slowlog是Redis用来记录查询执行时间的日志系统. 查询执行时间指的是不包括 ...
- LeetCode20:validParentheses
validParentheses 题目描述 Given a string containing just the characters '(', ')', '{', '}', '[' and ']', ...
- [EFCore]EntityFrameworkCore Code First 当中批量自定义列名
在使用.NET CORE 进行 Web 开发的时候会考虑到使用不同数据库的情况,并且在每种数据库建立表结构的时候会采用不同的命名规则.之前的解决方法是使用 [ColumnAttribute] 或者 [ ...
- 通过Calendar简单解析Date日期,获取年、月、日、星期的数值
有时候项目中需要用到Date的年.月.日.星期的数值.那么解析方法如下: /**解析日期,获取年月日星期*/ private void parseDateToYearMonthDayWeek(Date ...
- java字符流操作flush()方法及其注意事项
java字符流操作flush()方法及其注意事项 flush()方法介绍 查阅文档可以发现,IO流中每一个类都实现了Closeable接口,它们进行资源操作之后都需要执行close()方法将流关闭 ...
- Future、Callable 、FutureTask详解
1.Future和Callable Future是一个接口表示异步计算的结果,它提供了检查计算是否完成的方法,以等待计算的完成,并获取计算的结果.Future提供了get().cancel().isC ...