pub trait ReadOperand: Read + ReadDataValue {
// Provided method
fn read_operand(
&mut self,
access: AccessType,
size: DataType,
) -> Result<Operand> { ... }
}
Expand description
Extends Read
with a method to read a VAX operand (Operand
).
§Examples
use vax_disassembler::opcode::{AccessType, DataType, DataValue};
use vax_disassembler::operand::{Operand, ReadOperand};
use std::io::Cursor;
assert_eq!(Cursor::new([30]).read_operand(AccessType::Branch, DataType::Byte).unwrap(),
Operand::Branch(DataValue::Byte(30)));
for quadword in (i64::MIN..=i64::MAX).step_by(u64::MAX as usize / 241) {
let mut buffer = [0u8; 9];
buffer[0] = 0x8F; // Immediate
buffer[1..].copy_from_slice(&quadword.to_le_bytes());
let mut reader = Cursor::new(buffer);
let data_value = reader.read_operand(AccessType::Read, DataType::Quadword).unwrap();
assert_eq!(data_value, Operand::Immediate(DataValue::Quadword(quadword)));
}
Provided Methods§
Sourcefn read_operand(
&mut self,
access: AccessType,
size: DataType,
) -> Result<Operand>
fn read_operand( &mut self, access: AccessType, size: DataType, ) -> Result<Operand>
Read in a MACRO32
operand from a reader.
§Examples
use vax_disassembler::operand::{Operand, ReadOperand, Register};
use vax_disassembler::opcode::{AccessType, DataType};
use std::io::Read;
for byte_branch in i8::MIN..=i8::MAX {
let mut reader = std::io::Cursor::new([byte_branch as u8]);
let output = reader.read_operand(AccessType::Branch, DataType::Byte).unwrap();
}
for literal in 0_u8..=63 {
let mut reader = std::io::Cursor::new([literal]);
let output = reader.read_operand(AccessType::Read, DataType::Byte).unwrap();
assert_eq!(Operand::Literal(literal), output);
}
for reg in 0x50..=0x5E {
let mut reader = std::io::Cursor::new([reg]);
let output = reader.read_operand(AccessType::Read, DataType::Word).unwrap();
assert_eq!(Operand::Register(Register::from(reg)), output);
}
Implementors§
impl<R: Read + ?Sized> ReadOperand for R
All types that implement Read
get methods defined in ReadMacro32
for free.