Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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
Arm 臂对指2互通_Arm_Thumb - Fatal编程技术网

Arm 臂对指2互通

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)使用。根据您的链接器,您可以将其保留为

我有自己的手臂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)使用。根据您的链接器,您可以将其保留为这样,链接器将添加一个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模式未被禁用。