Files
bootler/twasm

twasm

this will be a self hosted, very minimal subset of nasm-style 64 bit asm

goals

I want to compile Bootler and Twasm with the Twasm assembler

memory map

+------ 0x00100000 ------+
| hardware, bios stuff   |
+------ 0x00080000 ------+
| output binary          |
+------ 0x00070000 ------+
| token table            |
+------ 0x00060000 ------+
| test arena             |
+------ 0x00050000 ------+
| stack (rsp)            |
+------------------------+
| input                  |
+------------------------+
| assembler              |
+------ 0x00010000 ------+
| bootloader, bios, etc. |
+------------------------+

each word represents a token on the token table.

token table (TT)

each token gets loaded into the token table with the following form:

+----------+
| 15     0 |
+----------+
| token id |
+----------+

token IDs

supported tokens are listed below

token id notes
rax 0x0000
rbx 0x0001
rcx 0x0002
rdx 0x0003
rsi 0x0004
rdi 0x0005
rsp 0x0006
rbp 0x0007
r8 0x0008
r9 0x0009
r10 0x000A
r11 0x000B
r12 0x000C
r13 0x000D
r14 0x000E
r15 0x000F
eax 0x0010
ebx 0x0011
ecx 0x0012
edx 0x0013
esi 0x0014
edi 0x0015
esp 0x0016
ebp 0x0017
r8d 0x0018
r9d 0x0019
r10d 0x001A
r11d 0x001B
r12d 0x001C
r13d 0x001D
r14d 0x001E
r15d 0x001F
ax 0x0020
bx 0x0021
cx 0x0022
dx 0x0023
si 0x0024
di 0x0025
sp 0x0026
bp 0x0027
r8w 0x0028
r9w 0x0029
r10w 0x002A
r11w 0x002B
r12w 0x002C
r13w 0x002D
r14w 0x002E
r15w 0x002F
al 0x0030
bl 0x0031
cl 0x0032
dl 0x0033
sil 0x0034
dil 0x0035
spl 0x0036
bpl 0x0037
r8b 0x0038
r9b 0x0039
r10b 0x003A
r11b 0x003B
r12b 0x003C
r13b 0x003D
r14b 0x003E
r15b 0x003F
ah 0x0040
bh 0x0041
ch 0x0042
dh 0x0043
cs 0x0044
ds 0x0045
es 0x0046
fs 0x0047
gs 0x0048
ss 0x0049
cr0 0x004A
cr2 0x004B
cr3 0x004C
cr4 0x004D
cr8 0x004E
hlt 0x004F
int3 0x0050
[ 0x0051
] 0x0052
xor 0x0053
inc 0x0054
dec 0x0055
mov 0x0056
add 0x0057
sub 0x0058
call 0x0059
ret 0x005A
cmp 0x005B
je 0x005C
jne 0x005D
jge 0x005E
jg 0x005F
jle 0x0060
jl 0x0061
+ 0x0062
- 0x0063
* 0x0064
/ 0x0065
0xFEXX token terminator byte as token, where XX is the byte
0xFFFF unrecognised token