The ARG and LCL pointers
do not change during the lifetime of the function. They always point to 'argument 0' and 'local 0'.
When the VM code references 'argument 3', for instance, the generated ASM code needs to do something like
@3
D=A
@ARG
A=M
A=A+D // does not change ARG
D=M // argument 3 in D.
--Mark