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)
Á°²ó¤Ïprintint()¤È¤¤¤¦´Ø¿ô¤¬Àµ¾ï¤Ëư¤¯¤È¤³¤í¤Þ¤Ç¿Ê¤á¤¿¤¬¡¢º£½µ¤Ï¤³¤ì¤ò»È¤Ã¤Æ¿¿ÌÌÌÜ¤ËÆ° ºî³Îǧ¤ò¹Ô¤¦¡£¤Þ¤º¤ÏÇÛÎó¤Î½é´ü²½¤ÈÆâÍÆ¤Î»²¾È¤ÏÌäÂê¤Ê¤¯¥¯¥ê¥¢¡£Â³¤¤¤Æ¥ì¥³¡¼¥É·¿¤Î³Îǧ¤Ë¿Ê¤à¡£Ê¸»úÎó¤ÈÀ°¿ô¤Î¥á¥ó¥Ð¤ò¤½¤ì¤¾¤ì°ì¤Ä¤º¤Ä»ý¤Ä¥ì¥³¡¼¥É·¿ ¤òÄêµÁ¤·¡¢Àµ¤·¤¯Ãͤ¬³ÊǼ¤µ¤ì¤Æ¤¤¤ë¤«¤ò³Îǧ¤¹¤ë¥Æ¥¹¥È¥×¥í¥°¥é¥à¤òÍѰդ¹¤ë¡£
/* a record type and a record variable */
let function printint(i: int) = (...6·î15Æü¤ÎÆüµ»²¾È...)
type rectype = {name:string, age:int}
var rec1:rectype := rectype {name="Nobody", age=1000}
in print("rec1.name = ");print(rec1.name);print("\n");
print("rec1.age = ");printint(rec1.age)
end
¤³ ¤ì¤ò¥³¥ó¥Ñ¥¤¥ë¸å¡¢¼Â¹Ô¤¹¤ë¤È…
$ ./a.exe
Segmentation fault (core dumped)
¥¯ ¥é¥Ã¥·¥å¤¹¤ë¡Ê¤â¤Ï¤ä¶Ã¤¯¤Û¤É¤Î¤³¤È¤Ç¤Ï¤Ê¤¤¤¬…¡Ë¡£¤µ¤é¤ËÄ´¤Ù¤Æ¤ß¤ë¤È¡¢print()´Ø¿ô¤ò¼è¤ê½ü¤¤¤¿¤ê¡¢½ç½ø¤òÊѹ¹¤¹¤ë¤ÈÀµ ¾ï¤Ëưºî¤¹¤ë¤³¤È¤¬Ê¬¤«¤Ã¤¿¡£¤É¤¦¤ä¤é´Ø¿ô¸Æ½Ð¤·¸å¤Ë¥ì¥¸¥¹¥¿¤ÎÆâÍÆ¤¬¾å½ñ¤¤µ¤ì¤Æ¤¤¤ë¤Î¤¬ÌäÂê¤Ç¤¢¤ë¤é¤·¤¤¡£
IA32 ¥¢¡¼¥¥Æ¥¯¥Á¥ã¤Ë¤Ï¡¢EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP¤È¤¤¤¦Ì¾Á°¤Î¤Ä¤¤¤¿¡¢¹ç·×8¤Ä¤ÎÈÆÍѥ쥸¥¹¥¿¤¬¤¢¤ë¡£¤³¤ì¤é¤Î¤¦¤Á¡Ê¥¹¥¿¥Ã¥¯¾å¤ËÃÖ¤¤¤¿ÃͤδÉÍý¤Ë»È¤¦¡ËEBP¤ÈESP¤ò½ü¤¤¤¿6¤Ä¤Î¥ì¥¸¥¹¥¿¤ò¤ä ¤ê¤¯¤ê¤·¤Ê¤¬¤é·×»»¤ò¿Ê¤á¤Æ¤¤¤¯¡£´Ø¿ô¤Î¸Æ¤Ó½Ð¤·Á°¸å¤Ç¥ì¥¸¥¹¥¿¤ÎÃͤ¬¾å½ñ¤¤µ¤ì¤ë¤³¤È¤âÅöÁ³È¯À¸¤·¤¦¤ë¤Î¤Ç¡¢¤³¤ì¤ËÂбþ¤¹¤ë¤¿¤á¤Î¥ë¡¼¥ë¤â·è¤á¤é¤ì¤Æ¤¤ ¤ë¡£
º£²óÌäÂê¤È¤Ê¤Ã¤¿¤Î¤Ï¡¢"caller save", "callee save"¤È¤¤¤¦¥ë¡¼¥ë¤Ë¤Þ¤Ä¤ï¤ëÉô ʬ¤Ç¤¢¤Ã¤¿¡£´Êñ¤Ë¤Þ¤È¤á¤ë¤È¡¢¤¢¤ë´Ø¿ô¤¬´Ø¿ô¸Æ¤Ó½Ð¤·¤ò¹Ô¤¦¤È¤¤Ë¡¢
¤Ç¤¢¤ë¡£Àè¤Ë½Ò¤Ù¤¿IA32¤Î¥ì¥¸¥¹¥¿¤Î¤¦¤Á¡¢ ¤É¤ì¤ò"caller save"¤¢¤ë¤¤¤Ï"callee save"¤µ¤»¤ë¤«¤Ï¥Ï¡¼¥É¥¦¥§¥¢Åª¤Ë¤Ï·è¤á¤é¤ì¤Æ¤ª¤é¤º¡¢OS¤ä¥³¥ó¥Ñ¥¤¥é¤¬·è¤á¤¿¥ë¡¼¥ë¤Ë½¾¤¦¤³¤È¤Ë¤Ê¤ë¡£¤È¤³¤í¤¬Intel¤Î»ñÎÁ¤òį¤á¤Æ¤ß¤Æ¤â¤½ ¤Î¤¢¤¿¤ê¤Î¼ê¤¬¤«¤ê¤¬¸«¤Ä¤«¤é¤Ê¤¤¡£
¤È¤¤¤¦¤³¤È¤Ç¥Í¥Ã¥È¾å¤òõ¤·²ó¤Ã¤Æ¤½¤ì¤é¤·¤¤»ñÎÁ¤òÅö¤¿¤ë¡£"Calling conventions for different C++ compilers and operating systems" ¤ä"yuno¤Î»¨µ Ä¢wiki - IA32"¤ò¸«¤ë¤È¡¢¤É¤¦¤ä¤éWindows, Linux¶¦¤ËEBX, EBP, ESI, EDI¤ò"callee save"¤Î¥ë¡¼¥ë¤Ë½¾¤¤¡¢¸Æ¤Ó½Ð¤µ¤ì¤¿´Ø¿ô¤ÇÃͤòÊݸ¤·¤Æ¤ª¤¯É¬Íפ¬¤¢¤ë¤é¤·¤¤¡£GCC¤Ç¤ä¤äÂç¤á¤Ê¥×¥í¥°¥é¥à¤Î¥¢¥»¥ó¥Ö¥ê¥ê¥¹¥È¤ò½ÐÎϤµ¤»¤ë¤È¡¢¤ä¤Ï ¤ê¤³¤ì¤é4¤Ä¤Î¥ì¥¸¥¹¥¿¤òÂàÈò¤µ¤»¤Æ¤¤¤ë¤³¤È¤¬Ê¬¤«¤Ã¤¿¡£
¤È¤¤¤¦¤³¤È¤Ç´Ø¿ô¸Æ¤Ó½Ð¤·¤ÎÁ°¸å¤ò°Ê²¼¤Î¤è¤¦¤Ë½¤Àµ¤¹¤ë ¤³¤È¤ÇÂбþ¤·¤¿¡£½¤ÀµÉôʬ¤È¥³¥á¥ó¥È¤ÏÀÖ»ú¤Ç¼¨¤µ¤ì¤Æ¤¤¤ë¡£
_L1:
pushl %ebp ← EBP¤Ïº£²ó¤Î½¤ÀµÁ°¤«¤éÂàÈò¤µ¤ì¤Æ¤¤¤ë
movl %esp, %ebp
pushl %edi ← EBX, ESI, EDI¤òÂàÈò
pushl %esi
pushl %ebx
subl $8, %esp ← °ú¿ô¤È¥í¡¼¥«¥ëÊÑ¿ô¤ÎÎΰèʬ¤À¤±ESP¤òÊäÀµ
(...) ← ´Ø¿ôËÜÂΤò¼Â¹Ô
addl $8, %esp
popl %ebx ← EBX, ESI, EDI¤òÉü¸µ
popl %esi
popl %edi
leave
ret
ư ºî³Îǧ¤Î·ë²Ì¤âÎɹ¥¡£¤³¤ì¤Ç¤Ê¤ó¤È¤«¤Ê¤ê¤½¤¦¤À¡£ËÜÅö¤ÏEBX, ESI, EDI¤Î³Æ¥ì¥¸¥¹¥¿¤Î¤¦¤Á´Ø¿ôËÜÂΤǤϻȤï¤ì¤Æ¤¤¤Ê¤¤¤â¤Î¤Ë¤Ä¤¤¤Æ¤Ï¡¢ÂàÈò¤ÈÉü¸µ¤ò¾Êά¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡Ê¸½¤ËGCC¤Ç¤Ï¤½¤Î¤è¤¦¤Ë¤·¤Æ¤¤¤ë¡Ë¤Î¤Ç¤¢¤ë ¤¬¡¢º£²ó¤Ï̵¾ò·ï¤ÇÂàÈò¡¦Éü¸µ¤ò¹Ô¤Ã¤Æ¤¤¤ë¡£¤³¤ì¤Ë¤Ä¤¤¤Æ¤Ï¤Þ¤¿²þ¤á¤Æ¹Í¤¨¤ë¤³¤È¤Ë¤·¤è¤¦¡£
´Ø¿ôËöÈø¤ËleaveÌ¿Î᤬¤¢¤ë¤Î¤ËËÁƬ¤ËenterÌ¿Î᤬¤Ê¤¤¤Î¤Ï¤ï¤¶¤È?
´ØÏ¢¤·¤Æ¡¢¥í¡¼¥«¥ëÊÑ¿ô¤¬Ç˲õ¥ì¥¸¥¹¥¿¤ÎÂàÈò(¤·¤«¤â¾ÍèŪ¤Ë¤Ï¾Êά¤â¤¢¤ë¤ó¤À¤í?)¤Ë¾å²¼¶´¤Þ¤ì¤Æ¤¤¤ë¤È¤¤¤¦¤Î¤Ï¤¢¤Þ¤êµ¤»ý¤Á¤è¤¯¤Ê¤¤¤Ê¡£¥¹¥¿¥Ã¥¯¥Õ¥ì¡¼¥à¤Î¹½Â¤¤ò¤â¤¦¾¯¤·À°Íý¤·¤¿¤¤¤È¤³¤í¤À¡£
¤¢¤È¡¢¤Ä¤Þ¤ó¤Ê¤¤¤³¤È¤À¤¬¡¢calling convention¤ÏOS¤ä¥³¥ó¥Ñ¥¤¥é¤¬·è¤á¤ë¤³¤È¤Ê¤ó¤À¤«¤é¡¢Intel¤Î»ñÎÁ(¤Ã¤Æ¤É¤ÎÈϰϤÀ¤«Ê¬¤«¤é¤Ê¤¤¤±¤É¿ʬ¥×¥í¥»¥Ã¥µ¤Î¥Þ¥Ë¥å¥¢¥ë¤À¤è¤Í)¤Ë¤Ê¤¤¤Î¤ÏÅö¤¿¤êÁ°¤Ç¤¢¤Ã¤Æ¡¢¡Ö¤È¤³¤í¤¬¡×¤¸¤ã¤Ê¤¤¤è¤Í¡£
¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥Î¡¼¥È¤Ê¤é¤ï¤«¤é¤Ê¤¤¤Ç¤â¤Ê¤¤¤±¤É¤µ¡£
¥¹¥¿¥Ã¥¯¥Õ¥ì¡¼¥à¤Î²òÊü¤Ëleave ¤Ï»È¤¦¤±¤É¡¢³ÎÊݤÏenter¤ò»È¤ï¤º¤Ë¼«Á°¤Çebp¤ÎÁàºî¤ò¤¹¤ë¤Î¤ÏÎɤ¯¤¢¤ë¼êÃʤÀ¤È»×¤¤¤Þ¤¹¤¬(enter¤¬ÃÙ¤¤¤«¤é)¡£
¤½¤¦¤Ç¤¹¤Í¡£ÃÙ¤¤¤«¤éenter¤ò»È¤ï¤Ê¤¤¤È¤¤¤¦¤Î¤Ï8086»þÂ夫¤é¤Î¤¢¤ë°ÕÌ£ÄêÀФÀ¤È»×¤¤¤Þ¤¹¡£ºÇ¶á¤ÎIA32 Optimization Reference¤È¤«¤ò¸«¤ë¤Èleave¤â»È¤¦¤Ê¤È½ñ¤¤¤Æ¤¢¤Ã¤¿¤ê¤·¤Þ¤¹¡£
¤Ç¡¢¼ÂºÝ¤½¤³¤Þ¤ÇÆÉ¤ßÀڤ俾å¤Ç¤³¤¦¤¤¤¦¥³¡¼¥ÉÀ¸À®¤Ë¤·¤¿¤Î¤«¡¢¤½¤ì¤È¤â¤È¤ê¤¢¤¨¤ºGCC¤Ê¤ó¤«¤Ë¤Ê¤é¤Ã¤Æ¤ß¤¿¤À¤±¤Ê¤Î¤«¡¢¤½¤ÎÊÕ¤ê¤Î°Õ¿Þ¤¬Ê¹¤¤¿¤«¤Ã¤¿¤Ê¤È¡£
¤¨¤¨¤È¡¢Êè·ê¤ò·¡¤ê¤Þ¤·¤¿¤¬¡¢8086¤Ë¤ÏENTER/LEAVEÌ¿Îá¤Ï¤Ê¤¤¤ó¤Ç¤·¤¿¡£
¥³¥á¥ó¥È(¤È¤¤¤¦¤«¤Þ¤µ¤Ë¥Ä¥Ã¥³¥ß¤È¸Æ¤Ö¤Ë¤Õ¤µ¤ï¤·¤¤¥ì¥¹¥Ý¥ó¥¹ :) ¤¢¤ê¤¬¤È¤¦¤´¤¶¤¤¤Þ¤¹ ¡ä »°±º»á¡¢Ä̤ꤹ¤¬¤ê¤µ¤ó
¤Þ¤ºenterÌ¿Îá¤ò»È¤Ã¤Æ¤¤¤Ê¤¤¤Î¤Ï¤Ê¤¼¤«?¤Î·ï¤Ç¤¹¤¬¡¢Ã±¤ËGCC¤Î½Ð¤¹¥³¡¼¥É¤Ë¤Ê¤é¤Ã¤¿·ë²Ì¤³¤Î¤è¤¦¤Ë¤·¤¿¡Ä¤È¤¤¤¦¤Î¤¬¼ÂºÝ¤Î¤È¤³¤í¤Ç¤¹¡£¤³¤Î¤¢¤¿¤ê¤Î¾ðÊó¤È¤¤¤¦¤«¡¢ÄêÀФ¬À°Íý¤µ¤ì¤Æ¤¤¤ë¥É¥¥å¥á¥ó¥È¤Ê¤É¤¬¸«¤Ä¤«¤ì¤Ð¤è¤¤¤Î¤Ç¤¹¤¬¡£
¥¹¥¿¥Ã¥¯¥Õ¥ì¡¼¥à¤Ë¤Ä¤¤¤Æ¤âGCC¤Î¥³¡¼¥É¤ò»²¹Í¤Ë¤·¤¿¤Ä¤â¤ê¡Ä¤À¤Ã¤¿¤Î¤Ç¤¹¤¬¡¢²þ¤á¤Æ¸«Ä¾¤·¤Æ¤ß¤ë¤È¤Ê¤ó¤«ÊѤǤ¹¤Í¡£¤È¤¤¤¦¤«¡¢¤«¤Ê¤ê²ø¤·¤¤¡£¤³¤³¤Ï²þ¤á¤Æ¥¹¥¿¥Ã¥¯¥Õ¥ì¡¼¥à¤Î³¨¤òÉÁ¤¤¤Æ¸«Ä¾¤µ¤Ê¤±¤ì¤Ð¤¤¤«¤ó¤Ê¡ä¼«Ê¬
¤¨¤¨¤È¡¢¤¢¤È¤Ïcalling convention¤Ë¤Ä¤¤¤Æ¤«¡£Æüµ¤ÎËÜʸ¤Ëµó¤²¤¿»ñÎÁ¤È¤«¤ÏÈó¾ï¤Ë»²¹Í¤Ë¤Ê¤Ã¤¿¤Î¤Ç¤¹¤¬¡¢¤½¤â¤½¤â¤¢¤ì¤Ã¤Æ¤É¤¦¤ä¤Ã¤ÆÄ´¤Ù¤¿¤ó¤Ç¤·¤ç¤¦¤Í¡£Microsoft¤È¤«GNU¤È¤«¤Î¥É¥¥å¥á¥ó¥È¤ò¤â¤Ã¤Èõ¤¹¤È¡¢¤â¤Ã¤È¥ª¥Õ¥£¥·¥ã¥ë¤Ã¤Ý¤¤¾ðÊ󤬽ФƤ¯¤ë¤Î¤«¤Ê¤¡¡Ä
¤È¤¤¤¦¤³¤È¤Ç¤È¤ê¤¢¤¨¤º¡£ÌµÃΤʤޤ޽ñ¤¤¤Æ¤¤¤¿¤ê¡¢ÆÍ¤¿Ê¤ó¤Ç¤¤¤¿¤ê¤¹¤ë¤È¤³¤í¤â¶²¤é¤¯¤¿¤¯¤µ¤ó¤¢¤ê¤Þ¤¹¤Î¤Ç¡¢µ¤¤¬¸þ¤¤¤¿¤é¤Þ¤¿±óθ¤Ê¤¯¥Ä¥Ã¥³¤ó¤Ç¤ä¤Ã¤Æ¤¯¤À¤µ¤¤¡£