¥È¥Ã¥× «Á°¤ÎÆüµ­(2006-05-31) ºÇ¿· ¼¡¤ÎÆüµ­(2006-06-15)» ÊÔ½¸

Rogue Engineer's Diary / ¤ä¤µ¤°¤ìÆüµ­

Categories | CPU¤ÎÁϤ꤫¤¿ | Modern Compiler Implementation in ML | NerdTV | PDP-11¥·¥ß¥å¥ì¡¼¥¿¤Ç¸ÅÂå¤ÎUNIX¤òư¤«¤·¤Æ¤ß¤ë | The Yakumo Project | ¤ä¤µ¤°¤ìÆÉ½ñÏ¿
ºÇ¶á¤Î¥Ä¥Ã¥³¥ß:1.Dominic(2008-06-23 05:05)  2.CheapestCheapOEMoem(2008-06-17 03:00)  3.NewDownloadCreativAdobOEM(2008-06-12 20:00)
ºÇ¶á¤Î¥È¥é¥Ã¥¯¥Ð¥Ã¥¯:1.Ç»½Ì´Ô¸µ¥ª¥ì¥ó¥¸¥Ë¥å¡¼¥¹:¥×¥í.. (2006-12-22 22:02)

2004|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|09|

2006-06-08

¢£ [Modern Compiler Implementation in ML] Âè12¾ÏÆÍÆþ¡¢"Hello World"

"Modern Compile Implementation in ML"¤â¤Ä¤¤¤ËÂè12¾Ï"Putting It All Together"¤ËÆÍÆþ¡£¤è¤¦¤ä¤¯¥³¥ó¥Ñ¥¤¥é¤Îưºî³Îǧ¥Õ¥§¡¼¥º¤ËÅþ㤹¤ë¤³¤È¤¬¤Ç¤­¤¿¡£¤Á¤Ê¤ß¤Ëº£¤Þ¤Ç¤¹¤Ã¤«¤ê½ñ¤­Ëº¤ì¤Æ¤¤¤¿¤¬¡¢ËͤλȤäƤ¤¤ëºî¶È ´Ä¶­¤Ï°Ê ²¼¤ÎÄ̤ꡧ

º£²óÀ½ºî¤·¤¿¥³¥ó¥Ñ¥¤¥é¤Ï"Modern Compile Implementation in ML"ÍѤËÀ߷פµ¤ì¤¿¶µºàÍѸÀ¸ì"Tiger"¡ÊTiger¤Ë¤Ä¤¤¤Æ¤Ï2004ǯ2·î8Æü¤Î¥¨¥ó¥È¥ê¤Ç¤â¼ã´³ÀâÌÀ¤·¤¿¡Ë¤Ç½ñ ¤«¤ì¤¿¥×¥í¥°¥é¥à¤òÆþÎÏ¤È ¤¹¤ë¡£ºÇ½é¤Ë¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¥Æ¥¹¥È¥×¥í¥°¥é¥à¤Ï¡Ê¤ªÌó«¤Î¡Ë"Hello World"¤Ç¤¢¤ë¡£¥Õ¥¡¥¤¥ë̾¤Ï"hello.tig"¡£

/* hello world */
print("Hello, World!\n")

"Modern Compile Implementation in ML"¤Î¥µ¥Ý¡¼¥È¥Ú¡¼¥¸¤Ë¤¢¤ë¥é¥¤¥Ö¥é¥ê¡¢runtime.c¤ò ¥³¥ó¥Ñ¥¤¥ë¤·¡¢¸½ºßÀ½ºî¤·¤Æ¤¤¤ë¥³¥ó¥Ñ¥¤¥é¤Î½ÐÎϤȥê¥ó¥¯¤¹¤ë¤³¤È¤Ë¤è¤ê¡¢"print"¤Ê¤É¤Î´ðËÜŪ´Ø¿ô¤¬Tiger¤«¤éÍøÍѤǤ­¤ë¤è¤¦¤Ë¤Ê¤ë¤Î¤À¤¬¡¢ ¤½¤Î¤Þ¤Þ¥³¥ó¥Ñ¥¤¥ë ¤·¤è¤¦¤È¤¹¤ë¤È¤³¤ó¤Ê¥¨¥é¡¼¤¬È¯À¸¤¹¤ë¡£

$ gcc -c runtime.c
runtime.c:1:8: warning: undefining "__STDC__"
runtime.c:106: error: conflicting types for 'getchar'
/usr/include/stdio.h:190: error: previous declaration of 'getchar' was here

