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: Why aren't we consistent on displacement in x86 disassembler?


On Thu, Apr 26, 2007 at 06:57:49AM -0700, H. J. Lu wrote:
> While working on
> 
> http://sourceware.org/bugzilla/show_bug.cgi?id=4429
> 
> I noticed that we weren't consistent in the format we use on
> displacement:
> 
> ----
> static void
> print_operand_value (char *buf, int hex, bfd_vma disp)
> ...
> static void
> OP_E (int bytemode, int sizeflag)
> {
> ...
> 	    print_operand_value (scratchbuf, !riprel, disp);
> ...
> 	      print_operand_value (scratchbuf, modrm.mod != 1, disp);
> ...
> 	      print_operand_value (scratchbuf, 1, disp);
> ...
> 	    print_operand_value (scratchbuf, 0, disp);
> ...
> 	      print_operand_value (scratchbuf, modrm.mod != 1, disp);
> ...
> 	  print_operand_value (scratchbuf, 1, disp & 0xffff);
> }
> ----
> 
> That is we use hex or decimal for displacement, depending on Intel
> mode, RIP relative, modrm.mod != 1 and 16bit address mode. It is
> confusing. Are there any objections if I use hex for all displacements?

I guess that the intend was for 8bit displacement, we use decimal and
for 16/32bit displacement, we use hex. But we didn't do it correctly:

bash-3.1$ cat y.s
        mov 12(%rip), %eax
        mov 12(%r12), %eax
bash-3.1$ gcc -c y.s
bash-3.1$ objdump -d y.o

y.o:     file format elf64-x86-64

Disassembly of section .text:

0000000000000000 <.text>:
   0:   8b 05 0c 00 00 00       mov    12(%rip),%eax        # 0x12
   6:   41 8b 44 24 0c          mov    0xc(%r12),%eax

We can do one of

1. Use decimal on all 8bit displacements and hex on all 16/32bit
displacement.
2. Use hex on all displacements.

Any comments?


H.J.


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