首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将SWP指令从ARMv4移植到ARMv7

将SWP指令从ARMv4移植到ARMv7
EN

Stack Overflow用户
提问于 2016-01-28 07:16:36
回答 1查看 430关注 0票数 1

我试图将下面的代码从ARMv4移植到ARMv7,因为SWP/SWPB指令已经被废弃。

代码语言:javascript
复制
    swp  a1, a1, [a2]

我自己做了一次尝试,并编写了以下代码,尽管我必须承认我对汇编程序不熟悉。

代码语言:javascript
复制
swapstore1
    ldrex   a3, [a2]
    strex   a4, a3, [a2]
    cmp     a4, #0
    bne     swapstore1

swapstore2
    ldrex   a2, [a1]
    strex   a4, a2, [a1]
    cmp     a4, #0
    bne     swapstore2

swapstore3
    ldrex   a1, [a3]
    strex   a4, a1, [a3]
    cmp     a4, #0
    bne     swapstore3

它生成一个异常,数据错对-代码80000002.我猜这可能和值和地址…有关

我正在使用Microsoft (R) ARM宏汇编程序15.01.50304版本

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-28 08:46:11

好的,代码是这样的:加载a2指向的数据,并将其存储回相同的位置,然后以指针的形式取消引用a1中的数据,从该"address“加载数据并将其存储回相同的位置,然后取消引用在第一个实例中作为指针加载的数据,从该"address”加载数据并将其存储回相同的位置。呼!即使假地址确实是有效的,那也是很多没有实现的--非常--很多。

您所需要做的就是加载目标数据,存储替换数据,并在排它失败时重试整个过程。由于原始代码具有相同的源寄存器和目标寄存器,因此需要进行额外的寄存器洗牌,以避免在存储替换值之前破坏它。

代码语言:javascript
复制
swapstore
    ldrex   a3, [a2]
    strex   a4, a1, [a2]
    cmp     a4, #0
    bne     swapstore
    mov     a1, a3
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35055057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档