L1VM - disasm

I wrote a disassembler for my L1VM. This is just a modified bytecode loader with a tiny main function. Here is an example output:

$ ./disasm math-circle-oop
L1VM disassembler

.code
:main
16: loada 104, 0, 0
34: loada 176, 0, 1
52: intr0 6, 1, 0, 0
57: intr0 7, 0, 0, 0
62: loada 221, 0, 2
80: intr0 6, 2, 0, 0
85: intr0 7, 0, 0, 0
90: loada 257, 0, 3
108: intr0 6, 3, 0, 0
113: intr0 7, 0, 0, 0
118: loada 273, 0, 4
136: intr0 6, 4, 0, 0
141: intr0 7, 0, 0, 0
146: loada 284, 0, 5
164: intr0 6, 5, 0, 0
169: loada 292, 0, 6
187: intr0 9, 6, 0, 0
192: addi 6, 0, 7
196: load 292, 0, 8
214: pullqw 7, 8, 0
218: loada 112, 0, 1
236: loada 292, 0, 2
254: eqi 1, 2, 3
258: jmpi 3, 277
268: jmp 298
277: stpushi 1
279: stpushi 2
281: stpushi 3
283: jsr 560
292: stpopi 3
294: stpopi 2
296: stpopi 1
298: loada 120, 0, 1
316: loada 292, 0, 2
334: eqi 1, 2, 3
338: jmpi 3, 357
348: jmp 378
357: stpushi 1
359: stpushi 2
361: stpushi 3
363: jsr 715
372: stpopi 3
374: stpopi 2
376: stpopi 1
378: loada 128, 0, 1
396: loada 292, 0, 2
414: eqi 1, 2, 3
418: jmpi 3, 437
428: jmp 458
437: stpushi 1
439: stpushi 2
441: stpushi 3
443: jsr 870
452: stpopi 3
454: stpopi 2
456: stpopi 1
458: loada 136, 0, 1
476: loada 292, 0, 2
494: eqi 1, 2, 3
498: jmpi 3, 517
508: jmp 540
517: loada 104, 0, 4
535: intr0 255, 4, 0, 0
540: intr0 7, 0, 0, 0
545: intr0 7, 0, 0, 0
550: jmp 34
559: rts 
560: loada 104, 0, 0
578: loada 356, 0, 1
596: intr0 6, 1, 0, 0
601: loadd 308, 0, 1
619: intr0 10, 1, 0, 0
624: loadd 40, 0, 2
642: divd 1, 2, 3
646: load 316, 0, 4
664: pulld 3, 4, 0
668: loada 380, 0, 2
686: intr0 6, 2, 0, 0
691: loadd 316, 0, 3
709: intr0 5, 3, 0, 0
714: rts 
715: loada 104, 0, 0
733: loada 380, 0, 1
751: intr0 6, 1, 0, 0
756: loadd 316, 0, 1
774: intr0 10, 1, 0, 0
779: loadd 40, 0, 2
797: muld 1, 2, 3
801: load 308, 0, 4
819: pulld 3, 4, 0
823: loada 356, 0, 2
841: intr0 6, 2, 0, 0
846: loadd 308, 0, 3
864: intr0 5, 3, 0, 0
869: rts 
870: loada 104, 0, 0
888: loada 404, 0, 1
906: intr0 6, 1, 0, 0
911: loadd 324, 0, 1
929: intr0 10, 1, 0, 0
934: loadd 40, 0, 2
952: muld 2, 1, 3
956: muld 3, 1, 4
960: load 332, 0, 5
978: pulld 4, 5, 0
982: loada 428, 0, 2
1000: intr0 6, 2, 0, 0
1005: loadd 332, 0, 4
1023: intr0 5, 4, 0, 0
1028: rts 


.data

double offset: 0, size: 8
2.718282, 

double offset: 8, size: 8
1.442695, 

double offset: 16, size: 8
0.434294, 

double offset: 24, size: 8
0.693147, 

double offset: 32, size: 8
2.302585, 

double offset: 40, size: 8
3.141593, 

double offset: 48, size: 8
1.570796, 

double offset: 56, size: 8
0.785398, 

double offset: 64, size: 8
0.318310, 

double offset: 72, size: 8
0.636620, 

double offset: 80, size: 8
1.128379, 

double offset: 88, size: 8
1.414214, 

double offset: 96, size: 8
0.707107, 

int64 offset: 104, size: 8
0, 

int64 offset: 112, size: 8
1, 

int64 offset: 120, size: 8
2, 

int64 offset: 128, size: 8
3, 

int64 offset: 136, size: 8
4, 

byte offset: 144, size: 32
49, 58, 32, 99, 97, 108, 99, 117, 108, 97, 116, 101, 32, 100, 105, 97, 109, 101, 116, 101, 114, 32, 111, 102, 32, 99, 105, 114, 99, 108, 101, 0, 

int64 offset: 176, size: 8
144, 

byte offset: 184, size: 37
50, 58, 32, 99, 97, 108, 99, 117, 108, 97, 116, 101, 32, 99, 105, 114, 99, 117, 109, 102, 101, 114, 101, 110, 99, 101, 32, 111, 102, 32, 99, 105, 114, 99, 108, 101, 0, 

int64 offset: 221, size: 8
184, 

byte offset: 229, size: 28
51, 58, 32, 99, 97, 108, 99, 117, 108, 97, 116, 101, 32, 97, 114, 101, 97, 32, 111, 102, 32, 99, 105, 114, 99, 108, 101, 0, 

int64 offset: 257, size: 8
229, 

byte offset: 265, size: 8
52, 58, 32, 113, 117, 105, 116, 0, 

int64 offset: 273, size: 8
265, 

byte offset: 281, size: 3
63, 32, 0, 

int64 offset: 284, size: 8
281, 

int64 offset: 292, size: 8
0, 

int64 offset: 300, size: 8
0, 

double offset: 308, size: 8
0.000000, 

double offset: 316, size: 8
0.000000, 

double offset: 324, size: 8
0.000000, 

double offset: 332, size: 8
0.000000, 

byte offset: 340, size: 16
99, 105, 114, 99, 117, 109, 102, 101, 114, 101, 110, 99, 101, 58, 32, 0, 

int64 offset: 356, size: 8
340, 

byte offset: 364, size: 16
100, 105, 97, 109, 101, 116, 101, 114, 58, 32, 32, 32, 32, 32, 32, 0, 

int64 offset: 380, size: 8
364, 

byte offset: 388, size: 16
114, 97, 100, 105, 117, 115, 58, 32, 32, 32, 32, 32, 32, 32, 32, 0, 

int64 offset: 404, size: 8
388, 

byte offset: 412, size: 16
97, 114, 101, 97, 58, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 

int64 offset: 428, size: 8
412, 

Here is Pi: ;)

double offset: 40, size: 8
3.141593, 

Have fun!