Assembly language exit() syscall does not return correct value

Brandon Chase tapedispenser7@hotmail.com
Mon Mar 15 16:29:00 GMT 2010


The following program is supposed to return a value of 222 when echo $? 
run, but I get 127 every time, no matter what I change. I have looked 
around but cannot seem to find out if this is an error or a 
cygwin-specific value.

----------------------------------------------------------
#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
#
# The following memory locations are 
used:
#
# data_items - contains the item data. A 0 is used
# to
 terminate the data
#
.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
32

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

-----------

$>
 as maximum.s -o maximum.o
$> ld maximum.o -o maximum
$>./maximum
$>echo
 $?
127











                  

 		 	   		  
_________________________________________________________________
Hotmail has tools for the New Busy. Search, chat and e-mail from your inbox.
http://www.windowslive.com/campaign/thenewbusy?ocid=PID27925::T:WLMTAGL:ON:WL:en-US:WM_HMP:032010_1

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple



More information about the Cygwin mailing list