This is my project for Computer Organization, Shi Qingsong, Zhejiang University.
The MIPS assembler is based on the MIPS 32 specification, with some custom extensions.
The MIPS IDE is built upon SWT, packaged with launch4j for Windows executable.
This MIPS assembler mainly complies with the specifications from "MIPS Assembly Language Programmer’s Guide" and "MIPS32 Architecture For Programmers Volume II: The MIPS32 Instruction Set".
95 Instrucitons:
- ADD
 - ADDI
 - ADDIU
 - ADDU
 - AND
 - ANDI
 - B
 - BEQ
 - BEQL
 - BGEZ
 - BGEZAL
 - BGEZALL
 - BGEZL
 - BGTZ
 - BGTZL
 - BLEZ
 - BLEZL
 - BLTZ
 - BLTZAL
 - BLTZALL
 - BLTZL
 - BNE
 - BNEL
 - BREAK
 - COP2
 - DERET
 - DIV
 - DIVU
 - ERET
 - J
 - JAL
 - JALR
 - JR
 - LA
 - LB
 - LBU
 - LDC1
 - LDC2
 - LH
 - LHU
 - LI
 - LL
 - LUI
 - LW
 - LWC1
 - LWC2
 - LWL
 - LWR
 - MFC0
 - MFHI
 - MFLO
 - MOVE
 - MOVN
 - MOVZ
 - MTC0
 - MTHI
 - MTLO
 - MULT
 - MULTU
 - NOR
 - NOP
 - OR
 - ORI
 - PREF
 - SB
 - SC
 - SDC1
 - SDC2
 - SH
 - SLL
 - SLLV
 - SLT
 - SLTI
 - SLTIU
 - SLTU
 - SRA
 - SRAV
 - SRL
 - SRLV
 - SUB
 - SUBU
 - SW
 - SWC1
 - SWC2
 - SWC3
 - SWL
 - SWR
 - TLBP
 - TLBR
 - TLBWI
 - TLBWR
 - SYSCALL
 - WAIT
 - XOR
 - XOR
 
10 directives:
- .TEXT
 - .DATA
 - .ASCII
 - .ASCIIZ
 - .BYTE
 - .HALF
 - .WORD
 - .SPACE
 - .EVAL
 - .ECHO
 
JavaScript expression is supported for operands, while .eval can evaluate a JavaScript expression anywhere and .echo can echo the JavaScript returned string as the source code to assemble in place.
Numerous error checks are done during the process of assembly, including illegal operand, immediate overflow, missing or duplicate label, text and data section overlap, etc.
Available output formats include binary, COE and a debug mode.
Disassembling can be done by opening a binary or COE file. All the instructions listed above and labels are supported, and multiple bytes of zero can be compressed into a .space directive.
- 
Native GUI on Linux, Windows and Mac OSX.
 - 
Drag-and-drop to open a file.
 - 
Printing support.
 - 
Line number and syntax highlighting.
 
usage: mipsasm [OPTION]...
 -g,--graphical       Launch graphical user interface
 -h,--help            Display this help and exit
 -i,--input <FILE>    Read input from FILE
 -o,--output <FILE>   Write output to FILE
 -t,--terminal        Launch in terminal mode
 -w,--writer <TYPE>   Use writer of TYPE. TYPE can be 'binary', 'coe',
                      'debug' (the default), or 'hexdebug'
# "Hello World" in MIPS assembly
# From: http://labs.cs.upt.ro/labs/so2/html/resources/nachos-doc/mipsf.html
	# All program code is placed after the
	# .text assembler directive
	.text 0x0
# The label 'main' represents the starting point
main:
	# Run the print_string syscall which has code 4
	li	$v0, 4		# Code for syscall: print_string
	la	$a0, msg	# Pointer to string (load the address of msg)
	syscall
	li	$v0, 10		# Code for syscall: exit
	syscall
	# All memory structures are placed after the
	# .data assembler directive
	.data 0x20
	# The .asciiz assembler directive creates
	# an ASCII string in memory terminated by
	# the null character. Note that strings are
	# surrounded by double-quotes
msg:	.asciiz	"Hello World!\n"

