.instructionset

We've now reversed all the VM instructions, and have a full understanding about how it works. Here is the VM's instruction set:

Instruction

1st arg

2nd arg

What does it do?

"A"

"M"

arg2

*sym.current_memory_ptr += arg2

"P"

arg2

sym.current_memory_ptr += arg2

"C"

arg2

sym.written_by_instr_C += arg2

"S"

"M"

arg2

*sym.current_memory_ptr -= arg2

"P"

arg2

sym.current_memory_ptr -= arg2

"C"

arg2

sym.written_by_instr_C -= arg2

"I"

arg1

n/a

instr_A(arg1, 1)

"D"

arg1

n/a

instr_S(arg1, 1)

"P"

arg1

n/a

*sym.current_memory_ptr = arg1; instr_I("P")

"X"

arg1

n/a

*sym.current_memory_ptr ^= arg1

"J"

arg1

n/a

arg1_and_0x3f = arg1 & 0x3f; if (arg1 & 0x40 != 0)   arg1_and_0x3f *= -1 if (arg1 >= 0) return arg1_and_0x3f; else if (*sym.written_by_instr_C != 0) {   if (arg1_and_0x3f < 0)     ++*sym.good_if_ne_zero;   return arg1_and_0x3f; } else return 2;

"C"

arg1

n/a

*sym.written_by_instr_C = arg1

"R"

arg1

n/a

return(arg1)

最后更新于

这有帮助吗?