存储指令

STORE

堆保存操作,栈顶数据存储到堆(例:STORE,2)

  • 参数说明:共1参数;参数1:存入堆的位置;

  • 栈行为:消费1,产出0

  • 堆行为:存入数据

  1. 代码:var a = 123 ; return a
  2. 指令:
  3. #0 LDC_D 123
  4. #1 STORE 0
  5. #2 LOAD 0, 0
  6. #3 RETURN 0

LOAD

堆读取操作,从指定深度的堆中加载n号元素到栈(例:LOAD 1 ,1 )

  • 参数说明:共2参数;参数1:堆深度(栈顶深度为0);参数2:元素序号;

  • 栈行为:消费0,产出1

  • 堆行为:取出数据(不删除)

  1. 代码:var a = 123 ; return a
  2. 指令:
  3. #0 LDC_D 123
  4. #1 STORE 0
  5. #2 LOAD 0, 0
  6. #3 RETURN 0

GET

从对象中读取数据,获取栈顶对象元素的属性(例:GET,”xxxx”)

  • 参数说明:共1参数;参数1:属性名称(Map的Key 或 对象的属性名)

  • 栈行为:消费1,产出1

  • 堆行为:无

  1. 代码:var a = {'abc':true} ; return a.abc
  2. 指令: ...(部分略)...
  3. #4 LOAD 0, 0
  4. #5 GET abc
  5. #6 RETURN 0

PUT

向对象写入数据,将栈顶对象元素放入对象元素中(例:PUT,”xxxx”)

  • 参数说明:共1参数;参数1:属性名称(Map的Key 或 对象的属性名)

  • 栈行为:消费1,产出0

  • 堆行为:无

  1. 代码:return {'field_1':'f1','field_2':'f2'}
  2. 指令:
  3. #0 NEW_O
  4. #1 LDC_S f1
  5. #2 PUT field_1
  6. #3 LDC_S f2
  7. #4 PUT field_2
  8. #5 RETURN 0

PULL

从集合中获取数据,栈顶元素是一个集合类型,获取集合的指定索引元素。(例:PULL 123)

  • 参数说明:共1参数;参数1:元素位置(负数表示从后向前,正数表示从前向后)

  • 栈行为:消费1,产出1

  • 堆行为:无

  1. 代码:var a = [1,2,3,4,5] ; return a指令:
  2. ...(部分略)...
  3. #11 STORE 0
  4. #12 LOAD 0, 0
  5. #13 PULL 2
  6. #14 RETURN 0

PUSH

向对象中写入数据,将栈顶元素压入集合(例:PUSH)

  • 参数说明:共0参数;

  • 栈行为:消费1,产出0

  • 堆行为:无

  1. 代码:return [1,2,3]
  2. 指令:
  3. ...(部分略)...
  4. #1 LDC_D 1
  5. #2 PUSH
  6. #3 LDC_D 2
  7. #4 PUSH
  8. ...(部分略)...

COPY

将栈顶的元素 Copy 一个(浅拷贝)

  • 参数说明:共0参数;

  • 栈行为:消费0,产出1

  • 堆行为:无

  1. 代码:return abc[a]
  2. 指令:
  3. [0]
  4. #000 E_LOAD #
  5. #001 GET abc
  6. #002 E_LOAD #
  7. #003 GET a
  8. #004 COPY
  9. #005 TYPEOF
  10. #006 COPY
  11. #007 LDC_S string
  12. #008 DO ==
  13. ...(部分略)...