This is the mail archive of the
cygwin
mailing list for the Cygwin project.
Assembly language exit() syscall does not return correct value
- From: Brandon Chase <tapedispenser7 at hotmail dot com>
- To: <cygwin at cygwin dot com>
- Date: Mon, 15 Mar 2010 16:23:39 +0000
- Subject: 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