2012年11月18日 星期日

如何在VS2010下編譯64位元組合語言

查了一些資料,自己試了一下。簡單記錄以免又忘記。
1. 在VS2010下面開一個新Project,選用Empty Project,這點和開純C的程式一樣。
2. Platform改為x64
3. 點專案名右鍵,找到Build Customization,將其masm選項打勾
4. 在Source File下加入 *.asm。若為新檔,可以先選用C++,再將副檔名改為asm。
5. 修改Proprety內的設定:
   a. 在Advanced下的Entry Point寫上啟始函式名
   b. 在System下的SubSystem選一個型別

看起來容易,問題是不好查。
除錯時只要將Disassembly打開就可以了。
有了除錯器,再來就簡單了。


2012年11月11日 星期日

64位元組合語言讀書心得

除了介紹X64組合語言外,也介紹了Win64 ABI。
看了Win64 ABI終於了解為何Win32的程式在Win64下是無法使用的。
因為改了基本的C函式呼叫的動作。
為了增加C函式呼叫的速度,將原先參數堆放在Stack的動作,部分改到暫存器中。
這確實會增加執行效率,而Bee在ARM處理器也看到是用這樣的動作。
Win64 ABI是使用四個暫存器 RCX, RDX, R8, R9。
一時好奇去查了一下Linux ABI用了六個RDI, RSI, RDX, RCX, R8, R9。
看來大家都是用同一招做C函式呼叫加速。

其他的,就和一般處理器差不多。
再下來就是我自己的作業了:寫一個程式。