Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.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
翻译C++;使用(MLA说明)连接到臂组件 我试图翻译这个C++代码: y = y+ x*32; z = y+ x*x;_C++_Arm - Fatal编程技术网

翻译C++;使用(MLA说明)连接到臂组件 我试图翻译这个C++代码: y = y+ x*32; z = y+ x*x;

翻译C++;使用(MLA说明)连接到臂组件 我试图翻译这个C++代码: y = y+ x*32; z = y+ x*x;,c++,arm,C++,Arm,假设ARM汇编(x是R1寄存器,y是R2,z在R3中),我应该为每种情况只使用一条汇编指令 所以,我建议用MLA来做,但我不知道怎么做,你能帮我吗 首先,将代码片段放入函数中并创建完整的代码 void x(void){ volatile int x = 1, y = 2, z = 3; y = y+ x*32; z = y+ x*x; } 然后,在上面编译它 结果是: x: mov r1, #1 mov r2, #2

假设ARM汇编(x是R1寄存器,y是R2,z在R3中),我应该为每种情况只使用一条汇编指令
所以,我建议用MLA来做,但我不知道怎么做,你能帮我吗

首先,将代码片段放入函数中并创建完整的代码

void x(void){
    volatile int x = 1, y = 2, z = 3;
    y = y+ x*32;
    z = y+ x*x;
}
然后,在上面编译它

结果是:

x:
        mov     r1, #1
        mov     r2, #2
        mov     r3, #3
        sub     sp, sp, #16
        str     r1, [sp, #4]
        str     r2, [sp, #8]
        str     r3, [sp, #12]
        ldr     r2, [sp, #4]
        ldr     r3, [sp, #8]
        add     r3, r3, r2, lsl #5
        str     r3, [sp, #8]
        ldr     r0, [sp, #4]
        ldr     r1, [sp, #4]
        ldr     r2, [sp, #8]
        mla     r3, r1, r0, r2
        str     r3, [sp, #12]
        add     sp, sp, #16
        bx      lr
然后,从值中获取变量的赋值。它看起来像
[sp,#4]
x
[sp,#8]
y
[sp,#12]
z

最后,使用此关系构造结果

答案是:

add r2, r2, r1, lsl #5
mla r3, r1, r1, r2

你有ARM组装手册吗?@Galik是的,我知道最好的方法是使用(MLA)指令,因为它同时进行加法和乘法运算。但是Destination和source应该是不同的。好吧,那么当你试图解决这个问题时,你写了什么代码?有什么问题吗?