nasm寄存器xmm[0~8使用]
生活随笔
收集整理的這篇文章主要介紹了
nasm寄存器xmm[0~8使用]
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一 準備跑開intrinsic,直接通過匯編操作寄存器,進一步理解向量寄存器們。
二 第二課,把一個數組存入xmm寄存器,然后再讀取出來,存入內存,打印出來。
使用的SIMD指令為
movdqa xmm0, [rdi]
movd [rsi], xmm0 ;//只是mov了低4個字節,全部mov繼續研究,
代碼:
global Load global Save extern printf Load:push rax; //這些都是測試代碼,用于打印,先緩存rax寄存器push rdi; //緩存rdi寄存器,因為這個寄存器就是存的數組指針push rsi; //輸出的數組指針movdqa xmm0, [rdi] //先存到xmm0movd [rsi], xmm0 //從xmm0讀取出來 ;//下面是用于打印的代碼,詳見上一篇文章的介紹mov rax, rdi;mov rdi, format;mov rsi, rax;xor rax, rax;call printfpop rsipop rdi;pop rax section .data format: db "data address %p", 10, 0再來看C語言調用代碼:
#include <stdio.h> #include <stdlib.h> #include <string.h>extern void Load(char *ptr, char *out); extern void Save(char *ptr);int main() {char *a = (char*)malloc(100);for (int i = 0; i < 100; i++)a[i] = i;printf("we know a address %p\n", a);char b[100];memset(b, 0x0, 100);Load(a, b);free(a);for (int i = 0; i < 100; i++)printf("b[%d] = %d\n", i, b[i]);return 0; }執行輸出:
test# ./inout?
we know a address 0x13fb260
data address 0x13fb260
b[0] = 0
b[1] = 1
b[2] = 2
b[3] = 3
b[4] = 0
b[5] = 0
符合預期
總結
以上是生活随笔為你收集整理的nasm寄存器xmm[0~8使用]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: net随笔日记1
- 下一篇: php正方系统抓取课表,以正方教务系统为