一. 如何把数据放到寄存器中

1. 数据搬移指令 mov  , mvn

  1)  指令格式:<opcode><cond>{s}   Rd,  operand

            <操作码><条件码>{是否影响状态位}  目标寄存器,第一操作数

  2)  operand 第一操作数范围:(有效数和立即数前加 ‘#’)立即数 / 有效数 , 一个寄存器 , 移位指令      

  3) 关于立即数两个条件约束 举例说明:

    一个数据  X (一个32bit数据) 把这个数据转化为 二进制 ,(条件1)所有的位 中为 1 的都要在 连续的 8 个bit 位里面;

    (条件2)把这 8 个bit 位数据拿出来,如果这个 8 bit 数据循环右移偶数位,还可以是 X 这个数据,则X 是一个立即数。

  4) 关于有效数,一个数 X 按位取反后得到数 Y ,如果数 Y 是一个立即数, 则 X 是一个有效数

   5)【 mov  r0, #0xff 】 把数据 0xff 放在寄存器 r0 中  ; mov 表示直接把数据移动到目标寄存器中,r1 中值为 0xff

       【 mvn  r1,#0x55 】 把数据 0x55 按位取反后 放在寄存器 r1 中  ; mvn 表示把数据按位取反后放在目标寄存器中, r1 中值为0xaa

2. 想在寄存器中放一个非立即数或者有效数

  使用伪指令 ldr  【 ldr r0,=0xfe000001 】 把数据0xfe000001 放在寄存器r0 中

 二. 移位操作

3. 逻辑左移指令 【 lsl 】 低位补0,高位移出

  【 mov r1, #0xff  】    @ 1111 1111 ---> 0001 1111 1110

  【 lsl  r0, r1, #0x1 】  @ 把r1中的数据0xff 左移一位放在寄存器 r0 中

  r0中值应该为 0x1fe

4. 逻辑右移指令 【 lsr 】 低位移出,高位补0  

    【 mov r0, #0xff 】    @ 1111 1111 ---> 0111 1111

  【 lsr r1, r0, #0x1 】 @把r0 中的数据 0xff 右移一位把结果放在寄存器 r1 中

  r1 中的值为 0x7f

5. 算术右移指令 【 asr 】 低位移出,高位补符号位

  【 mov r1, #0x8000000f 】  @ 最高位表示符号位  1000 ...... 1111 ---> 1100 ...... 0111

  【 asr r0, r1, #0x1 】@ 把 r1中的值算术右移一位

6. 循环右移指令 【 ror 】 低位移出,高位补移出位

  【 mov r0, #0xff 】 @   1111 1111 ---> 1000 ..... 0111 1111

  【 ror r1, r0, #0x1 】

三. 加减乘法运算

7. 加法指令 【 add ,adc 】 add表示加法指令,adc 表示带进位的加法指令, 会计算 CPSR 寄存器中的 状态位

两个例子:通过 adds 和 adc 同时影响

  1. @ 例子1 位数据加法运算
  2.  
  3. mov r0, #0xf0
  4. mov r1, #0x0f
  5. add r2, r1, r0 @ 把寄存器 r1r0中的值相加放在寄存器r2中,r2的中值为0xff
  6.  
  7. @ 例子2 位数据运算
  8. mov r0, #0x1 @数据高位
  9. mov r1, #0xfffffffe @数据低位
  10.  
  11. mov r2, #0x1 @数据高位
  12. mov r3, #0xf @数据低位
  13.  
  14. adds r5, r1, r3 @adds s 表示影响 CPSR 中的 状态为
  15. adc r4, r0, r2 @ adc 表示带进位的加法运算, CPSR中的状态位 效果 r4 = r0 + r1 + c

8. 减法指令 【 sub ,sbc 】   sub 表示减法指令, sbc 表示带借位的减法指令,会计算CPSR 中的状态位

两个例子:

  1. @ 例子 位数据减法
  2. mov r1, #0x3
  3. mov r2, #0x4
  4. sub r0, r2, r1 @ r0 = r2 - r1
  5.  
  6. @例子 位数据运算
  7. mov r0, #0x0 @ 数据高位
  8. mov r1, #0x4 @ 数据低位
  9.  
  10. mov r2, #0x1 @ 数据高位
  11. mov r3, #0x3 @ 数据低位
  12.  
  13. subs r5, r3, r1 @ 数据低位 , subs 表示运算会影响 CPSR 中的状态位, 3-4是负数,结果为全f的值
  14. sbc r4, r2, r0 @ 数据高位 , sbc 相当于 r4 = r2 - r0 -!C C CPSR 中的状态位

