assembly - 在程序集中设置寄存器时出现奇怪的错误
问题描述
我在玩蓝色药丸(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 反汇编似乎也是正确的。
我无法理解为什么会发生这种情况,对多个板进行了相同的尝试,我该如何调试和解决这个问题。
提前致谢。
解决方案
好的,所以我做了一些进一步的测试。
问题在于这个开源 stlink gdb 服务器:
https://github.com/stlink-org/stlink
由于某种原因,所有寄存器都编号为 r# + 1,甚至 sp 值都显示为 lr。
我尝试使用 openocd ,一切都按预期工作。
https://repo.or.cz/w/openocd.git
将为此在 stlink-org 回购中提出票证。
推荐阅读
- automated-tests - 在哪里发布由 VSTS 中的发布管道生成的 SpecFlow/Selenium 屏幕截图?
- javascript - nativescript 传递道具 vue
- javascript - 按钮 onclick 事件在表格数据的 innerHTML 中不起作用,同时使用按钮从本地存储中删除数据
- c# - 在正在运行的容器中从 bash 运行 docker 命令
- java - 管道中的限制(长)差分顺序
- angular - 路由器插座未在单元测试中呈现
- javascript - Node.js 如何区分传递给函数的多个参数?
- jquery - Laravel 5.5:制作 AJAX POST 时被禁止 403
- node.js - Pm2 应用程序版本不可用
- matlab - 加载一个或多个图像 Matlab GUI