Assembly language exit() syscall does not return correct value
Brandon Chase
tapedispenser7@hotmail.com
Sun Mar 21 15:45:00 GMT 2010
>On 16/03/2010 17:08, Stephan Mueller wrote:
> Brandon Chase wrote:
> " DaveK wrote:
> " " Brandon, Cygwin isn't compatible with Linux at the assembler-code level,
> " So I cannot compile assembly language with Cygwin? Do I need a linux shell?
>> No, that's not what anyone said. You can use the assembler on Cygwin to generate
> binaries that run on Cygwin (which is I think what you're looking for), but your
> assembly source code won't work as is -- you will need to make changes of the
> sort that DaveK and cgf state in the paragraphs above.
Exactly. Like so, for example:
> $ cat max.s
> .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 _main
>> _main: 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
> # But we don't have linux syscalls! Instead, we do
> # a c-style call to the exit() function by pushing it
> # onto the stack!
> push %ebx
> call _exit
> # won't return.
>> $ gcc max.s -o max.exe
>> $ ./max.exe ; echo $?
> 222
>> $
> Note use of the gcc driver to compile it, rather than invoking the assembler
>and linker directly, in order to let it get all the C runtime support linked
>in correctly.
>> cheers,
> DaveK
Thanks a lot! So I need to do all c-style syscalls for Cygwin?
Brandon
_________________________________________________________________
Hotmail: Trusted email with powerful SPAM protection.
http://clk.atdmt.com/GBL/go/210850553/direct/01/
--
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