1. 程式人生 > >浮點數暫存器與指令

浮點數暫存器與指令

暫存器

AVX浮點體系結構允許資料儲存在16個YMM暫存器中

255 127 0
%ymm0 %xmm0 1st FP arg.返回值
%ymm1 %xmm1 2nd FP引數
%ymm2 %xmm2 3rd FP引數
%ymm3 %xmm3 4th FP引數
%ymm4 %xmm4 5th FP引數
%ymm5 %xmm5 6th FP引數
%ymm6 %xmm6 7th FP引數
%ymm7 %xmm7 8th FP引數
%ymm8 %xmm8 呼叫者儲存
%ymm9 %xmm9 呼叫者儲存
%ymm10 %xmm10 呼叫者儲存
%ymm11 %xmm11 呼叫者儲存
%ymm12 %xmm12 呼叫者儲存
%ymm13 %xmm13 呼叫者儲存
%ymm14 %xmm14 呼叫者儲存
%ymm15 %xmm15 呼叫者儲存

媒體暫存器。這些暫存器用於存放浮點資料。每個YMM暫存器儲存32個位元組。低16位元組可以作為XMM暫存器來訪問

浮點傳送和轉換操作

指令 目的 描述
vmovss M32 X 傳送單精度數
vmovss X M32 傳送單精度數
vmovsd M64 X 傳送雙精度數
vmovsd X M64 傳送雙精度數
vmovaps X X 傳送對齊的封裝好的單精度數
vmovapd X X 傳送對齊的封裝好的雙精度數

浮點傳送指令。這些操作在記憶體和暫存器之間以及一對暫存器之間傳送值(X:XMM暫存器(例如%xmm3);M32:32位記憶體範圍;M64:64位記憶體範圍)

指令 目的 描述
vcvttss2si X/M32 R32 用截斷的方法把單精度數轉換成整數
vcvttsd2si X/M64 R32 用截斷的方法把雙精度數轉換成整數
vcvttss2siq X/M32 R64 用截斷的方法把單精度數轉換成四字整數
vcvttsd2siq X/M64 R64 用截斷的方法把雙精度數轉換成四字整數

雙運算元浮點轉換指令。這些操作將浮點數轉換成整數(X:XMM暫存器(例如%xmm3); R32:32位通用暫存器(例如%eax);R64:64位通用暫存器(例如%rax);M32:32位記憶體範圍;M64:64位記憶體範圍)

指令 源1 源2 目的 描述
vcvtsi2ss M32/R32 X X 把整數轉換成單精度數
vcvtsi2sd M32/R32 X X 把整數轉換成雙精度數
vcvtsi2ssq M64/R64 X X 把四字整數轉換成單精度數
vcvtsi2sdq M64/R64 X X 把四字整數轉換成雙精度數

三運算元浮點轉換指令。這些操作將第一個源的資料型別轉換成目的資料型別。第二個源值對結果的低位位元組沒有影響(X:XMM暫存器(例如%xmm3);M32:32位記憶體範圍;M64:64位記憶體範圍)

gcc實現單精度與雙精度的轉換需要單獨說明(就不具體解釋了)

Conversion from single to double precision
vunpcklps %xmm0, %xmm0, %xmm0   Replicate first vector element
vcvtps2pd %xmm0, %xmm0          Convert two vector elements to double
Conversion from double to single precision
vmovddup %xmm0, %xmm0            Replicate first vector element
vcvtpd2psx %xmm0, %xmm0          Convert two vector elements to single

運算操作

標量avx2浮點指令。每條指令有一個(S1)或兩個(S1,S2)源運算元,和一個目的運算元。第一個源運算元S1可以是一個XMM暫存器或一個記憶體位置。第二個源運算元和目的運算元都必須是XMM暫存器。每個操作都有一條針對單精度的指令和一條針對雙精度的指令。結果存放在目的暫存器中。

