首页 > 解决方案 > 在程序集中设置寄存器时出现奇怪的错误

问题描述

我在玩蓝色药丸(Stm32F103CB)并试图通过汇编设置 r7 寄存器,

.syntax unified
.cpu cortex-m3
.fpu softvfp
.thumb

.global vtable
.global reset_handler

.type vtable, %object
vtable:
    .word _estack
    .word reset_handler
.size vtable, .-vtable


.type reset_handler, %function
reset_handler:

    LDR  r0, =_estack
    MOV  sp, r0
    LDR  r7, =0xDEADBEEF
.size reset_handler, .-reset_handler

错误是,当我通过 gdb -> info registers 观察寄存器值时,我看到的是r8寄存器集而不是r7,如下图所示。

在此处输入图像描述

elf 的 objdump 反汇编似乎也是正确的。

在此处输入图像描述

我无法理解为什么会发生这种情况,对多个板进行了相同的尝试,我该如何调试和解决这个问题。

提前致谢。

标签: assemblyarmstm32bluepill

解决方案


好的,所以我做了一些进一步的测试。

问题在于这个开源 stlink gdb 服务器:

https://github.com/stlink-org/stlink

由于某种原因,所有寄存器都编号为 r# + 1,甚至 sp 值都显示为 lr。

我尝试使用 openocd ,一切都按预期工作。

https://repo.or.cz/w/openocd.git

将为此在 stlink-org 回购中提出票证。


推荐阅读