diff options
Diffstat (limited to 'sample/c32entry.S')
-rw-r--r-- | sample/c32entry.S | 57 |
1 files changed, 53 insertions, 4 deletions
diff --git a/sample/c32entry.S b/sample/c32entry.S index 251838d4..1ae57a2c 100644 --- a/sample/c32entry.S +++ b/sample/c32entry.S @@ -1,15 +1,64 @@ +#ident "$Id$" +# ----------------------------------------------------------------------- +# +# Copyright 2003 H. Peter Anvin - All Rights Reserved +# +# Permission is hereby granted, free of charge, to any person +# obtaining a copy of this software and associated documentation +# files (the "Software"), to deal in the Software without +# restriction, including without limitation the rights to use, +# copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom +# the Software is furnished to do so, subject to the following +# conditions: +# +# The above copyright notice and this permission notice shall +# be included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +# +# ----------------------------------------------------------------------- + +# COM32 start up code - must be linked first in the binary + + .section ".text","ax" .globl _start _start: # This first instruction acts as COM32 magic number movl $0x21cd4cff,%eax + + # Upwards string operations + cld + + # Zero the .bss segment + xorl %eax,%eax + movl $__bss_start,%edi # Symbol provided by linker + movl $_end+3,%ecx # Symbol provided by linker + subl %edi,%ecx + shrl $2,%ecx + rep ; stosl + + # Copy COM32 invocation parameters leal 4(%esp),%esi movl $__com32,%edi - mov $5,%ecx - cld - rep ; movsl + movl $6,%ecx + cmpl (%esi),%ecx + jbe 1f + movl (%esi),%ecx +1: rep ; movsl + + # Run program; we call this __start rather than main since we + # did not parse the command line or anything like that. jmp __start .section ".bss","a" .globl __com32 -__com32: .space 20 +__com32: .space 24 |