Linux Assembly HOWTO
Prev | Chapter 6. Quick start | Next

# 6.4. MIPS Example

As a demonstration of a fact that there's a universe other than x86, here comes an example program for MIPS by Spencer Parkin. BTW, if you've got here, you may also want to see A Collection of Assembler Hello World Programs.

    # hello.S	by Spencer T. Parkin

    # This is my first MIPS-RISC assembly program!
    # To compile this program type:
    # > gcc -o hello hello.S -non_shared

    # This program compiles without errors or warnings
    # on a PlayStation2 MIPS R5900 (EE Core).
    # EE stands for Emotion Engine...lame!

    # The -non_shared option tells gcc that we`re
    # not interrested in compiling relocatable code.
    # If we were, we would need to follow the PIC-
    # ABI calling conventions and other protocols.

    #include <asm/regdef.h>		// ...for human readable register names
    #include <asm/unistd.h>		// ...for system serivices

    		.rdata					# begin read-only data segment
    		.align		2			# because of the way memory is built
    hello:		.asciz		"Hello, world!\n"	# a null terminated string
    		.align		4			# because of the way memory is built
    length:		.word		. - hello		# length = IC - (hello-addr)
    		.text					# begin code segment
    		.globl		main			# for gcc/ld linking
    		.ent		main			# for gdb debugging info.
    main:		# We must specify -non_shared to gcc or we`ll need these 3 lines that fallow.
    #		.set		noreorder		# disable instruction reordering
    #		.cpload		t9			# PIC ABI crap (function prologue)
    #		.set		reorder			# re-enable instruction reordering
    		move		a0,$0			# load stdout fd
    		la		a1,hello		# load string address
    		lw		a2,length		# load string length
    		li		v0,__NR_write		# specify system write service
    		syscall					# call the kernel (write string)
    		li		v0,0			# load return code
    		j		ra			# return to caller
    		.end		main			# for dgb debugging info.

    # That`s all folks!

Prev | Home | Next
Building an executable | Up | Resources