helpProgramming from the Ground Up Book - Support: sr #106602, Segmentation fault

 
 

sr #106602: Segmentation fault

Submitted by:  None
Submitted on:  Sat 10 Jan 2009 05:38:03 PM UTC  
 
Category: NonePriority: 5 - Normal
Severity: 3 - NormalStatus: None
Privacy: PublicAssigned to: None
Originator Email: -unavailable-Open/Closed: Open
Operating System: None

Add a New Comment (Rich MarkupRich Markup):
   

You are not logged in

Please log in, so followups can be emailed to you.

 

Sat 10 Jan 2009 05:38:03 PM UTC, original submission:

Hi there,

I'm really new to native programming, being a web developer, so I may just be missing something obvious. I'm trying to compile the maximum program in your book. I'm using Ubuntu 8.10, and I go to the terminal and assemble and link the program, and when I try to execute the program, I get "Segmentation Fault". Googling on the web, segmentation fault refers to trying to access protected memory, so I'm thinking maybe there's something in the modern Linux distros that blocks of the registers used in this program? Just a thought. Anyway, I'm attaching the source code to the example. Any help would be great.

Thanks,
Chris

#PURPOSE: This program finds the maximum number of a set
# of data items.
#

#VARIABLES: The registers have the following uses:
#
# %edi - Holds the index of the data item being examined.
# %ebx - Largest data item found
# %eax - Current data item
#

.section .data

data_items: #These are the data items
.long 3, 67, 34, 222, 45, 75, 54, 34, 44, 33, 22, 11, 66, 0

.section .text

.globl _start
_start:
movl $0, %edi # move 0 into the index register
movl data_items(,%edi,4), %eax # load the first byte of data
movl %eax, %ebx # since this is the first item,
# %eax is the biggest

start_loop: # start loop
cmpl $0, %eax # check to see if we've hit the end
je loop_exit
incl %edi #load next value
movl data_items(,%edi,4), %eax
cmpl %ebx, %eax # compare values
jle start_loop # jump to loop beginning if the
# new one isn't bigger
movl %eax, %ebx # move the value as the largest
jmp start_loop # jump to loop beginning

loop_exit:
# %ebx is the status code for the exit system call
# and it already has the maximum number
movl $1, %eax #1 is the exit() syscall
int $0x80

Anonymous

 

(Note: upload size limit is set to 16384 kB, after insertion of the required escape characters.)

Attach File(s):
   
   
Comment:
   

No files currently attached

 

Depends on the following items: None found

Items that depend on this one: None found

 

Carbon-Copy List
  • -unavailable- added by None (Submitted the item)
  •  

    Do you think this task is very important?
    If so, you can click here to add your encouragement to it.
    This task has 0 encouragements so far.

    Only logged-in users can vote.

     

    Please enter the title of George Orwell's famous dystopian book (it's a date):

     

     

    No Changes Have Been Made to This Item

    Back to the top


    Powered by Savane 3.1-cleanup