class Vm::Instructions::MemoryAccessOperations::VirtualSegmentOperation
Constants
- VIRTUAL_SEGMENT_TO_POINTER_NAME
Attributes
index[R]
operation[R]
segment[R]
Public Class Methods
new(operation, segment, index)
click to toggle source
# File lib/hackasm/vm/instructions/memory_access_operations/virtual_segment_operation.rb, line 15 def initialize(operation, segment, index) @operation = operation @segment = segment @index = index end
segments()
click to toggle source
# File lib/hackasm/vm/instructions/memory_access_operations/virtual_segment_operation.rb, line 59 def self.segments VIRTUAL_SEGMENT_TO_POINTER_NAME.keys end
Public Instance Methods
to_asm()
click to toggle source
# File lib/hackasm/vm/instructions/memory_access_operations/virtual_segment_operation.rb, line 21 def to_asm if operation == "push" %Q{ @#{index} D=A @#{VIRTUAL_SEGMENT_TO_POINTER_NAME[segment]} A=M+D D=M @SP A=M M=D @SP M=M+1 }.strip else %Q{ @SP M=M-1 @SP A=M D=M @R14 M=D @#{index} D=A @#{VIRTUAL_SEGMENT_TO_POINTER_NAME[segment]} D=M+D @R15 M=D @R14 D=M @R15 A=M M=D }.strip end end