diff options
| author | iximeow <me@iximeow.net> | 2019-03-30 15:27:25 -0700 | 
|---|---|---|
| committer | iximeow <me@iximeow.net> | 2020-01-12 16:10:13 -0800 | 
| commit | 9ca5adc847098d6f74f49707b94ed0df23626c18 (patch) | |
| tree | dfc71dc49c4b93e95585b05680fd5832f3c290e1 /src | |
| parent | 53d8bbd02980da9558fd972065491af836a136ee (diff) | |
fix incorrect sign tests and decode oddities
Diffstat (limited to 'src')
| -rw-r--r-- | src/display.rs | 2 | ||||
| -rw-r--r-- | src/lib.rs | 13 | 
2 files changed, 12 insertions, 3 deletions
| diff --git a/src/display.rs b/src/display.rs index daa2c34..6846174 100644 --- a/src/display.rs +++ b/src/display.rs @@ -162,7 +162,7 @@ impl <T: std::fmt::Write> Colorize<T> for Operand {                      colors.register(base),                      colors.register(index),                      colors.number(scale), -                    colors.number(format!("{:#x}", scale)) +                    colors.number(format!("{:#x}", disp))                  )              },              &Operand::Nothing => { Ok(()) }, @@ -1342,9 +1342,18 @@ fn read_E<T: Iterator<Item=u8>>(bytes_iter: &mut T, prefixes: &Prefixes, m: u8,              } else {                  let index_reg = RegSpec::gp_from_parts(index, prefixes.rex().x(), addr_width, prefixes.rex().present());                  if disp == 0 { -                    *result = Operand::RegIndexBaseScale(base_reg, index_reg, 1u8 << ss); +                    if ss == 0 { +                        *result = Operand::RegIndexBase(base_reg, index_reg) +                    } else { +                        *result = Operand::RegIndexBaseScale(base_reg, index_reg, 1u8 << ss); +                    }                  } else { -                    *result = Operand::RegIndexBaseScaleDisp(base_reg, index_reg, 1u8 << ss, disp as i32); +                    if ss == 0 { + +                        *result = Operand::RegIndexBaseDisp(base_reg, index_reg, disp as i32); +                    } else { +                        *result = Operand::RegIndexBaseScaleDisp(base_reg, index_reg, 1u8 << ss, disp as i32); +                    }                  }              }          } | 
