You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
LBL MAIN SETREG GP_STR_0 " " MEM_READ 0x00 GP_STR_1 ; READ STRING FROM STR_MEM_0 into string register 1 SUBS GP_STR_1 0 ; GP_STR_1 becomes the first CLI argumentCMP GP_STR_1 "USER" ; Compare the first arg to the string user JMP_EQ PARSE_USER ; if they where the same, S_COMP GP_STR_1 "FUNC" ; Compare the first arg to the string func JMP_EQ PARSE_FUNC ; they where equle, jump to parse func S_COMP GP_STR_1 "DATA" ; Compare the first arg to the string data JMP_EQ PARSE_DATA ; If they where equle, jump to parse dataPUSH"INVALID ARG!" ; push data onto the value stackJMP ERROR_FUNC ; HALT with errorLBL PARSE_DONE HALTLBL PARSE_USER ; First arg was USER SETREG GP_STR_0 " " MEM_READ 0x00 GP_STR_1 ; READ STRING FROM STR_MEM_0 into string register 1JMP PARSE_DONELBL PARSE_FUNC ; First arg was FUNCJMP PARSE_DONELBL PARSE_DATA ; First arg was DATAJMP PARSE_DONE; stack 0 ( str error ) LBL ERROR_FUNCPOP GP_STR_1 ; takes the error arg and puts it in str 0 HALT
FLAGS_0 USAGE TABLE
BIT
NAME
USE
00
HALT
TRUE AFTER HALT RAN
01
EQ
= A == B
02
NEQ
= A != B
03
GTR
= A > B
04
GEQ
= A >= B
05
LES
= A < B
06
LEQ
= A <= B
OPPCODE
NAME
ARG 0
ARG 1
NOTES
REGISTER 0
00
NOOP
01
SETREG_INTR_INTC
[DST] REGISTER
[SRC] CONST INT VALUE
SETS REGISTER TO CONST INT
02
SETREG_INTR_INTR
[DST] REGISTER 1
[SRC] REGISTER 0
MOVES VAL IN R0 INTO R1
03
ADD_INTR_INTC
[DST] REGISTER
[SRC] CONST INT VALUE
ADDS CONST TO VALUE REG STO IN REG
04
ADD_INTR_INTR
[DST] REGISTER 1
[SRC] REGISTER 0
ADDS R0 TO R1 AND STORE IN R1
05
MUL_INTR_INTC
[DST] REGISTER
[SRC] CONST INT VALUE
MULT CONST TO VALUE REG STO IN REG
06
MUL_INTR_INTR
[DST] REGISTER 1
[SRC] REGISTER 0
MULT R0 TO R1 AND STORE IN R1
07
SUB_INTR_INTC
[DST] REGISTER
[SRC] CONST INT VALUE
SUBS CONST FROM VALUE REG STO IN REG
08
SUB_INTR_INTR
[DST] REGISTER 1
[SRC] REGISTER 0
SUBS R0 FROM R1 AND STORE IN R1
09
DIV_INTR_INTC
[DST] REGISTER
[SRC] CONST INT VALUE
DIVS CONST BY VALUE REG STO IN REG
0A
DIV_INTR_INTR
[DST] REGISTER 1
[SRC] REGISTER 0
DIVS R0 BY R1 AND STORE IN R1
0B
INC
[DST] REGISTER
Inc register by 1
0C
DEC
[DST] REGISTER
Dec register by 1
0D
CMP_INTR_INTC
[DST] REGISTER A
[SRC] CONST B
A>B A<B A==B
0E
CMP_INTR_INTR
[DST] REGISTER A
[SRC] REGISTER B
A>B A<B A==B
A0
PUSH_INTC
[SRC] CONST INT VALUE
pushes the value into stack
A0
PUSH_INTC
[SRC] CONST INT VALUE
pushes the value into stack
A1
PUSH_INTR
[SRC] REGISTER
pushes the value into stack
A2
POP_INTR
[DST] REGISTER
pops the current value into register
A3
CALL
[SRC] CONST INT VALUE
calls the CONST INTs offset in memory
A4
CALL
[SRC] ADDR IN REG
calls the CONST INTs offset in memory
A5
RET
A6
CALL_D
call must land at the call dest for
error checking like end branch
othewise noop
A7
JMP_INTC_EQ
[SRC] CONST INT VALUE
JUMPS TO SRC WHEN COND
A8
JMP_INTC_NEQ
[SRC] CONST INT VALUE
JUMPS TO SRC WHEN COND
A9
JMP_INTC_GTR
[SRC] CONST INT VALUE
JUMPS TO SRC WHEN COND
AA
JMP_INTC_GEQ
[SRC] CONST INT VALUE
JUMPS TO SRC WHEN COND
AB
JMP_INTC_LES
[SRC] CONST INT VALUE
JUMPS TO SRC WHEN COND
AC
JMP_INTC_LEQ
[SRC] CONST INT VALUE
JUMPS TO SRC WHEN COND
AD
JMP_INTR_EQ
[SRC] REGISTER
JUMPS TO SRC WHEN COND
AE
JMP_INTR_NEQ
[SRC] REGISTER
JUMPS TO SRC WHEN COND
AF
JMP_INTR_GTR
[SRC] REGISTER
JUMPS TO SRC WHEN COND
B0
JMP_INTR_GEQ
[SRC] REGISTER
JUMPS TO SRC WHEN COND
B1
JMP_INTR_LES
[SRC] REGISTER
JUMPS TO SRC WHEN COND
B2
JMP_INTR_LEQ
[SRC] REGISTER
JUMPS TO SRC WHEN COND
B3
JMP_INTR
[SRC] REGISTER
B4
JMP_INTC
[SRC] CONST INT VALUE
B5
MEM_READ_INTR_INTC
[DST] REGISTER
[SRC] CONST INT
READS FROM const -> register
B6
MEM_READ_INTR_INTR
[DST] REGISTER
[SRC] REGISTER
READS FROM mem@regval -> register
B7
MEM_WRITE_INTR_INTC
[SRC] REGISTER [val]
[DST] CONST INT [adr]
WRITES FROM register -> memAddress
B8
MEM_WRITE_INTR_INTR
[SRC] REGISTER
[DST] REGISTER
WRITES FROM register -> mem@regval
C0
SETREG_STRR_STRC
[DEST] STR REG
SCR STR CONST
C1
SETREG_STRR_STRR
[DEST] STR REG
SRC STR REGISTER
C2
CCAT_STRR_STRR
[DEST] STR REG
SRC STR REGISTER
DEST_REG = DEST_REG + SRC_REG
C3
CCAT_STRR_STRC
[DEST] STR REG
SRC STR CONST
DEST_REG = DEST_REG + SRC_STR
C4
CMP_STRR_STRR
[SRC] STR REG A
SRC STR REG B
sets FLAGS like CMP_INTR_INTR
C5
CMP_STRR_STRC
[SRC] STR REG A
SRC STR CONST B
sets flags like CMP_INTR_INTC
C8
MEM_READ_STRR_INTC
[DEST] DST TO READ TO
CONST INT ADDR
Reads str memory at index ARG1
C9
MEM_READ_STRR_INTR
[DEST] DST TO READ TO
INT REG ADDR
Reads str memory at index ARG1
CA
MEM_WRITE_STRR_INTC
[SRC] SRC TO WRITE TO
CONST INT ADDR
Writes str from ARG0 into mem
CB
MEM_WRITE_STRR_INTR
[SRC] SRC TO WRITE TO
INT REG ADDR
Writes str from ARG0 into mem
CC
PUSH_STRR
[SRC] VAL SRC
CD
PUSH_STRC
[SRC] VAL SRC
FF
HALT
a string const must end with null
SAMPLE ASM
FILESYSTEM
EXTENTION
FULL NAME
USE
.HEC
Haileys ExeCutable
Stores executable
EXECUTABLE FILE FORMAT (.HEC)
If i just put the code at the end of the metadata, i can never grow the metadata structure
address
data
use
F
0x00
FA DD ED D0 67 00 00 00
MAGIC NUMBER (FADDEDD0'G')
F
0x08
XX XX XX XX
CODE SECTION END OFFSET FROM END 'CODE_END_OFFSET' uint32