UMBC CMSC 313, Computer Organization & Assembly Language, Fall 2004, Section 0101

NASM on linux.gl.umbc.edu


Setting Up

On linux.gl.umbc.edu, you do not need to do any setting up. You should be able to invoke NASM on the command line just by typing "nasm" as long as "/usr/local/bin/" is in your PATH (it should be).

If you are going to install the NASM assembler on your own machine, you should use the same version as the one installed on linux.gl.umbc.edu, which is version 0.98.38. The CD-ROM included in the textbook might have an older version. A copy of version 0.98.38 is available locally at:

/afs/umbc.edu/users/c/h/chang/pub/cs313/nasm-0.98.38.tar.gz The latest version is available from the official NASM web site.


Running NASM

Suppose you have an assembly language program in a file called "hello.asm". You can assemble it for Linux with the command: nasm -f elf hello.asm The "-f elf" option tells nasm to output the object code in the Executable and Linking Format (ELF) that Linux uses. This creates an object file called "hello.o". The object code is still not executable. To create an executable file, we must use the linking loader "ld": ld hello.o This then creates an "a.out" file that you can execute from the Linux command line.

If the loader complains that it cannot find the entry symbol _start, it is because you do not have a global label _start for the entry point of your program. To fix this problem, the beginning of the code section of your program should look like:

SECTION .text ; Code section. global _start _start: ; Entry point.

Another useful option in nasm is "-l" for specifying a listing file. The command:

nasm -f elf hello.asm -l hello.lst which will produce a listing file named "hello.lst". The listing file conatins both the source listing of the assembly language program and the machine code for each assembly language operation.

The "-g" option for nasm unfortunately does next to nothing. It is supposed to generate debugging information placed in the object file for the debugger. However, this is still an unimplemented feature in NASM.

For more information on running NASM, consult Chapter 2 of the online NASM manual, or type

nasm -help


Last Modified: 20 Aug 2004 15:41:46 EDT by Richard Chang
to Fall 2004 CMSC 313 Section Homepage