單精度 雙精度 效果 描述
vaddss vaddsd D<—S2+S1 浮點數加
vsubss vsubsd D<—S2-S1 浮點數減
vmulss vmulsd D<—S2xS1 浮點數乘
vdivss vdivsd D<—S2/S1 浮點數除
vmaxss vmaxsd D<—max(S2,S1) 浮點數最大值
vminss vminsd D<—min(S2,S1) 浮點數最小值
sqrtss sqrtsd D<—2 浮點數平方根

位級操作

單精度 雙精度 效果 描述
vxorps vorpd D<—S2^S1 位級異或(EXCLUSIVE–OR)
vandps andpd D<—S2&S1 位級與(AND)

對封裝資料的位級操作(這些指令對一個XMM暫存器中的所有128位進行布林操作)

比較操作

指令 基於 描述
ucomiss S1,S2 S2-S1 比較單精度值
ucomisd S1,S2 S2-S1 比較雙精度值

引數S2必須在XMM暫存器中,而S1可以在XMM暫存器中,也可以在記憶體中

條件碼的設定如下:

順序S2:S1 CF ZF PF(奇偶標誌位)
無序的(NaN) 1 1 1
S2 < S1 1 0 0
S2 = S1 0 1 0
S2 > S1 0 0 0

相關推薦

點數指令

暫存器 AVX浮點體系結構允許資料儲存在16個YMM暫存器中 255 127 0 %ymm0 %xmm0 1st FP arg.返回值 %ymm1 %xmm1 2nd FP引數 %ymm2 %x

8086彙編學習之[BX],CXloop指令,ES

一、彙編程式的基本格式: 1、基本格式與解析: assume cs:codeseg //assume假設CS暫存器與codeseg段有關聯,codeseg段本就是程式碼段 codeseg segment //段開始,codeseg為段名,可

基於棧基於指令集架構

用C的語法來寫這麼一個語句: C程式碼   a = b + c;   如果把它變成這種形式: add a, b, c 那看起來就更像機器指令了,對吧?這種就是所謂“三地址指令”(3-address instruction),一般形式為: op dest, src1,

點數表達

key 因此 brush sharp 科學 例如 十進制 類型 ieee754 計算機中的浮點數只是無限接近真實值的近似值。為什麽呢?首先來看一下浮點數在計算機中是如何存儲的。 浮點數的存儲         計算機中浮點數的存儲遵循IEEE754浮點數標準。單精度用32

espebp介紹

esp暫存器與ebp暫存器介紹 2013年09月21日 03:04:15 傷心小鴕鳥 閱讀數:974 版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/westboy666/article/details/11858225

8086彙編指令彙總

1   暫存器的分類 通用暫存器: ax,bx,cx,dx,(ah,al,bh,bl,ch,cl,dh,dl); sp,bp,si,di 指令暫存器: ip 標誌暫存器: FR 段暫存器: cs,ds,ss,es

【arm】arm32位和arm64位架構、指令差異分析總結

Date: 2018.9.21 1、參考 2、前言   最近三個月的時間,都在進行解碼庫的arm架構彙編優化,包括arm32位彙編優化和arm64位彙編優化。在arm32位入門之後,只要掌握了兩種架構的暫存器和指令集差異之後,就可以很快上手編寫arm64

儲存器物理區別

從根本上講,暫存器與RAM的物理結構不一樣。 一般暫存器是指由基本的RS觸發器結構衍生出來的D觸發,就是一些與非門構成的結構,這個在數電裡面大家都看過; RAM則有自己的工藝,一般1Bit由六MOS管構成。 所以,這兩者的物理結構不一樣也導致了兩者的效能不同。暫存器訪問

MIPS的指令和定址方式的分類

MIPS的32個暫存器 助記符 編號 作用 zero 0 恆為0 at 1 (assembly temporary)保留給彙編器使用 v0,v1 2-3

解釋執行和編譯執行的區別、基於棧和基於指令集區別

