Mail Archives: cygwin/2010/03/17/23:21:45
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
--
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 -