9. 乘法运算指令 【 mul 】 

【 mov r1, #0x4 】

【 mov r2, #0x5 】

【 mul r0, r1, r2 】  @ r0 = r1 * r2

四. 逻辑运算指令 : 【 and,orr,eor,bic 】

  指令格式:<opcord><cond>{s} Rd, Rn, operand

  <操作码><条件码>{是否影响状态位}  目标寄存器,第一操作数, 第二操作数

10. 按位与 运算指令 【 and 】

【 mov r0, #0xaa 】

【 mov r1, #0x55 】

【 and r3, r0, r1 】   @  r3 = r1 & r2 按位操作 r3中的值为0

11. 按位或运算指令 【 orr 】

【 mov  r1, #0xaa 】

【 mov r2, #0x55 】

【 orr r0, r1, r2 】@ r0 = r1 | r2  把r1 和r2 按位或 结果放在 r0 中, r0中的值为0xff

12. 按位异或运算指令 【 eor 】

【 mov r1, #0x3 】

【 mov r2, #0x6 】

【 eor r0, r1, r2 】 @  r0 = r1 ^ r2 把r1和r2 中的值异或运算结果放在 r0 中 , r0中的值为0x55

13. 位清 0 指令 【 bic 】

【 ldr r1, =0x12345678 】  @ 低 8 位  0111 1000

【 bic r0, r1, #0x55 】      @  0x55 == 0101 0101 ,把 低 8 位 对应的为 1 的地方全部清零 , r0的结果为0x12345628

14. 例子:

实现把 0x12345678 中的 6 对应的位置清零 , 清除的是 4 bit

  1. ldr r0, =0x12345678 @ 需要改变的原始值
  2. mov r1, #0xf @ 需要改多少bit
  3. lsl r1, r1, #0x8 @ 把r1 中的值向左移8位在放在r1中
  4. mvn r1, r1 @ r1 中的值按位取反后再放在r1
  5. and r0, r0, r1 @ r0 中的值和r1 中的值按位与运算后再放在r0

五. 数值比价指令

15. 比较指令 【 cmp 】 影响 CSPR 寄存器的 NZC 位

【 mov r0, #0x5 】

【 mov r1, #0x4 】

【 cmp r0, r1 】 @ 本质 做subs 操作 , 影响 CSPR 寄存器的 NZC 位

相等情况                            不相等情况

             

16. 位测试指令 【 tst 】 影响 寄存器 CPSR 的 Z 位

【 mov r0, #0xfe 】

【 mov r1, #0x8 】

【 tst r0, r1 】 @ 测试某一位是否 为 0 ; 本质上 做 ands 运算;

因为 r0 值为 0xfe == 1111 1110   ; r1 值为 0x8 == 1000 0000 测试 r0 第 7 位 是否为0,r0第7位为1,此时 Z 不置位

改为【 mov r1, #0x1 】

  【 tst r0, r1 】 此时 cpsr 寄存器置位

 17. 测试两个数是否相等指令 【 teq 】  寄存器 CPSR 的 Z 位

【 mov r0,  #0xfe 】

【 mov r1, #0x8 】

【 teq r0, r1 】 @本质 做 eors操作 ,影响状态的异或运算

通过 teq 测试两个r0 , 和 r1 中的数据是否相等 , 如果相等 置1  Z 位,不相等,清零 Z 位