1. 解釋執行和編譯執行的區別 我們在學習java的時候,對class檔案都有個疑惑,虛擬機器是如何執行發方法中的位元組碼指令的呢?其實 虛擬機器的執行引擎在執行java程式碼的時候有解釋執行和編譯執行兩種選擇。通俗說來,解釋執行是通過直譯器執行,編譯執行即通

IA32x86-64的區別

IA32暫存器 一個IA32CPU包含一組8個儲存32位值的通用暫存器,這些暫存器用來儲存整數資料和指標: 31-0 15-0 15-8 7-0 使用慣例 %eax %ax %ah %al 呼叫者儲存 %ecx %cx %ch %cl 呼叫者

詳細解析ESPEBP

               詳細解析ESP暫存器與EBP暫存器    最近在看彙編碼,經常在程式的開頭看到ESP和EBP暫存器的出現,由於本人基礎知識的不牢靠,便上網查閱相關的資料,可惜網上的資料都不給力,都只是流於形式,沒有好好的解釋這兩個東西是什麼.終於通過goo

七種定址方式

一、暫存器 總共有14個16位暫存器,8個8位暫存器。 通用暫存器:   資料暫存器:   AH(8位)  AL(8位)  AX(16位)   (AX和AL又稱累加器)   BH(8位)  BL(8位)  BX(16位)   (BX又稱基址暫存器,唯一作為儲

16位組合語言指令整理

第一次寫部落格,有點小緊張~ 暫存器 通用暫存器 8位暫存器 16位暫存器 32位暫存器 暫存器名稱 AH,AL AX EAX 累加暫存器

64位彙編

 區別有:64位有16個暫存器,32位只有8個。但是32位前8個都有不同的命名,分別是e _ ,而64位前8個使用了r代替e,也就是r _。e開頭的暫存器命名依然可以直接運用於相應暫存器的低32位。而剩下的暫存器名則是從r8 - r15,其低位分別用d,w,b指定長度。32位使用棧幀來作為傳遞的引數的儲存位置

快取的區別

這裡的快取是指的CPU的快取。 按與CPU遠近來分,離得最近的是暫存器,然後快取,最後記憶體。 所以,暫存器是最貼近CPU的,而且CPU只與暫存器中進行存取。 (寄存的意思是,暫時存放資料,不中每次從記憶體中取,它就是一個臨時放資料的空間,火車站寄存處就是這個意思)

點運算

原連結: 浮點執行環境的暫存器主要是8個通用資料暫存器和幾個專用暫存器,它們是狀態暫存器、控制暫存器、標記暫存器等 8個浮點資料暫存器(FPU Data Register),編號FPR0 ~ FPR7。每個浮點暫存器都是80位的,以擴充套件精度格式儲存資料。當其他型別資料

組態王讀取modbusTCP裝置點數時的SWAPF設定

組態王讀取modbus裝置浮點數的時候,需要設定SWAPF暫存器,確定驅動程式怎樣排列浮點數當中的位元組順序。 位元組順序,只有0, 1, 2, 3四種取值。 例如在通訊時從0001地址讀取的四個十六進位制值為 HV1,HV2, HV3, HV4則: 當SWAP = 0時

F28335 ePWM計數模組(CC) 動作模組(AC)及其配置 ————TMS320F28335學習筆記(六)

1 計數比較模組 1.1 計數比較模組作用 計數比較模組是以時基計數器的值作為輸入,與比較暫存器CMPA和CMPB不斷進行比較的,當時基計數器的值等於其中之一時,就會產生相應的事件。 F28335就是通過對比這些值,來產生事件,與動作模組AC相配合來調節PWM的佔空比以及頻率。 補充:採

《STM32F7原理應用版上下冊》張洋高清PDF學習

暫存器版上下冊PDF全集。本套書籍以ST公司的STM32F767為目標晶片,詳細介紹了STM32F7的特點、片內外資源的使用,並輔以65個例程,由淺入深地介紹了STM32F7的使用。所有例程都經過精心編寫,從原理開始介紹,到程式碼編寫、下載驗證,一步步教讀者如何實現。所有原始碼都配有詳細註釋,且經過嚴格測試。