一 假设相加的两个数大于255,8bit存储不下。
比如200 + 200。
二 先scale到16bit存储,然后再相加即可
汇编代码:
global Add
global AddSafe
Add:
movdqa xmm0, [rdi]
movdqa xmm1, [rsi]
paddb xmm0, xmm1
movdqu [rdx], xmm0
AddSafe:
movdqa xmm0, [rdi];//装载到128位寄存器
vpmovzxbw ymm0, xmm0;//扩展到16bit一个单元
movdqa xmm1, [rsi]
vpmovzxbw ymm1, xmm1;//同上
vpaddw ymm1, ymm1, ymm0;// 按word 相加
vmovdqa [rdx], ymm1;//存储出去
三 c语言代码
#include <stdio.h>
#include <string.h>
extern void Add(unsigned char *a, unsigned char *b, unsigned char *c);
extern void AddSafe(unsigned char *a, unsigned char *b, unsigned char *c);
int main()
{
unsigned char a[16], b[16], c[32];
memset(a, 200, 16);
memset(b, 200, 16);
memset(c, 0x0, 32);
AddSafe(a, b, c);//存储需要256位
for (int i = 0; i < 32; i++)
printf("%d ", c[i]);
return 0;
}
四 运行输出
test# ./addTest
144 1 144 1 144 1 144 1 144 1 144 1 144 1 144 1 144 1 144 1 144 1 144 1 144 1 144 1 144 1 144 1 #
1是进位的,1 * 255 + 144