概述
位操作类指令是以二进制数据进行的操作,结果对状态标志位有影响,位操作指令有三大类指令分别是:逻辑运算指令、移位指令、循环移位指令。
逻辑运算指令:与AND、或OR、非NOT、异或XOR、测试TEST
移位指令:左移无符号指令SHL、左移有符号指令SAL、右移无符号指令SHR、右移有符号指令SAR。
循环移位指令:不带进位循环左移ROL、不带进位循环右移ROR、带进位循环左移RCL、带进位循环右移RCR。
目录
逻辑运算指令AND、OR、NOT、XOR、TEST
移位指令SHL、SHR、SAL、SAR
循环移位指令ROL、ROR、RCL、RCR
逻辑运算指令AND、OR、NOT、XOR、TEST
在逻辑运算指令中,格式都是双操作数即目的操作数和源操作数,设置CF=OF=0,根据结果会设置响应的SF、ZF和PF的状态,对AF是无定义的;NOT是单操作数指令,它不影响任何标志位。
(1)逻辑与:AND
格式:AND dest,src;相与的值回dest
运算规则:dest和src某一位数取值都是为1时,其值才是1,否则值都为0。
(2)逻辑或:OR
格式:OR dest,src;相或的值回dest
运算规则:dest和src某一位数只要有一个是1,其结果就是1,只有当dest和src都为0时结果才是0。
(3)逻辑异或指令:XOR
格式:XOR dest,src;异或的值回dest
运算规则:dest和src的某一位数的值相同结果就为0;不同结果就为1。
(4)逻辑非指令:NOT
格式:NOT reg/mem
运算规则:操作数的值取反。
注意:(1)是单操作数指令,不可以是立即数和四个段。
(2)不影响任何标志位
(3)如果操作数是存储器时,需要表明是字节操作还是字操作。
(4)其值保存在当前的操作数中。
(5)测试指令:TEST
格式:TEST dest,src;其值不传回目的操作数。
注意:(1)TEST指令执行的是AND与操作,区别是AND指令改变目的操作数而TEST其值不改变目的操作数,只影响标志位的状态。
(2)TEST指令和比较指令CMP类似,只不过TEST通常测试单个位,而CMP是字节或者是字,通常测试指令后面跟JZ和JNZ即零转移和非零转移。
(3)ZF=1表示该位为0,ZF=0表示该位为1。
(4)ZF=1说明结果都为0也就是JZ零转移,ZF=0表示结果不为0也就是JNZ非零转移。
移位指令SHL、SHR、SAL、SAR
(1)SHL、SHR
逻辑左移SHL,在左移1位或者N位,移出后最低位补0,最高位进入CF标志位,如果要移动大于>=2位需要用CL来表示。
格式:SHL reg/mem,1/CL。
逻辑右移SHR,在右移1位或者N位,移出后最高位补0,最低位进入CF,如果要移动大于>=2位需要用CL来表示。
格式:SHR reg/mem,1/CL
(2)SAL、SAR
算术左移SAL与逻辑左移SHL是同一条指令其唯一的区别就是,算术左移他会把操作数看成是有符号位。
格式:SAL reg/mem,1/CL。
算术右移SAR与逻辑右移SHR不一样,在移时;最高位不变,最低位进入CF,如果要移动大于>=2位需要用CL来表示。
格式:SAR reg/mem,1/CL
循环移位指令ROL、ROR、RCL、RCR
循环移位指令影响进位标志CF但不影响SF、ZF、PF、AF标志位。
(1)不带进位的ROL、ROR。
不带进位循环左移指令ROL其格式为:ROL reg/mem,1/CL。
(将操作数左移,最高位进入最低位和CF)
不带进位循环右移指令ROR其格式为:ROR reg/mem,1/CL。
(将操作数右移,最低位进入最高位和CF)
(2)带进位的RCL、RCR。
带进位循环左移RCL其格式为:RCL reg/mem,1/CL
(先将CF的值给最低位,然后最高位的值在进CF)
带进位循环右移RCR其格式为:RCR reg/mem,1/CL
(先将CF的值给了最高位,然后最低位的值在进CF)
最后
以上就是坚定煎饼为你收集整理的微机原理学习笔记——位操作指令逻辑运算指令AND、OR、NOT、XOR、TEST移位指令SHL、SHR、SAL、SAR循环移位指令ROL、ROR、RCL、RCR的全部内容,希望文章能够帮你解决微机原理学习笔记——位操作指令逻辑运算指令AND、OR、NOT、XOR、TEST移位指令SHL、SHR、SAL、SAR循环移位指令ROL、ROR、RCL、RCR所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复