一 假设相加的两个数大于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#include 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



