2014-03-19 86 views
-2

我試圖找到86 float數組的少了兩個數字,但我不知道如何來存儲數組的元素管理對x86彙編浮標陣

要訪問一個整數我用:

mov eax, 0   ; eax is a counter 

mov ecx, vector  ; This store the vector on the register ecx 
mov esi, [ecx+4*eax] ; Stores the position eax of the vecor on esi 

這個工作與一個整數數組,但不是與浮動,我不知道該怎麼做。我查了一下把8而不是4個,但它不工作

編輯:當我說這是行不通的,我的意思是值不正確readed,存儲在

ESI is 1099956224 that is not correct 

數謝謝!

+2

你必須詳細說明「它不起作用」。他們來自哪裏,你在做什麼?請注意,在x86中,浮點值通常不存儲在通用寄存器中,而是存儲在FPU寄存器/堆棧中。 – TypeIA

+0

看看SSE指令/寄存器... – Macmade

+0

ESI中有什麼? –

回答

0

您只能比較浮點數,如果它們在浮點寄存器中。試圖將內存中的浮點數解釋爲整數是毫無意義的。

閱讀x86中的浮點支持。這是一個完全不同的指令集;歷史上,它曾經由一個單獨的芯片處理,一個87型號。特別是要從內存中加載浮點數,使用FLD命令來比較 - FCOM *,以有條件地分配--FCMOV。另外,請記住浮點子系統的stack-y特性。

編輯:或者,您可以使用SSE標量指令。在現代CPU上,它可能比傳統的x87指令執行得更好。使用MOVSS從內存中加載浮點數並在XMM寄存器之間複製,使用COMISS比較和設置EFLAGS。最後,正如Aki指出的那樣,以IEEE-754格式漂浮按照字典順序排列;在兩個有效的浮點數中,較大的浮點數的位模式也代表較大的整數。在現實生活中,這是你可以利用的東西。

+1

除符號位和NaN外,浮點數可作爲整數進行有效比較。 –

+0

沒錯,但我認爲這項任務的重點是讓他們學習FPU命令。 –