* m68hc11-dis.c (print_insn): Fix disassembly of movb with a
constant as source.
This commit is contained in:
parent
86c76c7be0
commit
64e38312bc
2 changed files with 38 additions and 9 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
2001-11-01 Stephane Carrez <Stephane.Carrez@worldnet.fr>
|
||||||
|
|
||||||
|
* m68hc11-dis.c (print_insn): Fix disassembly of movb with a
|
||||||
|
constant as source.
|
||||||
|
|
||||||
2001-10-30 Hans-Peter Nilsson <hp@bitrange.com>
|
2001-10-30 Hans-Peter Nilsson <hp@bitrange.com>
|
||||||
|
|
||||||
* Makefile.am (CFILES): Add mmix-dis.c and mmix-opc.c. Regenerate
|
* Makefile.am (CFILES): Add mmix-dis.c and mmix-opc.c. Regenerate
|
||||||
|
|
|
@ -366,14 +366,35 @@ print_insn (memaddr, info, arch)
|
||||||
(*info->fprintf_func) (info->stream, "\t");
|
(*info->fprintf_func) (info->stream, "\t");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The movb and movw must be handled in a special way... */
|
/* The movb and movw must be handled in a special way...
|
||||||
offset = 0;
|
The source constant 'ii' is not always at the same place.
|
||||||
if (format & (M6812_OP_IDX_P2 | M6812_OP_IND16_P2))
|
This is the same for the destination for the post-indexed byte.
|
||||||
{
|
The 'offset' is used to do the appropriate correction.
|
||||||
if ((format & M6812_OP_IDX_P2)
|
|
||||||
&& (format & (M6811_OP_IMM8 | M6811_OP_IMM16 | M6811_OP_IND16)))
|
offset offset
|
||||||
offset = 1;
|
for constant for destination
|
||||||
}
|
movb 18 OB ii hh ll 0 0
|
||||||
|
18 08 xb ii 1 -1
|
||||||
|
18 0C hh ll hh ll 0 0
|
||||||
|
18 09 xb hh ll 1 -1
|
||||||
|
18 0D xb hh ll 0 0
|
||||||
|
18 0A xb xb 0 0
|
||||||
|
|
||||||
|
movw 18 03 jj kk hh ll 0 0
|
||||||
|
18 00 xb jj kk 1 -1
|
||||||
|
18 04 hh ll hh ll 0 0
|
||||||
|
18 01 xb hh ll 1 -1
|
||||||
|
18 05 xb hh ll 0 0
|
||||||
|
18 02 xb xb 0 0
|
||||||
|
|
||||||
|
After the source operand is read, the position 'pos' is incremented
|
||||||
|
this explains the negative offset for destination.
|
||||||
|
|
||||||
|
movb/movw above are the only instructions with this matching
|
||||||
|
format. */
|
||||||
|
offset = ((format & M6812_OP_IDX_P2)
|
||||||
|
&& (format & (M6811_OP_IMM8 | M6811_OP_IMM16 |
|
||||||
|
M6811_OP_IND16)));
|
||||||
|
|
||||||
/* Operand with one more byte: - immediate, offset,
|
/* Operand with one more byte: - immediate, offset,
|
||||||
direct-low address. */
|
direct-low address. */
|
||||||
|
@ -387,7 +408,10 @@ print_insn (memaddr, info, arch)
|
||||||
}
|
}
|
||||||
|
|
||||||
pos++;
|
pos++;
|
||||||
offset = -1;
|
|
||||||
|
/* This movb/movw is special (see above). */
|
||||||
|
offset = -offset;
|
||||||
|
|
||||||
if (format & M6811_OP_IMM8)
|
if (format & M6811_OP_IMM8)
|
||||||
{
|
{
|
||||||
(*info->fprintf_func) (info->stream, "#%d", (int) buffer[0]);
|
(*info->fprintf_func) (info->stream, "#%d", (int) buffer[0]);
|
||||||
|
|
Loading…
Reference in a new issue