Esempio n. 1
0
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)
Esempio n. 2
0
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
Esempio n. 3
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
Esempio n. 4
0
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
Esempio n. 5
0
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
Esempio n. 6
0
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