翻译C++;使用(MLA说明)连接到臂组件 我试图翻译这个C++代码: y = y+ x*32; z = y+ x*x;
假设ARM汇编(x是R1寄存器,y是R2,z在R3中),我应该为每种情况只使用一条汇编指令翻译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
所以,我建议用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应该是不同的。好吧,那么当你试图解决这个问题时,你写了什么代码?有什么问题吗?