addressing_modes/
addressing_modes.rs1extern crate x86asm;
2
3use std::io::Cursor;
4use x86asm::{Instruction, InstructionWriter, Mnemonic, Mode, Operand, OperandSize, Reg, RegScale};
5
6fn main() {
7 let buffer = Cursor::new(Vec::new());
8 let mut writer = InstructionWriter::new(buffer, Mode::Protected);
9
10 let instructions = &[
11 Instruction::new2(Mnemonic::MOV, Operand::Direct(Reg::EBX), Operand::Indirect(Reg::EAX, Some(OperandSize::Dword), None)), Instruction::new2(Mnemonic::MOV, Operand::Direct(Reg::EBX), Operand::IndirectDisplaced(Reg::EAX, 5, Some(OperandSize::Dword), None)), Instruction::new2(Mnemonic::MOV, Operand::Direct(Reg::EBX), Operand::IndirectScaledIndexed(Reg::EAX, Reg::ECX, RegScale::Two, Some(OperandSize::Dword), None)), Instruction::new2(Mnemonic::MOV, Operand::Direct(Reg::EBX), Operand::IndirectScaledIndexedDisplaced(Reg::EAX, Reg::ECX, RegScale::Two, 5, Some(OperandSize::Dword), None)), Instruction::new2(Mnemonic::MOV, Operand::Direct(Reg::EBX), Operand::Memory(5, Some(OperandSize::Dword), None)), ];
17
18 let mut bytes_written = 0;
19
20 for instr in instructions {
21 bytes_written += writer.write(instr).unwrap();
22 }
23
24 print!("Output ({} bytes): ", bytes_written);
25 for byte in writer.get_inner_writer_ref().get_ref().iter() {
26 print!("{:02X} ", byte);
27 }
28 println!("");
29}