Mail Archives: cygwin/2010/03/15/11:57:00
On Mon, Mar 15, 2010 at 04:23:39PM +0000, Brandon Chase wrote:
>
>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
I cleaned this up to remove the odd wrapping and strange
characters:
.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
If, in theory, I got this right then, on linux it SEGVs. I would
not expect anything different on Cygwin. It seems like you need
to actually call exit() if you want this to exit.
cgf
--
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
- Raw text -