"Frank Kotler" <spamtrap@[EMAIL PROTECTED]
> wrote in message
news:OyVOj.3194$y63.2632@[EMAIL PROTECTED]
> Yeah... it's different in Windows. A "hello world in a window" is as
> complicated as the X version, or worse. Something simpler will suffice.
I
> can't find a Windows example that's "right" - "push -11" is *not* right,
> we're supposed to push -11 and call GetStandardHandle and use the return
> from *that* as a handle. This worked anyway, in win98, IIRC. It'll do...
> push dword 0 ; ??? unicode flag???
> push dword num_chars ; return value
> push dword MSGLEN
> push dword msg
> push dword -11 ; can this be right???
> call WriteFile
As you pointed out above, this isn't right. A 64-bit Windows
example in GAS:
C:\gfortran\test\gas>type hello.s
...text
_main:
sub $40, %rsp
movl $-11, %ecx # STD_OUTPUT_HANDLE
call _GetStdHandle
movq %rax, %rcx # hFile
leaq lpBuffer(%rip), %rdx # lpBuffer
movl nNumberOfBytesToWrite(%rip), %r8d # nNumberOfBytesToWrite
leaq lpNumberOfBytesWritten(%rip), %r9 # lpNumberOfBytesWritten
andq $0, 32(%rsp) # lpOverlapped
call _WriteFile
xorl %ecx, %ecx
call _ExitProcess
add $40, %rsp # Should never be reached
ret
...data
lpBuffer:
.ascii "Hello, world."
.byte 13, 10
nNumberOfBytesToWrite:
.long . - lpBuffer
...align 4
lpNumberOfBytesWritten:
.long 0
C:\gfortran\test\gas>as hello.s -ohello.o
C:\gfortran\test\gas>ld hello.o -ohello.exe -lkernel32 -luser32
C:\gfortran\test\gas>hello
Hello, world.
Examples may be found on the GoAsm web pages:
http://www.jorgon.freeserve.co.uk/GoasmFrame.htm
Jeremy Gordon has 32-bit and 64-bit Windows examples in the
appendices, both console and Windows programs. For do***entation
on the Win32 API functions, it's hard to beat msdn. I think your
example won't work well because you are not sending a handle given
you by Windows for the file handle.
--
write(*,*) transfer((/17.392111325966148d0,6.5794487871554595D-85, &
6.0134700243160014d-154/),(/'x'/)); end


|