This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: PATCH: PR gas/10637: x86 assembler failed to handle [addr] in Intel mode


On Tue, Sep 15, 2009 at 8:58 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
> On Tue, Sep 15, 2009 at 7:09 AM, Jan Beulich <JBeulich@novell.com> wrote:
>>>>> "H.J. Lu" <hjl.tools@gmail.com> 15.09.09 15:46 >>>
>>>I will take a look.
>>>
>>>Please tell me which version masm you used. Mine doesn't
>>>take [] as immediate.
>>
>> I used 8.00.50727.42, 7.10.3077, and 7.00.9466 - which all give the
>> same result.
>>
>
> For MASM 8.00.50727.42, we got
>
>
> ? ? ?OPTION DOTNAME
> _TEXT SEGMENT ? ? ?'CODE'
> ? ? ? ALIGN ? ? 16
> ? ? ?PUBLIC f1
> f1 ? ?PROC
> ? ? ? ?mov ? ? ? eax, 1
> ? ? ? ?mov ? ? ? eax, [1]
> ? ? ? ?mov ? ? ? eax, DWORD PTR [1]
> ? ? ? ?mov ? ? ? eax, DWORD PTR 1
> ? ? ? ?ret
> ? ? ? ?ALIGN ? ? 16
> ::
> f1 ENDP
> _TEXT ENDS
> _DATA SEGMENT ? ? ?'DATA'
> _DATA ENDS
> _DATA SEGMENT ? ? ?'DATA'
> _DATA ENDS
> EXTRN __ImageBase:PROC
> ? ? ?END
>
> MASM produces this:
>
> f1:
> ?0000000000000000: B8 01 00 00 00 ? ? mov ? ? ? ? eax,1
> ?0000000000000005: 8B 04 25 01 00 00 ?mov ? ? ? ? eax,dword ptr [00000001h]
> ? ? ? ? ? ? ? ? ? ?00
> ?000000000000000C: 8B 04 25 01 00 00 ?mov ? ? ? ? eax,dword ptr [00000001h]
> ? ? ? ? ? ? ? ? ? ?00
> ?0000000000000013: B8 01 00 00 00 ? ? mov ? ? ? ? eax,1
> ?0000000000000018: C3 ? ? ? ? ? ? ? ? ret
> ?0000000000000019: 0F 1F 80 00 00 00 ?nop ? ? ? ? dword ptr [rax+00000000h]
> ? ? ? ? ? ? ? ? ? ?00
>
> It doesn't match you what you described. Can you try our test?
>

Apparently, x86-64 MASM and ia32 MASM behave differently. x86-64 MASM
treats [0x8000] as memory while ia32 MASM treats [0x8000] as immediate
value. My questions are

1. Should x86 GNU assembler treat [0x8000] the same for both 32bit and
64bit?
2. If yes, how should we treat [0x8000]?

Personally, I think we should treat [0x8000] the same. Since we have
been treating [0x8000] as memory for a long time, we should keep
treating [0x8000] as memory.

Thanks.

-- 
H.J.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]