Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly Cortex M3上的非拇指手臂代码_Assembly_Arm_Thumb_Cortex M - Fatal编程技术网

Assembly Cortex M3上的非拇指手臂代码

Assembly Cortex M3上的非拇指手臂代码,assembly,arm,thumb,cortex-m,Assembly,Arm,Thumb,Cortex M,我有一些ARM代码,我正试图在Cortex M3上运行。我的大部分代码都是用Thumb编写的,从C编译而来,但是对于一些函数,我希望能够运行正常的ARM代码(据我所知,这在M3上是可能的?) 所以 原始C代码和程序集: int donothing(int a) { return a; } 00000068 <donothing>: 68: e52db004 push {fp} ; (str fp, [sp, #-4]!) 6c: e2

我有一些ARM代码,我正试图在Cortex M3上运行。我的大部分代码都是用Thumb编写的,从C编译而来,但是对于一些函数,我希望能够运行正常的ARM代码(据我所知,这在M3上是可能的?)

所以

原始C代码和程序集:

int donothing(int a) {
  return a;
}


00000068 <donothing>:
  68:   e52db004    push    {fp}        ; (str fp, [sp, #-4]!)
  6c:   e28db000    add fp, sp, #0
  70:   e24dd00c    sub sp, sp, #12
  74:   e50b0008    str r0, [fp, #-8]
  78:   e51b3008    ldr r3, [fp, #-8]
  7c:   e1a00003    mov r0, r3
  80:   e28bd000    add sp, fp, #0
  84:   e8bd0800    ldmfd   sp!, {fp}
  88:   e12fff1e    bx  lr
该代码(与BLX)的工作完美的拇指代码虽然


知道发生了什么吗?谢谢

Cortex-M处理器不支持ARM模式指令。它们只支持Thumb-2,其中包括16位和32位指令的混合。无法在Cortex-M上运行ARM指令。

M3没有ARM模式。它支持Thumb-2指令集,其中包括一些建议适用的32位指令(参见示例)。每个Cortex-M变体支持的特定指令在这里给出。这些都是拇指/拇指2;也就是说,设置了CPSR第5位后执行。明显的问题是为什么?Thumb-2涵盖了ARM ISA的所有方面,但不包括更为深奥的方面——大多数ARM汇编代码都应该通过最小的调整进行转换,除非过度使用条件执行(即使在现代内核上的ARM模式下,条件执行也是次优的)。对于编译代码,指令集应该是无问题的。诚然,M3是Thumb-2的一个子集,但实际上它只是缺少DSP的东西。cortex-m0和-m1是armv6m,只有十几个或两个Thumb-2扩展,cortex-M3和-m4是armv7m,大约有150个Thumb-2扩展,因此,在比较thumb2和arm时,请小心尝试将这两个功能组合在一起。。。
(gdb) p/x *0x2000934c 
$2 = 0xe52db004