This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Assembly language exit() syscall does not return correct value


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]