ç§ãã¡ã¯ãœãããŠã§ã¢ãé·ãéä¿¡çšããŠããªãããããã®ç£æ»ãå®è¡ãããªããŒã¹ãšã³ãžãã¢ãªã³ã°ãå®è¡ããã¹ããããã€ã¹ãããã¢ãŒãã§å®è¡ãããµã³ãããã¯ã¹ã§å®è¡ããŸãã ãœãããŠã§ã¢ãå®è¡ãããããã»ããµã¯ã©ãã§ããïŒ -ç§ãã¡ã¯ç²ç®çã«å¿ãããã®å°ããªã·ãªã³ã³çãä¿¡é ŒããŠããŸãã ãã ããææ°ã®ããŒããŠã§ã¢ã«ã¯ãœãããŠã§ã¢ãšåãåé¡ããããŸããææžåãããŠããªãç§å¯ã®æ©èœããã°ãè匱æ§ããã«ãŠã§ã¢ãããã€ã®æšéŠ¬ãã«ãŒãããããããã¯ãã¢ã§ãã
ISAïŒåœä»€ã»ããã¢ãŒããã¯ãã£ïŒx86ã¯ãå²äžæãé·ãå€åãç¶ãããåœä»€ã»ããã¢ãŒããã¯ãã£ãã®1ã€ã§ãã 1976幎ã«éçºããã8086èšèšãããISAã¯ç¶ç¶çãªå€æŽãšæŽæ°ãåããŠããŸãã å ã®ä»æ§ã®åŸæ¹äºææ§ãšãµããŒããç¶æããªããã ISAã¢ãŒããã¯ãã£ã¯40幎以äžã«ããã£ãŠæé·ããŠããŸããããå€ãã®æ°ããã¢ãŒããšåœä»€ã»ããã§æé·ãç¶ãããããããæ¢ã«ãªãŒããŒããŒããããŠãã以åã®ãã¶ã€ã³ã«æ°ããã¬ã€ã€ãŒãè¿œå ããŠããŸãã å®å šãªäžäœäºææ§ã®ããªã·ãŒã«ãããææ°ã®x86ããã»ããµã«ã¯ããã§ã«å®å šã«å¿ããããŠããåœä»€ãšã¢ãŒããå«ãŸããŠããŸãã ãã®çµæãããã»ããµã¢ãŒããã¯ãã£ãã§ããŸãããããã¯ãæ°ããã¢ã³ãã£ãŒã¯ãã¯ãããžã®è€éãªè¿·è·¯ã§ãã ãã®ãããªéåžžã«è€éãªç°å¢-ããã»ããµã®ãµã€ããŒã»ãã¥ãªãã£ã«é¢ããå€ãã®åé¡ãåŒãèµ·ãããŸãã ãããã£ãŠãx86ããã»ããµã¯ãéèŠãªãµã€ããŒã€ã³ãã©ã¹ãã©ã¯ãã£ã®ä¿¡é Œãããã«ãŒãã§ãããšäž»åŒµããããšã¯ã§ããŸããã
ããã»ããµããŸã ä¿¡é ŒããŠããŸããïŒ
ããã°ã©ã ãšãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ã»ãã¥ãªãã£-ããããå±éãããŠããããŒããŠã§ã¢ã®ã»ãã¥ãªãã£ã«åºã¥ããŠããŸãã ååãšããŠããœãããŠã§ã¢éçºè ã¯ããœãããŠã§ã¢ãå±éãããŠããããŒããŠã§ã¢ãä¿¡é Œã§ãããæªæãããå¯èœæ§ããããšããäºå®ãèæ ®ããŠããŸããã ããŒããŠã§ã¢ã誀ã£ãŠïŒæå³çãã©ããã«ãããããïŒåäœããå ŽåããœãããŠã§ã¢ã®ã»ãã¥ãªãã£ã¡ã«ããºã ã¯ãŸã£ãã䟡å€ããªããªããŸãã é·å¹Žã«ããããIntel SGXãAMD Pacificaãªã©ã®ã»ãã¥ã¢ããã»ããµã®ããŸããŸãªã¢ãã«ãæäŸãããŠããŸãããããã«ãããããããé倧ãªé害ïŒã¡ã«ãããŠã³ãã¹ãã¯ã¿ãŒãªã©ã®æè¿ã®é害ããïŒã«ã€ããŠæ å ±ãå ¬éãããææžåãããŠããªãããããã°ãæ©èœãæ€åºãããããããŸããèŠåæ§ã¯ãããã»ããµãŒã«å¯Ÿããç§ãã¡ã®å¿ããã®ä¿¡é Œã¯æ ¹æ ããªããšèããŠããŸãã
ææ°ã®x86ããã»ããµã¯ãææ°ã®ã¢ã³ãã£ãŒã¯ãã¯ãããžãŒãéåžžã«æ±ãã«ããè€éã«ç¹ã亀ããŠããŸãã 8086ã«ã¯29000ã®ãã©ã³ãžã¹ã¿ãPentium 300äžãBroadwell 32åãCannonlakeã«ã¯100å以äžããããŸããã
ãã©ã³ãžã¹ã¿ãéåžžã«å€ããããææ°ã®x86ããã»ããµãææžåãããŠããªãåœä»€ãããŒããŠã§ã¢ã®è匱æ§ã«æ©ãŸãããŠããããšã¯é©ãããšã§ã¯ãããŸããã ææžåãããŠããªãããã»ãšãã©å¶ç¶ã«çºèŠãããåœä»€ïŒICEBPïŒ0xF1ïŒãLOADALLïŒ0x0F07ïŒãapicallïŒ0x0FFFF0ïŒ[1]ãä¿è·ãããã¡ã¢ãªé åãžã®äžæ£ã¢ã¯ã»ã¹ã®ããã«ããã»ããµã®ããã¯ã解é€ã§ããŸãã
ããã»ããµã®å€æ°ã®ããŒããŠã§ã¢è匱æ§ïŒä»¥äžã®2ã€ã®å³ãåç §ïŒã«ã€ããŠã¯ããµã€ããŒæ»æè ãç¹æš©ãææ Œã§ããããã«ããŸã[3]ãæå·åããŒãæœåºãã[4]ãæ°ããã¢ã»ã³ãã©ãŒåœä»€ãäœæãã[2]ãæ¢åã®ã¢ã»ã³ãã©ãŒåœä»€ã®æ©èœãå€æŽãã[2] ãã¢ã»ã³ãã©ãŒåœä»€ãžã®ããã¯ã®ã€ã³ã¹ããŒã«[2]ããããŒããŠã§ã¢å éä»®æ³åã[7]ã®å¶åŸ¡ããååæå·èšç®ã[7]ãžã®ä»å ¥ãæåŸã«ãç¥ã¢ãŒãããžã®ç§»è¡ïŒ èªåèªèº«ïŒããªãããã³ã³ãã¥ãŒã¿ã®é»æºããªãã«ãªã£ãŠããªã¢ãŒãã¢ã¯ã»ã¹ãåãåãããšãã§ããŸãïŒæ£åœãªããŒããŠã§ã¢ã€ã³ãã«MEããã¯ãã¢ãã¢ã€ãã[8] ãããŠãããããã¹ãŠ-ããžã¿ã«ãã¬ãŒã¹ãæ®ãããšãªãã
ææ°ã®ããã»ããµã¯ããŒããŠã§ã¢ããããœãããŠã§ã¢ã§ã
å³å¯ã«èšãã°ãçŸä»£ã®ããã»ããµã¯ãèšèã®æå³ã§ãããŒããŠã§ã¢ããšåŒã¶ããšããã§ããŸããã æãéèŠãªæ©èœïŒISAãå«ãïŒã¯ããã€ã¯ãã³ãŒãã®ãã©ãã·ã¥ã«ãã£ãŠæäŸãããããã§ãã åœåããã€ã¯ãã³ãŒãã¯äž»ã«ãæµ®åå°æ°ç¹æŒç®ãMMXããªããã£ããREPãã¬ãã£ãã¯ã¹ä»ãã®ã©ã€ã³ãã³ãã©ãªã©ãè€éãªã¢ã»ã³ãã©åœä»€ã®ãã³ãŒããšå®è¡ã®å¶åŸ¡ãæ åœããŠããŸããã ãã ããæéãçµã€ã«ã€ããŠãããã»ããµãŒå éšã®åŠçæäœã®ãã€ã¯ãã³ãŒãã«ãŸããŸãå€ãã®è²¬ä»»ãå²ãåœãŠãããŸãã ããšãã°ãAVXïŒAdvanced Vector ExtensionsïŒãVT-dïŒããŒããŠã§ã¢ä»®æ³åïŒãªã©ã®Intelããã»ããµã®ææ°ã®æ¡åŒµæ©èœã¯ããã€ã¯ãã³ãŒãã«å®è£ ãããŠããŸãã
ããã«ãä»æ¥ã§ã¯ããã€ã¯ãã³ãŒãã¯ããšããããããã»ããµã®ç¶æ ã®ç¶æããã£ãã·ã¥ã®ç®¡çãããã³çé»åã®ç®¡çãæ åœããŠããŸãã ãšãã«ã®ãŒãç¯çŽããããã«ããã€ã¯ãã³ãŒãã¯é»åç¶æ ãåŠçããå²ã蟌ã¿ã¡ã«ããºã ãå®è£ ããŸããCç¶æ ïŒçãšãã¹ãªãŒãã®çšåºŠïŒã¢ã¯ãã£ãç¶æ ãããã£ãŒãã¹ãªãŒããŸã§ïŒãšPç¶æ ïŒé»å§ãšåšæ³¢æ°ã®ç°ãªãçµã¿åããïŒã ãããã£ãŠãããšãã°ããã€ã¯ãã³ãŒãã¯ãç¶æ C4ã«å ¥ããšããšåºããšãã«ãL2ãã£ãã·ã¥ããªã»ããããŸãã
ããã»ããµã¡ãŒã«ãŒããã€ã¯ãã³ãŒãã䜿çšããçç±
x86ããã»ããµã®ã¡ãŒã«ãŒã¯ããã€ã¯ãã³ãŒãã䜿çšããŠè€éãªã¢ã»ã³ããªåœä»€ïŒæ倧15ãã€ãïŒãåçŽãªãã€ã¯ãåœä»€ã®ãã§ãŒã³ã«å解ããããŒããŠã§ã¢ã¢ãŒããã¯ãã£ãç°¡çŽ åãã蚺æã容æã«ããŸãã å®éããã€ã¯ãã³ãŒãã¯ãå€éšïŒãŠãŒã¶ãŒã«èŠããïŒCISCã¢ãŒããã¯ãã£ãšå éšïŒããŒããŠã§ã¢ïŒRISCã¢ãŒããã¯ãã£éã®ã€ã³ã¿ãŒããªã¿ãŒã§ãã
CISCã¢ãŒããã¯ãã£ïŒäž»ã«ISAïŒã§ãšã©ãŒãæ€åºãããå Žåã補é å ã¯ãã¶ãŒããŒãã®BIOS / UEFIãŸãã¯ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ïŒããŒãããã»ã¹äžïŒãä»ããŠããã»ããµã«ããŠã³ããŒãã§ãããã€ã¯ãã³ãŒãã¢ããããŒããå ¬éããŸãã ãã€ã¯ãã³ãŒãã«åºã¥ãããã®ãããªæŽæ°ã·ã¹ãã ã®ãããã§ãããã»ããµã®è£œé æ¥è ã¯ãæ©åšã®ãšã©ãŒãä¿®æ£ããªãããæè»æ§ãšã³ã¹ãåæžãå®çŸããŠããŸãã 1994幎ã«Intel Pentiumããã»ããµãã²ã©ãããã¯ããŠã³ããfdivã§ã®ã»ã³ã»ãŒã·ã§ãã«ãªãã¹ã«ããããã€ãã¯ããŒããŠã§ã¢ãšã©ãŒããœãããŠã§ã¢ãšåæ§ã«çºçãããããªãããšãããã«æçœã«ãªããŸããã ãã®äºä»¶ã«ãããã¡ãŒã«ãŒã¯ãã€ã¯ãã³ãŒãããŒã¹ã®ããã»ããµã®ã¢ãŒããã¯ãã£ã«ããã«é¢å¿ãå¯ããŠããŸãã ãã®ãããIntelãšAMDã¯ãã€ã¯ãã³ãŒããã¯ãããžã䜿çšããŠããã»ããµãæ§ç¯ãå§ããŸããã Intel-1995幎ã«ãªãªãŒã¹ãããPentium ProïŒP6ïŒä»¥éã AMD-1999幎ã«ãªãªãŒã¹ãããK7以éã
ãã¹ãŠã®ç§å¯ãæããã«ãªã
ããã»ããµã¡ãŒã«ãŒã¯ããã€ã¯ãã³ãŒãã®ã¢ãŒããã¯ãã£ãšãã€ã¯ãã³ãŒãã®æŽæ°ã¡ã«ããºã ãå³éã«ç¶æããããšããŠãããšããäºå®ã«ãããããããæµã¯èŠæããŠããŸãã æçåãããæ å ±ïŒäž»ã«AMD RISC86 [5]ãªã©ã®ç¹èš±ããïŒãšå ¬åŒã®BIOSã¢ããããŒãã®ææ ®æ·±ãå転ïŒK8 [6]ã®ããã«ïŒã¯ãåŸã ã«ãã€ã¯ãã³ãŒãã®ç§å¯ãæããã«ããŸããïŒããšãã°ãäžã®å³ãåç §AMDããã»ããµã®ãã€ã¯ãã³ãŒãæŽæ°ã¡ã«ããºã ãïŒã ãããŠãé転ããŒã«ïŒãœãããŠã§ã¢ãšãââãŒããŠã§ã¢ã®äž¡æ¹ïŒã®çµ¶ãéãªãé²å[2]ãææãªãã¡ãžã³ã°æè¡[1]ãããã³Microparse [9]ãSandsifter [10]ãªã©ã®ãªãŒãã³ãœãŒã¹ããŒã«ã®åºçŸã«ããããµã€ããŒæ»æè ã¯å¿ èŠãªãã€ã¯ãã³ãŒãã«é¢ãããã¹ãŠãåŠã¶ããšãã§ããŸããã€ã¯ãã³ãŒããã«ãŠã§ã¢ãæžã蟌ãå¿ èŠããããŸãã
ããšãã°ã[2]ã§ã¯ããHello worldïŒãïŒãã€ã¯ãã³ãŒããããã€ã®æšéŠ¬åããæåã®ã¹ãããïŒãšããŠãããã»ããµãŒãdivã³ãã³ãã«ã¢ã¯ã»ã¹ããåæ°ãèšç®ããããã€ã¯ãããã¯ãïŒã¢ã»ã³ãã©ãŒåœä»€ãã€ã³ã¿ãŒã»ãããããã€ã¯ãã³ãŒãããã°ã©ã ïŒãéçºãããŸããã ãã®ãã€ã¯ãããã¯ã¯ãã¢ã»ã³ãã©ãŒåœä»€divã®ãã³ãã©ãŒãžã®æ³šå ¥ã§ãã
Ibid [2]ã¯ãããé«åºŠãªãã€ã¯ãããã¯ãæäŸããŸããããã¯ãdiv ebxã®ã¢ã»ã³ãã©ãŒåœä»€ã«éãã«åº§ã£ãŠååšã瀺ãããebx divã«ã¢ã¯ã»ã¹ãããšãã«ç¹å®ã®æ¡ä»¶ãæºããããå Žåã«ã®ã¿ã¢ã¯ãã£ãã«ãªããŸãïŒebxã¬ãžã¹ã¿ã«ã¯å€Bãšã¬ãžã¹ã¿ãå«ãŸããŸãeaxã«ã¯å€Aãå«ãŸããŸããã¢ã¯ãã£ãåããããšããã®ãã€ã¯ãããã¯ã¯eipã¬ãžã¹ã¿ïŒçŸåšã®åœä»€ãã€ã³ã¿ãŒïŒã®å€ã1ã€å¢ãããŸãã ãã®çµæãããã°ã©ã ïŒdiv ebxåœä»€ãåç §ããåæ°ãæã£ãŠããïŒã®å®è¡ã¯ãªãã»ããã§ç¶è¡ããŸããdivebxã«ç¶ãã³ãã³ãã®æåã®ãã€ãããã§ã¯ãªãã2çªç®ã®ãã€ãããã§ãã eaxããã³ebxã¬ãžã¹ã¿ã§ä»ã®å€ãæå®ãããŠããå Žåãebx divã¯éåžžã©ããæ©èœããŸãã ããã®å®çšçãªäŸ¡å€ã¯äœã§ããïŒ ããšãã°ããéè€ããåœä»€ã[11]ã䜿çšããé£èªåæè¡ã䜿çšããå Žåãã¢ã»ã³ãã©åœä»€ã®é ããããã§ãŒã³ãéãã«ã¢ã¯ãã£ãã«ããŸãã
ãããã®2ã€ã®äŸã¯ãæ£èŠã®ã¢ã»ã³ãã©ãŒåœä»€ã䜿çšããŠä»»æã®ããã€ã®æšéŠ¬ã³ãŒããé ãæ¹æ³ã瀺ããŠããŸãã
åæã«ããµã€ããŒæ»æè ã¯æªæã®ãããã€ããŒããã¢ã¯ãã£ãã«ããããšãã§ããŸãïŒãªã¢ãŒããå«ãïŒã ããšãã°ãæ»æè ãå¶åŸ¡ããWebããŒãžã§ã¢ã¯ãã£ããŒã·ã§ã³ã«å¿ èŠãªæ¡ä»¶ãæºããããå Žåã ããã¯ãææ°ã®Webãã©ãŠã¶ãŒã«çµã¿èŸŒãŸããJust-in-TimeïŒJITïŒããã³Ahead-of-TimeïŒAOTïŒã³ã³ãã€ã©ãŒã®ãããã§ãã ãããã®ã³ã³ãã€ã©ã䜿çšãããšãããã°ã©ã ãé«ã¬ãã«ã®JavaScriptã®ã¿ã§èšè¿°ããå Žåã§ãïŒäžèšã®æåŸã®ãªã¹ããåç §ïŒããã·ã³ã³ãŒãã®ã¢ã»ã³ãã©ãŒåœä»€ã®å®çŸ©æžã¿ã¹ããªãŒã ãçºè¡ã§ããŸãã
- ã¯ãªã¹ããã¡ãŒã»ããŒãã¹ ã x86 ISAãç Žã// DEFCON 25. 2017ã
- ãã£ãªããã»ã³ãã ã x86ããã»ããµãã€ã¯ãã³ãŒãã®ãªããŒã¹ãšã³ãžãã¢ãªã³ã°//第26åUSENIXã»ãã¥ãªãã£ã·ã³ããžãŠã ã®è°äºé²ã 2017. pp 1163-1180ã
- ãã·ã¥ãŒããã¯ã¹ ã SPECSïŒã»ãã¥ãªãã£äžéèŠãªããã»ããµã®ãã°ãããœãããŠã§ã¢ãä¿è·ããããã®è»œéã©ã³ã¿ã€ã ã¡ã«ããºã //ããã°ã©ãã³ã°èšèªãšãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ïŒASPLOSïŒã®ã¢ãŒããã¯ãã£ãµããŒãã«é¢ãã第28ååœéäŒè°ã®è°äºé²ã 2015. ppã 517-529ã
- ã¢ãã£ã»ã·ã£ããŒã« ã Bug Attacks //æå·åã«é¢ãã第28å幎次äŒè°ã®è°äºé²ïŒæå·åã®é²æ©ã 2008. ppã 221â240ã
- ãžã§ã³ã»ãã§ã€ã㌠ã RISC86åœä»€ã»ãã//ç±³åœç¹èš±6336178ã2002幎ã
- Opteronå ¬éïŒAMD K8ãã€ã¯ãã³ãŒãã¢ããããŒãã®ãªããŒã¹ãšã³ãžãã¢ãªã³ã° 2004幎ã
- ãµãã³ã°ã»ãã§ã³ x86ããã»ããµãã€ã¯ãã³ãŒã .2014ã®ã»ãã¥ãªãã£åæ ã
- ã«ã¿ãªã³ã·ã³ãã ãã«ãŠã§ã¢ã¯ããŒã¿ãçã¿ããã¡ã€ã¢ãŠã©ãŒã«ãåé¿ããããã«ãIntel CPUã®ãããŸããªæ©èœã䜿çšããŸãã 2017幎ã
- Daming Chen MicroparseïŒAMDãIntelãããã³VIAããã»ããµçšã®ãã€ã¯ãã³ãŒãããŒãµãŒ // GitHubã 2014幎ã
- SandsifterïŒx86ããã»ããµã®ãã¡ã¶ãŒ // GitHibã 2017幎ã
- ã«ã¬ãV.M. ãªãŒããŒã©ããããåœä»€ã§ã¢ã»ã³ãã©ãŒããã°ã©ã ãèšè¿°ããæ¹æ³ïŒãã€ãã³ãŒããé£èªåããå¥ã®ææ³ïŒ // Habrahabrã 2018. URLïŒïŒã¢ã¯ã»ã¹æ¥ïŒ2018幎10æ25æ¥ïŒã