From d308de119c81d611ea655340637b3d348011f9c6 Mon Sep 17 00:00:00 2001 From: "H. Peter Anvin" Date: Sun, 2 Jun 2002 05:35:05 +0000 Subject: [PATCH] Make the disassembler correctly handle the new \34-\36 and \44-\46 codes. --- disasm.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/disasm.c b/disasm.c index acc6e3f8..f9934273 100644 --- a/disasm.c +++ b/disasm.c @@ -334,7 +334,7 @@ static int matches (struct itemplate *t, unsigned char *data, int asize, if (c >= 034 && c <= 036) { ins->oprs[c-034].offset = *data++; ins->oprs[c-034].offset |= (*data++ << 8); - if (asize == 32) { + if (osize == 32) { ins->oprs[c-034].offset |= (((long) *data++) << 16); ins->oprs[c-034].offset |= (((long) *data++) << 24); } @@ -347,6 +347,16 @@ static int matches (struct itemplate *t, unsigned char *data, int asize, ins->oprs[c-040].offset |= (((long) *data++) << 16); ins->oprs[c-040].offset |= (((long) *data++) << 24); } + if (c >= 044 && c <= 046) { + ins->oprs[c-044].offset = *data++; + ins->oprs[c-044].offset |= (*data++ << 8); + if (asize == 32) { + ins->oprs[c-044].offset |= (((long) *data++) << 16); + ins->oprs[c-044].offset |= (((long) *data++) << 24); + } + if (segsize != asize) + ins->oprs[c-044].addr_size = asize; + } if (c >= 050 && c <= 052) { ins->oprs[c-050].offset = (signed char) *data++; ins->oprs[c-050].segment |= SEG_RELATIVE;