Difference between revisions of "CSC231 nasmld script"

From dftwiki3
Jump to: navigation, search
(Version 2: more sophisticated)
(=A More Sophisticated Assemble/Link Script: Version 2)
Line 125: Line 125:
 
<br />
 
<br />
  
==A More Sophisticated Assemble/Link Script: Version 2=
+
==A More Sophisticated Assemble/Link Script: Version 2==
=
 
 
<br />
 
<br />
 
This version stops and gives an error message if nasm or ld return an error.
 
This version stops and gives an error message if nasm or ld return an error.

Revision as of 09:04, 30 September 2015

--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


Step 1


  • 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


  • You should now understand what $0, $1, and so on refer to in a bash script.

Step 2


  • Modify your script and add a few lines:


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

echo "Your input line is $@"
echo "You have entered $# parameters"
echo "program name =  $0"
echo "first parameter = $1"
echo "second parameter = $2"


Step 3: testing if the # of parameters is correct


  • Another modification: we check to see if $1, the first parameter on the command line, exists. If it doesn't, then we display some syntax/usage information for the user, and the script stops.


#! /bin/bash
# script1.sh
# your name
# an example script that makes sure there's 1 parameter before displaying
# what is found on the command line.


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

# display various quantities referring to the command line.
echo "your input line is $@"
echo "you have entered $# parameters"
echo "program name =  $0"
echo "first parameter = $1"
echo "second parameter = $2"





An Assemble/Link Script: 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



A More Sophisticated Assemble/Link Script: Version 2


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