如果您可以发布汇编/C 代码 - 提出更改建议会更容易。
对于任何程序集,我都会从 C 代码开始(因为我认为是在 C 中:)),然后使用编译器将其转换为程序集,然后根据需要在程序集中对其进行优化。假设您需要编写一个函数,该函数接受两个字符串并将它们相加并返回 int 形式的结果,如下所示:
int ext_asm_func(unsigned char *arg1, unsigned char *arg2, int len)
{
int i, result = 0;
for(i=0; i<len; i++) {
result += arg1[i] + arg2[i];
}
return result;
}
这是汇编(由 gcc 生成https://godbolt.org/g/1N6vBT https://godbolt.org/g/1N6vBT):
ext_asm_func(unsigned char*, unsigned char*, int):
test edx, edx
jle .L4
lea r9d, [rdx-1]
xor eax, eax
xor edx, edx
add r9, 1
.L3:
movzx ecx, BYTE PTR [rdi+rdx]
movzx r8d, BYTE PTR [rsi+rdx]
add rdx, 1
add ecx, r8d
add eax, ecx
cmp r9, rdx
jne .L3
rep ret
.L4:
xor eax, eax
ret