It's written in python, so you need micropython on your calc.
All instructions I'm aware of are supported (except CDP, LDC, STC. They are useless on the Nspire)
What's still missing are some pseudoinstructions which don't add functionality but make your life easier,
like for example automatically creating x when you write LDR R0, =x
There is also no linker or anything which means that programs are just translated to binary in the order
they are written and the first line is also the entry point.
Read the readme in the spoiler below for more details on the assembly language syntax used or look at the example.
Please report bugs, missing instructions and feature suggestions.
The code is available at https://github.com/lkjcalc/nAssembler
Download at http://ti-pla.net/a821835
Install micropython on your calc.
Launch the nassembler.py.tns file using micropython.
The program will ask you to specify the input file (containing the assembly source code)
and the output file (where the binary will be stored).
You have to specify the full path (for example /documents/test/clrscr.asm.tns)
If there are no errors, micropython will now tell you "Press any key to exit".
You should now see the output file after refreshing the docbrowser
(just go to the homescreen and back to the docbrowser).
(Also look at the examples)
Instruction names must be preceded by whitespace
Labels must not be preceded by any whitespace
The instruction names and syntax are like in standard ARM assembly
(like in the official ARM online documentation)
All usual instructions are supported:
ADC(S), ADD(S), AND(S), B, BIC(S), BL, BX, CMP, CMN,
EOR(S), LDM.., LDR(B/T/BT/H/SH/SB), MCR, MLA(S), MOV(S),
MRC, MRS, MSR, MUL(S), MVN(S), ORR(S),
RSB(S), RSC(S), SBC(S), SMLAL(S), SMULL(S), STM..,
STR(B/T/BT/H), SUB(S), SVC/SWI, SWP(B), TEQ, TST, UMLAL(S), UMULL(S)
The DCD, DCDU, DCB and ALIGN directives are supported
Pseudo instruction (like PUSH, ADR etc) are not implemented at the moment.
Other instructions may be missing (report if you need one).
The first line of the source is also the entry point of the program.
Prefix with 0x for hexadecimal numbers, 0 for octal, 0b for binary.
Single characters enclosed in single quotes ' are interpreted as their ascii value
You can use DCB "some string" to create a string.