      increment_stack_pointer()
     ]
   end
-  def translate_command([:C_PUSH, ["pointer", 0]]) do
-    ["@THIS",
-     "D=M",
-     set_top_of_stack_to("D"),
-     increment_stack_pointer()
-    ]
-  end
-  def translate_command([:C_PUSH, ["pointer", 1]]) do
-    ["@THAT",
+  def translate_command([:C_PUSH, ["pointer", arg2]]) do
+    ["@#{pointer_arg_to_register(arg2)}",
      "D=M",
      set_top_of_stack_to("D"),
      increment_stack_pointer()

      is_push_command?(line) -> [:C_PUSH, command_args(line)]
      is_pop_command?(line) ->  [:C_POP,  command_args(line)]
      true -> [:C_ARITHMETIC, [line]]
    end
  end
  

     "A=M",
     "M=D"]
  end
  def translate_command([:C_POP, ["pointer", arg2]]) do
    ["@#{pointer_arg_to_register(arg2)}",    # get pointer+0/1 base address
     "D=A",
     "@R13",     # stick in R13
     "M=D",
