use crate::*;
#[test]
fn test_rcl_al_1_cf_clear() {
let code = [
0xd0, 0xd0, 0xf4, ];
let mut emu = emu64();
emu.regs_mut().rax = 0x42; emu.load_code_bytes(&code);
emu.flags_mut().load(0x2);
emu.run(None).unwrap();
assert_eq!(emu.regs().rax & 0xFF, 0x84, "AL: 0x42 RCL 1 (CF=0) = 0x84");
assert!(!emu.flags().f_cf, "CF: receives MSB (was 0)");
}
#[test]
fn test_rcl_al_1_cf_set() {
let code = [
0xd0, 0xd0, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().rax = 0x42; emu.load_code_bytes(&code);
emu.flags_mut().load(0x2 | (1 << flags::F_CF));
emu.run(None).unwrap();
assert_eq!(emu.regs().rax & 0xFF, 0x85, "AL: 0x42 RCL 1 (CF=1) = 0x85");
assert!(!emu.flags().f_cf, "CF: receives MSB (was 0)");
}
#[test]
fn test_rcl_al_1_with_msb() {
let code = [
0xd0, 0xd0, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().rax = 0x81; emu.load_code_bytes(&code);
emu.flags_mut().load(0x2);
emu.run(None).unwrap();
assert_eq!(emu.regs().rax & 0xFF, 0x02, "AL: 0x81 RCL 1 (CF=0) = 0x02");
assert!(emu.flags().f_cf, "CF: receives MSB (was 1)");
}
#[test]
fn test_rcl_al_1_msb_and_cf() {
let code = [
0xd0, 0xd0, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().rax = 0x81; emu.load_code_bytes(&code);
emu.flags_mut().load(0x2 | (1 << flags::F_CF));
emu.run(None).unwrap();
assert_eq!(emu.regs().rax & 0xFF, 0x03, "AL: 0x81 RCL 1 (CF=1) = 0x03");
assert!(emu.flags().f_cf, "CF: receives MSB (was 1)");
}
#[test]
fn test_rcl_al_cl() {
let code = [
0xd2, 0xd0, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().rax = 0x01; emu.regs_mut().rcx = 0x04; emu.load_code_bytes(&code);
emu.flags_mut().load(0x2 | (1 << flags::F_CF));
emu.run(None).unwrap();
assert_eq!(emu.regs().rax & 0xFF, 0x18, "AL: 0x01 RCL 4 (CF=1) = 0x18");
}
#[test]
fn test_rcl_al_imm8() {
let code = [
0xc0, 0xd0, 0x03, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().rax = 0x11; emu.load_code_bytes(&code);
emu.flags_mut().load(0x2);
emu.run(None).unwrap();
assert_eq!(emu.regs().rax & 0xFF, 0x88, "AL: 0x11 RCL 3 (CF=0) = 0x88");
}
#[test]
fn test_rcl_full_rotation_9bit() {
let code = [
0xc0, 0xd0, 0x09, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().rax = 0x42;
emu.load_code_bytes(&code);
emu.flags_mut().load(0x2);
emu.run(None).unwrap();
assert_eq!(emu.regs().rax & 0xFF, 0x42, "AL: full 9-bit rotation returns to original");
assert!(!emu.flags().f_cf, "CF: also returns to original");
}
#[test]
fn test_rcl_count_zero_preserves_flags() {
let code = [
0xc0, 0xd0, 0x00, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().rax = 0x42;
emu.load_code_bytes(&code);
emu.flags_mut().load(0x2 | (1 << flags::F_CF) | (1 << flags::F_ZF) | (1 << flags::F_OF));
let initial_flags = emu.flags().dump();
emu.run(None).unwrap();
assert_eq!(emu.regs().rax & 0xFF, 0x42, "AL: unchanged");
assert_eq!(emu.flags().dump() & (flags::F_CF | flags::F_ZF | flags::F_OF),
initial_flags & (flags::F_CF | flags::F_ZF | flags::F_OF),
"Flags preserved");
}
#[test]
fn test_rcl_bl() {
let code = [
0xd0, 0xd3, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().rbx = 0xC5; emu.load_code_bytes(&code);
emu.flags_mut().load(0x2);
emu.run(None).unwrap();
assert_eq!(emu.regs().rbx & 0xFF, 0x8A, "BL: 0xC5 RCL 1 (CF=0) = 0x8A");
assert!(emu.flags().f_cf, "CF: MSB was 1");
}
#[test]
fn test_rcl_cl_reg() {
let code = [
0xc0, 0xd1, 0x02, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().rcx = 0x33; emu.load_code_bytes(&code);
emu.flags_mut().load(0x2 | (1 << flags::F_CF));
emu.run(None).unwrap();
assert_eq!(emu.regs().rcx & 0xFF, 0xCE, "CL: 0x33 RCL 2 (CF=1) = 0xCE");
}
#[test]
fn test_rcl_dl() {
let code = [
0xd2, 0xd2, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().rdx = 0x0F;
emu.regs_mut().rcx = 0x04;
emu.load_code_bytes(&code);
emu.flags_mut().load(0x2);
emu.run(None).unwrap();
assert_eq!(emu.regs().rdx & 0xFF, 0xF0, "DL: 0x0F RCL 4 (CF=0) = 0xF0");
}
#[test]
fn test_rcl_ax_1() {
let code = [
0x66, 0xd1, 0xd0, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().rax = 0x4321;
emu.load_code_bytes(&code);
emu.flags_mut().load(0x2);
emu.run(None).unwrap();
assert_eq!(emu.regs().rax & 0xFFFF, 0x8642, "AX: 0x4321 RCL 1 (CF=0) = 0x8642");
assert!(!emu.flags().f_cf, "CF: MSB was 0");
}
#[test]
fn test_rcl_ax_1_cf_set() {
let code = [
0x66, 0xd1, 0xd0, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().rax = 0x4321;
emu.load_code_bytes(&code);
emu.flags_mut().load(0x2 | (1 << flags::F_CF));
emu.run(None).unwrap();
assert_eq!(emu.regs().rax & 0xFFFF, 0x8643, "AX: 0x4321 RCL 1 (CF=1) = 0x8643");
assert!(!emu.flags().f_cf, "CF: MSB was 0");
}
#[test]
fn test_rcl_ax_cl() {
let code = [
0x66, 0xd3, 0xd0, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().rax = 0x1234;
emu.regs_mut().rcx = 0x04;
emu.load_code_bytes(&code);
emu.flags_mut().load(0x2);
emu.run(None).unwrap();
assert_eq!(emu.regs().rax & 0xFFFF, 0x2340, "AX: 0x1234 RCL 4 (CF=0) = 0x2340");
}
#[test]
fn test_rcl_ax_imm8() {
let code = [
0x66, 0xc1, 0xd0, 0x08, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().rax = 0x1234;
emu.load_code_bytes(&code);
emu.flags_mut().load(0x2);
emu.run(None).unwrap();
assert_eq!(emu.regs().rax & 0xFFFF, 0x3409, "AX: 0x1234 RCL 8 (CF=0) = 0x3409");
}
#[test]
fn test_rcl_ax_full_rotation() {
let code = [
0x66, 0xc1, 0xd0, 0x11, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().rax = 0x1234;
emu.load_code_bytes(&code);
emu.flags_mut().load(0x2);
emu.run(None).unwrap();
assert_eq!(emu.regs().rax & 0xFFFF, 0x1234, "AX: full 17-bit rotation returns to original");
}
#[test]
fn test_rcl_bx() {
let code = [
0x66, 0xd1, 0xd3, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().rbx = 0x8000;
emu.load_code_bytes(&code);
emu.flags_mut().load(0x2 | (1 << flags::F_CF));
emu.run(None).unwrap();
assert_eq!(emu.regs().rbx & 0xFFFF, 0x0001, "BX: 0x8000 RCL 1 (CF=1) = 0x0001");
assert!(emu.flags().f_cf, "CF: MSB was 1");
}
#[test]
fn test_rcl_cx() {
let code = [
0x66, 0xc1, 0xd1, 0x04, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().rcx = 0xABCD;
emu.load_code_bytes(&code);
emu.flags_mut().load(0x2);
emu.run(None).unwrap();
assert_eq!(emu.regs().rcx & 0xFFFF, 0xBCD5, "CX: 0xABCD RCL 4 (CF=0) = 0xBCD5");
}
#[test]
fn test_rcl_dx_cl() {
let code = [
0x66, 0xd3, 0xd2, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().rdx = 0x00FF;
emu.regs_mut().rcx = 0x08;
emu.load_code_bytes(&code);
emu.flags_mut().load(0x2);
emu.run(None).unwrap();
assert_eq!(emu.regs().rdx & 0xFFFF, 0xFF00, "DX: 0x00FF RCL 8 (CF=0) = 0xFF00");
}
#[test]
fn test_rcl_eax_1() {
let code = [
0xd1, 0xd0, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().rax = 0x43218765;
emu.load_code_bytes(&code);
emu.flags_mut().load(0x2);
emu.run(None).unwrap();
assert_eq!(emu.regs().rax & 0xFFFFFFFF, 0x86430ECA, "EAX: 0x43218765 RCL 1 (CF=0) = 0x86430ECA");
}
#[test]
fn test_rcl_eax_1_cf_set() {
let code = [
0xd1, 0xd0, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().rax = 0x43218765;
emu.load_code_bytes(&code);
emu.flags_mut().load(0x2 | (1 << flags::F_CF));
emu.run(None).unwrap();
assert_eq!(emu.regs().rax & 0xFFFFFFFF, 0x86430ECB, "EAX: 0x43218765 RCL 1 (CF=1) = 0x86430ECB");
}
#[test]
fn test_rcl_eax_cl() {
let code = [
0xd3, 0xd0, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().rax = 0x12345678;
emu.regs_mut().rcx = 0x08;
emu.load_code_bytes(&code);
emu.flags_mut().load(0x2);
emu.run(None).unwrap();
assert_eq!(emu.regs().rax & 0xFFFFFFFF, 0x34567809, "EAX: 0x12345678 RCL 8 (CF=0) = 0x34567809");
}
#[test]
fn test_rcl_eax_imm8() {
let code = [
0xc1, 0xd0, 0x10, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().rax = 0x12345678;
emu.load_code_bytes(&code);
emu.flags_mut().load(0x2);
emu.run(None).unwrap();
assert_eq!(emu.regs().rax & 0xFFFFFFFF, 0x5678091A, "EAX: 0x12345678 RCL 16 (CF=0) = 0x5678091A");
}
#[test]
fn test_rcl_eax_full_rotation() {
let code = [
0xc1, 0xd0, 0x21, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().rax = 0x12345678;
emu.load_code_bytes(&code);
emu.flags_mut().load(0x2);
emu.run(None).unwrap();
assert_eq!(emu.regs().rax & 0xFFFFFFFF, 0x2468ACF0, "EAX: RCL 33 (masked to 1) = 0x2468ACF0");
}
#[test]
fn test_rcl_ebx() {
let code = [
0xd1, 0xd3, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().rbx = 0x80000000;
emu.load_code_bytes(&code);
emu.flags_mut().load(0x2);
emu.run(None).unwrap();
assert_eq!(emu.regs().rbx & 0xFFFFFFFF, 0x00000000, "EBX: 0x80000000 RCL 1 (CF=0) = 0x00000000");
assert!(emu.flags().f_cf, "CF: MSB was 1");
}
#[test]
fn test_rcl_ecx() {
let code = [
0xc1, 0xd1, 0x04, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().rcx = 0xABCDEF01;
emu.load_code_bytes(&code);
emu.flags_mut().load(0x2);
emu.run(None).unwrap();
assert_eq!(emu.regs().rcx & 0xFFFFFFFF, 0xBCDEF015, "ECX: 0xABCDEF01 RCL 4 (CF=0) = 0xBCDEF015");
}
#[test]
fn test_rcl_edx_cl() {
let code = [
0xd3, 0xd2, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().rdx = 0x000000FF;
emu.regs_mut().rcx = 0x18; emu.load_code_bytes(&code);
emu.flags_mut().load(0x2);
emu.run(None).unwrap();
assert_eq!(emu.regs().rdx & 0xFFFFFFFF, 0xFF000000, "EDX: 0x000000FF RCL 24 (CF=0) = 0xFF000000");
}
#[test]
fn test_rcl_esi() {
let code = [
0xd1, 0xd6, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().rsi = 0x40000000;
emu.load_code_bytes(&code);
emu.flags_mut().load(0x2 | (1 << flags::F_CF));
emu.run(None).unwrap();
assert_eq!(emu.regs().rsi & 0xFFFFFFFF, 0x80000001, "ESI: 0x40000000 RCL 1 (CF=1) = 0x80000001");
}
#[test]
fn test_rcl_edi() {
let code = [
0xc1, 0xd7, 0x0C, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().rdi = 0x12345678;
emu.load_code_bytes(&code);
emu.flags_mut().load(0x2);
emu.run(None).unwrap();
assert_eq!(emu.regs().rdi & 0xFFFFFFFF, 0x45678091, "EDI: 0x12345678 RCL 12 (CF=0) = 0x45678091");
}
#[test]
fn test_rcl_rax_1() {
let code = [
0x48, 0xd1, 0xd0, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().rax = 0x4321876543218765;
emu.load_code_bytes(&code);
emu.flags_mut().load(0x2);
emu.run(None).unwrap();
assert_eq!(emu.regs().rax, 0x86430ECA86430ECA, "RAX: RCL 1 (CF=0)");
}
#[test]
fn test_rcl_rax_1_cf_set() {
let code = [
0x48, 0xd1, 0xd0, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().rax = 0x4321876543218765;
emu.load_code_bytes(&code);
emu.flags_mut().load(0x2 | (1 << flags::F_CF));
emu.run(None).unwrap();
assert_eq!(emu.regs().rax, 0x86430ECA86430ECB, "RAX: RCL 1 (CF=1)");
}
#[test]
fn test_rcl_rax_cl() {
let code = [
0x48, 0xd3, 0xd0, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().rax = 0x123456789ABCDEF0;
emu.regs_mut().rcx = 0x08;
emu.load_code_bytes(&code);
emu.flags_mut().load(0x2);
emu.run(None).unwrap();
assert_eq!(emu.regs().rax, 0x3456789ABCDEF009, "RAX: 0x123456789ABCDEF0 RCL 8 (CF=0)");
}
#[test]
fn test_rcl_rax_imm8() {
let code = [
0x48, 0xc1, 0xd0, 0x10, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().rax = 0x123456789ABCDEF0;
emu.load_code_bytes(&code);
emu.flags_mut().load(0x2);
emu.run(None).unwrap();
assert_eq!(emu.regs().rax, 0x56789ABCDEF0091A, "RAX: 0x123456789ABCDEF0 RCL 16 (CF=0)");
}
#[test]
fn test_rcl_rax_32bits() {
let code = [
0x48, 0xc1, 0xd0, 0x20, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().rax = 0x123456789ABCDEF0;
emu.load_code_bytes(&code);
emu.flags_mut().load(0x2);
emu.run(None).unwrap();
assert_eq!(emu.regs().rax, 0x9ABCDEF0091A2B3C, "RAX: RCL 32 (CF=0)");
}
#[test]
fn test_rcl_rbx() {
let code = [
0x48, 0xd1, 0xd3, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().rbx = 0x8000000000000000;
emu.load_code_bytes(&code);
emu.flags_mut().load(0x2);
emu.run(None).unwrap();
assert_eq!(emu.regs().rbx, 0x0000000000000000, "RBX: 0x8000000000000000 RCL 1 (CF=0) = 0");
assert!(emu.flags().f_cf, "CF: MSB was 1");
}
#[test]
fn test_rcl_rcx() {
let code = [
0x48, 0xc1, 0xd1, 0x04, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().rcx = 0xABCDEF0123456789;
emu.load_code_bytes(&code);
emu.flags_mut().load(0x2);
emu.run(None).unwrap();
assert_eq!(emu.regs().rcx, 0xBCDEF01234567895, "RCX: RCL 4 (CF=0)");
}
#[test]
fn test_rcl_rdx_cl() {
let code = [
0x48, 0xd3, 0xd2, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().rdx = 0x00000000000000FF;
emu.regs_mut().rcx = 0x38; emu.load_code_bytes(&code);
emu.flags_mut().load(0x2);
emu.run(None).unwrap();
assert_eq!(emu.regs().rdx, 0xFF00000000000000, "RDX: RCL 56 (CF=0)");
}
#[test]
fn test_rcl_rsi() {
let code = [
0x48, 0xd1, 0xd6, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().rsi = 0x4000000000000000;
emu.load_code_bytes(&code);
emu.flags_mut().load(0x2 | (1 << flags::F_CF));
emu.run(None).unwrap();
assert_eq!(emu.regs().rsi, 0x8000000000000001, "RSI: RCL 1 (CF=1)");
}
#[test]
fn test_rcl_rdi() {
let code = [
0x48, 0xc1, 0xd7, 0x0C, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().rdi = 0x123456789ABCDEF0;
emu.load_code_bytes(&code);
emu.flags_mut().load(0x2);
emu.run(None).unwrap();
assert_eq!(emu.regs().rdi, 0x456789ABCDEF0091, "RDI: RCL 12 (CF=0)");
}
#[test]
fn test_rcl_r8() {
let code = [
0x49, 0xd1, 0xd0, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().r8 = 0xFEDCBA9876543210;
emu.load_code_bytes(&code);
emu.flags_mut().load(0x2);
emu.run(None).unwrap();
assert_eq!(emu.regs().r8, 0xFDB97530ECA86420, "R8: RCL 1 (CF=0)");
assert!(emu.flags().f_cf, "CF: MSB was 1");
}
#[test]
fn test_rcl_r9_cl() {
let code = [
0x49, 0xd3, 0xd1, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().r9 = 0x0123456789ABCDEF;
emu.regs_mut().rcx = 0x10; emu.load_code_bytes(&code);
emu.flags_mut().load(0x2);
emu.run(None).unwrap();
assert_eq!(emu.regs().r9, 0x456789ABCDEF0091, "R9: RCL 16 (CF=0)");
}
#[test]
fn test_rcl_r10_imm8() {
let code = [
0x49, 0xc1, 0xd2, 0x08, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().r10 = 0x123456789ABCDEF0;
emu.load_code_bytes(&code);
emu.flags_mut().load(0x2);
emu.run(None).unwrap();
assert_eq!(emu.regs().r10, 0x3456789ABCDEF009, "R10: RCL 8 (CF=0)");
}
#[test]
fn test_rcl_r15() {
let code = [
0x49, 0xd1, 0xd7, 0xf4,
];
let mut emu = emu64();
emu.regs_mut().r15 = 0x1111111111111111;
emu.load_code_bytes(&code);
emu.flags_mut().load(0x2 | (1 << flags::F_CF));
emu.run(None).unwrap();
assert_eq!(emu.regs().r15, 0x2222222222222223, "R15: RCL 1 (CF=1)");
}
#[test]
fn test_rcl_mem8() {
let DATA_ADDR = 0x7000;
let code = [
0xd0, 0x14, 0x25, (DATA_ADDR & 0xFF) as u8,
((DATA_ADDR >> 8) & 0xFF) as u8,
((DATA_ADDR >> 16) & 0xFF) as u8,
((DATA_ADDR >> 24) & 0xFF) as u8,
0xf4,
];
let mut emu = emu64();
emu.maps.create_map("test_data", 0x7000, 0x1000, crate::maps::mem64::Permission::READ_WRITE).expect("failed to map test_data");
emu.load_code_bytes(&code);
emu.flags_mut().load(0x2);
emu.maps.write_byte(DATA_ADDR, 0x81);
emu.run(None).unwrap();
assert_eq!(emu.maps.read_byte(DATA_ADDR).unwrap(), 0x02, "Memory: 0x81 RCL 1 (CF=0) = 0x02");
assert!(emu.flags().f_cf, "CF: MSB was 1");
}
#[test]
fn test_rcl_mem16() {
let DATA_ADDR = 0x7000;
let code = [
0x66, 0xc1, 0x14, 0x25, (DATA_ADDR & 0xFF) as u8,
((DATA_ADDR >> 8) & 0xFF) as u8,
((DATA_ADDR >> 16) & 0xFF) as u8,
((DATA_ADDR >> 24) & 0xFF) as u8,
0x04, 0xf4,
];
let mut emu = emu64();
emu.maps.create_map("test_data", 0x7000, 0x1000, crate::maps::mem64::Permission::READ_WRITE).expect("failed to map test_data");
emu.load_code_bytes(&code);
emu.flags_mut().load(0x2);
emu.maps.write_word(DATA_ADDR, 0x1234);
emu.run(None).unwrap();
assert_eq!(emu.maps.read_word(DATA_ADDR).unwrap(), 0x2340, "Memory: 0x1234 RCL 4 (CF=0) = 0x2340");
}
#[test]
fn test_rcl_mem32() {
let DATA_ADDR = 0x7000;
let code = [
0xd3, 0x14, 0x25, (DATA_ADDR & 0xFF) as u8,
((DATA_ADDR >> 8) & 0xFF) as u8,
((DATA_ADDR >> 16) & 0xFF) as u8,
((DATA_ADDR >> 24) & 0xFF) as u8,
0xf4,
];
let mut emu = emu64();
emu.maps.create_map("test_data", 0x7000, 0x1000, crate::maps::mem64::Permission::READ_WRITE).expect("failed to map test_data");
emu.regs_mut().rcx = 0x08;
emu.load_code_bytes(&code);
emu.flags_mut().load(0x2);
emu.maps.write_dword(DATA_ADDR, 0x12345678);
emu.run(None).unwrap();
assert_eq!(emu.maps.read_dword(DATA_ADDR).unwrap(), 0x34567809, "Memory: 0x12345678 RCL 8 (CF=0) = 0x34567809");
}
#[test]
fn test_rcl_mem64() {
let DATA_ADDR = 0x7000;
let code = [
0x48, 0xc1, 0x14, 0x25, (DATA_ADDR & 0xFF) as u8,
((DATA_ADDR >> 8) & 0xFF) as u8,
((DATA_ADDR >> 16) & 0xFF) as u8,
((DATA_ADDR >> 24) & 0xFF) as u8,
0x10, 0xf4,
];
let mut emu = emu64();
emu.maps.create_map("test_data", 0x7000, 0x1000, crate::maps::mem64::Permission::READ_WRITE).expect("failed to map test_data");
emu.load_code_bytes(&code);
emu.flags_mut().load(0x2);
emu.maps.write_qword(DATA_ADDR, 0x123456789ABCDEF0);
emu.run(None).unwrap();
assert_eq!(emu.maps.read_qword(DATA_ADDR).unwrap(), 0x56789ABCDEF0091A, "Memory: RCL 16 (CF=0)");
}