def fdiv_fun(virtual_machine): """Where dest, a, and b are registers.""" dest_register = binary.opcode_register_argument(virtual_machine, 1) a_register = binary.opcode_register_argument(virtual_machine, 2) b_register = binary.opcode_register_argument(virtual_machine, 3) a_val = binary.to_float(virtual_machine.registers[a_register]) b_val = binary.to_float(virtual_machine.registers[b_register]) result = a_val / b_val virtual_machine.registers[dest_register] = binary.to_int(result)
def comp_fun(virtual_machine): """This compares the two specified registers.""" register_a = binary.opcode_register_argument(virtual_machine, 1) register_b = binary.opcode_register_argument(virtual_machine, 2) value_a = virtual_machine.registers[register_a] value_b = virtual_machine.registers[register_b] if value_a == value_b: virtual_machine.flags["EF"] = 1 else: virtual_machine.flags["EF"] = 0
def add_fun(virtual_machine): """Where dest, a, and b are registers.""" dest_register = binary.opcode_register_argument(virtual_machine, 1) a_register = binary.opcode_register_argument(virtual_machine, 2) b_register = binary.opcode_register_argument(virtual_machine, 3) result = (virtual_machine.registers[a_register] + virtual_machine.registers[b_register]) if result // (2 ^ 64) != 0: virtual_machine.flags["OF"] = 1 virtual_machine.registers[dest_register] = result % 2 ^ 64
def pop_fun(virtual_machine): """This pops the top value from the stack and places it in an register.""" dest_register = binary.opcode_register_argument(virtual_machine, 1) stack_head = virtual_machine.registers["SHP"] virtual_machine.registers[dest_register] = virtual_machine.stack[ stack_head] virtual_machine.registers["SHP"] -= 1
def psh_fun(virtual_machine): """This pushes the register provided onto the stack.""" source_register = binary.opcode_register_argument(virtual_machine, 1) stack_head = virtual_machine.registers["SHP"] virtual_machine.stack[stack_head] = virtual_machine.registers[ source_register] virtual_machine.registers["SHP"] += 1
def load_fun(virtual_machine): """This loads the address specified into a register.""" dest_register = binary.opcode_register_argument(virtual_machine, 1) source_addr = binary.opcode_address_argument(virtual_machine, 2) source_val = binary.get_int_64(virtual_machine, source_addr) virtual_machine.registers[dest_register] = source_val