jac*_*wen 1 embedded arm gnu stm32 cortex-m
使用arm-none-eabi-readelf -h ideself.elf可以找到:
Entry point address: 0x800107d
Run Code Online (Sandbox Code Playgroud)
使用arm-none-eabi-objdump -D ideself.elf可以找到:
0800107c <Reset_Handler>:
800107c: f8df d034 ldr.w sp, [pc, #52] ; 80010b4 <LoopForever+0x2>
8001080:......................................................
Run Code Online (Sandbox Code Playgroud)
为什么启动reset_handler不等于0x800107d而不是0x800107c
0x800107c 中的字节不执行?执行 3/4 四字节指令 ?
ARM 处理器有两种不同的指令集:Thumb 和 ARM。Thumb 指令集每条指令有 16 位,ARM 指令集每条指令有 32 位。指令在内存中对齐。
因此,指令指针的值是偶数,这意味着指令地址的位 0 是 0。这使得该位“可以自由使用”用于其他目的。
因此,处理器根据目标地址的位 0 决定是继续处于 Thumb 模式还是 ARM 模式。位 0 = 1 将处理器切换到 Thumb 模式,从而产生奇数目标地址。然而,实际指令的地址仍然是偶数,并且少了一位。
| 归档时间: |
|
| 查看次数: |
106 次 |
| 最近记录: |