相关疑难解决方法(0)

ARM IT条件指令汇编程序(armcc)

为什么以下编译:

 
    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标准吗?

assembly arm conditional-statements

3
推荐指数
1
解决办法
5264
查看次数

如何确定一个字(4个字节)是16位指令还是32位指令?

如何知道字中的字节是表示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位指令?

谢谢.

arm cortex-m3 decoding opcodes armv7

3
推荐指数
1
解决办法
2266
查看次数

组装 THUMB 指令以在 Cortex-M3 上执行

作为练习,我想让 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)

assembly arm stm32 thumb cortex-m

2
推荐指数
1
解决办法
370
查看次数