---恢復內容開始---
- 基本的浮點數指令
示例代碼:
Visual Studio 2013的反匯編代碼是:
對於movss,表示移動標量單精度浮點值
將標量單精度浮點值從源操作數(第二個操作數)移到目標操作數(第一個操作數)。源操作數與目標操作數可以是 XMM 寄存器或 32 位內存位置。此指令可用於將單精度浮點值移入/移出 32 位內存位置與 XMM 寄存器的低位雙字,或是用於在兩個 XMM 寄存器的低位雙字之間移動單精度浮點值。此指令不能用於在內存位置之間傳輸數據。
對於cvtsi2ss指令,起到的是一個轉換的功能:
cvtps2pi MM,XMM/m64
把源存儲器低64位兩個32位單精度浮點數轉為兩個32位有符號(補碼)整數,放入目的寄存器。
cvtss2sd
cvtss2sd XMM,XMM/m32
把源
存儲器低32位1個單精度浮點數變成1個雙精度浮點數,結果送入目的寄存器的低64位,高64位不變.
cvttss2si
將源操作數(第二個操作數)中的單精度浮點值轉換成目標操作數(第一個操作數)中的有符號雙字整數。
- 指針
示例:
這里不管指針是什么類型的,由於都是32位的指針,所以都是的dword ptr。但是下面就因為數據類型的不同,導致分別使用的是byte ptr、dword ptr、word ptr:
示例代碼:
不同類型的指針加1,增長的大小其實是不同的,加的是這個類型的長度:
- 引用
引用類型其實就是指針類型,只不過它用於存放地址的內存空間對使用者而言是隱藏的。
示例:
這里nVarType保存的實際上就是nVar變量的地址:
再來看Add函數的反匯編:
eax中保存的是傳遞下來的nVar的地址。
- 常量
常量數據在程序運行前就已經存在,它們被編譯到可執行文件中。當程序啟動后,便會被加載進來。這些數據通常都會在常量數據區中保存,該節的屬性中是沒有可寫權限的,所以在對常量進行修改時會報錯。
示例: