Howdy.
I'm using MASM v 6.14, and I'm feeding it a code file with .586 specified at the top for the CPU mode (along with .mmx and .xmm a bit further down), and repeated instances of this line of code:
cmovnz eax, edx
For every instance it then complains with
IO.asm(163) : error A2085: instruction or register not accepted in current CPU mode
as for the first instance of that line of code. Can somebody explain why?
Try to use .686 because cmovxx instruction is new.
...or try to use newer MASM. MASM 8.2 is the latest available:
http://www.masm32.com/masmdl.htm
Don't forget to download the Service Pack 2 as well. (it is at the bottom of the page)
May I have a question too? Can you give a simple tip where to look for these cxxx type 585 instructions? Maybe in intels manuals?
Greets, Gábor
CMOVcc instructions were really introduced in Pentium Pro, what means 686 in MASM.
Gábor,
MASM32 package always contains ML version 6.14, regardless of the package version.
For me, the best reference is always Intel Instruction Set Manual.
Sorry for my misinformation. I never use that instruction.
Thanks for the info. I thought I had seen a sample program though with the .586 directive and use of the cmovxx instructions in it. That's what got me thinking that it should be supported under that mode, although indeed, there wasn't that much need for those instructions in regular Pentiums. It was the 12-stage pipelines and the need to flush and refill them on mispredicted conditional jumps that established a real need for the cmovxx instructions, as a matter of optimization, to avoid having to do that slow flushing and refilling. (Oh, why don't those Intel people just make an overbloated 10,000-stage 10,000-pipeline 4-billion-instruction VLISC (Very Long Instruction Set Computing) processor already that's actually slower than their original 486? They could attract herds of ignorant investors just by sticking in there single-instruction hardware acceleration for even all the most obscure and pointless algorithms. They're already headed in that direction anyway!) That's good information to have 'cause it should spare some frustration. But anyway, would anybody happen to know where there's more up-to-date documentation for MASM? How is it that some people there happen to know about the .586, .586P, etc. directives, and a whole lot of other information not in the MASM32 Help program? Is Microsoft publishing this information somewhere? Can it be found on Microsoft's websites somewhere?
Microsoft Macro Assembler Reference (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmasm/html/vcoriMicrosoftAssemblerMacroLanguage.asp)