Tutorial: Assembly Language with the Raspberry Pi

From dftwiki3
Revision as of 07:36, 3 July 2015 by Thiebaut (talk | contribs) (Assemble, Compile, and Run!)
Jump to: navigation, search

--D. Thiebaut (talk) 08:19, 3 July 2015 (EDT)


Work in progress... I'm putting this together as you're reading this... Stay tuned for a more polished tutorial. This is a quick introduction to writing assembly language programs for the Pi.
You can find more tutorials here:


Setup


  • Please refer to this page for information on how to set your system up. I'm using a Mac connected to the Pi via wifi, and ssh-ing to the it in a Terminal window.


First Program


  • This example is taken from thinkingeek.com's tutorial on assembly on the Pi. It is repeated here for completeness. Refer to thinkingeek.com's excellent tutorials for a deeper understanding of what is going on.


/* first.s
   from thinkingeek.com
   http://thinkingeek.com/2013/01/09/arm-assembler-raspberry-pi-chapter-1/
   Defines a main function that returns 2 as an exit code.
	
*/
	
.global main    /* 'main' must be visible by the C compiler. */
	
.func main      /* declare 'main' as a function              */
main: 
    mov r0, #2       /* load immediate value 2 into Register r0 */
    bx lr            /* return 2 to Operating Sytem             */


Create the program


Note that all the commands below must be run on the Raspberry Pi, either directly, if you have connected a keyboard and video monitor to it, or remotely, via ssh and an ethernet cable or a Wifi link.


  • ssh to the Pi using the Terminal Window. Refer to this page for how to do this.
  • Use your favorite editor on the Pi (mine is emacs), create a file called first.s and enter this code. If you are interested in bypassing the editor, simply type this:
    cat > first.s

and paste the code above. Then press ENTER, Control-D, ENTER, and this should create the file for you.
  • To verify that the file is created, type this:
   cat first.s

and you should see the contents of the file.


PiAssembly1.png


Assemble, Compile, and Run!


  • Assemble the code to create an object file:
   as -o first.o first.s

This will create the object file first.o
  • Compile it. The object file is not executable. A C compiler can read it, though, and transform it into an executable.
   gcc -o first first.o

This takes the object file first.o and generates the executable file first.
  • Run it!
   ./first

  • The program should run and not display anything. As long as you don't get an error, your have been successful. The reason there is no output is that the program does not explicitly print anything, and simply returns a number that the operating system gets. Whenever you run a program on the command line, it returns a number at the end, revealing some status information about whether the program was successful in doing whatever we asked it to do. To reveal the number, we can use the shell command "echo $?" which displays the number returned by the last program that was run from the command line.


    ./first | echo $?
    2 

The number 2 should be printed.