在学习arm的过程中,感觉寄存器,基本不会提供位操作,而是整体的操作,
整体操作的就是要注意在对某位赋值的时候不要影响到其他位,看上去不简单,
其实,整体操作有技巧,
那么就来总结一下:
1、首先要理解,“|”符号就是用来置1的,“&”就是用来置0的。
2、不管置1还是置0,”<<”左边总是以1的形式出现。要置0,加上取反符号。结合上面两条规则,事情就很简单了:
比如先把某个寄存器的第6位置1,那么首先写出(1<<6)待用。
然后置1就用“|”的规则,所以就是:reg |= (1<<6);
要是第6位置0呢:
一样的,首先写出(1<<6)待用。
置0就用“&”,加上取反符号的规则。所以就是:reg &= ~(1<<6);好了,现在理解一个难一点的:
reg &= ~( (1<<6) | (1<<7) | (1<<2) );
这个表示什么意思?看到“&=”就知道要将某位置0.
(1<<6) | (1<<7) | (1<<2)就表示,2,6,7都置1,在看到取反。
那么这句话的意思就是将2,6,7都置0.我们再返回到程序 :
if(dwDat & (1<<2) )
这句有是什么意思呢?
就是判断swDat的第二位是否为1,第二位如果为1,则结果为1,if判断为真。
这个可以理解为一个读操作~
相关文章
- 08-20【学习总结】SQL的学习-2-sql操作
- 08-20arm学习——有关位操作的总结
- 08-20Thinkphp6框架学习:有关数据库的基本操作
- 08-20MySql 在cmd下的学习笔记 —— 有关多表查询的操作(内连接,外连接,交叉连接)
- 08-20linux – 在64位操作系统上编译32位模式和64位操作系统有关ioctl函数的执行有什么不同?
- 08-20Anroid逆向学习从编写so到静动态调试分析arm的一次总结
- 08-20Linux学习总结(5)——CentOS常用的目录文件操作命令
- 08-20Linux内核分析第二周学习总结:操作系统是如何工作的?
- 08-20ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml) 用javascript在客户端删除某一个cookie键值对 input点击链接另一个页面,各种操作。 C# 往线程里传参数的方法总结 TCP/IP 协议 用C#+Selenium+ChromeDriver 生成我的咕咚跑步路线地图 (转)值得学习百度开源70+项目
- 08-20LINUX内核分析第二周学习总结——操作系统是如何工作的