Alpha_dllg的个人空间 https://blog.eetop.cn/1010876 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

ARM学习篇之 实现寄存器的高位和低位的互换

已有 2771 次阅读| 2012-10-11 14:05 |个人分类:ARM

天气: 晴朗
心情: 平静

使用ARM汇编程序实现寄存器的高位和低位的互换,例如第31位和第0位互换,第30位和第1位互换,以此类推。

由于ARM中没有支持位操作的指令,所以要实现单个寄存器内的位互换操作比较困难,必须要通过多次的循环才可以完成。

.global _start

.text

_start :
MOV r4,#0x18000001                        测试用数据
MOV r3,#0                                            操作后的结果,初始化为0
MOV r1,#0x80000000                       要进行操作的起始位
MOV R2,#32                                       循环次数
Loop:
MOVS r4,r4,rrx                                   将最低位移到C标志位中
EORCS R3,R3,R1                           如果C=1,就将R3中R1所对应的位置1
MOV R1,R1,LSR #1                        改变操作位,每次向右移动1位
SUBS r2,r2,#1                               
BNE Loop
MOV r4,r3
stop :
     B stop
    
.end

思想:ARM中的rrx是一个很有用的操作,我们可以将数据的最低位移入到C标志位中,我们现在要实现的是高低位的互换,有了rrx,我们就可以根据C的值来确定新数值的对应位的内容了,由于寄存器中只有01俩个值,我们可以直接把为0的位忽略,把为1的位置1就可以了。


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 0

    好友
  • 0

    获赞
  • 2

    评论
  • 304

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-23 13:09 , Processed in 0.016072 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部