29 lines
1.0 KiB
Rust
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)?)
|
|
}};
|
|
}
|