2011-03-19 47 views
0

我已存儲在FDIV如何在NASM使用它,組件

fstp qword [ebx] ; Copy contents of st0 to space currently on top of the system stack 

如何按存儲在寄存器EDI的整數值除以它的總和值?

我以爲那只是

fdiv edi 

但它說的無效組合....等等等等blha

見解?

回答

1

你不能。 FPU無權訪問整數寄存器。

+0

我想也許這會工作FSTP四字[EBX]; ST0的內容複製到空間目前系統堆棧 \t FLD \t四字的頂部\t [edi] \t;將edi移動到FPU上 \t fdiv \t \t \t;劃分? \t fstp \t qword \t [ebx] \t;複製結果打印出來 – John 2011-03-19 00:18:03

+0

爲什麼不只是推edi,fdiv [esp]? – 2011-03-19 04:29:10

0

正如Jens在他的回答中所述,FPU沒有任何直接訪問整數寄存器的權限。您將需要使用暫存內存進行傳輸。這是x87 FPU的主要缺點之一。示例代碼可能看起來像:

section .bss 
fpscratch: resd 1 

...

section .text 

;other code goes here 

MOV fpscratch, edi 
FILD fpscratch 
FDIV 

(在上面的代碼注意:它沒有經過測試,很明顯,我在我的組裝有點生疏所以有可能出錯了它,即使它的好和短期)

+0

我想這一點,這是行不通的,但是我是對現在的工作這段代碼,它的輸出-NAN – John 2011-03-19 04:05:56

+0

FILD \t四字[EBP + 12] \t \t FSTP四字\t [EBX]; ST0空間的內容複製當前在系統堆棧 \t的頂部; MOV \t fpscratch,EDI \t; FILD EDI \t FDIV \t FSTP qword的\t [EBX]; ST0的複製內容到空間上當前系統堆棧的頂部 – John 2011-03-19 04:06:15