rubyx/lib/risc/instructions/transfer.rb

41 lines
1.1 KiB
Ruby
Raw Normal View History

module Risc
2018-03-21 11:18:04 +01:00
# Transfer the constents of one register to another.
# possibly called move in some cpus
# There are other instructions to move data from / to memory, namely SlotToReg and RegToSlot
# Get/Set Slot move data around in vm objects, but transfer moves the objects (in the machine)
#
# Also it is used for moving temorary data
#
2018-03-21 11:18:04 +01:00
class Transfer < Instruction
# initialize with from and to registers.
# First argument from
2015-10-14 12:48:42 +02:00
# second argument to
#
2015-07-24 12:23:56 +02:00
# Note: this may be reversed from some assembler notations (also arm)
2018-03-21 11:18:04 +01:00
def initialize( source , from , to )
super(source)
2015-10-15 08:32:47 +02:00
@from = from
@to = to
raise "Fix me #{from}" unless from.is_a? RegisterValue
raise "Fix me #{to}" unless to.is_a? RegisterValue
end
attr_reader :from, :to
2015-07-24 12:23:56 +02:00
# return an array of names of registers that is used by the instruction
def register_names
[from.symbol , to.symbol]
end
2015-07-24 12:23:56 +02:00
def to_s
2018-03-22 17:38:19 +01:00
class_source "#{from} -> #{to}"
2015-07-24 12:23:56 +02:00
end
2015-11-21 13:17:54 +01:00
end
2016-12-28 17:37:15 +01:00
def self.transfer( source , from , to)
2018-03-21 11:18:04 +01:00
Transfer.new( source , from , to)
end
end