Wiki
Clone wikieml_simulator_android / Easy_Machine_Language_Specifications
About "Easy Machine Language"
This is a Simple and Easy machine language designed for the company's workshop that I belong.
Specifications
Memory
- Designed for 8 bits Virtual CPU.
- Only unsigned values.
- This has 2 memory areas: Program Memories and Data Memories.
- Each memory area size is 128 bytes.
- Program Memories address : 0x00 - 0x7F
- Data Memories address: 0x80 - 0xFF
Counters and Registers
- There is a Operation Code Counter that size is 2 bytes.
- There is a Register that named "Register A".
- There is a Program Counter that size is 1 byte.
- There is a Overflow bit.
Operation Code Structure
Operator | Operand | ||
---|---|---|---|
Reference | From Register | To Register | |
xxxx | xx | x | x |
x : 1 bit
Operand Details
Reference | Description |
---|---|
00 | Register |
01 | Next Address |
10 | [Reserved] |
11 | [Reserved] |
From / To Register | Description |
---|---|
0 | Register A |
1 | [Reserved] |
Operator and Operation Code Details
Operator | Ref. | From Reg. | To Reg. | Size | Hex | Description | |
---|---|---|---|---|---|---|---|
END | 0000 | 00 | 0 | 0 | 1 | 0x00 | END PROGRAM. Operator 0000 is control commands. |
ADD | 0001 | 01 | 0 | 0 | 2 | 0x14 | RegisterA(To Reg.) = RegisterA(From Reg.) + [Next Address (Value)] |
SUB | 0010 | 01 | 0 | 0 | 2 | 0x24 | RegisterA(To Reg.) = RegisterA(From Reg.) - [Next Address (Value)] |
LSH | 0011 | 00 | 0 | 0 | 1 | 0x30 | RegisterA(To Reg.) = RegisterA(From Reg.) << 1 |
RSH | 0100 | 00 | 0 | 0 | 1 | 0x40 | RegisterA(To Reg.) = RegisterA(From Reg.) >> 1 |
STR | 0101 | 01 | 0 | 0 | 2 | 0x54 | [Next Address (Value)] = RegisterA(From Reg.) |
LOD | 0110 | 01 | 0 | 0 | 2 | 0x64 | RegisterA(To Reg.) = [Next Address (Value)] |
AND | 0111 | 01 | 0 | 0 | 2 | 0x74 | RegisterA(To Reg.) = RegisterA(From Reg.) & [Next Address (Value)] |
OR | 1000 | 01 | 0 | 0 | 2 | 0x84 | RegisterA(To Reg.) = RegisterA(From Reg.) | [Next Address (Value)] |
XOR | 1001 | 01 | 0 | 0 | 2 | 0x94 | RegisterA(To Reg.) = RegisterA(From Reg.) ^ [Next Address (Value)] |
JMP | 1010 | 01 | 0 | 0 | 2 | 0xA4 | [Program Counter] = [Next Address (Literal)] |
JRZ | 1011 | 01 | 0 | 0 | 2 | 0xB4 | [Program Counter] = [Next Address (Literal)] (if RegisterA(From Reg.) is Zero) |
JOV | 1100 | 01 | 0 | 0 | 2 | 0xC4 | [Program Counter] = [Next Address (Literal)] (if Over Flow is Zero) |
Not defined codes the above table is "Not Function."
Updated