在程序集中设置寄存器时出现奇怪的错误

问题描述

我在玩蓝色药丸(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寄存器观察寄存器值时,看到的是 r8 寄存器组,而不是 r7 ,如下图所示。 / p>

enter image description here

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

enter image description here

我无法理解为什么会这样,在多块板上尝试了相同的方法,我该如何调试和解决此问题。

谢谢。

解决方法

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

此开源stlink gdb服务器存在问题:

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

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

我尝试用openocd代替,一切正常。

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

为此将在stlink-org存储库中举一张票。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...