diff options
Diffstat (limited to 'twasm/asm/main.asm')
| -rw-r--r-- | twasm/asm/main.asm | 165 |
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 |
