彙編 彙編學習筆記(5) 支援x86和x64

2021-09-26 13:44:05 字數 1458 閱讀 8919

#ifdef _amd64_

f = vectorlength(this);

#else

__asm

#endif

extern "c" float __stdcall vectorlength(void*);
新增依賴項

建立.asm檔案,visual studio中沒有.asm字尾的檔案,隨便選乙個改下字尾就好了。接下來按照格式寫,然後把x86的**拷過來,rcx暫存器上儲存的是第乙個引數,因此稍微修改下就得到下面的結果。

.code

vectorlength proc

mov rsi, rcx;

movups xmm0, [rsi] ;xmm0:x, y, z, w

mulps xmm0, xmm0 ;xmm0:x^2, y^2, z^2, w^2

movaps xmm1, xmm0 ;xmm1=xmm0:x^2, y^2, z^2, w^2

shufps xmm1, xmm1, 4eh ;xmm1:z^2, w^2, x^2, y^2

addps xmm0, xmm1 ;xmm0:x^2+z^2, y^2+w^2, z^2+x^2, w^2+y^2

movaps xmm1, xmm0 ;xmm1=xmm0:x^2+z^2, y^2+w^2,z^2+x^2,w^2+y^2

shufps xmm1, xmm1, 11h ;xmm1:y^2+w^2, x^2+z^2, w^2+y^2, z^2+x^2

addps xmm0, xmm1 ;xmm0:x^2+z^2+y^2+w^2(4個都是)

sqrtss xmm0, xmm0 ;xmm0:sqrt(x^2+z^2+y^2+w^2)

;movq rax, xmm0;

ret;

vectorlength endp

end;

編譯測試,ok,切換到x86平台,編譯,報錯,選中.asm檔案,右鍵properties(屬性),在excluded from build中選中yes,表示.asm檔案不參與x86平台的編譯。然後編譯ok,x86也沒問題,接著繼續在x86和x64上相互切換執行,沒問題。

還沒學過x64的彙編,現在的寫法不清楚有啥問題,等學完再來改唄。

x86彙編學習筆記

debug 是dos,windows都提供的實模式 8086 方式 程式的除錯工具.windows下使用dosbox模擬dos環境,掛載所在目錄後開啟debug.exe r指令 顯示r ax 0000 bx 0000 cx 0000 dx 0000 sp 00fd bp 0000 si 0000 d...

組合語言 基於X86 學習筆記

1.機器語言 machine language 是一種數字語言,專門設計成唄計算機處理器 cpu 理解。所有x86處理器都理解的共同機器語言。2.組合語言 assembly language 包含助記符書寫的語言。3.組合語言與機器語言是一一對應 one to one 的關係。4.彙編器 assem...

32位x86彙編學習總結

大學裡的微機原理課學的讓我汗顏,工作之餘,重新學習了一遍x86的彙編。彙編主要包括暫存器,指令操作,控制迴圈結構以及棧幀中的 esp和 ebp的變化。32位x86包括8個暫存器,分別是 eax accumulate ecx conuter edx data ebx base esi source i...