class Vm::Instructions::MemoryAccessInstruction

Attributes

index[R]
object_name[R]
operation[R]
segment[R]

Public Class Methods

new(instruction, object_name) click to toggle source
# File lib/hackasm/vm/instructions/memory_access_instruction.rb, line 11
def initialize(instruction, object_name)
  @segment = instruction[:segment].to_s
  @operation = instruction[:operation].to_s
  @index = instruction[:index].to_s
  @object_name = object_name
end

Public Instance Methods

comment() click to toggle source
# File lib/hackasm/vm/instructions/memory_access_instruction.rb, line 31
def comment
  "// #{operation} #{segment} #{index}\n"
end
to_asm() click to toggle source
# File lib/hackasm/vm/instructions/memory_access_instruction.rb, line 18
def to_asm
  comment + case segment
  when *MemoryAccessOperations::ConstantOperation.segments
    MemoryAccessOperations::ConstantOperation.new(index).to_asm
  when *MemoryAccessOperations::StaticOperation.segments
    MemoryAccessOperations::StaticOperation.new(index, object_name).to_asm
  when *MemoryAccessOperations::VirtualSegmentOperation.segments
    MemoryAccessOperations::VirtualSegmentOperation.new(operation, segment, index).to_asm
  when *MemoryAccessOperations::FixedSegmentOperation.segments
    MemoryAccessOperations::FixedSegmentOperation.new(operation, segment, index).to_asm
  end.split("\n").map(&:strip).join("\n")
end