ARM Assembly 6: Shift 和 Rotate

news/2024/10/7 16:46:07 标签: arm开发

基础概念

LSL(Logical Shift Left)

  • 功能: 将寄存器中的位向左移动,右边用零填充。左移相当于对二进制数进行乘以2的幂的操作。

  • 语法: LSL{S} Rd, Rn, #shamt

    • Rd: 结果存储的目标寄存器。

    • Rn: 要进行位移的源寄存器。

    • #shamt: 位移的位数(立即数)。

    • S: 可选,若存在则更新条件标志。

MOV R0, #0b00000001   ; R0 = 1
LSL R1, R0, #2        ; R1 = R0 << 2,结果为0b00000100,即4

LSR(Logical Shift Right)

  • 功能: 将寄存器中的位向右移动,左边用零填充。右移相当于对二进制数进行除以2的幂的操作。

  • 语法: LSR{S} Rd, Rn, #shamt

    • Rd: 结果存储的目标寄存器。

    • Rn: 要进行位移的源寄存器。

    • #shamt: 位移的位数(立即数)。

    • S: 可选,若存在则更新条件标志。

lsl/r会改变数字的sign,因为它会向端侧添加0

MOV R0, #0b00001000   ; R0 = 8
LSR R1, R0, #2        ; R1 = R0 >> 2,结果为0b00000010,即2

ASR(Arithmetic Shift Right)

  • 功能: 将寄存器中的位向右移动,同时保持符号位(最高有效位)的值。左侧的空位用符号位填充。这种操作通常用于有符号整数的除法。

  • 语法: ASR{S} Rd, Rn, #shamt

    • Rd: 结果存储的目标寄存器。

    • Rn: 要进行位移的源寄存器。

    • #shamt: 位移的位数(立即数)。

    • S: 可选,若存在则更新条件标志。

MOV R0, #-8           ; R0 = 0b11111000 (假设为8位表示)
ASR R1, R0, #2        ; R1 = R0 >> 2,结果为0b11111110,即-2

ASL(Arithmetic Shift Left)

  • 功能: 在ARM汇编中,ASL通常与LSL(Logical Shift Left)等效,因为左移操作不影响符号位。左移操作将寄存器中的位向左移动,右边用零填充。

  • 语法: LSL{S} Rd, Rn, #shamt(通常用LSL代替ASL)

知识点

  • 符号位保持: ASR在右移时保持符号位不变,这对于处理有符号整数非常重要。

  • 立即数: 位移的位数通常是一个立即数,表示要移动的位数。

  • 条件标志: 使用S后缀(如ASRS)可以更新条件标志,这对于条件执行非常有用。

  • 性能: 位移操作通常比乘法和除法更高效,因此在需要快速计算时非常有用。

使用场景: encryption/decryption


http://www.niftyadmin.cn/n/5693078.html

相关文章

自然语言处理问答系统

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

前端公共资源CDN存储库大全

具体请前往&#xff1a;前端公共资源CDN存储库大全-持续更新

组件中$router/$route的由来(vue-router源码分析)

1.vue-router源码下载 我们可以到github上找到对应版本的vue-router 版本号可以到项目中的node_modules/vue-router/dist/vue-router.js查看嘴上面的许可证说明(package.json只提供了版本的大致范围 ^表示2.2.x 而~表示2.x.x 都为>的含义) 在github上的vue-router我们要选择…

教育技术革新:SpringBoot在线教育系统开发指南

6系统测试 6.1概念和意义 测试的定义&#xff1a;程序测试是为了发现错误而执行程序的过程。测试(Testing)的任务与目的可以描述为&#xff1a; 目的&#xff1a;发现程序的错误&#xff1b; 任务&#xff1a;通过在计算机上执行程序&#xff0c;暴露程序中潜在的错误。 另一个…

一些硬件知识(二十七)

单片机一般使用NOR FLASH &#xff0c;这是因为NOR FLASH支持字节级的随机读取&#xff0c;可以直接运行存贮其中的程序&#xff0c;NOR FLASH支持读取和执行存储其中的指令&#xff0c;而无需将程序拷贝到RAM中才可执行。NAND FLASH适用于大容量的数据存储&#xff0c;他的读写…

【JVM】深入解析 Java 虚拟机:内存区域、类加载与垃圾回收机制

我的主页&#xff1a;2的n次方_ 1. JVM 内存区域划分 程序计数器&#xff08;空间比较小&#xff09;。保存了下一条要执行的指令的地址&#xff08;指向元数据区指令的地址&#xff09;堆。JVM 最大的空间&#xff0c;new 出来的对象都在堆上栈。函数中的局部变量&#x…

【前端工程解耦】使用事件中心实现系统解耦,注册,触发,删除事件

前言 事件中心提供了一种灵活且可扩展的方式来管理事件和处理函数之间的关系&#xff0c;同时保持它们之间的解耦&#xff0c;可以降低系统耦合度&#xff0c;将视图和逻辑拆分出来&#xff0c;还是那句话&#xff0c;如果一个中间件解决不了问题&#xff0c;那就再加一个 废话…

YOLOv11改进,YOLOv11添加DCNv4可变性卷积(windows系统成功编译),二次创新C2f结构,全网最详细教程

改进训练结果前: 二次创新C2f结构训练结果: 摘要 引入了可变形卷积 v4 (DCNv4),这是一种为广泛视觉应用设计的高效且有效的操作算子。DCNv4通过两项关键增强解决了其前身DCNv3的局限性:1. 移除空间聚合中的softmax归一化,以增强其动态特性和表达能力;2. 优化内存访问以…