summaryrefslogtreecommitdiff
path: root/twasm/asm/main.asm
diff options
context:
space:
mode:
Diffstat (limited to 'twasm/asm/main.asm')
-rw-r--r--twasm/asm/main.asm165
1 files changed, 138 insertions, 27 deletions
diff --git a/twasm/asm/main.asm b/twasm/asm/main.asm
index bdcba88..89d079f 100644
--- a/twasm/asm/main.asm
+++ b/twasm/asm/main.asm
@@ -1560,21 +1560,94 @@ clear_output_arena:
tokens:
.by_id:
- dw 0x0010 ; eax
- db 0x02 ; type: register
- db 00000010b ; reg: 000b
- ; width: 10b (32 bits)
-
dw 0x0000 ; rax
db 0x02 ; type: register
db 00000011b ; reg: 000b
; width: 11b (64 bits)
+ dw 0x0001 ; rbx
+ db 0x02 ; type: register
+ db 00001111b ; reg: 011b
+ ; width: 11b (64 bits)
+
+ dw 0x0002 ; rcx
+ db 0x02 ; type: register
+ db 00000111b ; reg: 001b
+ ; width: 11b (64 bits)
+
dw 0x0003 ; rdx
db 0x02 ; type: register
db 00001011b ; reg: 010b
; width: 11b (64 bits)
+ dw 0x0004 ; rsi
+ db 0x02 ; type: register
+ db 00011011b ; reg: 110b
+ ; width: 11b (64 bits)
+
+ dw 0x0005 ; rdi
+ db 0x02 ; type: register
+ db 00011111b ; reg: 111b
+ ; width: 11b (64 bits)
+
+ dw 0x0006 ; rsp
+ db 0x02 ; type: register
+ db 00010011b ; reg: 100b
+ ; width: 11b (64 bits)
+
+ dw 0x0007 ; rbp
+ db 0x02 ; type: register
+ db 00010111b ; reg: 101b
+ ; width: 11b (64 bits)
+
+ dw 0x0010 ; eax
+ db 0x02 ; type: register
+ db 00000010b ; reg: 000b
+ ; width: 10b (32 bits)
+
+ dw 0x0011 ; ebx
+ db 0x02 ; type: register
+ db 00001110b ; reg: 011b
+ ; width: 10b (32 bits)
+
+ dw 0x0012 ; ecx
+ db 0x02 ; type: register
+ db 00000110b ; reg: 001b
+ ; width: 10b (32 bits)
+
+ dw 0x0013 ; edx
+ db 0x02 ; type: register
+ db 00001010b ; reg: 010b
+ ; width: 10b (32 bits)
+
+ dw 0x0014 ; esi
+ db 0x02 ; type: register
+ db 00011010b ; reg: 110b
+ ; width: 10b (32 bits)
+
+ dw 0x0015 ; edi
+ db 0x02 ; type: register
+ db 00011110b ; reg: 111b
+ ; width: 10b (32 bits)
+
+ dw 0x0016 ; esp
+ db 0x02 ; type: register
+ db 00010010b ; reg: 100b
+ ; width: 10b (32 bits)
+
+ dw 0x0017 ; ebp
+ db 0x02 ; type: register
+ db 00010110b ; reg: 101b
+ ; width: 10b (32 bits)
+
+ dw 0x004F ; hlt
+ db 0x01 ; type: operator
+ db 0x00 ; # operands
+
+ dw 0x0050 ; int3
+ db 0x01 ; type: operator
+ db 0x00 ; # operands
+
dw 0x0053 ; xor
db 0x01 ; type: operator
db 0x02 ; # operands
@@ -1583,23 +1656,39 @@ tokens:
db 0x01 ; type: operator
db 0x01 ; # operands
+ dw 0x0055 ; dec
+ db 0x01 ; type: operator
+ db 0x01 ; # operands
+
dw 0x0056 ; mov
db 0x01 ; type: operator
db 0x02 ; # operands
- dw 0x004F ; hlt
+ dw 0x0057 ; add
+ db 0x01 ; type: operator
+ db 0x02 ; # operands
+
+ dw 0x0058 ; sub
+ db 0x01 ; type: operator
+ db 0x02 ; # operands
+
+ dw 0x0059 ; call
+ db 0x01 ; type: operator
+ db 0x01 ; # operands
+
+ dw 0x005A ; ret
db 0x01 ; type: operator
db 0x00 ; # operands
+
+ dw 0x005B ; cmp
+ db 0x01 ; type: operator
+ db 0x02 ; # operands
.by_id_end:
.operators:
- dd "je"
- dw 0x005C
- dd "jg"
- dw 0x005F
- dd "jl"
- dw 0x0061
dd "hlt"
dw 0x004F
+ dd "int3"
+ dw 0x0050
dd "xor"
dw 0x0053
dd "inc"
@@ -1612,20 +1701,12 @@ tokens:
dw 0x0057
dd "sub"
dw 0x0058
+ dd "call"
+ dw 0x0059
dd "ret"
dw 0x005A
dd "cmp"
dw 0x005B
- dd "jne"
- dw 0x005D
- dd "jge"
- dw 0x005E
- dd "jle"
- dw 0x0060
- dd "int3"
- dw 0x0050
- dd "call"
- dw 0x0059
.operators_end:
.registers:
dd "r8"
@@ -1790,21 +1871,51 @@ tokens:
opcodes:
.by_id:
+ dw 0x004F ; hlt
+ db 0xF4 ; .
+ db 0x00 ;
+
+ dw 0x0050 ; int3
+ db 0xCC ;
+ db 0x00 ;
+
dw 0x0053 ; xor
db 0x31 ; r/m <- reg
db 0x33 ; reg <- r/m
dw 0x0054 ; inc
- db 0xFF ; r/m
- db 0x00 ;
+ db 0xFF ; r/m <-
+ db 0x00 ; reg bits
+
+ dw 0x0055 ; dec
+ db 0xFF ; r/m <-
+ db 0x01 ; reg bits
dw 0x0056 ; mov
db 0x89 ; r/m <- reg
db 0x8B ; reg <- r/m
- dw 0x004F ; hlt
- db 0xF4 ; .
- db 0x00 ;
+ dw 0x0057 ; add
+ db 0x01 ; r/m <- reg
+ db 0x03 ; reg <- r/m
+
+ dw 0x0058 ; sub
+ db 0x29 ; r/m <- reg
+ db 0x2B ; reg <- r/m
+
+ ; TODO deal with rel values, differentiate 16/32 and 64 for call
+ dw 0x0059 ; call
+ db 0xFF ; r/m <-
+ db 0x02 ; reg bits
+
+ ; TODO deal with optional parameter
+ dw 0x005A ; ret
+ db 0xC3 ; opcode
+ db 0x00 ; reserved
+
+ dw 0x005B ; cmp
+ db 0x39 ; r/m <- reg
+ db 0x3B ; reg <- r/m
.by_id_end:
msg_welcome db "Welcome to Twasm", 0x0A, 0x00