Trait ReadOperand

Source
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§

Source

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§

Source§

impl<R: Read + ?Sized> ReadOperand for R

All types that implement Read get methods defined in ReadMacro32 for free.