A simple virtual machine based on cpu instruction set.Includes some DIY instructions,and it is still updating.
$ git clone https://github.com/Leviathan1995/lvm.git
$ make
$ ./lvm
- 注释使用 '#'
- 格式: 操作码 操作数1 操作数2
- 优先级: 寄存器需要在立即数或内存地址前面 例如 OPADDB AL [10]
Instruction | Explanation | Example |
---|---|---|
OPHALT | stop | OPHALT |
OPCLEAR | register=0 | OPCLEAR AL |
OPINIT | id=register | OPINIT i AL |
OPINITLIST | a={1,2,3,4,5} | OPINITLIST a 1,2,3,4,5 |
OPASSIGN | id=reg/num | OPASSIGN i 0 |
OPBINADD | id1=id2+id3 | OPBINADD id1 id2 id3 |
OPBINSUB | id1=id2-id3 | OPBINSUB id1 id2 id3 |
OPBINMUL | id1=id2*id3 | OPBINMUL id1 id2 id3 |
OPBINDIV | id1=id2/id3 | OPBINDIV id1 id2 id3 |
OPADDB | al=al+[10] | OPADDB AL [10] |
OPADDVB | al=al+1 | OPADDVB AL 1 |
OPSUBB | al=al-[10] | OPSUBB AL [10] |
OPSUBVB | al=al-1 | OPSUBVB AL 1 |
OPLOAD | al=cl | OPLOAD AL CL |
OPLOADVB | al=1 | OPLOADVB AL 1 |
OPSTOREB | [10]=al | OPSTOREB 10 AL |
OPINC | al=al+1 | OPINC AL |
OPDEC | al=al-1 | OPDEC AL |
OPCMPVB | cl cmp 5 | OPCMPVB CL 5 |
OPJG | if greatet jump to label | OPJG cmp1 cmp2 label |
OPJNG | if not greater jump to label | OPJNG cmp1 cmp2 label |
OPPRINTR | output al to terminal | OPPRINTR AL |
OPPRINTRLIST | output list to terminal | OPPRINTRLIST list |
OPEND | block end | OPEND block1 |
OPPAUSE | use debug | OPPAUSE |