CSC231 nasmld script

From dftwiki3
Revision as of 07:54, 30 September 2015 by Thiebaut (talk | contribs)
Jump to: navigation, search

--D. Thiebaut 09:18, 7 November 2012 (EST)
revised --D. Thiebaut (talk) 08:12, 16 September 2014 (EDT)


Preparation and Mini Lab


  • Creating a bash script is a very simple process:
  1. use emacs to create a text file (the same as an assembly file). Give it a catchy name. For example myScript.sh (.sh is a common extension for scripts).
  2. write this as the first line of the script:
  #! /bin/bash

  1. add comments that start with the # character. Document the script with a header.
  2. add Linux commands, one per text line.
  3. save your file
  4. and make it executable:
  chmod a+x myScript.sh

(make sure the file name is the one you created with emacs!)
  1. and you're done!
  2. You can now run your script as follows:
  ./myScript.sh


Understanding Command-Line Parameters


  • Create the following script, called script1.sh:


#! /bin/bash
# script1.sh
# your name
# demo script

echo "program name =  $0"
echo "first parameter = $1"
echo "second parameter = $2"


  • make your script executable and run it with a few parameters:


 chmod a+x 
 ./script1.sh
 ./script1.sh hello beautiful world!
 ./script1.sh 1 + 2 = 3

Version 1


#! /bin/bash
# nasmld
# D. Thiebaut
# assembles and links an assembly program for 
# a Pentium processor running Linux
# To create the script, edit with your favorite text editor,
# save to current directory or to ~/bin, and make executable:
# 
#     chmod +x nasmld
#
set -e   # stop on error

filename=$(basename "$1")
filename="${filename%.*}"

nasm -f elf -F stabs $filename.asm
ld -o $filename -melf_i386 $filename.o
rm $filename.o
./$filename



Version 2: more sophisticated


This version stops and gives an error message if nasm or ld return an error.

#! /bin/bash
# nasmld
# D. Thiebaut
# assembles and links an assembly program for 
# a Pentium processor running Linux.
# To create the script, edit with your favorite text editor,
# save to current directory or to ~/bin, and make executable:
# 
#     chmod +x nasmld
#

# display syntax if user forgets
if [ ! -n "$1" ]
then
  echo "Usage: `basename $0` progName"
  exit 1
fi  

# remove the ".asm" part of the filename
filename=$(basename "$1")
filename="${filename%.*}"

# assemble and generate a listing (optional)
nasm -f elf -F stabs $filename.asm -l $filename.lst

# if we get errors, stop
if [ "$?" -ne "0" ]; then
    echo "*** Nasm ERROR! ***"
    exit
fi

# link
ld -melf_i386 -o $filename $filename.o

# if we get errors, stop
if [ "$?" -ne "0" ]; then
    echo "Link ERROR! ***"
    exit
fi

# no errors, run the program!
rm $filename.o
./$filename


Usage


If you have a program, say HelloWorld.asm, and want to assemble, link and run it, simply type:

  nasmld  HelloWorld.asm

at the command line, or, if that doesn't work:

  ./nasmld HelloWorld.asm