2013-01-23 36 views
0

,當我嘗試編譯movd指令它顯示誤差我不能編譯MOVD(8086)指令在我的Visual C明示ediion 2008

error A2085:instruction or register not accepted in current CPU mode 

我的代碼如下:

.386     
.model flat, c           
.code 

add_func_asm PROC             
movd  eax, ebx 
ret  
add_func_asm endp 

END 

這是.asm文件,我通過使用下面的代碼

稱爲從 C文件

我固定它這個功能

.586  
.mmx    
.model flat, c           
.code       
add_func_asm PROC             
movd  mm1, ebx 
ret  
add_func_asm endp 

END 
+0

顯示一些代碼,請 –

+0

向我們展示一個小程序,演示這個問題。編輯您的問題以包含代碼。 –

+0

非常好。這是一個.ASM文件還是一個.C文件? –

回答

2
.386 

這是行不通的,386處理器沒有這個指令。您必須以.586(奔騰及以上)爲目標,並明確聲明您要使用MMX指令集。修復:

.586 
.mmx 

這將使彙編程序接受MOVD指令。接下來你需要做的是修復操作數。從ebx移到eax是無效的,毫無意義的,你必須指定一個MMx寄存器。

+0

感謝Hans Passant,這真的很有幫助 – user2004149

1

MOVD和MOVQ是MMX指令,因此您需要使用.MMX(或.XMM)指令來啓用指令集。

+0

我試過了,但沒有用 – user2004149

0

嘗試mov eax, ebx代替移動32位。

相關問題