仿真调试stm32汇编代码

软件准备

  • ubuntu
  • 交叉编译链工具:arm-none-eabi-gcc, arm-none-eabi-as, arm-none-eabi-ld
  • qemu仿真软件:支持stm32版本
  • 调试工具:gdb-multiarch

启动仿真实验

  • 汇编代码
.thumb
.syntax unified

.equ STACKINIT, 0x20005000

.section .text
.org 0

vectors:
    .word STACKINIT
    .word _start+1

_start:
    MOV R0, #10
    MOV R1, #20
    SUBS R0, R0, R1
    MRS R2, PSR
    b _start
  • 对汇编文件进行汇编
arm-none-eabi-as start.asm -mcpu=cortex-m3 -mthumb -o start.out -g
  • 链接脚本
SECTIONS {
	. = 0x0
	.text : {
		*(.text)
	}
}
  • 对目标文件进行链接
arm-none-eabi-ld start.out -T embed.ld -nostartfiles -o embed.elf
  • 从elf文件生成二进制文件
arm-none-eabi-objcopy -O binary embed.elf embed.bin 
  • 启动qemu
qemu-system-arm -s -S -M stm32-p103 -nographic -kernel embed.bin
  • 启动gdb调试工具
gdb-multiarch embed.elf
target remote localhost:1234

实验结果

启动gdb调试之后,并且连接到qemu之后的结果如下:
仿真调试stm32汇编代码_第1张图片将汇编代码和寄存器内容实现:

layout asm
layout reg

结果:
仿真调试stm32汇编代码_第2张图片
使用si命令,执行下一条汇编命令
仿真调试stm32汇编代码_第3张图片
可以看到R0寄存器的内容已经变为了我们的预设值: 10
再次执行si命令,可以看到R1寄存器的值也变为了我们的预设值: 20
仿真调试stm32汇编代码_第4张图片
重复执行命令si,会发现程序重新回到_start的开始位置,和预期结果一致
仿真调试stm32汇编代码_第5张图片

你可能感兴趣的:(stm32,汇编)