为什么以下编译:
ITE EQ
MRSEQ R0, MSP
MRSNE R0, PSP Run Code Online (Sandbox Code Playgroud)
但这不是:
ITT NE
MRSNE R0, PSP
MRSEQ R0, MSP Run Code Online (Sandbox Code Playgroud)
是否有可能MRSNE R0,PSP和MRSEQ R0,MSP都执行(这是我的情况)?
This compiles:
ITT NE
MRSNE R0, PSP
MRSNE R0, MSP Run Code Online (Sandbox Code Playgroud)
它是ARM标准吗?
如何知道字中的字节是表示16位指令还是32位指令?
我提到了ARM ARMv7M,我不清楚如何区分它是16位指令还是32位指令.
它说
If bits [15:11] of the halfword being decoded take any of the following values, the halfword is the first halfword of a 32-bit instruction:
• 0b11101
• 0b11110
• 0b11111.
Otherwise, the halfword is a 16-bit instruction
这是否意味着处理器总是取半字,检查它们并决定它是16位还是32位?
前半字是什么意思?一个字中的位[31-16]或位[15-0]?
如果我有32位,那么我可以知道它是32位指令还是16位指令?
谢谢.
作为练习,我想让 STM32F103 从内部 SRAM 执行。这个想法是手工编写一些 THUMB 程序集,用 组装它arm-none-eabi-as,用 OpenOCD 的mwh指令将机器代码加载到 SRAM 中,用将 PC 设置为 SRAM 的开头reg pc 0x20000000,最后step几次。
这是我要执行的汇编代码。这基本上是一个毫无意义的循环。
# main.S
.thumb
.syntax unified
mov r0, #40
mov r1, #2
add r2, r0, r1
mvn r0, #0x20000000
bx r0
Run Code Online (Sandbox Code Playgroud)
我需要获取机器码以便我可以将其加载到 SRAM 中,但是反汇编器输出似乎不正确。
$ arm-none-eabi-as -mthumb -mcpu=cortex-m3 -o main.o main.S
$ arm-none-eabi-objdump -d -m armv7 main.o
main.o: file format elf32-littlearm
Disassembly of section .text:
00000000 <.text>:
0: f04f 0028 mov.w r0, #40 ; …Run Code Online (Sandbox Code Playgroud)