首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用thumb-2指令与GCC

如何使用thumb-2指令与GCC
EN

Stack Overflow用户
提问于 2016-09-08 19:54:00
回答 1查看 3.8K关注 0票数 0

我已经编写了下面这个简单的memcpy32函数,作为理解如何为cortex M4编写汇编代码的一种方式。

代码语言:javascript
复制
    .section .text
    .align 2
    .global as_memcpy32
    .type as_memcpy32, %function
as_memcpy32:
     push    {r4, lr}
     movs    r3, #0
start_loop: 
     cmp     r3, r2
     bge   end_loop
     ldr   r4, [r1]
     str   r4, [r0]
     add   r0, #4
     add   r1, #4
     add    r3, #1
     b     start_loop
end_loop:   
    pop     {r4, pc}

上面的代码编译并运行。这些只是16位指令。我也想使用32位thumb2指令,因为它们是由Cortex-M4支持的。编写程序集的主要目的是让我的代码运行得更快。

根据STM32F4手册,我应该能够使用以下形式的ldr和str指令

代码语言:javascript
复制
op{type}{cond} Rt, [Rn], #offset; post-indexed

我向GCC提供了以下选项。

代码语言:javascript
复制
arm-none-eabi-gcc" -c -g -x assembler-with-cpp -MMD -mcpu=cortex-m4 -DF_CPU=168000000L -DARDUINO=10610 -DARDUINO_STM32DiscoveryF407 -DARDUINO_ARCH_STM32F4  -DMCU_STM32F406VG -mthumb -DSTM32_HIGH_DENSITY -DSTM32F2 -DSTM32F4 -DBOARD_discovery_f4   -mthumb -D__STM32F4__ memcpy.S" -o memcpy.S.o

当我尝试对ldr和str使用以下说明时

代码语言:javascript
复制
ldr r4, [r1], #4
ldr r4, [r0], #4

我得到了以下错误。

代码语言:javascript
复制
memcpy.S: Assembler messages:

memcpy.S:11: Error: Thumb does not support this addressing mode -- `ldr r4,[r1],#4'

memcpy.S:12: Error: Thumb does not support this addressing mode -- `str r4,[r0],#4'

exit status 1
Error compiling for board STM32 Discovery F407.

我不能理解问题出在哪里。实际上,编译器本身生成了更复杂的寻址操作码。

代码语言:javascript
复制
ldr.w   r4, [r1, r3, lsl #2]
str.w   r4, [r0, r3, lsl #2]

谢谢

EN

回答 1

Stack Overflow用户

发布于 2016-09-08 20:01:52

我刚发现我应该说

代码语言:javascript
复制
.syntax unified

下面

代码语言:javascript
复制
.section

下面的主题涉及其他事情,但我在那里看到了它并尝试了。啊,真灵。

How to generate the machine code of Thumb instructions?

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39390218

复制
相关文章

相似问题

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