¥¨¥é¡¼¤¬È¯À¸¤·¤Æ¤¤¤ë¡¢runtime.c¤Î³ºÅöÉôʬ¤Ï¤³¤ó¤Ê´¶¤¸¡£

.....
#undef getchar

struct string *getchar()
{.....

¤¶¤Ã¤È¸«¤¿¸Â¤ê¡¢¡Ê#undef getchar¤Ë¤è¤Ã¤Æ¡ËC¤Îɸ½àÆþ½ÐÎϥ饤¥Ö¥é¥ê¤Ë¤¢¤ëƱ̾¤Î´Ø¿ô/¥Þ¥¯¥í¤È¤Î¾×ÆÍ²óÈò¤ò¤·¤è¤¦¤È¤·¤Æ¤¤¤ëµ¤ÇۤϤ¢¤ë¤â¤Î¤Î¡¢ ¤½¤ì¤¬¤¦¤Þ¤¯µ¡Ç½¤·¤Æ¤¤¤Ê¤¤¡£¤¤¤í¤¤¤í¤Ê¼ê¤ò»î¤·¤Æ¤ß¤¿¤¬¡¢·ë¶Éruntime.cÆâ¤Î"*getchar()"¤ò"*getchr()"¤Ë½ñ¤­´¹¤¨¤ë¤È ¤¤¤¦¸È©¤ÊÊýË¡¤ò»È¤¤¡¢ °ìö¤·¤Î¤°¤³¤È¤Ë¤·¤¿¡£

¤ä¤Ã¤ÈËÜÈÖ¡£¤Þ¤º¤ÏStandard ML of New Jersey¤ÎÂÐÏ÷¿´Ä¶­¤Ë¤Æ¡¢"hello.tig"¤ò¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¡£

- Main.compile "test/hello.tig";
emit tigermain
val it = () : unit

¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤¿·ë²Ì¤Ï"hello.tig.s"¤È¤¤¤¦¥Õ¥¡¥¤¥ë̾¤Ç½ÐÎϤµ¤ì¤ë¡£Ãæ¤ò¸«¤ë¤È¤½¤ì¤é¤·¤¤IA32¤Î¥¢¥»¥ó¥Ö¥ê¥³¡¼¥É¤¬ ½ÐÍè¾å¤¬¤Ã ¤Æ¤¤¤ë¤Î¤¬Ê¬¤«¤ë¡§

.globl _tigermain
.def _tigermain; .scl 2; .type 32; .endef
_tigermain:
pushl %ebp
movl %esp, %ebp
subl $4, %esp
.....

½Ð¤Æ¤­¤¿¥¢¥»¥ó¥Ö¥ê¥³¡¼¥É¤ÎÁ´ÂÎÁü¤Ï¤³ ¤Á¤é¤ò»²¾È¡£Í¾·×¤Ê"movl"¤ä"jmp"¤¬ÌܤËÉÕ¤¯¤¬¡¢¤³¤ì¤é¤ÏÄÉ¡¹¼è¤ê½ü¤¤¤Æ¤¤¤¯Í½Äê¡£

¤³¤ì¤ògcc¤Ç¥³¥ó¥Ñ¥¤¥ë¤·¡¢Àè¤Û¤É¤Îruntime.c¤Î¥³¥ó¥Ñ¥¤¥ë·ë²Ì¤È¥ê¥ó¥¯¡¢¤½¤·¤Æ¡Ê¤ä¤ä¶ÛÄ¥¤·¤Ä¤Ä¡Ë¼Â¹Ô¡§

$ gcc hello.tig.s runtime.o
$ ./a.exe
o, World!
¿ðU²ç¡¦ ¡¦¡¦$¡¦±¦¡¦E¡¦E¡¦} µ¦¡¦¡¦UE¡¦ ¹¦¡¦¡¦µ¦
¡Ê……ÃæÎ¬……¡Ë
ModuleHandleA P P P P P P P P P P P P P P cygwin1.dll P KERNEL32.dll
Segmentation fault (core dumped)

¥¯¥é¥Ã¥·¥å¡£Çɼê¤Ë»¶¤Ã¤¿¡£

