当前位置: 首页 > article >正文

ARM Assembly 6: Shift 和 Rotate

基础概念

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.kler.cn/news/334621.html

相关文章:

  • SQL进阶技巧:如何优雅求解指标累计去重问题?
  • SpringBoot在线教育系统:构建与优化
  • react-问卷星项目(6)
  • CMake教程:第一步:一个基本的起点
  • mysql中 and or not的执行顺序
  • 解决Vue应用中遇到路由刷新后出现 404 错误
  • 高等数学 第二讲 数列极限_收敛数列_海涅定理_单调有界准则
  • SkyWalking 高可用
  • Redis SpringBoot项目学习
  • 图文深入理解Oracle Network配置管理(一)
  • Windows系统编程(三)进程与线程二
  • sentinel原理源码分析系列(一)-总述
  • Centos Stream 9备份与恢复、实体小主机安装PVE系统、PVE安装Centos Stream 9
  • C++面试速通宝典——9
  • rabbitMq-----消费者管理模块
  • Perforce静态分析工具2024.2新增功能:Helix QAC全新CI/CD集成支持、Klocwork分析引擎改进和安全增强
  • 使用指标进行量化交易时,有哪些需要注意的风险点呢
  • Spring Data JPA中的锁机制
  • CSP-J/S 复赛算法 区间动态规划
  • 【2024年最新】基于springboot+vue的springboot火车订票管理系统lw+ppt