encode_real/
encode_real.rs

1extern 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::Real); 
9
10    // mov ax, [bx+si]
11    // add ax, bx
12    // mov [bp+si], ax
13    
14    let instructions = &[
15        Instruction::new2(Mnemonic::MOV, Operand::Direct(Reg::AX), Operand::IndirectScaledIndexed(Reg::BX, Reg::SI, RegScale::One, Some(OperandSize::Word), None)), // mov ax, [bx+si]
16        Instruction::new2(Mnemonic::ADD, Operand::Direct(Reg::AX), Operand::Direct(Reg::BX)), // add ax, bx
17        Instruction::new2(Mnemonic::MOV, Operand::IndirectScaledIndexed(Reg::BX, Reg::SI, RegScale::One, Some(OperandSize::Word), None), Operand::Direct(Reg::AX)), // mov [bp+si]
18    ];
19
20    let mut bytes_written = 0;
21
22    for instr in instructions {
23        bytes_written += writer.write(instr).unwrap();
24    }
25    
26    print!("Output ({} bytes): ", bytes_written);
27    for byte in writer.get_inner_writer_ref().get_ref().iter() {
28        print!("{:02X} ", byte);
29    }
30    println!("");
31}