Files
8086-rs/src/disasm_macros.rs

29 lines
1.0 KiB
Rust

//! Some macros to help with disassembly parsing.
#[macro_export]
/// Generate a Mnemonic for an 8-bit Register from a ModRM byte.
macro_rules! modrm_8b_register {
($self:ident, $variant:ident) => {{
let (target, reg) = $self.parse_modrm_byte(ImmediateOperand::Byte(0))?;
Mnemonic::$variant(target, Register::by_id(ImmediateOperand::Byte(reg))?)
}};
}
#[macro_export]
/// Generate a Mnemonic for a 16-bit Register from a ModRM byte.
macro_rules! modrm_16b_register {
($self:ident, $variant:ident) => {{
let (target, reg) = $self.parse_modrm_byte(ImmediateOperand::Word(0))?;
Mnemonic::$variant(target, Register::by_id(ImmediateOperand::Word(reg.into()))?)
}};
}
#[macro_export]
/// Generate a Mnemonic for a 16-bit Segment Register from a ModRM byte.
macro_rules! modrm_sregister {
($self:ident, $variant:ident) => {{
let (target, reg) = $self.parse_modrm_byte(ImmediateOperand::Word(0))?;
Mnemonic::$variant(target, SegmentRegister::by_id(reg)?)
}};
}