我试图将下面的代码从ARMv4移植到ARMv7,因为SWP/SWPB指令已经被废弃。
swp a1, a1, [a2]我自己做了一次尝试,并编写了以下代码,尽管我必须承认我对汇编程序不熟悉。
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版本
任何帮助都将不胜感激。
发布于 2016-01-28 08:46:11
好的,代码是这样的:加载a2指向的数据,并将其存储回相同的位置,然后以指针的形式取消引用a1中的数据,从该"address“加载数据并将其存储回相同的位置,然后取消引用在第一个实例中作为指针加载的数据,从该"address”加载数据并将其存储回相同的位置。呼!即使假地址确实是有效的,那也是很多没有实现的--非常--很多。
您所需要做的就是加载目标数据,存储替换数据,并在排它失败时重试整个过程。由于原始代码具有相同的源寄存器和目标寄存器,因此需要进行额外的寄存器洗牌,以避免在存储替换值之前破坏它。
swapstore
ldrex a3, [a2]
strex a4, a1, [a2]
cmp a4, #0
bne swapstore
mov a1, a3https://stackoverflow.com/questions/35055057
复制相似问题