News:

Masm32 SDK description, downloads and other helpful links
Message to All Guests
NB: Posting URL's See here: Posted URL Change

Main Menu

error A2005:symbol redefinition : movbe

Started by frktons, December 05, 2012, 08:37:42 AM

Previous topic - Next topic

frktons

In one of my routines I'm trying to use MOVBE
but MASM complains.

The two instructions where I use it are:

            movbe dword ptr [ebx], edx
            movbe dword ptr [eax], edi


and another strange error in REPEAT/ENDM [I think]:
Quote
Microsoft (R) Macro Assembler Version 10.00.30319.01
Copyright (C) Microsoft Corporation.  All rights reserved.

Assembling: F:\Esempi_PGM\Assembly\TestReverse2.asm
F:\Esempi_PGM\Assembly\TestReverse2.asm(187) : error A2005:symbol redefinition : movbe
MacroLoop(50): teration 1: Macro Called From
  F:\Esempi_PGM\Assembly\TestReverse2.asm(187): Main Line Code
F:\Esempi_PGM\Assembly\TestReverse2.asm(187) : error A2005:symbol redefinition : movbe
MacroLoop(49): teration 2: Macro Called From
  F:\Esempi_PGM\Assembly\TestReverse2.asm(187): Main Line Code
F:\Esempi_PGM\Assembly\TestReverse2.asm(187) : error A2005:symbol redefinition : movbe
MacroLoop(50): teration 2: Macro Called From
  F:\Esempi_PGM\Assembly\TestReverse2.asm(187): Main Line Code
F:\Esempi_PGM\Assembly\TestReverse2.asm(188) : error A2016:expression expected
MacroLoop(49): teration 1: Macro Called From
  F:\Esempi_PGM\Assembly\TestReverse2.asm(188): Main Line Code
F:\Esempi_PGM\Assembly\TestReverse2.asm(188) : error A2138:invalid data initializer
MacroLoop(49): teration 1: Macro Called From
  F:\Esempi_PGM\Assembly\TestReverse2.asm(188): Main Line Code
_
Assembly Error

If I change:

            movbe dword ptr [ebx], edx
            movbe dword ptr [eax], edi


with


            movbe [ebx], edx
            movbe [eax], edi


The first error goes away, but the second stays put.  ::)

What could it be.
Attached the complete prog.
There are only two days a year when you can't do anything: one is called yesterday, the other is called tomorrow, so today is the right day to love, believe, do and, above all, live.

Dalai Lama

qWord

movbe means CMOVBE? The conditional moves  can only have a register as destination (See the manuals!!!).
MREAL macros - when you need floating point arithmetic while assembling!

frktons

Quote from: qWord on December 05, 2012, 08:50:31 AM
movbe means CMOVBE? The conditional moves  can only have a register as destination (See the manuals!!!).
Intel says:
Quote
Performs a byte swap operation on the data copied from the second operand (source
operand) and store the result in the first operand (destination operand). The source
operand can be a general-purpose register, or memory location; the destination
register can be a general-purpose register, or a memory location; however, both
operands can not be registers, and only one operand can be a memory location. Both
operands must be the same size, which can be a word, a doubleword or quadword.
The MOVBE instruction is provided for swapping the bytes on a read from memory or
on a write to memory; thus providing support for converting little-endian values to
big-endian format and vice versa.
It is not a conditional move, if I understand correctly.
There are only two days a year when you can't do anything: one is called yesterday, the other is called tomorrow, so today is the right day to love, believe, do and, above all, live.

Dalai Lama

hutch--

Frank,

Two things, does your processor support that opcode AND does the MASM version you are using support that opcode ?

qWord

A quick search shows that this instruction is only suppored by Intel's Atom processors. Maybe not that usfull for common code.

http://software.intel.com/en-us/articles/disable-movbe-to-test-intel-atom-targeted-code-on-non-atom-platforms/

Later: the replacemnt is simply :
mov reg,data
bswap reg
mov dest,reg

Strange that they introduce a new instruction for that...
MREAL macros - when you need floating point arithmetic while assembling!

frktons

Quote from: hutch-- on December 05, 2012, 09:11:09 AM
Frank,

Two things, does your processor support that opcode AND does the MASM version you are using support that opcode ?

Steve,

probably my CPU doesn't, and the same for MASM , it complains.

Quote from: qWord on December 05, 2012, 09:13:28 AM
A quick search shows that this instruction is only suppored by Intel's Atom processors. Maybe not that usfull for common code.

http://software.intel.com/en-us/articles/disable-movbe-to-test-intel-atom-targeted-code-on-non-atom-platforms/

Later: the replacemnt is simply :
mov reg,data
bswap reg
mov dest,reg

Strange that they introduce a new instruction for that...

Thanks qWord, I thought the manuals were for all x86 CPUs.
I discovered it by chance and I was curious about its performance.



There are only two days a year when you can't do anything: one is called yesterday, the other is called tomorrow, so today is the right day to love, believe, do and, above all, live.

Dalai Lama

qWord

Quote from: frktons on December 05, 2012, 09:26:40 AMprobably my CPU doesn't, and the same for MASM , it complains.
ML version 11 support that instruction.
MREAL macros - when you need floating point arithmetic while assembling!

frktons

Quote from: qWord on December 05, 2012, 09:38:28 AM
Quote from: frktons on December 05, 2012, 09:26:40 AMprobably my CPU doesn't, and the same for MASM , it complains.
ML version 11 support that instruction.

Good to know. If I'll have an Atom CPU I'll use it.
There are only two days a year when you can't do anything: one is called yesterday, the other is called tomorrow, so today is the right day to love, believe, do and, above all, live.

Dalai Lama