x86架構下,一般通過專用協處理器計算浮點數。浮點數運算通過fpu(float point unit,浮點運算單元計算)計算,提供了浮點棧暫存器st0~st7。
fld mem ;浮點數入棧
fmul mem ;st(0)=st(0)*mem
fst mem ;st(0)轉換為指定精度的浮點數
fstp mem;同fst,並彈出st0
另還 fdiv ,fsqrt,fist,fistp等等常用浮點數指令。
例:
fmul_proc proc
local x:dword
local y:dword
mov x,3fc00000h;1.5
fld x
mov y,4019999ah;2.4
fmul y; st(0)=st(0)*y
call print_esp
sub esp,8
fst qword ptr [esp] ;預設double型
push offset szfmt_003
call crt_printf
add esp,12
call print_esp
sub esp,8
sub esp,8
fst qword ptr [esp]
push offset szfmt_003
call crt_printf
add esp,4
call print_esp
fstp x;彈出 st(0)
mov eax,x
retfmul_proc endp
注:
c庫函式printf函式,格式化%f僅支援double型資料,所以入棧引數為8位元組( sub esp,8 )
x86下整數與浮點數的儲存
資料在記憶體中儲存分為兩種模式,大端模式下,高位元組低位址,小端模式下低位元組高位址。因為符號數在計算機儲存的是補碼,整數 2,的補碼通過簡單計算可以求得 2的絕對值為2,2的原碼為0x00 00 00 02,最高位為符號位,正數為0,負數為1,將最高位改為1即 2的原碼0x80 00 00 02再...
X86彙編指令詳解
x86彙編基本分為七大體系 分別是 1 資料傳送指令 2 算術運算指令 3 邏輯運算指令 4 串操作指令 5 控制轉移指令 6 處理器控制指令 7 保護方式指令 先介紹資料傳送指令集 1 資料傳送指令 1.mov 格式 mov destination,source 功能 將s ource中的資料傳送...
x86指令格式
當計算機處理器晶元執行時,它讀取儲存在記憶體中的指令碼。每個指令碼集合可能包含乙個或多個位元組的資訊,這些資訊指示處理器完成特定的任務。每條指令碼都是從記憶體中讀取的,指令碼所需的資料也是儲存在記憶體中並從記憶體中讀取。包含指令碼的記憶體位元組和包含處理器使用的資料的位元組沒有區別。為了區分資料和指...