2014-03-19 56 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命令。 –