ARM 汇编 数据处理指令的更多相关文章

  1. ARM指令集——数据处理指令

    ARM汇编指令集 ARM汇编文件的组成 指令:编译完成后作为一条指令(机器码)存储在内存单元中,CPU执行时能够完成处理的操作 伪指令:在编译时替换成能被识别的ARM指令 伪操作:知道编译器进行编译, ...

  2. ARM汇编常用指令

    RAM汇编常用指令有MOV B BL LDR  STR

  3. ARM汇编基础指令

    Cortex-A7 常用汇编指令 一.处理器内部数据传输指令 1.mov 将数据从一个寄存器拷贝到另外一个寄存器,或者将一个立即数传递到寄存器里面 MOV R0,R1 @将寄存器 R1 中的数据传递给 ...

  4. ARM汇编指令特点

    根据朱有鹏老师课程笔记整理而来: (汇编)指令是CPU机器指令的助记符,经过编译后会得到一串1 0组成的机器码,由CPU读取执行. (汇编)伪指令本质上不是指令(只是和指令一起写在代码中),它是编译器 ...

  5. ARM 汇编的mov操作立即数的疑问

    1. 因为对arm汇编有些指令还不能理解,特别是一些相似功能指令间的区别.偶然在网上搜到"faq ARM assembly",其中描述的几个问题还是值得好好研究一下. 2. 慢慢的 ...

  6. ARM汇编指令集1

    (汇编)指令是CPU机器指令的助记符,经过编译过会得到一串0011组成的机器码,可以由CPU读取执行. (汇编)伪指令本质不是指令(只是和指令一起写在代码中),它是编译器环境提供的,目的是用来指导编译 ...

  7. 常用ARM汇编指令

    常用ARM汇编指令 [日期:2012-07-14] 来源:Linux社区  作者:xuyuanfan77 [字体:大 中 小]     在嵌入式开发中,汇编程序常常用于非常关键的地方,比如系统启动时初 ...

  8. 经常使用ARM汇编指令

    一面学习,一面总结,一面记录. 以下是整理在网上找到的一些资料,简单整理记录一下,方便以后查阅. ARM处理器的指令集能够分为跳转指令.数据处理指令.程序状态寄存器(PSR)处理指令.载入/存储指令. ...

  9. arm汇编指令

    ARM处理器的指令集可以分为跳转指令.数据处理指令.程序状态寄存器(PSR)处理指令.加载/存储指令.协处理器指令和异常产生指令6大指令 一.跳转指令 跳转指令用于实现程序流程的跳转 跳转指令分类 Ⅰ ...

随机推荐

  1. spark性能调优02-JVM调优

    1.降低cache操作的内存占比 1.1 为什么要降低cache操作的内存占比 spark的堆内存分别两部分,一部分用来给Rdd的缓存进行使用,另一部分供spark算子函数运行使用,存放函数中的对象 ...

  2. 实习记——《Rethink》

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/gmszone/article/details/30045055 最终能够在和自己的电脑上写下这些字了 ...

  3. input输入框数字转带千分位的字符串

    数字转带千分位的字符串 思路 先获取要转换的数字,对其进行分割 小数部分具体需要保留多少位,具体处理 整数部分用正则做替换 将小数部分和整数部分合计 代码 注意: 本文是基于 jQuery 写的,稍稍 ...

  4. Spring学习笔记(9)——注入参数

    集合类型属性 1.Set类型 private Set<String> sets=new HashSet<String>(); //我们需要给它添加set方法 public Se ...

  5. 我的scoi2018

    高一,很尴尬,凉~ -------- 大家好,我是分界线,我弱弱的说本次采用倒序的写作手法 -------- 故事是这样讲的: Day0: 刚刚去那个电科搞的集训,早上才考了一波模拟赛,下午就过来住酒 ...

  6. Socket传输中文乱码

    最近在学习Socket的时候,遇到了中文乱码问题,在网上找到了一个说的很透彻的,这里分享一下:http://helloworlda.iteye.com/blog/1270703 现在问题是这样的: 打 ...

  7. 【知识强化】第五章 输入/输出(I/O)管理 5.2 I/O核心子系统I

    学习I/O核心子系统相关的一系列功能. 设备独立性软件.设备驱动程序.中断处理程序这三层其实是属于操作系统的内核部分的,所以它们也称作“I/O核心子系统”,又可以简称为“I/O系统”.在考研当中我们需 ...

  8. centos7-关闭 rpcbind 服务

    1.关闭 rpcbind 服务 sudo systemctl disable rpcbind 2.关闭开机自启动 sudo  systemctl disable rpcbind 3.立即执行关闭 sy ...

  9. js实现复制|剪切指定内容到粘贴板--clipboard

    这是著名开源项目 clipboard.js 的 README.md,里面讲解的更加详细,有兴趣的同学可以了解一下.项目地址:https://github.com/zenorocha/clipboard ...

  10. react-router v3和v4区别

    1.默认路由 v3 <IndexRoute> v4 <Route exact> 2.授权路由 import Redirect from 'react-router-dom' & ...