VSMX
Jump to navigation
Jump to search
Description
Virtual Script Machine Instructions (VSMX) file layout (naming should be wikifyed):
VSMX header Compiled code/instructions Data/String constants (method) name table/Object property global symbols/Variable/function names
Header
Offset | Size | Example (h) | Value (conversion) | Notes |
0x00 | 0x04 | 0x56534D58 | "VSMX" | Magic |
0x04 | 0x04 | 0x00000200 | 0002.0000 | Version?
|
0x08 | 0x04 | 0x34000000 | 0x34 (52) | header length |
0x0C | 0x04 | - | length of compiled code/instructions section | |
0x10 | 0x04 | - | offset of data section | |
0x14 | 0x04 | - | length of data | |
0x18 | 0x04 | - | number of data(seen: 1 or 2) | |
0x1C | 0x04 | - | offset of name table | |
0x20 | 0x04 | - | length of name | |
0x24 | 0x04 | - | number of name | |
0x28 | 0x04 | - | offset of global symbols | |
0x2C | 0x04 | - | length of global symbols | |
0x30 | 0x04 | - | number of global symbols |
Compiled instructions
- Instructions length: 8 bytes
HEX code format should be wikifyed, may be table moved to (later).
ByteCode (short) | Instruction Name | Note1 | Note2 |
---|---|---|---|
0x00 | NOP | - | - |
0x01 | ASSGN | - | - |
0x02 | ADD | - | - |
0x03 | SUB | - | - |
0x04 | MUL | - | - |
0x05 | DIV | - | - |
0x06 | MOD | - | - |
0x07 | TO_NUMBER | - | - |
0x08 | CSIGN | - | - |
0x09 | NOT | - | - |
0x0A | INC | - | - |
0x0B | DEC | - | - |
0x0C | POST_INC | - | - |
0x0D | POST_DEC | - | - |
0x0E | CMPEQ | Compare Operators | - |
0x0F | CMPNEQ | Compare Operators | - |
0x10 | CMPSEQ | Compare Operators | - |
0x11 | CMPSNEQ | Compare Operators | - |
0x12 | CMPLT | Compare Operators | - |
0x13 | CMPLE | Compare Operators | - |
0x14 | CMPGE | Compare Operators | - |
0x15 | CMPGT | Compare Operators | - |
0x16 | INSTANCEOF | - | - |
0x17 | IN | - | - |
0x18 | TYPEOF | - | - |
0x19 | BIT_AND | - | - |
0x1A | BIT_XOR | - | - |
0x1B | BIT_OR | - | - |
0x1C | BIT_NOT | - | - |
0x1D | LSHIFT | - | - |
0x1E | S_RSHIFT | - | - |
0x1F | U_RSHIFT | - | - |
0x20 | COPY | - | - |
0x21 | SWAP | - | - |
0x22 | REMOVE | - | - |
0x23 | PUSH_UNDEFINED | - | - |
0x24 | PUSH_NULL | - | - |
0x25 | PUSH_BOOL | - | - |
0x26 | PUSH_INT | - | - |
0x27 | PUSH_FLOAT | - | - |
0x28 | PUSH_STRING | - | - |
0x29 | PUSH_OBJECT | - | - |
0x2A | PUSH_FUNC | - | - |
0x2B | PUSH_ARRAY | - | - |
0x2C | PUSH_THIS | - | - |
0x2D | PUSH_LOCAL | - | - |
0x2E | PUSH_GLOBAL | - | - |
0x2F | GETATTR | - | - |
0x30 | GETATTR_KEEPOBJ | - | - |
0x31 | SETATTR | - | - |
0x32 | DELATTR | - | - |
0x33 | APPEND_ATTR | - | - |
0x34 | GETITEM | - | - |
0x35 | GETITEM_KEEPOBJ | - | - |
0x36 | SETITEM | - | - |
0x37 | DELITEM | - | - |
0x38 | APPEND_ITEM | - | - |
0x39 | JUMP | - | - |
0x3A | JUMPT | - | - |
0x3B | JUMPF | - | - |
0x3C | CALL_FUNC | - | - |
0x3D | CALL_METHOD | - | - |
0x3E | CALL_CONSTRUCTOR | - | - |
0x3F | RET | - | - |
0x40 | THROW | - | - |
0x41 | TRYBLK_IN | - | - |
0x42 | TRYBLK_OUT | - | - |
0x43 | CATCH_FINALLYBLK_IN | - | - |
0x44 | CATCH_FINALLYBLK_OUT | - | - |
0x45 | HALT | - | - |
0x46 | DEBUG_FILE | - | - |
0x47 | DEBUG_LINE | - | - |
0x48 | GETITEM_KEEPOBJNAME | - | - |
0x49 | PUSH_VECTOR | - | - |
0x4A | GET_VECTOR_ELEMENT | - | - |
0x4B | GET_VECTOR_ELEMENT_KEEPVECTOR | - | - |
0x4C | ASSGN_VECTOR_ELEMENT | - | - |
0x4D | SETATTR_VECTOR_ELEMENT | - | - |
0x4E | SETITEM_VECTOR_ELEMENT | - | - |
Compare Operators
Comparison and Logical operators are used to test for true or false.
Compare For: | Operators | Bytecode (PSJS) | Syntax (JS) |
---|---|---|---|
Equality | cmpeq | 0x0E | == |
Strict Equal value and equal type | cmpseq | 0x10 | === |
Inequality | cmpneq | 0x0F | != |
Strict not equal value or not equal type | cmpsneq | 0x11 | !== |
Greater Than | cmpgt | 0x15 | > |
Greater Than or Equal To | cmpge | 0x14 | >= |
Less Than | cmplt | 0x12 | < |
Less Than or Equal To | cmple | 0x13 | <= |
- http://es5.github.io/#x11.9.3 The Abstract Equality Comparison Algorithm
- http://es5.github.io/#x11.9.6 The Strict Equality Comparison Algorithm
|