assembly ARM程序集“延迟”功能不适用于unified / thumb-2语法

jmp7cifd  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(80)

我使用下面的代码为ARM做一个简单的基于计数器的延迟/等待:

.thumb_func
dowait:
   ldr r7,=0x200000
dowaitloop:
   sub r7,#1
   bne dowaitloop
   bx lr

字符串
我从dwelch的blinker01 mbed_samples得到了这个函数,它在其他led Flink 类型的示例程序中工作得很好。然而,我目前正在编写的程序需要在顶部有.syntax unified,因为我使用的是Thumb-2指令(例如:ITTEE)。
我怀疑“.syntax unified”是问题所在,因为我使用了已知工作的blinker01 example并添加了.syntax unified,当我上传到我的董事会时,它不再工作。
虽然我还没有所有的gdb stuff figured out来证明这一点,但该函数似乎没有计数/延迟。
是否有其他方法来重写这个“delay”函数以使用unified / Thumb-2语法?

oug3syen

oug3syen1#

当您希望指令更新标志时,需要使用SUBS

.syntax unified
.thumb_func
dowait:
   ldr r0,=0x200000
dowaitloop:
   subs r0,#1
   bne dowaitloop
   bx lr

字符串
另一个注意事项:R7不是一个clobber寄存器,所以如果你从“C”代码中使用dowait函数,就会出现错误,因为编译器不希望R7被修改。这就是为什么我把它改成了R0。

相关问题