Arm 臂对指2互通
我有自己的手臂asm(32位手臂/霓虹灯)。根据这段asm代码,我调用了一些用C实现的函数。类似于:Arm 臂对指2互通,arm,thumb,Arm,Thumb,我有自己的手臂asm(32位手臂/霓虹灯)。根据这段asm代码,我调用了一些用C实现的函数。类似于: ARM NormCorrS0_S0_S0_ PROC ... BL ConvolveC4 <-- implemented in C/C++ ... ARM NormCorrS0\u S0\u S0\u程序 ... BL卷积C4您必须使用BX或BLX,或根据手臂pop(ldm)使用。根据您的链接器,您可以将其保留为
ARM
NormCorrS0_S0_S0_ PROC
...
BL ConvolveC4 <-- implemented in C/C++
...
ARM
NormCorrS0\u S0\u S0\u程序
...
BL卷积C4您必须使用BX或BLX,或根据手臂pop(ldm)使用。根据您的链接器,您可以将其保留为这样,链接器将添加一个ConvolveC4_from_arm,例如,它基本上将链接寄存器设置为bl之后的返回地址,但蹦床会切换模式
另一种方法是,除非您在同一个源中调用函数,并且您知道函数的模式,否则始终使用blx或bx
如果您正确声明标签/功能,gnu工具binutils可以为您解决一些问题。在具有BLX(体系结构v5T及更高版本,包括所有具有Thumb2的处理器)的处理器上,不需要连接器蹦床/贴面。在链接时,链接器知道调用者和被调用者的指令集,并且可以根据需要将BL
更改为BLX
。阿姆林克做到了这一点;我不确定GNU ld,但我希望它也能这样做。不确定此人使用的是什么汇编程序和链接器,它可能不知道所有这些…我使用的是armasm for Windows RT(来自microsoft)。编译器根据调用的目标自动插入bl/blx。但是,我不知道如何运行32位ARM。我对拇指2没有问题,但用手臂我会犯奇怪的错误。。。操作系统是否可能在硬件级别禁用ARM?如果您有一个运行ARM指令(基本上不是cortex-m)的内核,那么您可以运行ARM指令,只要您切换到ARM指令/从ARM指令切换到ARM指令。此外,当异常发生时(中断等),这种情况下的异常都将处于arm模式。因此,arm模式未被禁用。