Difference between revisions of "CSC231 Lab 7 2010"

From dftwiki3
Jump to: navigation, search
(Problem #1: Pascal's Triangle with Functions)
(Problem #1: Pascal's Triangle with Functions)
Line 12: Line 12:
 
=Problem #1: Pascal's Triangle with Functions=
 
=Problem #1: Pascal's Triangle with Functions=
  
 +
==Setup==
 
* Use the same setup as for [[CSC231 Homework 5 2010 | Homework 5]].  In particular you will need
 
* Use the same setup as for [[CSC231 Homework 5 2010 | Homework 5]].  In particular you will need
 
** [[CSC231_asm_io.asm | asm_io.asm]]
 
** [[CSC231_asm_io.asm | asm_io.asm]]
Line 69: Line 70:
  
 
:verify that you do not get any errors (it won't print anything).
 
:verify that you do not get any errors (it won't print anything).
 +
 +
==Approach==
 +
 +
* Use the top-down approach
 +
 +
* Pass parameters through registers first.  It's simpler.
 +
 +
* When that works, modify your program so that it passes parameters through the stack.
 +
 +
<br />
 +
<br />
 +
<br />
 +
<br />
 +
<br />
 +
<br />
 +
<br />
 +
<br />
 +
<br />
 +
<br />
 +
[[Category:CSC231]][[Category:C]][[Category:Asm]]

Revision as of 08:51, 5 November 2010

--D. Thiebaut 13:37, 5 November 2010 (UTC)


Be sure to work on Grendel, since we need to be in 32-bit mode, and we need both the C-compiler and the assembler to be compatible. They are not when we work on Beowulf.





Problem #1: Pascal's Triangle with Functions

Setup

  • Use a Makefile to make your executable. Call it Makefile with an uppercase M. It assumes that your assembly program is going to be called lab7.asm. If you are using a different file name, then change the PROG line in the make file.


CC = gcc
LD = gcc
NASM = nasm 

CFLAGS =  -c
LFLAGS = 
NASMFLAGS = -f elf -F stabs

PROG = lab7

OBJS = asm_io.o $(PROG).o driver.o


default: $(PROG)

$(PROG): $(OBJS) 
	$(LD) $(LFLAGS) $(OBJS)  -o $(PROG)

asm_io.o: asm_io.asm
	$(NASM) $(NASMFLAGS) asm_io.asm

$(PROG).o: $(PROG).asm asm_io.inc
	$(NASM) $(NASMFLAGS) $(PROG).asm

driver.o: driver.c 
	$(CC) $(CFLAGS) driver.c

clean:
	rm -rf *.o *~

real_clean:
	 rm -rf *.o $(PROG) *~

Note: In Makefiles, make sure that the lines that do not start at the left-most margin start with a Tab character, not a space.


  • Before coding anything, verify that you have valid components for your program. At the prompt, type
     make
and you should get an executable called lab7. Run it:
     ./lab7
verify that you do not get any errors (it won't print anything).

Approach

  • Use the top-down approach
  • Pass parameters through registers first. It's simpler.
  • When that works, modify your program so that it passes parameters through the stack.