我在 ARM Cortex M3 上遇到了一些需要乘除自然数的功能的问题。关键是:是否可以在 128 位数字之间进行计算?我需要知道有多少组装操作需要软件模拟多个两个 32 数字并除以两个 32 位数字,然后我将计算我的计算的时间消耗。我坚持了一些计算,我需要帮助,因为也许我必须用硬件 ALU 将我的 uC 更改为 cortex M4。
你能帮我解决这个问题吗?
给定简单的 C 代码:
uint32_t var1 = 12304;
uint32_t var2 = 1892637198;
uint64_t result = var1*var2;
和 objdump 汇编程序:
0: b480 push {r7}
2: b085 sub sp, #20
4: af00 add r7, sp, #0
uint32_t var1 = 12304;
6: f243 0310 movw r3, #12304 ; 0x3010
a: 60fb str r3, [r7, #12]
uint32_t var2 = 1892637198;
c: f645 230e movw r3, #23054 ; 0x5a0e
10: f2c7 03cf movt r3, #28879 ; 0x70cf
14: 60bb str r3, [r7, #8]
uint64_t result = var1*var2;
16: 68fb ldr r3, [r7, #12]
18: 68ba ldr r2, [r7, #8]
1a: fb02 f103 mul.w r1, r2, r3
1e: 460a mov r2, r1
20: f04f 0300 mov.w r3, #0
24: e9c7 2300 strd r2, r3, [r7]
因此,如果我计算例如乘法,我可以获得整个指令(因为将值加载到寄存器中,因此每次加载加上 3 条指令)或仅乘法(在这种情况下为 6 条指令)
因为将格式为 (x^5+x) 的两个 128 位变量相乘,其中 x 是 32 位变量,给我 (a+b)(c+d) ab+ad+bc+bd 4 乘法(或使用算法为 3)。所以如果我应该计算 4*(3+3+6) 或 4*(6+?+?)。