¼Â¹Ôľ¸å¤Ë"o, World!"¤È½Ð¤Æ¤¤¤ë¤È¤³¤í¤«¤é¤·¤Æ¡¢ºÇ½é¤Î4¥Ð¥¤¥È(="Hell")¤¬ÀÚ¤ì¤Æ¤¤¤ë¤³¤È¤Ï¤¹¤°¤Ëʬ¤«¤ë¡£¤Ê¤Ë¤«¥º¥ì¤Æ¤¤¤ë¤Î¤«¤È»×¤¤¤Ê¤¬¤é¥¢¥»¥ó¥Ö ¥ê¥³¡¼¥É¤òį¤á¤ë…¤¬¡¢¤è¤¯¤ï¤«¤é¤Ê¤¤¡£

C¤ÇƱÍÍ¤ÎÆ°ºî¤ò¤¹¤ë¥×¥í¥°¥é¥à¤ò½ñ¤¤¤Æ¡¢runtime.o¤È¥ê¥ó¥¯¡¢¼Â¹Ô¤µ¤»¤ë¤È¡¢Æ±¤¸¤è¤¦¤ËSegmentation fault¤Ç¥¯¥é¥Ã¥·¥å¤¹¤ë¡£¥³¥ó¥Ñ¥¤¥é¤ÎÌäÂê¤Ç¤Ï¤Ê¤¯¡¢¥ê¥ó¥¯¤·¤¿¥é¥¤¥Ö¥é¥ê"runtime.o"¤Ë²¿¤«¤¢¤ë¤è¤¦¤À¡£

ÌäÂê¤Î¥é¥¤¥Ö¥é¥ê¤Î¥½¡¼¥¹¤Ç¤¢¤ëruntime.c¤ò į¤á¤¿¤È¤³¤í¡¢¸¶°ø¤Ï¤¢¤Ã¤±¤Ê¤¯È½ÌÀ¤·¤¿¡£Tiger¤Ç¤ÏC¤Î¤è¤¦¤ÊNULL½ªÃ¼Ê¸»úÎó¤Ç¤Ï¤Ê¤¯¡¢Pascal·Á¼°¡¢¤Ä¤Þ¤êŤµ(4¥Ð¥¤¥È)¡Üʸ»úÎóËÜÂÎ ¤È¤¤¤¦¹½À®¤Îʸ»úÎó¤ò»È¤Ã¤Æ¤¤¤¿¤Î¤Ç ¤¢¤Ã¤¿¡£Ëܤˤâ½ñ¤¤¤Æ¤¢¤Ã¤¿¤è¤¦¤À¤¬¤¹¤Ã¤«¤ê˺¤ì¤Æ¤¤¤¿¤è¡£

¤È¤¤¤¦¤³¤È¤Ç¡¢¥³¥ó¥Ñ¥¤¥é¤«¤é½ÐÎϤµ¤ì¤ë¥¢¥»¥ó¥Ö¥ê¥³¡¼¥ÉÃæ¤Ç

...
L0:
.ascii "Hello, World!\n\0"

¤È¤Ê¤Ã¤Æ¤¤¤¿²Õ½ê¤ò¡¢

...
L0:
.int 14
.ascii "Hello, World!\n"

¤È½ÐÎϤ¹¤ë¤è¤¦¤Ë¥×¥í¥°¥é¥à¤ò½¤Àµ¤·¡¢ºÆÅÙ¥³¥ó¥Ñ¥¤¥ë¡¢¼Â¹Ô¤¹¤ë¡§

$ gcc hello.tig.s runtime.o
$ ./a.exe
Hello, World!

¤Ä¤¤¤Ëư¤¤¤¿¡£

¤Þ¤º¤ÏÂè°ìÊâ¡£¤Ç¤â¤³¤³¤«¤é¤¬Ä¹¤¤…¤Î¤À¤í¤¦¤Ê¡¢¤ä¤Ï¤ê¡£

Name / ¤ªÌ¾Á°:
E-mail:
Comment / ¥³¥á¥ó¥È
(To English posters: please do not remove the extra characters in the comment area):
ËÜÆü¤ÎTrackBacks(Á´1·ï) [TrackBack URL: http://fukumori.org/diary/tb.rb/20060608]

¤¿¤Þ¤ËÍè¤Þ¤¹¤Î¤Ç¤è¤í¤·¤¯¤ª´ê¤¤¤·¤Þ¤¹¡£

ËÜÆü¤Î¥ê¥ó¥¯¸µ


Ê¡À¹½¨Íº/Hideo Fukumori

Visitors Count: 230(yesterday) / 92(today) / 276392(total)