A Not Very Happy Interpreter
The interpreter is not very happy. I have used the OpCode jump address without considering the Subleq actual address (i.e. the OpCode instruction size does not match the Subleq macro size). This is a bit tricky as I do not calculate Subleq instructions lengths and therefore cannot calculate the Subleq address directly (at least in OpCode2Subleq). A good fix is to precede each Subleq instruction with a label identifying the OpCode Address, eg. "_OPCxxxxx". This has no cost to the final integer code size.
The use of the OpCode instruction pointer label "_OPCxxxxx" works very well. Very easy to find the OPC code in Subleq now.
Fixed a coding error, where I coded "jz" as if it was "jeqz"? Fixed and now the interpreter executes and presents the correct answer.
Subleq Efficiency
Here is the final test of my tool train:
C:\AlanX\SimpleC\OpCode2Subleq>SimpleC -o 1.opc 0<1.sc Tokenised Code: Line 1: BEGIN Line 2: A = 4 Line 3: B = 1 Line 4: IF A < B THEN Line 5: WRITE A * 10 < B Line 6: ELSE BEGIN Line 7: WRITE 1 < B * 10 Line 8: WRITE B * 10 , ( A + B ) * ( - 5 ) Line 9: END Line 10: C = - 1 Line 11: WRITE C Line 12: END Done. C:\AlanX\SimpleC\OpCode2Subleq>OpCode2Subleq -i 1.opc -o 1.sasm C:\AlanX\SimpleC\OpCode2Subleq>Subleq_Asm -i 1.sasm -o 1.code -l 1.list C:\AlanX\SimpleC\OpCode2Subleq>Subleq_Int -i 1.code -l 1.list -t 1.trace SUBLEQ Interpreter 1 10 -25 -1 Interpreter finished C:\AlanX\SimpleC\OpCode2Subleq>pause Press any key to continue . . .
Code Efficiency
12 lines of high level code became 95 words (73 OpCodes) which turned into
5530 words of Subleq code (1903 lines of uncommented code). That is about 26 lines of Subleq per OpCode. And the code takes a full 4 seconds to execute!
AlanX
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.