2010/06/18

Recent entries from same category

  1. Go 言語プログラミングエッセンスという本を書きました。
  2. errors.Join が入った。
  3. unsafe.StringData、unsafe.String、unsafe.SliceData が入った。
  4. Re: Go言語で画像ファイルか確認してみる
  5. net/url に JoinPath が入った。

golangタグが既におかしいですが...
// ; hello world on win32 writen in asm.
// ; compile: 8a helloworld.s
// ; link   : 8l -o helloworld.exe helloworld.8
// ; run    : helloworld.exe
// ; 
// ; if you get the following compile error,
// ;   maybe, namespace separator was broken by copy-and-paste.
// ; open this file with text editor as utf-8 encoding, and fix following...
// ;
// ;   main!main
// ;   main!init
// ;   runtime!printstring
// ;
// ; ! should be code point 183 in unicode.

// ; main.main
TEXT    main·main+0(SB),$16-0
LEAL    gstring+0(SB),SI
LEAL    (SP),DI
CLD     ,
MOVSL   ,
MOVSL   ,
CALL    ,runtime·printstring+0(SB)
RET

// ; main.init
TEXT    main·init+0(SB),$4-0
RET

// ; data for native
GLOBL   string+0(SB),$14
DATA    string+0(SB)/8,$"hello, w"
DATA    string+8(SB)/7,$"orld!\n\z"

// ; data for gostring
GLOBL   gstring+0(SB),$8
DATA    gstring+0(SB)/4,$string+0(SB)
DATA    gstring+4(SB)/4,$13
END     ,
goではplan9形式のアセンブリで書けば8a(6a)でコンパイルでき、8l(6l)でリンク出来るので、上のソースをコンパイルすると見事に「hello, world!」と表示される。plan9のアセンブリってアライメントが必要なのね...。あと文字列リソースはgostring用と分けて書かないとlengthが違っちゃうみたい。

途中にある変な文字「·」はutf-8で183のコードポイントです。
gist: 434256 - GitHub

hello world on win32 writen in asm.

http://gist.github.com/434256
Posted at by | Edit