nasm 用xmm寄存器做矩阵相加溢出了如何处理?
生活随笔
收集整理的這篇文章主要介紹了
nasm 用xmm寄存器做矩阵相加溢出了如何处理?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一 假設相加的兩個數大于255,8bit存儲不下。
比如200 + 200。
二 先scale到16bit存儲,然后再相加即可
匯編代碼:
global Add global AddSafe Add:movdqa xmm0, [rdi]movdqa xmm1, [rsi]paddb xmm0, xmm1movdqu [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
總結
以上是生活随笔為你收集整理的nasm 用xmm寄存器做矩阵相加溢出了如何处理?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网络研讨室_Excel问题,修复和网络研
- 下一篇: 网络游戏服务器构架设计