¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡

ÔõÑùÓÅ»¯PentiumϵÁд¦ÀíÆ÷µÄ´úÂë

Copyright © 1996, 2000 by Agner Fog. Last modified 2000-07-03.


·½±ãÃæ (fangbianmian) Òë 86.7%


ÔÆ·ç (Cloud Wu) Òë http://www.codingnow.com/ 13.3%

Ŀ¼

  1. ¼ò½é
  2. ÎÄÏ×
  3. ¸ß¼¶ÓïÑÔÖе÷Óûã±àº¯Êý
  4. µ÷ÊÔ¼°Ð£Ñé
  5. ÄÚ´æÄ£Ê½
  6. ¶ÔÆë
  7. Cache
  8. µÚÒ»´Î vs ÖØ¸´ÔËÐÐ
  9. µØÖ·Éú³É»¥Ëø(AGI) (PPlain ¼° PMMX)
  10. Åä¶ÔÕûÊýÖ¸Áî (PPlain ¼° PMMX)
    1. ÍêÃÀµÄÅä¶Ô
    2. ÓÐȱÏÝÅä¶Ô
  11. ½«¸´ÔÓÖ¸Á·Ö¸îΪ¼òµ¥Ö¸Áî (PPlain ¼° PMMX)
  12. ǰ׺ (PPlain ¼° PMMX)
  13. PPro£¬ PII ¼° PIII Á÷Ë®Ïß×ÛÊö
  14. Ö¸Áî½âÂë (PPro£¬ PII ¼° PIII)
  15. ȡָÁî (PPro£¬ PII ¼° PIII)
  16. ¼Ä´æÆ÷ÖØÃüÃû (PPro£¬ PII ¼° PIII)
    1. Ïû³ýÒÀÀµÐÔ
    2. ¼Ä´æÆ÷¶ÁÑÓ³Ù
  17. ÂÒÐòÖ´ÐÐ (PPro£¬ PII ¼° PIII)
  18. ÒýÍË (PPro£¬ PII ¼° PIII)
  19. ²¿·Ö(Partial)ÑÓ³Ù (PPro£¬ PII ¼° PIII)
    1. ²¿·Ö¼Ä´æÆ÷ÑÓ³Ù
    2. ²¿·Ö±êÖ¾ÑÓ³Ù
    3. ÒÆÎ»ºÍÐýתºóµÄ±ê¼ÇÑÓ³Ù
    4. ²¿·ÖÄÚ´æÑÓ³Ù
  20. ÒÀÀµ»· (PPro£¬ PII ¼° PIII)
  21. ѰÕÒÆ¿¾± (PPro£¬ PII ¼° PIII)
  22. ·ÖÖ§ºÍÌø×ª (ËùÓеĴ¦ÀíÆ÷)
    1. PPlain µÄ·ÖÖ§Ô¤²â
    2. PMMX£¬ PPro£¬ PII ¼° PIIIµÄ·ÖÖ§Ô¤²â
    3. ±ÜÃâÌø×ª (ËùÓеĴ¦ÀíÆ÷)
    4. ±ÜÃâʹÓñê¼ÇµÄÌõ¼þÌø×ª (ËùÓеĴ¦ÀíÆ÷)
    5. ½«Ìõ¼þÌø×ªÌæ»»³ÉÌõ¼þ¸³Öµ (PPro£¬ PII ¼° PIII)
  23. ¼õÉÙ´úÂ볤¶È (ËùÓеĴ¦ÀíÆ÷)
  24. ¹æ»®¸¡µã´úÂë (PPlain ¼° PMMX)
  25. Ñ­»·ÓÅ»¯ (ËùÓеĴ¦ÀíÆ÷)
    1. PPlain ¼° PMMX ÖеÄÑ­»·
    2. PPro£¬ PII ¼° PIII ÖеÄÑ­»·
  26. ÓÐÎÊÌâµÄÖ¸Áî
    1. XCHG (ËùÓеĴ¦ÀíÆ÷)
    2. ´óÑ­»·ÒÆÎ» (ËùÓеĴ¦ÀíÆ÷)
    3. ´®²Ù×÷Ö¸Áî (ËùÓеĴ¦ÀíÆ÷)
    4. λ²âÊÔ (ËùÓеĴ¦ÀíÆ÷)
    5. ÕûÊý³Ë·¨ (ËùÓеĴ¦ÀíÆ÷)
    6. WAIT Ö¸Áî (ËùÓеĴ¦ÀíÆ÷)
    7. FCOM + FSTSW AX (ËùÓеĴ¦ÀíÆ÷)
    8. FPREM (ËùÓеĴ¦ÀíÆ÷)
    9. FRNDINT (ËùÓеĴ¦ÀíÆ÷)
    10. FSCALE ¼°Ö¸Êýº¯Êý (ËùÓеĴ¦ÀíÆ÷)
    11. FPTAN (ËùÓеĴ¦ÀíÆ÷)
    12. FSQRT (PIII)
    13. MOV [MEM]£¬ ACCUM (PPlain ¼° PMMX)
    14. TEST Ö¸Áî (PPlain ¼° PMMX)
    15. λɨÃè (PPlain ¼° PMMX)
    16. FLDCW (PPro£¬ PII ¼° PIII)
  27. ÌØ±ðÖ÷Ìâ
    1. LEA Ö¸Áî (ËùÓеĴ¦ÀíÆ÷)
    2. ³ý·¨ (ËùÓеĴ¦ÀíÆ÷)
    3. ÊͷŸ¡µã¼Ä´æÆ÷ (ËùÓеĴ¦ÀíÆ÷)
    4. ¸¡µãÖ¸ÁîÓëMMX Ö¸ÁîµÄת»» (PMMX£¬ PII ¼° PIII)
    5. ¸¡µãת»»ÎªÕûÊý (ËùÓеĴ¦ÀíÆ÷)
    6. ʹÓÃÕûÊýÖ¸Áî×ö¸¡µãÔËËã (ËùÓеĴ¦ÀíÆ÷)
    7. ʹÓø¡µãÖ¸Áî×öÕûÊýÔËËã (PPlain ¼° PMMX)
    8. Êý¾Ý¿éµÄÒÆ¶¯ (ËùÓеĴ¦ÀíÆ÷)
    9. ×ÔÐ޸ĴúÂë (ËùÓеĴ¦ÀíÆ÷)
    10. ¼ì²â´¦ÀíÆ÷ÀàÐÍ (ËùÓеĴ¦ÀíÆ÷)
  28. Ö¸ÁîËÙ¶ÈÁбí (PPlain ¼° PMMX)
    1. ÕûÊýÖ¸Á
    2. ¸¡µãÖ¸Á
    3. MMX Ö¸Á (PMMX)
  29. Ö¸ÁîËٶȼ°Î¢²Ù×÷ʧ°ÜÁбí(PPro£¬ PII ¼° PIII)
    1. ÕûÊýÖ¸Á
    2. ¸¡µãÖ¸Á
    3. MMX Ö¸Á (PII ¼° PIII)
    4. XMM Ö¸Á (PIII)
  30. ËٶȲâÊÔ
  31. ²»Í¬µÄ΢´¦ÀíÆ÷¼äµÄ±È½Ï


1. ¼ò½é

Õâ±¾ÊÖ²áϸÖµÄÃèÊöÁËÔõÑùд³ö¸ß¶ÈÓÅ»¯µÄ»ã±à´úÂ룬×ÅÖØÓÚ½²½âPentiumϵÁеÄ΢´¦ÀíÆ÷¡£

Õâ¶ùËùÓеÄÐÅÏ¢¶¼»ùÓÚÎÒµÄÑо¿¡£ ºÜ¶àÈËΪÕâ±¾ÊÖ²áÌṩÁËÓÐÓõÄÐÅÏ¢ºÍ´íÎó½ÃÕý£¬ ¶øÎÒÔÚ»ñµÃÈκÎеÄÖØÒªÐÅÏ¢ºó¶¼¸üÐÂËü¡£ Òò´ËÕâ±¾ÊÖ²á±ÈÆäËüÀàËÆµÄÐÅÏ¢À´Ô´¶¼¸ü׼ȷ£¬Ï꾡£¬¾«È·ºÍ±ãÓÚÀí½â£¬ ¶øÇÒËü»¹°üº¬ÁËÐí¶àÆäËüµØ·½ÕÒ²»µ½µÄϸ½ÚÃèÊö¡£ ÕâЩÐÅϢʹÄãÄܹ»ÓöàÖÖ·½·¨¾«È·Í³¼ÆÒ»Ð¡¶Î´úÂ뻨µôµÄʱÖÓÖÜÆÚÊý¡£ µ«ÊÇ£¬ÎÒ²»Äܱ£Ö¤ÊÖ²áÀïËùÓеÄÐÅÏ¢¶¼ÊǾ«È·µÄ: һЩʱ¼ä²âÊÔµÈÊǺÜÄÑ»òÕß²»¿ÉÄܾ«È·²âÁ¿µÄ£¬ ÎÒ¿´²»µ½ Intel ÊÖ²á×÷ÕßÓµÓеÄÄÚ²¿¼¼ÊõÎĵµ×ÊÁÏ¡£

Õâ±¾ÊÖ²áÌÖÂÛÁË Pentium ´¦ÀíÆ÷µÄÏÂÁа汾:

Ëõд Ãû×Ö
PPlain plain ÀÏʽ Pentium (ûÓÐ MMX)
PMMX ÓÐMMXµÄPentium
PPro Pentium Pro
PII Pentium II (°üÀ¨ Celeron ºÍ Xeon)
PIII Pentium III (°üÀ¨Ò»Ð©Ï൱µÄCPU)

Õâ±¾ÊÖ²áÖÐʹÓÃÁËMASM 5.10µÄ»ã±àÓï·¨¡£ X86 »ã±àÓïÑÔûÓÐʲô¹Ù·½±ê×¼£¬ µ«MASM 5.10µÄ»ã±àÓï·¨×î½Ó½üÊÂʵÉϵıê×¼¡£ ÒòΪ¼¸ºõËùÓеĻã±àÆ÷¶¼ÓÐ MASM 5.10 ¼æÈÝģʽ (È»¶øÎÒ²»ÍƼöʹÓÃMASMµÄ5.10°æ±¾£¬ÒòΪËüÔÚ 32 λģʽÏÂÓÐÑÏÖØµÄ Bug¡£×îºÃÊÇʹÓà TASM »òÕß MASM µÄºóÐø°æ±¾)¡£

ÊÖ²áÀïµÄһЩÆÀÂÛºÃÏóÊǶÔIntelµÄÅúÆÀ¡£ µ«Õâ²¢²»ÊÇ˵ÆäËüµÄ²úÆ·»áºÃһЩ¡£ ÓëÖÚ¶àÓëÖ®¾ºÕùµÄÉÌÆ·Ïà±È£¬PentiumϵÁеÄ΢´¦ÀíÆ÷ÊÇÊôÓڱȽϺõģ¬ËüÓиüºÃµÄÎĵµ£¬ºÍ¸ü¶à¿É²âÊÔµÄÌØÐÔ¡£ÓÉÓÚÕâЩԭÒò£¬²»»áÓÐÎÒ»òÕ߯äËûÈË×öͬÀàÉÌÆ·µÄ±È½Ï²âÊÔ¡£

»ã±àÓïÑÔ±à³Ì±ÈÓø߼¶ÓïÑÔÒª¸´ÔӵĶࡣ ÖÆÔì Bug ÊǺÜÈÝÒ׵쬵«ÊÇÕÒµ½ Bug È´ºÜÄÑ¡£ ÏÖÔÚÒѾ­ÌáÐÑÄãÁË! ÎÒ¼Ù¶¨¶ÁÕßÒѾ­Óлã±à±à³ÌµÄ¾­Ñé¡£ ûÓеϰ£¬ÇëÔÚ×ö¸´ÔÓµÄÓÅ»¯Ç°¶ÁһЩ»ã±àµÄÊé²¢ÇÒдЩ´úÂë»ñµÃЩ»ã±àµÄ¾­Ñé¡£

PPlain ºÍ PMMX оƬµÄÓ²¼þÉè¼ÆÖÐÓÐÐí¶àÌØÐÔÊÇΪһЩ³£ÓÃÖ¸Áî»òÖ¸Áî¶Ô×÷רÃÅÓÅ»¯µÄ£¬¶ø²»ÊÇʹÓÃÄÇЩÆÕͨµÄÓÅ»¯·½·¨¡£ÒòΪÓÐÕâЩÉè¼Æ£¬ËùÒÔÓÅ»¯Èí¼þµÄ¹æÔòºÜ¸´ÔÓ£¬ÇÒÓкܶàµÄÀýÍ⣬µ«ÊÇÕâÑù×ö¿ÉÄÜ»ñµÃʵÖÊÐԵĺô¦¡£PPro£¬ PII ºÍ PIII ´¦ÀíÆ÷Óзdz£²»Í¬µÄÉè¼Æ£¬ËüÃÇ»áÀûÓÃÂÒÐòÖ´ÐÐÀ´×öÐí¶àµÄÓÅ»¯¹¤×÷£¬µ«ÊÇ´¦ÀíÆ÷µÄÕâЩ¸´ÔÓÉè¼Æ´øÀ´ÁËÐí¶àDZÔ򵀮¿¾±£¬Òò´ËΪÕâЩ´¦ÀíÆ÷½øÐÐÊÖ¹¤ÓÅ»¯½«µÃµ½Ðí¶àµÄºÃ´¦¡£Pentium 4 ´¦ÀíÆ÷Ò²ÓÃÁËÁíÍâÒ»ÖÖÉè¼Æ£¬±¼ÌÚ4 µÄÓÅ»¯Ö¸µ¼Â·ÏߺÍÇ°ÃæµÄ°æ±¾·Ç³£µÄ²»Í¬ÁË¡£Õâ¸öÊÖ²áûÓÐìüÀ¨±¼ÌÚ4 - ¶ÁÕßÇë×Ô¼º²éÔÄ Intel µÄÊֲᡣ

ÔÚ°ÑÄãµÄ´úÂëתΪ»ã±àµÄ֮ǰ£¬È·ÈÏÄãµÄËã·¨ÊÇ×ã¹»ÓÅ»¯µÄ¡£ ͨ³£Äã¿ÉÒÔͨ¹ýÓÅ»¯Ëã·¨À´½«´úÂëЧÂÊÌá¸ßµÄ±Èת³É»ã±à»ñµÃµÄЧÂʶàµÄ¶à¡£

µÚ¶þ£¬Äã±ØÐëÕÒµ½ÄãµÄ³ÌÐòÀï×î¹Ø¼üµÄ²¿·Ö¡£ ͨ³£ 99% µÄ CPU ʱ¼ä»¨ÔÚ³ÌÐò×îÀïÃæµÄÑ­»·ÖС£ ÔÚÕâÖÖÇé¿öÏ£¬ÄãÖ»ÒªÓÅ»¯Õâ¸öÑ­»·²¢°ÑÆäËüµÄËùÓж«Î÷¶¼Óø߼¶ÓïÑÔд¡£ һЩ»ã±à³ÌÐòÔ±½«´óÁ¿µÄ¾«Á¦»¨ÔÚÁËËûÃdzÌÐòµÄ´íÎóµÄ²¿·ÖÉÏ£¬ËûÃÇŬÁ¦µÃµ½µÄΨһ½á¹û¾ÍÊdzÌÐò±äµÄ¸ü¼ÓÄÑÒÔµ÷ÊÔºÍά»¤ÁË¡£

Èç¹ûÄãµÄ³ÌÐòµÄ¹Ø¼ü²¿·Ö²¢²»ÄÇôÃ÷ÏÔ£¬Äã¿ÉÒÔÓÃprofilÀ´ÕÒ¡£Èç¹û·¢ÏÖÆ¿¾±ÔÚ´ÅÅ̲Ù×÷£¬È»ºóÄã¾Í¿ÉÒÔÊÔ×ÅÐ޸ijÌÐòʹ´ÅÅ̲Ù×÷¼¯ÖÐÁ¬Ðø£¬Ìá¸ß´ÅÅÌ»º³åµÄÃüÖÐÂÊ£¬¶ø²»ÊÇÓûã±àÀ´Ð´´úÂë¡£ Èç¹ûÆ¿¾±ÔÚͼÏóÊä³ö£¬ÄÇôÄã¾Í¿ÉÒÔ³¢ÊÔÕÒµ½Ò»ÖÖ·½·¨À´¼õÉÙµ÷ÓÃͼÏóº¯ÊýµÄ´ÎÊý¡£

һЩ¸ß¼¶ÓïÑÔ±àÒëÆ÷¶ÔÓÚÖ¸¶¨µÄ´¦ÀíÆ÷ÌṩÁËÏà¶ÔºÃµÄÓÅ»¯£¬µ«ÊÇÉîÈëµÄÊÖ¹¤ÓÅ»¯½«×öµÄ¸üºÃ¡£

Çë²»Òª½«ÄãµÄ±à³ÌÎÊÌâ¼Ä¸øÎÒ¡£ÎÒ²»»á°ïÄã×ö¼ÒÍ¥×÷ÒµµÄ!

×£ÄãÔÚºóÃæµÄÔĶÁÖкÃÔË!

2. ÎÄÏ×


ÔÚ Intel µÄ www Õ¾ÉÏ£¬´òÓ¡µÄÎı¾»òÕß CD-ROM É϶¼ÓкܶàÓÐÓõÄÎÄÏ׺ÍÖ¸ÄÏ¡£ ½¨ÒéÄãÑо¿Ò»ÏÂÕâЩÎĵµÀ´¶Ô΢´¦ÀíÆ÷µÄ½á¹¹ÓÐЩÈÏʶ¡£ È»¶ø£¬Intel µÄÎĵµÒ²²»×ÜÊǶԵġª¡ªÓÈÆäÊÇÄÇЩָÄÏÓкܶà´íÎó(ÏÔÈ»£¬IntelµÄÄÇЩÈËûÓвâÊÔËûÃǵÄÀý×Ó)¡£

ÕâÀïÎÒ²»¸ø³ö URL£¬ÒòΪÎļþµÄλÖþ­³£µÄ¸Ä±ä¡£ Äã¿ÉÒÔÀûÓà developer.intel.com »òÕßwww.agner.org/assem Á´½ÓÉϵÄËÑË÷¹¤¾ßÕÒµ½ÄãÒªµÄÎĵµ¡£

һЩÎĵµÊÇ.PDF¸ñʽµÄ¡£Èç¹ûÄãûÓÐÏÔʾ»òÕß´òÓ¡PDFµÄ¹¤¾ß£¬¿ÉÒÔÈ¥http://www.adobe.com/ÏÂÔØAcrobatÎļþÔĶÁÆ÷¡£

ʹÓà MMX ºÍ XMM (SIMD) Ö¸ÁîÓÅ»¯×¨ÃŵijÌÐòÔÚ¼¸±¾Ê¹ÓÃÊÖ²áÀï¶¼ÓÐÃèÊö¡£ ¸÷ÖÖÊÖ²áºÍ½Ì³Ì¶¼ÃèÊöÁËËüµÄÖ¸Á¡£

VTUNE ÊÇ Intel ÓÃÀ´ÓÅ»¯´úÂëµÄÈí¼þ¹¤¾ßÎÒûÓвâÊÔËü£¬Òò´ËÕâÀï²»ÓèÆÀ¼Û¡£

»¹ÓкܶàÕ¾µã±È Intel Óиü¶àµÄÓÐÓÃÐÅÏ¢¡£ ÔÚÐÂÎÅ×é comp.land.asm.x86 µÄ FAQ ÀïÁгöÁËÕâЩ×ÊÔ´¡£ÆäËüµÄ internet ÉϵÄ×ÊÔ´ÔÚ www.agner.org/assem ÉÏÒ²ÓÐÁ´½Ó¡£

3. Ôڸ߼¶ÓïÑÔÀïµ÷Óûã±àº¯Êý

Äã¿ÉÒÔʹÓÃÔÚÏß»ã±à»òÕßÓûã±àдÕû¸ö×Ó³ÌÐòÈ»ºóÔÙÁ¬½Óµ½ÄãµÄ¹¤³ÌÖС£ Èç¹ûÄãÑ¡ÔñºóÕߣ¬½¨ÒéÄãÑ¡Ôñ¿ÉÒÔ½«¸ß¼¶ÓïÑÔÖ±½Ó±àÒë³É»ã±àµÄ±àÒëÆ÷¡£ ÕâÑùÄã¿ÉÒԵõ½ÕýÈ·µÄº¯Êýµ÷ÓÃÔ­ÐÍ¡£ ËùÓÐµÄ C++ ±àÒëÆ÷¶¼ÄÜ×öÕâ¸ö¹¤×÷¡£

´«µÝ²ÎÊýµÄ·½·¨È¡¾öÓÚµ÷ÓÃÐÎʽ:

 µ÷Ó÷½Ê½   ²ÎÊýÔÚ¶ÑÕ»ÀïµÄ´ÎÐò   ²ÎÊýÓÉË­À´ÒÆÈ¥ 
 _cdecl   µÚÒ»¸ö²ÎÊýÔÚµÍλµØÖ·   µ÷ÓÃÕß 
 _stdcall   µÚÒ»¸ö²ÎÊýÔÚµÍλµØÖ·   ×Ó³ÌÐò 
 _fastcall   ±àÒëÆ÷Ö¸¶¨   ×Ó³ÌÐò 
 _pascal   µÚÒ»¸ö²ÎÊýÔÚ¸ßλµØÖ·   ×Ó³ÌÐò 

º¯Êýµ÷ÓÃÔ­Ðͺͱ»±àÒëÆ÷ÃüÃûµÄº¯ÊýÃû¿ÉÄܷdz£µÄ¸´ÔÓ¡£ Óкܶ಻ͬµÄµ÷ÓÃת»»¹æÔò£¬ ²»Í¬µÄ±àÒëÆ÷Ò²»¥²»¼æÈÝ¡£ Èç¹ûÄã´ÓC++Àïµ÷Óûã±àÓïÑÔµÄ×Ó³ÌÐò£¬×îºÃµÄ·½·¨Êǽ«ÄãµÄº¯ÊýÓà extern "C" ºÍ _cdecl ¶¨ÒåÀ´×öµ½¼æÈÝÐÔºÍÒ»ÖÂÐÔ¡£ »ã±à´úÂëµÄº¯ÊýÃûÇ°Ãæ±ØÐë´øÒ»¸öÏ»®Ïß (_) ²¢ÇÒÔÚÍâÃæ±àÒëʱ¼ÓÉÏ´óСдÃô¸ÐµÄÑ¡Ïî (Ñ¡Ïî -mx)¡£ ÀýÈç:

; extern "C" int _cdecl square (int x);
_square PROC NEAR ; ÕûÐÍÆ½·½º¯Êý
PUBLIC _square
MOV EAX£¬ [ESP+4]
IMUL EAX
RET
_square ENDP

Èç¹ûÄãÐèÒªÖØÔØº¯Êý£¬ÖØÔزÙ×÷·û£¬·½·¨£¬ºÍÆäËü C++ רÓеĶ«Î÷£¬¾Í±ØÐëÏÈÓà C++ дºÃ´úÂëÔÙÓñàÒëÆ÷±àÒë³É»ã±à´úÂëÒÔ»ñµÃÕýÈ·µÄÁ¬½ÓÐÅÏ¢ºÍµ÷ÓÃÔ­ÐÍ¡£ÕâЩϸ½ÚËæ×űàÒëÆ÷µÄ²»Í¬¶ø²»Í¬¶øÇÒºÜÉÙÁгöÎĵµ¡£ Èç¹ûÄãÏ£Íû»ã±àº¯ÊýÓÃÆäËüµÄµ÷ÓÃÔ­ÐͶø²»ÊÇ extern "C" ¼° _cdecl£¬ÓÖ¿ÉÒÔ±»²»Í¬µÄ±àÒëÆ÷µ÷Óã¬ÄÇôÄãÐèҪΪÿ¸ö±àÒëÆ÷дһ¸öÃû×Ö¡£ ÀýÈçÖØÔØÒ»¸ö square º¯Êý:

; int square (int x);
SQUARE_I PROC NEAR ; ÕûÐÍÆ½·½º¯Êý
@square$qi LABEL NEAR ; Borland ±àÒëÆ÷µÄÁ¬½ÓÃû×Ö
?square@@YAHH@Z LABEL NEAR ; Microsoft ±àÒëÆ÷µÄÁ¬½ÓÃû×Ö
_square__Fi LABEL NEAR ; Gnu ±àÒëÆ÷µÄÁ¬½ÓÃû×Ö
PUBLIC @square$qi£¬ ?square@@YAHH@Z£¬ _square__Fi
MOV EAX£¬ [ESP+4]
IMUL EAX
RET
SQUARE_I ENDP


; double square (double x);
SQUARE_D PROC NEAR ; Ë«¾«¶È¸¡µãƽ·½º¯Êý
@square$qd LABEL NEAR ; Borland ±àÒëÆ÷µÄÁ¬½ÓÃû×Ö
?square@@YANN@Z LABEL NEAR ; Microsoft ±àÒëÆ÷µÄÁ¬½ÓÃû×Ö
_square__Fd LABEL NEAR ; Gnu ±àÒëÆ÷µÄÁ¬½ÓÃû×Ö
PUBLIC @square$qd£¬ ?square@@YANN@Z£¬ _square__Fd
FLD QWORD PTR [ESP+4]
FMUL ST(0)£¬ ST(0)
RET
SQUARE_D ENDP

Õâ¸ö·½·¨Äܹ»¹¤×÷ÊÇÒòΪËùÓÐÕâЩ±àÒëÆ÷¶ÔÖØÔØµÄº¯Êý¶¼È±Ê¡Ê¹ÓÃ_cdecl µ÷ÓᣠȻ¶ø¶ÔÓÚ²»Í¬µÄ±àÒëÆ÷£¬ÉõÖÁ¶Ô·½·¨(³ÉÔ±º¯Êý)µÄµ÷Ó÷½Ê½¶¼²»Ò»Ñù (Borland ºÍ Gnu ±àÒëÆ÷ʹÓà _cdecl ·½Ê½£¬'this' Ö¸ÕëÊǵÚÒ»¸ö²ÎÊý£»¶ø Microsoft ʹÓà _stdcall ·½Ê½£¬'this' Ö¸Õë·ÅÔÚ ecx Àï)¡£

ͨ³£À´Ëµ£¬µ±ÄãʹÓÃÁËÏÂÁж«Î÷ʱ£¬²»ÒªÖ¸Íû²»Í¬µÄ±àÒëÆ÷ÔÚÄ¿±êÎļþ¼¶±ð¿ÉÒÔ¼æÈÝ: long double£¬³ÉÔ±Ö¸Õ룬Ðé»úÖÆ£¬new£¬delete£¬Òì³££¬ÏµÍ³º¯Êýµ÷Óã¬ÒÔ¼°±ê×¼¿âº¯Êý¡£

16 λģʽDOS»òWindows£¬ C/C++ µÄ¼Ä´æÆ÷ʹÓÃ:
AXÊÇ16λ·µ»ØÖµ£¬DX:AXÊÇ32 λ·µ»ØÖµ£¬ST(0)ÊǸ¡µã·µ»ØÖµ¡£¼Ä´æÆ÷ AX£¬ BX£¬ CX£¬ DX£¬ ES ºÍËãÊõ±êÖ¾¿ÉÒÔ±»¹ý³Ì¸Ä±ä; ÆäËüµÄ¼Ä´æÆ÷±ØÐë±£´æºÍ»Ö¸´¡£ Ò»¸ö¹ý³ÌÒª²»¸Ä±äSI£¬ DI£¬ BP£¬ DS ºÍ SS µÄǰÌáÏ²Ų»»áÓ°ÏìÁíÒ»¸ö¹ý³Ì¡£

32λģʽWindows£¬ C++ ºÍÆäËü±à³ÌÓïÑÔϵļĴæÆ÷ʹÓÃ:
ÕûÐÍ·µ»ØÖµ·ÅÔÚ EAX£¬ ¸¡µã·µ»ØÖµ·ÅÔÚ ST(0)¡£ ¼Ä´æÆ÷ EAX£¬ ECX£¬ EDX (ûÓÐ EBX) ¿ÉÒÔ±»¹ý³ÌÐÞ¸Ä; ÆäËüµÄ¼Ä´æÆ÷±ØÐë±£ÁôºÍ»Ö¸´¡£¶Î¼Ä´æÆ÷²»Äܱ»¸Ä±ä£¬ÉõÖÁ²»Äܱ»ÁÙʱ¸Ä±ä¡£ CS£¬ DS£¬ ES ºÍ SS ¶¼Ö¸Ïòƽ̹ģʽµÄ¶Î¡£ FS ±»²Ù×÷ϵͳʹÓ㬠GS ûÓÐʹÓ㬵«ÊDZ»±£Áô¡£ ±ê¼Çλ¿ÉÒÔÔÚÏÂÃæµÄÏÞÖÆÏ±»¹ý³Ì¸Ä±ä: ·½Ïò±ê־ȱʡÊÇ0¡£·½Ïò±êÖ¾¿ÉÒÔÔÝʱµÄÐ޸ģ¬ µ«ÊDZØÐëÔÚÈκεĵ÷ÓûòÕß·µ»ØÇ°Çå³ý¡£ÖжϱêÖ¾²»Äܱ»Çå³ý¡£ ¸¡µã¼Ä´æÆ÷¶ÑÕ»ÔÚ¹ý³ÌÈë¿Ú´¦Êǿյ쬷µ»ØÊ±Ò²Ó¦¸ÃÊǿյ쬳ýÁË ST(0) ±»ÓÃÓÚ·µ»ØÖµµÄÇé¿ö¡£ MMX ¼Ä´æÆ÷¿ÉÒÔ±»¸Ä±äµ«ÊÇÔÚ·µ»ØÇ°»òÕßÔÚµ÷ÓÿÉÄÜʹÓø¡µãÔËËãµÄ¹ý³Ìǰ±ØÐëÓà EMMS Çåһϡ£ ËùÓÐµÄ XMM ¼Ä´æÆ÷¶¼¿ÉÒÔ±»¹ý³ÌÐ޸ġ£ ÔÚXMM ¼Ä´æÆ÷ÀïµÄ´«µÝ²ÎÊýºÍ·µ»ØÖµµÄÃèÊöÔÚ Intel µÄÓ¦ÓÃÎĵµ AP 589¡£ Ò»¸ö¹ý³Ì¿ÉÒÔÔÚ²»¸Ä±äEBX£¬ ESI£¬ EDI£¬ EBP ºÍËùÓеĶμĴæÆ÷µÄǰÌáϱ»ÁíÒ»¸ö¹ý³Ìµ÷Óá£

4. µ÷ÊÔºÍУÑé

ÕýÈçÄãÒѾ­·¢Ïֵ쬵÷ÊÔ»ã±à´úÂë·Ç³£µÄÀ§ÄѺÍÈÝÒ×Êܵ½´ìÕÛ¡£ ÎÒ½¨ÒéÄãÏȰÑÄãÐèÒªÓÅ»¯µÄС¶Î´úÂëÓø߼¶ÓïÑÔд³ÉÒ»¸ö×Ó³ÌÐò¡£ È»ºóд¸öСµÄ²âÊÔ³ÌÐò¿ÉÒÔ³ä·Ö²âÊÔÄãµÄÕâ¸ö×Ó³ÌÐò¡£ È·ÈϲâÊÔ³ÌÐò¿ÉÒÔ²âÊÔµ½ËùÓеķÖÖ§ºÍ±ß½çÌõ¼þ¡£

µ±¸ß¼¶ÓïÑÔµÄ×Ó³ÌÐò¿ÉÒÔ¹¤×÷ÁË£¬ÄãÔÙ°ÑËü·­Òë³É»ã±à´úÂë¡£

ÏÖÔÚÄã¿ÉÒÔ¿ªÊ¼ÓÅ»¯ÁË¡£ ÿ´ÎÄã×öÁ˵ãÐ޸ͼӦ¸ÃÔËÐвâÊÔ³ÌÐò¿´¿´Äܲ»ÄÜÕýÈ·¹¤×÷¡£ ½«ÄãËùÓеİ汾¶¼±êÉϺŲ¢±£´æÆðÀ´£¬ÕâÑùÔÚ·¢ÏÖ²âÊÔ³ÌÐò¼ì²é²»µ½µÄ´íÎó (±ÈÈçдµ½´íÎóµÄµØÖ·)ʱ¿ÉÒÔ»ØÍ·À´ÖØÐ²âÊÔ¡£

ÓõÚ30ÕÂÀïÌáµ½µÄËùÓз½·¨»òÕßÓòâÊÔ³ÌÐò²âÊÔ×îÄãµÄ³ÌÐòÖÐ×î¹Ø¼üµÄ²¿·Ö¡£ Èç¹û´úÂë±ÈÄãÆÚÍûµÄËÙ¶ÈÂýµÄÌ«¶à£¬×î¿ÉÄܵÄÔ­ÒòÊÇ: cache ʧЧ (µÚ7ÕÂ)£¬Î´¶ÔÆë²Ù×÷(µÚ6ÕÂ)£¬µÚÒ»´ÎÔËÐÐÏûºÄ(µÚ8ÕÂ)£¬·ÖÖ§Ô¤²âʧ°Ü(µÚ22ÕÂ) £¬È¡Ö¸ÁîÎÊÌâ(µÚ15ÕÂ)£¬¼Ä´æÆ÷¶ÁÑÓ³Ù(µÚ16ÕÂ)£¬»òÕßÊǹý³¤µÄÒÀÀµ»·(µÚ20ÕÂ)¡£

¸ß¶ÈÓÅ»¯µÄ´úÂ뽫±äµÃ¶ÔÆäËûÈ˷dz£ÄѶÁ¶®£¬ÉõÖÁ¶ÔÄãÈÕºóÔÙ¶ÁÒ²ÓÐÀ§ÄÑ¡£ ΪÁËʹά»¤´úÂë±äΪ¿ÉÄÜ£¬½«´úÂë×é֯Ϊһ¸ö¸öСµÄÂß¼­¶Î(¹ý³Ì»òÕߺê)ÇÒÿ¶Î¶¼¾ßÓкõĽӿںÍÇå³þµØ×¢Ê;ͷdz£ÖØÒª¡£ ´úÂëÔ½¸´ÔÓ¼èɬ£¬Ð´ÏºõÄÎĵµ¾ÍÔ½ÖØÒª¡£

5. ÄÚ´æÄ£Ê½

Pentium Ö÷ҪΪ 32 λ´úÂëÉè¼Æ£¬16λ´úÂëµÄÐÔÄܺܲ ½«ÄãµÄ´úÂëºÍÊý¾Ý·Ö¶ÎÒ²»áÃ÷ÏԵĽµµÍÐÔÄÜ£¬Òò´Ëͨ³£ÄãÓ¦µ±Ê¹ÓÃ32λƽ̹ģʽ£¬²¢ÇÒʹÓÃÖ§³ÖÕâÖÖģʽµÄ²Ù×÷ϵͳ¡£ Èç¹û²»Ìرð×¢Ã÷£¬Õâ±¾ÊÖ²áÀïËùÓеÄÀý×Ó¶¼Ê¹ÓÃ32λƽ̹ÄÚ´æÄ£Ê½¡£

 

6. ¶ÔÆë

ÄÚ´æÀïµÄËùÓÐÊý¾Ý¶¼±ØÐë°´ÕÕÏÂ±í½«µØÖ·¶ÔÆëµ½¿ÉÒÔ±» 2£¬4£¬8 »ò 16 Õû³ýµÄλÖãº

 
¶ÔÆë
 ²Ù×÷Êý¾Ý³¤¶È   PPlain ¼° PMMX   PPro, PII ¼° PIII 
 1 (byte)  1 1
 2 (word)  2 2
 4 (dword)  4 4
 6 (fword)  4 8
 8 (qword)  8 8
 10 (tbyte)  8 16
 16 (oword)  n.a. 16

ÔÚ PPlain ºÍ PMMX ÉÏ£¬ÔÚ4×ֽڱ߽çÏß½»´íµÄʱºò£¬·ÃÎÊδ¶ÔÆëÊý¾Ý½«ÖÁÉÙÓÐ 3 ¸öʱÖÓÖÜÆÚµÄ¶îÍâÏûºÄ¡£ µ±cache±ß½çÏß±»½»´íµÄʱºòËðºÄ¸ü´ó¡£

ÔÚ PPro£¬PII ºÍ PIII ÉÏ£¬µ±cache±ß½çÏß½»´íʱ£¬Î´¶ÔÆëÊý¾Ý½«ÏûºÄµô 6-12 ¸öʱÖÓÖÜÆÚ¡£ ³ß´çСÓÚ 16 ×Ö½ÚµÄδ¶ÔÆë²Ù×÷Êý£¬Ã»ÓÐÔÚ 32 ×ֽڱ߽çÉϽ»´íʱ½«Ã»ÓжîÍâµÄËðºÄ¡£

ÔÚ dword ¶ÑÕ»ÉÏÒÔ 8 »ò 16 ¶ÔÆëÊý¾Ý¿ÉÄÜ»áÓÐÎÊÌâ¡£³£Óõķ½·¨ÊÇÉèÖÃ¶ÔÆëµÄ½á¹¹Ö¸Õë¡£¶ÔÆë±¾µØÊý¾ÝµÄº¯Êý¿ÉÒÔÊÇÕâÑù£º

_FuncWithAlign PROC NEAR
PUSH EBP ; Ç°Ðø´úÂë
MOV EBP£¬ ESP
AND EBP£¬ -8 ; ÒÔ 8 À´¶ÔÆëÖ¡Ö¸Õë
FLD DWORD PTR [ESP+8] ; º¯Êý²ÎÊý
SUB ESP£¬ LocalSpace + 4 ; ·ÖÅä±¾µØ¿Õ¼ä
FSTP QWORD PTR [EBP-LocalSpace] ; ÔÚ¶ÔÆëÁ˵Ŀռ䱣´æÒ»Ð©¶«Î÷
¡£¡£¡£
ADD ESP£¬ LocalSpace + 4 ; ½áÊø´úÂë¡£ »Ö¸´ ESP
POP EBP ; (PPlain/PMMX ÉÏÓÐ AGI ÑÓ³Ù)
RET
_FuncWithAlign ENDP

ËäÈ»¶ÔÆëÊý¾ÝÓÀÔ¶ÊÇÖØÒªµÄ£¬µ«ÊÇÔÚ PPlain ºÍ PMMX ÉÏ¶ÔÆë´úÂëȴûÓбØÒª¡£ PPro£¬PII ¼° PIII ÉÏ¶ÔÆë´úÂëµÄÔ­ÔòÔÚµÚ15Õ²ûÊö¡£

7. Cache

PPlainºÍPPro´øÓÐÆ¬ÄÚcache(Ò»¼¶cache)ÆäÖÐ8kb ´úÂëcache£¬8kb Êý¾Ýcache¡£ PMMX£¬PII ºÍ PIII ÔòÓÐ 16 kb ´úÂëcache ºÍ 16 kb Êý¾Ý cache¡£ Ò»¼¶ cache ÀïµÄÊý¾Ý¿ÉÒÔÔÚ1¸öʱÖÓÖÜÆÚÄÚ¶Áд£¬cache δÃüÖÐʱ½«ËðʧºÜ¶àʱÖÓÖÜÆÚ¡£ Àí½â cache ÊÇÔõÑù¹¤×÷µÄ·Ç³£ÖØÒª£¬ÕâÑù²ÅÄܸüÓÐЧµÄʹÓÃËü¡£

Êý¾Ýcache ÓÉ 256 »ò 512 ÐÐ×é³É£¬Ã¿ÐÐ 32 ×Ö½Ú¡£ ÿ´ÎÄã¶ÁÊý¾ÝδÃüÖУ¬´¦ÀíÆ÷½«´ÓÄÚ´æ¶Á³öÒ»ÕûÌõ cache ÐС£ cache ÐÐ×ÜÊÇÔÚÎïÀíµØÖ·µÄ 32 ×Ö½Ú¶ÔÆë¡£ µ±Äã´ÓÒ»¸ö¿ÉÒÔ±» 32 Õû³ýµÄµØÖ·¶Á³öÒ»¸ö×Ö½Ú£¬ Ï 31 ×ֽڵĶÁд¾Í²»»áÓжàÓàµÄÏûºÄ¡£ Òò´ËÔÚÄÚ´æÖУ¬Äã¿ÉÒÔ°ÑÏà¹ØÊý¾ÝÏî·ÅÔÚ¶ÔÆëµÄ32×Ö½Ú¿éÀ¼¯ÖзÃÎÊ£©À´»ñµÃºÃ´¦¡£ ÀýÈ磬Èç¹ûÄãÓÐÒ»¸öÑ­»·Òª²Ù×÷Á½¸öÊý×飬Äã¾Í¿ÉÒÔ½«Á½¸öÊý×é´©²å³ÉÒ»¸ö½á¹¹Êý×飬 ÈÃÒ»ÆðʹÓõÄÊý¾ÝµÄÎïÀíλÖÃÒ²ÔÚÒ»Æð¡£

Èç¹ûÊý×é»òÕ߯äËüÊý¾Ý½á¹¹µÄ³ß´çÊÇ 32 ×ֽڵı¶Êý£¬Äã×îºÃ½«Æä°´ 32 ×Ö½Ú¶ÔÆë¡£

cache ÊÇ×éÏàÁªÓ³ÏñµÄ¡£ Õâ¾ÍÊÇ˵һ¸öcache Ðв»ÄÜËæÐÄËùÓûµØÖ¸ÏòÈÎÒâÄÚ´æµØÖ·¡£ ÿ¸ö cache ÐÐÓÐÒ»¸ö 7-bit µÄ×éÖµ£¬ËüÆ¥ÅäÎïÀíµØÖ·µÄ 5 µ½ 11 λ ( 0-4 λָ¶¨32×Ö½ÚcacheÐеÄÐÐÄÚµØÖ·)¡£ PPlain ºÍ PPro ¿ÉÒÔÓÐ 2 Ìõ cache ÐжÔÓ¦ 128 ¸ö×éÖµÖеÄÒ»¸öÖµ£¨¼´Ã¿×é 2 ÐУ©£¬Òò´Ë¶ÔÈκÎRAMµØÖ·£¬¿ÉÄÜÓÐÁ½Ìõ cache ÐÐÖ¸ÏòËü¡£ PMMX£¬PII ºÍ PIII ÔòÊÇ 4 Ìõ¡£

Æä½á¹ûÊÇ cache ±£´æµÄµØÖ· 5-11 λÏàͬ£¨¼´¾ßÓÐÏàͬ×éÖµ£©µÄ²»Í¬Êý¾Ý¿éµÄÊýÄ¿²»Äܳ¬¹ý 2 ¸ö£¨PPlain ºÍ PPro£©»ò 4 ¸ö£¨PMMX£¬ PII ºÍ PIII£©¡£ Äã¿ÉÒÔÓÃÒÔÏ·½·¨¼ì²âÁ½¸öµØÖ·ÊÇ·ñÓÐÏàͬµÄ×éÖµ£º½ØµôµØÖ·µÄµÍ 5 λµÃµ½¿ÉÒÔ±» 32 Õû³ýµÄ¡°½Ø¶ÏµØÖ·¡±£¨¼´Áî µÍ5λ=0£©¡£ Èç¹ûÁ½¸ö½Ø¶ÏµØÖ·Ö®²îÊÇ 4096 (=1000H) µÄ±¶Êý£¬ ÕâÁ½¸öµØÖ·¾ÍÓÐÏàͬµÄ×éÖµ¡£

ÈÃÎÒÓÃÏÂÃæµÄһС¶Î´úÂëÀ´ËµÃ÷һϣ¬ ÕâÀï ESI ·ÅÖÃÁËÒ»¸ö¿ÉÒÔ±» 32 Õû³ýµÄµØÖ·:

AGAIN:  MOV EAX£¬ [ESI]
¡¡¡¡¡¡¡¡MOV EBX£¬ [ESI + 13*4096 + 4]
¡¡¡¡¡¡¡¡MOV ECX£¬ [ESI + 20*4096 + 28]
¡¡¡¡¡¡¡¡DEC EDX¡¡
¡¡¡¡¡¡¡¡JNZ AGAIN

Õâ3¸öµØÖ·¶¼ÓÐÏàͬµÄ×éÖµ£¬ ÒòΪ½Ø¶ÏµØÖ·µÄ²î¶¼ÊÇ 4096 µÄ±¶Êý¡£ Õâ¸öÑ­»·ÔÚ PPlain ºÍ PPro ÉϽ«ÔËÐеÄÏ൱Âý¡£ µ±Äã¶Á ECX µÄʱºò£¬ ûÓпÕÏÐµÄ cache ÐÐÓÐÏëÒªµÄ×éÖµ£¬ Òò´Ë´¦ÀíÆ÷ÓÃ×î½ü×îÉÙʹÓÃËã·¨Ìæ»»µÄÁ½¸öcache ÐÐÖеÄÒ»¸ö£¬ Õâ¾ÍÊÇ EAX ʹÓõÄÄǸö¡£ È»ºó´Ó [ESI+20*4096] µ½ [ESI+20*4096+31] ¶Á³öÊý¾ÝÀ´Ìî³ä¸ÃcacheÐв¢Íê³ÉдECXµÄ²Ù×÷¡£ ÏÂÒ»´ÎÔÙ ¶ÁEAXʱ£¬ Ä㽫·¢ÏÖΪEAX±£´æÊý¾ÝµÄcacheÐÐÒѾ­±»¶ªÆúÁË£¬ ËùÒÔÓÖÒªÌæ»»×î½ü×îÉÙʹÓÃµÄ cache ÐУ¬ ÄǾÍÊDZ£´æ EBX ÊýÖµµÄÄǸöÁË£¬Èç´Ëµßô¤... Õ⽫»á²úÉú´óÁ¿µÄ cache ʧЧ£¬ Õâ¸öÑ­»·´ó¸Å¿ªÏú 60 ¸öʱÖÓÖÜÆÚ¡£ Èç¹ûµÚ3ÐиijÉ:

MOV ECX£¬ [ESI + 20*4096 + 32]

ÕâÑùÎÒÃǾͻáÔÚ 32 ×ֽڱ߽çÉϽ»´í£¬ Òò´ËºÍǰÁ½ÐеÄ×éÖµ²»Í¬ÁË¡£ ÕâÑùΪÕâÈý¸öµØÖ··Ö±ðÖ¸¶¨cacheÐоÍûÓÐʲôÎÊÌâÁË¡£ Õâ¸öÑ­»·½ö½öÏûºÄ3¸öʱÖÓÖÜÆÚ(³ýÁ˵ÚÒ»´ÎÔËÐÐ) ¡ª¡ª Ò»¸öÏ൱´óµÄÌá¸ß£¡ Èç¸Õ²ÅÌáµ½µÄ£¬PMMX£¬ PII ºÍ PIII ÿ×éÓÐ 4 ·cacheÐУ¬Òò´ËÄã¿ÉÒÔÓÐ4¸öÏàͬ×éÖµµÄcacheÐÐ(һЩIntelÎĵµ´íÎóµÄ˵ PIIµÄcacheÊÇ2·)¡£

¼ì²âÄãµÄÊý¾ÝµØÖ·ÊÇ·ñÓÐÏàͬµÄ×éÖµ¿ÉÄܷdz£À§ÄÑ£¬ÓÈÆäÊÇËüÃÇ·ÖÉ¢ÔÚ²»Í¬µÄ¶ÎÀï¡£ Òª±ÜÃâÕâÖÖÎÊÌâµÄ×îºÃÄÜ×öµÄ¾ÍÊǽ«¹Ø¼ü²¿·ÖʹÓõÄËùÓÐÊý¾Ý¶¼·ÅÔÚÒ»¸ö²»³¬¹ýcache´óСµÄÁ¬ÐøÊý¾Ý¿éÀ»òÕß·ÅÔÚÁ½¸ö²»³¬¹ýcacheÒ»°ë´óСÁ¬ÐøÊý¾Ý¿é (ÀýÈçÒ»¸ö¾²Ì¬Êý¾Ý¿é£¬Ò»¸ö¶ÑÕ»Êý¾Ý¿é) ÕâÑùÄãµÄcacheÐоÍÒ»¶¨»á¸ßЧʹÓá£

Èç¹ûÄãµÄ´úÂëµÄ¹Ø¼ü²¿·ÖÒª²Ù×÷ºÜ´óµÄÊý¾Ý½á¹¹»òÕßËæ»úÊý¾ÝµØÖ·£¬Äã¿ÉÄÜ»áÏë±£´æËùÓг£ÓõıäÁ¿(¼ÆÊýÆ÷£¬Ö¸Õ룬¿ØÖƱäÁ¿µÈ) ÔÚÒ»¸öµ¥¶ÀµÄ×î´óΪ 4k µÄÁ¬Ðø¿éÀïÃæ£¬ ÕâÑùÄã¾ÍÓÐÒ»¸öÍêÕûµÄ¿ÕÏÐcacheÐм¯À´·ÃÎÊËæ»úÊý¾Ý¡£ ÒòΪÄãͨ³£×ÜÊÇÐèÒªÕ»¿Õ¼äÀ´Îª×Ó³ÌÐò±£´æ²ÎÊýºÍ·µ»ØµØÖ·£¬ ×îºÃµÄ×ö·¨ÊǸ´ÖÆËùÓеij£Óþ²Ì¬Êý¾Ýµ½¶ÑÕ»£¨°ÑËüÃǸ´ÖƳɶ¯Ì¬±äÁ¿£©£¬Èç¹ûËüÃDZ»¸Ä±ä£¬¾ÍÔڹؼüÑ­»·ÍâÔÙ¸´ÖÆ»ØÈ¥¡£

¶ÁÒ»¸ö²»ÔÚÒ»¼¶»º´æÀïµÄÊý¾Ý½«µ¼Ö´Ӷþ¼¶»º´æ¶ÁÈëÕû¸öcacheÐУ¬Õâ´óÔ¼ÒªÏûºÄ 200ns (ÔÚ 100MHz ϵͳÉÏÊÇ 20 ʱÖÓÖÜÆÚ£¬ »òÊÇ 200MHz É쵀 40 ¸öÖÜÆÚ)£¬µ«ÊÇÄã×îÏÈÐèÒªµÄÊý¾Ý½«ÔÚ 50-100 nsºó×¼±¸ºÃ¡£ Èç¹ûÊý¾ÝÒ²²»ÔÚ¶þ¼¶»º´æ£¬Ä㽫»áÅöµ½ 200-300 ns µÄÑÓ³Ù¡£ Èç¹ûÊý¾ÝÔÚ DRAM Ò³±ß½ç½»´í£¬ÑÓ³Ùʱ¼ä»á¸ü³¤Ò»Ð©¡£ (4/8 MB £¬72Òý½ÅÄÚ´æÐ¾Æ¬µÄ DRAM Ò³´óСÊÇ 1Kb£¬16/32 Mb µÄÊÇ 2kb)¡£

µ±´ÓÄÚ´æ¶ÁÈë´ó¿éµÄÊý¾Ý£¬ ËÙ¶ÈÏÞÖÆÔÚÓÚÌî³ä cache ÐС£ ÓÐʱÄã¿ÉÒÔÒÔ·ÇÁ¬ÐøµÄ´ÎÐò¶ÁÈ¡Êý¾ÝÀ´Ìá¸ßËÙ¶È: ÔÚÄã¶ÁÍêÒ»¸öcacheÐÐ֮ǰ¾Í¿ªÊ¼¶ÁÏÂÒ»¸öcacheÐеĵÚÒ»¸öÊý¾Ý¡£ ÔÚPPlainºÍPMMXÉ϶ÁÖ÷´æ»ò¶þ¼¶cache£¬ÒÔ¼°ÔÚPPro£¬PII£¬PIIÉ϶Á¶þ¼¶cache£¬ÓÃÕâ¸ö·½·¨¿ÉÒÔÌá¸ß¶ÁÈëËÙ¶È20 - 40%¡£ Õâ¸ö·½·¨µÄ²»ÀûµØ·½ÔÚÓÚʹ³ÌÐò´úÂë±äµÄ·Ç³£µÄ±¿×¾ºÍÄÑÓÚÀí½â¡£ ¹ØÓÚÕâЩ¼¼Çɵĸü¶àÐÅÏ¢Çë²Î¿¼http://www.intelligentfirm.com/¡£

µ±ÄãдÏòÒ»¸ö²»ÔÚ Ò»¼¶cache µÄµØÖ·£¬ÔÚ PPlainºÍPMMXÉÏÕâ¸öÊýÖµ½«Ö±½Óдµ½ ¶þ¼¶cache »òÕßÊÇ RAM(ÕâÈ¡¾öÓÚ2¼¶cacheÈçºÎÉèÖÃ)¡£ Õâ´óÔ¼ÏûºÄ 100 ns¡£ Èç¹ûÄãÏòͬһ¸ö32×Ö½ÚµÄÄÚ´æ¿é·´¸´Ð´8´Î»ò8´ÎÒÔÉϵ«Ã»ÓдÓÀïÃæ¶Á£¬¶øÇÒÕâ¸ö¿é²»ÔÚÒ»¼¶»º´æ£¬ ÄÇô½ÏºÃµÄ×ö·¨ÊÇÏȶԸÿé×÷Ò»¸ö¡°ÑƶÁ¡±Ê¹Æä½øÈëcacheÐУ¬Èç´ËÒ»À´ËæºóËùÓÐÏòÕâ¸ö¿éµÄд²Ù×÷¾Í»á±»¶¨Ïòµ½cacheÀÿ´ÎÖ»ÏûºÄÒ»¸öʱÖÓÖÜÆÚ¡£ ÔÚ PPlain ºÍ PMMX ÉÏ£¬ÓÐʱ»áÒòÎªÖØ¸´Ð´ÏòÒ»¸öµØÖ·¶øÔÚÆä¼äûÓжÁËü¶ø´øÀ´Ð¡Ð¡µÄ³Í·£¡£

ÔÚ PPro£¬PII ºÍ PIIIÉÏ£¬Ò»´Îд²Ù×÷µÄcacheʧЧͨ³£»áµ¼Ö¶ÁÈëÒ»¸öcacheÐУ¬µ«Ò²ÓпÉÄÜʹ´æ´¢ÇøÓò×ö²»Í¬µÄ²Ù×÷£¬ÀýÈçÏÔ´æ (¼û Pentium Pro ϵÁпª·¢ÕßÊֲᣬ vol.3 : ²Ù×÷ϵͳд×÷ÕßÖ¸ÄÏ")¡£

Ìá¸ßÄÚ´æ¶ÁдËٶȵķ½·¨ÔÚÏÂÃæµÄ27.8Õ½ÚÌÖÂÛ¡£

PPlain ºÍ PPro ÓÐ 2 ¸öд»º´æ£¬PMMX£¬ PII ºÍ PIII ÓÐ 4 ¸ö¡£ ¹ÊÔÚ PMMX£¬ PII ºÍ PIII ÉÏÄã×î¶à¿ÉÒÔÓÐ4¸öδÍê³ÉµÄ²»ÃüÖÐcacheµÄд²Ù×÷¶ø²»»áʹºóÃæµÄÖ¸Áî²úÉúÑÓ³Ù¡£ ÿ¸öд»º´æ¿ÉÒÔ´¦ÀíµÄ²Ù×÷Êý¿í¶È×î¶à64λ¡£

ÁÙʱÊý¾Ý¿ÉÒÔ·½±ãµØ·ÅÔÚ¶ÑÕ»ÀÒòΪ¶ÑÕ»ÇøÓò·Ç³£ÓпÉÄÜÔÚcacheÖС£È»¶ø£¬Èç¹ûÄãµÄÊý¾ÝÔªËØ´óÓÚ¶ÑÕ»×Ö´óСʱӦ¸Ã×¢Òâ¶ÔÆëÎÊÌâ¡£

Èç¹ûÁ½¸öÊý¾Ý½á¹¹µÄÉúÃüÆÚ²»ÖصþµÄ»°£¬ÄÇôËüÃÇ¿ÉÄܻṲÏíÏàͬµÄ RAM ÇøÓò´Ó¶øÌá¸ßcacheЧÂÊ¡£ÕâÓëÔÚ¶ÑÕ»ÖÐΪÁÙʱ±äÁ¿·ÖÅä¿Õ¼äµÄÆÕ±éϰ¹ßÊÇÒ»Öµġ£

½«ÁÙʱÊý¾Ý±£´æÔڼĴæÆ÷ÀォÓиü¸ßµÄЧÂÊ¡£ ¼ÈÈ»¼Ä´æÆ÷ÊÇÒ»ÖÖÏ¡ÓÐ×ÊÔ´£¬Äã¿ÉÄÜÏëÓÃ[ESP]¶ø²»ÊÇ[EBP]À´¶¨Î»¶ÑÕ»ÀïµÄÊý¾Ý£¬ ÕâÑù¾Í¿ÉÒÔÊÍ·ÅEBPÓÃÓÚÆäËüÓÃ;¡£ ²»ÒªÍü¼ÇÁË ESP ÔÚÄãÿ´Î×ö PUSH »òÕß POP ʱ¶¼»á±»¸Ä±ä¡£ (Äã²»ÄÜÔÚ 16λ WindowsÏÂʹÓÃESP£¬ ÒòΪʱÖÓÖжϽ«ÔÚÄãµÄ´úÂëÖв»¿ÉÔ¤ÖªµÄλÖÃÐÞ¸ÄESPµÄ¸ß×Ö¡£)

ÓÐÒ»¸ö·Ö¿ªµÄcache¸ø´úÂëʹÓ㬠ËüºÍÊý¾ÝcacheÊÇÀàËÆµÄ¡£ ´úÂëcache µÄ´óСÔÚ PPlainºÍPProÉÏÊÇ 8 kb£¬ ÔÚ PMMX£¬PIIºÍPIIIÉÏÊÇ 16 kb¡£ ÄÜÈÃÄãµÄ´úÂëµÄ¹Ø¼ü²¿·Ö(×îÀïÃæµÄÑ­»·)·ÅÈë´úÂëcacheÊǺÜÖØÒªµÄ¡£ ×î³£ÓõĴúÂë»òÕßÐèÒªÒ»ÆðʹÓõĹý³Ì×îºÃÊÇ´¢´æÔÚÁÙ½üµÄλÖᣠ²»³£ÓõķÖÖ§»òÕß¹ý³ÌÓ¦¸Ã·ÅÔ¶ÀëЩ£¬·ÅÔÚ´úÂëµÄÏÂÃæ»òÕ߯äËüµÄλÖá£

8. µÚÒ»´Î vs ÖØ¸´ÔËÐÐ

һƬ´úÂëÍùÍùÔÚµÚÒ»´ÎÔËÐÐʱ±ÈÖØ¸´ÔËÐÐÏûºÄ¸ü¶àµÄʱ¼ä¡£ Ô­Òò¼ûÏÂ:

1. ´Ó RAM ¶ÁÈë´úÂëµ½cache»¨È¥Á˱ÈÔËÐÐËü¸ü¶àµÄʱ¼ä¡£
2. ´úÂë²Ù×÷µÄËùÓÐÊý¾Ý¶¼±ØÐë¼ÓÔØµ½cache£¬ Õâ±ÈÖ´ÐÐÄÇЩ²Ù×÷¸ü»¨Ê±¼ä¡£ µ±´úÂëÖØ¸´ÔËÐеÄʱºò£¬ Êý¾Ý¼¸ºõ¶¼ÔÚ cache Àï¡£
3. Ìø×ªÖ¸ÁîÔÚµÚÒ»´ÎÔËÐеÄʱºò²¢²»ÔÚ·ÖÖ§Ä¿µÄ»º´æ(branch target buffer£¬¼ò³ÆBTB)À Òò´ËÒ»°ã¶¼²»ÄÜÕýÈ·µÄÔ¤²â¡£ ¼ûµÚ22Õ¡£
4. PPlain ÉÏ£¬ ´úÂëµÄ½âÂëÊǸöÆ¿¾±¡£ Èç¹û»¨µôÒ»¸öʱÖÓÖÜÆÚÈ¥¼ì²âÖ¸Á¶È£¬ ÄÇô¾Í²»¿ÉÄÜÔÚÒ»¸öʱÖÓÖÜÆÚ½âÂëÁ½ÌõÖ¸Á ÒòΪ´¦ÀíÆ÷²»ÖªµÀµÚ¶þÌõÖ¸Áî´ÓÄÇÀ↑ ʼµÄ¡£ PPlain ͨ¹ý¼ÇסÉÏ´ÎÔËÐк󱣴æÔÚcacheÀïµÄÿÌõÖ¸ÁîµÄ³¤¶ÈÀ´½â¾öÕâ¸öÎÊÌâ¡£ ÕâÑù×öµÄ½á¹ûÊÇ£¬ PPlainÉϵÚÒ»´ÎÖ´ÐÐʱ£¬Ö¸ÁîÈç¹û²»ÊÇÖ»ÓÐ1¸ö×Ö½Ú³¤µÄ»°¾Í²»»áÅä¶ÔÖ´ÐС£ PMMX£¬ PPro£¬ PII ºÍ PIII ÔÚµÚÒ»´Î½âÂëȴûÓÐÕâ¸öÎÊÌâ¡£

ÒòΪÕâËĸöÔ­Òò£¬ÔÚÑ­»·ÄÚ²¿µÄÒ»¶Î´úÂëµÚÒ»´ÎÔËÐÐͨ³£±ÈËæºóµÄÔËÐл¨È¥¸ü¶àµÄʱ¼ä¡£

Èç¹ûÄãʹÓÃÁËÒ»¸öºÜ´óµÄÑ­»·¶ø²»ÄÜ·ÅÈë´úÂëcache£¬½«µ¼ÖÂЧÂÊϽµ£¬ÒòΪËüÃDz»ÄÜÔÚ cache ÔËÐС£ Òò´ËÄãÓ¦¸ÃÖØÐÂ×éÖ¯Ò»ÏÂÑ­»·Ê¹cacheÄÜ·ÅÏÂËüÃÇ¡£

Èç¹ûÄãÓзdz£¶àµÄÌø×ª£¬µ÷Ó㬷ÖÖ§ÔÚÑ­»·À¾Í»á·´¸´µÄ²úÉú·ÖÖ§Ä¿µÄ»º´æÊ§°Ü¡£

ͬÑùµÄ£¬Èç¹ûÑ­»··´¸´²Ù×÷Ò»¸ö¶ÔÊý¾Ýcache¶øÑÔÌ«´óµÄÊý¾Ý½á¹¹£¬Ò²»áÒ»Ö±µÃµ½Êý¾Ýcache²»ÃüÖеijͷ£¡£

9. µØÖ·Éú³É»¥Ëø(AGI) (PPlain and PMMX)

Ö¸Áî²Ù×÷ÄÚ´æËùÐèÒªµÄµØÖ·ÐèÒªÒ»¸öʱÖÓÖÜÆÚÀ´¼ÆËã¡£ ͨ³£ÔÚÇ°ÃæµÄÖ¸Áî»òÖ¸Áî¶ÔÖ´ÐеÄʱºò£¬ËüÒѾ­ÔÚÁ÷Ë®Ïßͨ¹ýÒ»¸ö¶ÀÁ¢µÄ½×¶ÎÉϼÆËãºÃÁË¡£ µ«ÊÇÈç¹ûµØÖ·µÄ¼ÆËãÒÐÀµÉϸöʱÖÓÖÜÆÚµÄÔËÐнá¹ûµÄ»°£¬Äã¾ÍÐèÒªÒ»¸ö¶îÍâʱÖÓÖÜÆÚÀ´µÈ´ýµØÖ·µÄ¼ÆËã¡£ Õâ¾Í½Ð×öAGIÑÓ³Ù¡£ ÀýÈç:
ADD EBX£¬4 / MOV EAX£¬[EBX] ; AGI ÑÓ³Ù
Àý×ÓÀïµÄÑÓ³Ù¿ÉÒÔÏò ADD EBX£¬4 and MOV EAX£¬[EBX] ¼äÔö¼ÓһЩÆäËüµÄÖ¸Áî»òÕßÖØÐÂд³É MOV EAX£¬[EBX+4] / ADD EBX£¬4 À´È¥µô¡£
µ±ÄãÒþÐÔµÄʹÓÃESPѰַ£¬ ±ÈÈç PUSH£¬ POP£¬ CALL£¬ and RET£¬ ÇÒ ESP ÔÚǰ¸öÖÜÆÚ±»MOV£¬ ADD »ò SUB µÈÐ޸ģ¬ÕâÑùÒ²»áÔì³ÉAGIÑÓ³Ù¡£ PPlain ¼° PMMX ÓÐרÃŵĵç·À´Ô¤²âÕ»²Ù×÷ºóµÄESPÖµ£¬ Òò´ËÄãÔÚÓÃPUSH£¬ POP£¬ »ò CALL ¸Ä±ä ESP ºó²»»áÓöµ½AGIÑÓ³Ù¡£ ÔÚ RET ºóÃæ£¬ ½ö½öÔÚÓÐÁ¢¼´²Ù×÷Êý¶ÔESP×ö¼Ó·¨Ê±²Å»á²úÉúAGIÑÓ³Ù¡£

ÀýÈç:

ADD ESP£¬4 / POP ESI ; AGI ÑÓ³Ù
POP EAX / POP ESI ; ÎÞÑÓ³Ù£¬ Åä¶Ô
MOV ESP£¬EBP / RET ; AGI ÑÓ³Ù
CALL L1 / L1: MOV EAX£¬[ESP+8] ; ÎÞÑÓ³Ù
RET / POP EAX ; ÎÞÑÓ³Ù
RET 8 / POP EAX ; AGI ÑÓ³Ù
µ± LEA Ö¸ÁîʹÓÃÁË»ù¼Ä´æÆ÷»òË÷Òý¼Ä´æÆ÷£¬ ¶øËüÃÇÔÚÇ°ÃæµÄʱÖÓÖÜÆÚ±»¸Ä±äÁË£¬Í¬Ñù»á·¢ÉúAGIÑÓ³Ù¡£ ÀýÈç:
INC ESI / LEA EAX£¬[EBX+4*ESI] ; AGI ÑÓ³Ù

PPro£¬ PII ºÍ PIII ÔÚ¶ÁÄÚ´æºÍLEAÉÏûÓÐ AGI ÑÓ³Ù£¬ µ«ÊÇÔÚдÄÚ´æÊ±»áÓÐ AGI ÑÓ³Ù¡£ Èç¹ûºóÀ´µÄ´úÂë²»ÐèÒªµÈ´ýд²Ù×÷½áÊøµÄ»°Õâ²¢ÎÞ´óÓ°Ïì¡£

10. ÕûÊýÖ¸ÁîÅä¶Ô(PPlain ¼° PMMX)

10.1 ÍêÃÀµÄÅä¶Ô

PPlain ¼° PMMXÓÐÁ½ÌõÁ÷Ë®ÏßÀ´Ö´ÐÐÖ¸Á ·Ö±ð½Ð×ö U-¹ÜµÀºÍV-¹ÜµÀ¡£ ÔÚÒ»¶¨µÄÌõ¼þÏÂÁ½ÌõÖ¸Áî¿ÉÒÔÒ»¸öÔÚ U-¹ÜµÀ£¬Ò»¸öÔÚ V-¹ÜµÀ ͬʱִÐС£ Õâ¿ÉÒÔʹËٶȼӱ¶¡£ Òò´Ë½«ÄãµÄÖ¸ÁîÖØÐÂ×é֯һϴÎÐòʹËüÃÇÅä¶ÔÊǺÜÓÐÀûµÄ¡£
    
ÏÂÃæÕâЩָÁî¿ÉÒÔÔÚÈÎÒâµÄ¹ÜµÀÄÚÅä¶Ô:
    
    *MOV ¼Ä´æÆ÷£¬ Äڴ棬 »òÊÇÁ¢¼´Êýµ½¼Ä´æÆ÷»òÄÚ´æ
    *PUSH ¼Ä´æÆ÷»òÁ¢¼´Êý£¬ POP ¼Ä´æÆ÷
    *LEA£¬ NOP
    *INC£¬ DEC£¬ ADD£¬ SUB£¬ CMP£¬ AND£¬ OR£¬ XOR£¬
    *»¹ÓÐһЩÐÎʽµÄ TEST (¼û26.14ÕÂ)

ÏÂÃæµÄÖ¸ÁîÖ»ÄÜÔÚ U-¹ÜµÀ Åä¶Ô:
    
¡¡  ADC
£¬ SBB
    SHR£¬ SAR£¬ SHL£¬ SAL ÒÆ¶¯Á¢¼´Êýλ
    ROR£¬ ROL£¬ RCR£¬ RCL ÒÆ¶¯Á¢¼´Êý1λ

ÏÂÃæµÄÖ¸Áî¿ÉÒÔÔÚÈκιܵÀÔËÐУ¬µ«ÊÇÖ»ÄÜÔÚ V-¹ÜµÀ Åä¶Ô:
    
    near call

    short ¼° near jump
    short ¼° near Ìõ¼þÌø×ª¡£
    
³ýÕâЩָÁîÖ®ÍâµÄÕûÐÍÖ¸Áî¶¼Ö»ÄÜÔÚ U-¹ÜµÀ ÔËÐУ¬ ¶øÇÒ²»ÄÜÅä¶Ô¡£

Á½ÌõÁ¬ÐøµÄÖ¸ÁîÂú×ãÁËÏÂÃæµÄÒªÇóʱ¾Í¿ÉÒÔÅä¶Ô:

1. µÚÒ»ÌõÖ¸ÁîÔÚ U ¹ÜµÀ ÖУ¬µÚ¶þÌõÖ¸ÁîÔÚ V ¹ÜµÀ ÖУ¬ ÇÒËüÃǶ¼ÊÇ¿ÉÅä¶ÔµÄ¡£

2. µ±µÚÒ»ÌõÖ¸Áîдһ¸ö¼Ä´æÆ÷µÄʱºò£¬µÚ¶þÌõÖ¸Áȥ¶Á/дËü¡£
ÀýÈç:
MOV  EAX£¬ EBX / MOV ECX£¬ EAX ; дºóÃæ¸ú×ŶÁ£¬²»ÄÜÅä¶Ô
MOV  EAX£¬ 1 / MOV EAX£¬ 2 ; дºóÃæ¸ú×Åд£¬²»ÄÜÅä¶Ô
MOV  EBX£¬ EAX / MOV EAX£¬ 2 ; ¶ÁºóÃæ¸ú×Åд£¬¿ÉÒÔÅä¶Ô
MOV  EBX£¬ EAX / MOV ECX£¬ EAX ; ¶ÁºóÃæ¸ú×ŶÁ£¬¿ÉÒÔÅä¶Ô
MOV  EBX£¬ EAX / INC EAX ; ¶ÁºóÃæ¸ú×ŶÁд£¬¿ÉÒÔÅä¶Ô

3. ÔÚµÚ2Ìõ¹æÔòÀïÃæ£¬ ¼Ä´æÆ÷µÄÒ»²¿·Ö×÷ΪÕû¸ö¼Ä´æÆ÷À´¶Ô´ý£¬ ÀýÈç:

    MOV  AL£¬ BL / MOV AH£¬ 0
    Ð´ÈëÏà¶Ô¼Ä´æÆ÷µÄ²»Í¬²¿·Ö£¬ ²»ÄÜÅä¶Ô

4. µ±Á½ÌõÖ¸ÁîͬʱдµÄÊDZêÖ¾¼Ä´æÆ÷µÄ²»Í¬²¿·Öʱ£¬¹æÔò2ºÍ3¶¼¿ÉÒÔºöÂÔµô¡£ ÀýÈç:

    SHR EAX£¬ 4 / INC EBX ; ¿ÉÒÔÅä¶Ô

5. Ò»¸öд±ê¼Ç¼Ä´æÆ÷µÄÖ¸Áî¿ÉÒÔºÍÒ»¸öÌõ¼þÌø×ªÅä¶Ô£¬ ¶øºöÂÔµô¹æÔò 2 ¡£ ÀýÈç:

    CMP EAX£¬ 2 / JA LabelBigger ; ¿ÉÒÔÅä¶Ô

6. ÏÂÃæµÄÖ¸Áî¶Ô£¬ËäȻͬʱÐÞ¸ÄÁËÕ»Ö¸Õ룬µ«ÊÇËüÃÇÒÀÈ»¿ÉÒÔÅä¶Ô:

¡¡¡¡PUSH + PUSH£¬ PUSH + CALL£¬ POP + POP

7£® ¶ÔÓÚÓÐǰ׺µÄÅä¶ÔÖ¸ÁîÓÐһЩÏÞÖÆ¡£ ÏÂÃæÁгöÁ˼¸ÖÖÐÎʽµÄǰ׺:

¡¡¡¡ *ÓöÎǰ׺¶Ô·Çȱʡ¶ÎѰַµÄÖ¸Áî¡£
¡¡¡¡*ÔÚ 32 λ´úÂëÖÐʹÓà 16 λµÄÊý¾Ý£¬ »ò16λµÄ´úÂëÖÐʹÓà 32 λÊý¾ÝµÄ´ø²Ù×÷Êý³ß´çǰ׺µÄÖ¸Áî¡£
¡¡¡¡*16λģʽÖУ¬ ʹÓÃ32λµÄ»ùÖ·¼Ä´æÆ÷»ò±äÖ·¼Ä´æÆ÷µÄ´øµØÖ·³ß´çǰ׺µÄÖ¸Áî¡£
¡¡¡¡*´øÖظ´Ç°×ºµÄ×Ö·û´®²Ù×÷Ö¸Áî¡£
¡¡¡¡*´øLOCKǰ׺µÄËø¶¨Ö¸Áî¡£
¡¡¡¡*ºÜ¶àÔÚ 8086 ´¦ÀíÆ÷ÖÐûÓÐʵÏֵģ¬ÓÐÁ½¸ö×ֽڵIJÙ×÷ÂëÇÒÆäÖеÚÒ»¸ö×Ö½ÚÊÇ 0FHµÄÖ¸Áî¡£ Õâ¸ö 0FH ×Ö½ÚµÄÐÐΪÔÚ
PPlain ÉϾÍÏñÒ»¸öǰ׺£¬ µ«ÊǺóÀ´µÄ°æ±¾ÖоͲ»ÊÇ¡£ ×î³£¼ûµÄ´ø 0FH ǰ׺µÄÖ¸ÁîÓÐ: MOVZX£¬ MOVSX£¬ PUSH FS£¬ POP FS£¬ PUSH GS£¬ POP GS£¬ LFS£¬ LGS£¬ LSS£¬ SETcc£¬ BT£¬ BTC£¬ BTR£¬ ¡¡¡¡BTS£¬BSF£¬BSR£¬ SHLD£¬ SHRD£¬»¹ÓдøÁ½¸ö²Ù×÷ÊýÇÒûÓÐÁ¢¼´ÊýµÄ IMUL¡£

ÔÚ PPlain ÉÏ£¬ ÓÐǰ׺µÄÖ¸Áî³ýÁ˽ü¾àÀëÌõ¼þÌø×ªÍâÖ»ÄÜÔÚ U ¹ÜµÀÖÐÖ´ÐС£

PMMX ÉÏ£¬ ´øÓвÙ×÷Êý³ß´ç¡¢µØÖ·³ß´ç»ò0FHǰ׺µÄÖ¸Áî¿ÉÒÔÔÚÈÎÒâ¹ÜµÀÖ´ÐУ¬ µ«ÊÇ´øÓжÎǰ׺£¬ ÖØ¸´Ç°×º£¬ »òÕßËø¶¨Ç°×ºµÄÖ¸ÁîÖ»ÄÜÔÚ U ¹ÜµÀÖ´ÐС£

8£® ¼È´øÓÐÆ«ÒÆÁ¿ÓÖ´øÓÐÁ¢¼´²Ù×÷ÊýµÄÖ¸ÁîÔÚ PPlain Éϲ»ÄÜÅä¶Ô£¬ ¶øÔÚ PMMX ÉÏÖ»ÄÜÔÚ U ¹ÜµÀÅä¶Ô:
MOV DWORD PTR DS:[1000]£¬ 0 ; ²»ÄÜÅä¶Ô£¬ »òÕßÖ»ÄÜÔÚ U ¹ÜµÀÅä¶Ô
CMP BYTE PTR [EBX+8]£¬ 1 ; ²»ÄÜÅä¶Ô£¬ »òÕßÖ»ÄÜÔÚ U ¹ÜµÀÅä¶Ô
CMP BYTE PTR [EBX]£¬ 1 ; ¿ÉÒÔÅä¶Ô
CMP BYTE PTR [EBX+8]£¬ AL ; ¿ÉÒÔÅä¶Ô
(¹ØÓڼȴøÓÐÆ«ÒÆÁ¿ÓÖ´øÓÐÁ¢¼´²Ù×÷ÊýµÄÖ¸ÁîÔÚ PMMX ÉÏÅä¶ÔµÄÁíÒ»¸öÎÊÌâÊÇ:ÕâÌõÖ¸ÁîµÄ³¤¶È¿ÉÄÜ>=7×Ö½Ú£¬ ÕâÒâζ×Å£¬ Ò»¸öʱÖÓÖÜÆÚÖ»ÓÐÒ»ÌõÖ¸ÁîÄܱ»½âÂ룬 ÕâЩ·ÅÔÚµÚ12Õ½âÊÍ¡£)

9£® Á½ÌõÖ¸Áî±ØÐëÒѾ­Ô¤¶Á½øÀ´ÇÒ±»½âÂë¡£ ÕâЩ·ÅÔÚµÚ 8 Õ½âÊÍ¡£

10£® PMMX ÉÏ£¬ ¶ÔÓÚ MMX Ö¸ÁîÓÐÌØÊâµÄÅä¶Ô¹æÔò:
*MMX ÒÆÎ»£¬ pack ºÍ unpack Ö¸Áî¿ÉÒÔÔÚÈÎÒâµÄ¹ÜµÀÖ´ÐУ¬µ«ÊDz»ÄܸúÁíÍâÒ»Ìõ MMX ÒÆÎ»£¬pack ºÍ unpack Ö¸ÁîÅä¶Ô¡£
*MMX ³Ë·¨Ö¸Áî¿ÉÒÔÔÚÈÎÒâ¹ÜµÀÔËÐУ¬µ«ÊDz»ÄܺÍÁíÍâÒ»Ìõ MMX ³Ë·¨Ö¸ÁîÅä¶Ô¡£³Ë·¨Ö¸ÁîÐèÒªÏûºÄ 3 ¸öʱÖÓÖÜÆÚ£¬ÆäÖкóÁ½¸öʱÖÓÖÜÆÚ²¢ÐÐÖ´ÐÐÆäËüÖ¸Á¾ÍºÃÏ󸡵ãÖ¸ÁîÄÇÑù (²Î¼ûµÚ 24 ÕÂ)¡£
*Ò»Ìõ·ÃÎÊÄÚ´æ»òÕûÐͼĴæÆ÷µÄ MMX Ö¸ÁîÖ»ÄÜÔÚ U ¹ÜµÀÔËÐУ¬ ¶øÇÒ²»Äܸú·Ç MMX Ö¸ÁîÅä¶Ô¡£


10£®2¡¡ÓÐȱÏÝÅä¶Ô

Óм¸ÖÖÇé¿öÏ£¬ Á½Ìõ³É¶ÔÖ¸Áî¸ù±¾²»Äܲ¢ÐÐÖ´ÐУ¬ »òÕßÖ»ÊÇʱ¼äÉϲ¿·ÖÖØµþ¡£ È»¶øËüÃÇÒÀÈ»±»µ±×÷ÊdzɶԵģ¬ ÒòΪµÚÒ»ÌõÖ¸ÁîÔÚ U ¹ÜµÀÖ´ÐУ¬ ¶øµÚ¶þÌõÔÚ V ¹ÜµÀ¡£¶øÇÒËæºóµÄÖ¸Áî±ØÐëÒªÔÚÁ½ÌõÓÐȱÏÝÅä¶ÔµÄÖ¸Áî¶¼Íê³Éºó²Å¿ªÊ¼ÔËÐС£

ÓÐȱÏÝÅä¶Ô·¢ÉúÔÚÒÔÏÂÌõ¼þÏÂ:

1£® Èç¹ûµÚ¶þÌõÖ¸ÁîÔâÓöÁËÒ»¸ö AGI ÑÓ³Ù (¼ûµÚ9ÕÂ)¡£

2£® Á½ÌõÖ¸Áî²»ÄÜͬʱ·ÃÎÊÄÚ´æµÄͬһ¸ö DWORD¡£ ÏÂÃæµÄÀý×Ó¼Ù¶¨ ESI ¿ÉÒÔ±» 4 Õû³ý:
¡¡¡¡¡¡¡¡MOV AL£¬ [ESI] / MOV BL£¬ [ESI+1]
Á½¸ö²Ù×÷ÊýÊÇÔÚͬһ¸ö DWORD À Òò´ËËüÃDz»ÄÜͬʱִÐС£ Õâ¶ÔÖ¸ÁîÐèÒª 2 ¸öʱÖÓÖÜÆÚ¡£
¡¡¡¡¡¡¡¡MOV AL£¬ [ESI+3] / MOV BL£¬ [ESI+4]
ÕâÀïÁ½¸ö²Ù×÷Êý·Ö±ð´¦ÓÚÁ½¸ö DWORD µÄ±ß½ç£¬ Òò´ËËüÃÇÍêÃÀµØÅä¶Ô£¬ Ö»ÐèÒªÏûºÄ 1 ¸öʱÖÓÖÜÆÚ¡£

3£® µÚ 2 Ìõ¿î¿ÉÒÔÀ©Õ¹µ½Á½¸öµØÖ·µÄ 2-4 λÏàͬµÄÇé¿ö (cacheÐгåÍ»)¡£ ¶ÔÓÚ DWORD µØÖ·£¬ ÕâÒâζ×ÅÁ½¸öµØÖ·²î²»Äܱ» 32 Õû³ý¡£ ÀýÈç:

¡¡¡¡¡¡¡¡MOV [ESI]£¬ EAX / MOV [ESI+32000]£¬ EBX ; ÓÐȱÏÝÅä¶Ô
¡¡¡¡¡¡¡¡MOV [ESI]£¬ EAX / MOV [ESI+32004]£¬ EBX ; ÍêÃÀÅä¶Ô

²»·ÃÎÊÄÚ´æµÄÅä¶ÔÕûÐÍÖ¸Áî¿ÉÒÔÔÚÒ»¸öʱÖÓÖÜÆÚÖ´ÐÐÍ꣬µ«ÊÇÔ¤²âʧ°ÜµÄÌø×ªÀýÍâ¡£ ¶Á/дÄÚ´æµÄMOVÖ¸Áµ±Êý¾ÝÇøÔÚcacheÀï²¢Ñϸñ¶ÔÆëµÄʱºòÒ²Ö»ÐèÒªÒ»¸öʱÖÓÖÜÆÚ£¬¼´Ê¹ÓÃÁËÏñ±ÈÀý±äַѰַÕâÑù¸´ÔÓµÄѰַģʽ£¬Ò²²»»áÓÐËÙ¶ÈÉϵijͷ£¡£

Ò»×éÅä¶ÔÕûÊýÖ¸Á Èç¹ûÐèÒª¶ÁÄڴ棬 ×öһЩ¼ÆËãºó°Ñ½á¹û±£´æÔڼĴæÆ÷»ò±ê¼Ç¼Ä´æÆ÷ÖÐʱ£¬ ÐèÒªÏûºÄÁ½¸öʱÖÓÖÜÆÚ¡£ (¶Á/ÐÞ¸Ä Ö¸Áî)¡£

Ò»×éÅä¶ÔÕûÊýÖ¸Á Èç¹ûÐèÒª¶ÁÄڴ棬 ×öһЩ¼ÆËãºó°Ñ½á¹û»ØÐ´µ½ÄÚ´æÖУ¬ ÐèÒªÏûºÄ3¸öʱÖÓÖÜÆÚ¡£ (¶Á/ÐÞ¸Ä/д Ö¸Áî)¡£

4£® Èç¹ûÒ»Ìõ ¶Á/ÐÞ¸Ä/д Ö¸ÁîºÍÒ»Ìõ ¶Á/ÐÞ¸Ä »ò ¶Á/ÐÞ¸Ä/дָÁî Åä¶Ô£¬ ÄÇôËüÃǾÍÊÇÒ»¸öÓÐȱÏÝÅä¶Ô¡£

ϱíչʾÁ˸÷ÖÖÇé¿öÏÂÐèÒªµÄʱÖÓÖÜÆÚÊý:

µÚÒ»ÌõÖ¸Áî µÚ¶þÌõÖ¸Áî
   MOV »òÕß ½ö½öÊǼĴæÆ÷²Ù×÷   ¶Á/Ð޸Ġ  ¶Á/ÐÞ¸Ä/д 
 MOV »ò½ö½öÊǼĴæÆ÷²Ù×÷   1   2   3 
 ¶Á/Ð޸Ġ  2   2   3 
 ¶Á/ÐÞ¸Ä/д   3   4   5 

ÀýÈç:
ADD [mem1]£¬ EAX / ADD EBX£¬ [mem2] ; 4 ¸öʱÖÓÖÜÆÚ
ADD EBX£¬ [mem2] / ADD [mem1]£¬ EAX ; 3 ¸öʱÖÓÖÜÆÚ

5£® µ±Á½ÌõÅä¶ÔÖ¸Áî¶¼ÒòΪcacheʧЧ£¬Ã»ÓÐ¶ÔÆë£¬»òÌø×ªÔ¤²âʧ°ÜµÈÇé¿ö¶øÐèÒª¶îÍâʱ¼äʱ£¬ Ò»¶ÔÖ¸ÁîÏûºÄµÄʱ¼ä½«±ÈÆäÖÐÈκÎÒ»ÌõÐèÒªµÄʱ¼ä¶¼³¤£¬ µ«ÊDZÈÁ½ÌõÖ¸ÁîÐèÒªµÄʱ¼äÖ®ºÍ¶Ì¡£

6£® ÔÚ¿ÉÅä¶Ô¸¡µãÖ¸ÁîÖ®ºóÓëÆäÅä¶ÔµÄFXCHÖ¸Á µ±ÏÂÒ»ÌõÖ¸Áî²»ÊǸ¡µãÖ¸Áîʱ×é³ÉÒ»¸öȱÏÝÅä¶Ô¡£

ΪÁ˱ÜÃâÓÐȱÏÝÅä¶Ô£¬Äã±ØÐëÖªµÀÄÄÌõÖ¸Áî½øÈëÁË U ¹ÜµÀ£¬ ÄÄÌõ½øÈëÁË V ¹ÜµÀ¡£ Ϊ´Ë£¬Äã¿ÉÒÔÏòǰ¿´¿´ÄãµÄ´úÂ룬ÕÒµ½ÄÇЩ²»ÄÜÅä¶ÔµÄ£¬»òÕßÖ»ÄÜÔÚÒ»Ìõ¹ÜµÀÖÐÅä¶Ô£¬ ÓÖ»òÒòΪÉÏÃæÌá¼°µÄ¹æÔò¶ø²»ÄÜÅä¶ÔµÄÖ¸ÁÕâÑù¾Í¿ÉÒÔÇå³þµØÖªµÀºóÃæµÄÖ¸ÁîÖÐÄÄÌõÖ¸Áî½øÈëÁË U ¹ÜµÀ£¬ ÄÄÌõ½øÈëÁË V ¹ÜµÀ¡£

ÓÐȱÏÝÅä¶Ôͨ³£¿ÉÒÔͨ¹ýÖØ×éÄãµÄÖ¸ÁîÀ´±ÜÃâ¡£ ÀýÈç:

¡¡¡¡¡¡¡¡ L1: MOV EAX£¬[ESI]
¡¡¡¡¡¡¡¡¡¡¡¡MOV EBX£¬[ESI]
¡¡¡¡¡¡¡¡¡¡¡¡INC ECX

ÕâÀïÁ½Ìõ MOV Ö¸Áî×é³ÉÁËÒ»¸öÓÐȱÏÝÅä¶Ô£¬ ÒòΪËüÃÇ·ÃÎÊÁËͬһÄÚ´æµØÖ·£¬ ËùÒÔÕâ×éÖ¸ÁîÐèÒªÏûºÄ 3 ¸öʱÖÓÖÜÆÚ¡£ Äã¿ÉÒÔͨ¹ýÖØ×éÖ¸Á °Ñ INC ECX ¸úÆäÖÐÒ»¸ö MOV Ö¸ÁîÅä¶Ô¡£

¡¡¡¡¡¡¡¡L2: MOV EAX£¬OFFSET A
¡¡¡¡¡¡¡¡¡¡¡¡XOR EBX£¬EBX
¡¡¡¡¡¡¡¡¡¡¡¡INC EBX
¡¡¡¡¡¡¡¡¡¡¡¡MOV ECX£¬[EAX]
¡¡¡¡¡¡¡¡¡¡¡¡JMP L1

INC EBX / MOV ECX£¬[EAX] Õâ¶ÔÖ¸ÁîÊÇÒ»¸öÓÐȱÏÝÅä¶Ô£¬ ÒòΪºóÒ»ÌõÖ¸Áî·¢ÉúÁË AGI ÑÓ³Ù¡£ Õâ×éÖ¸ÁîÏûºÄ 4 ¸öʱÖÓÖÜÆÚ¡£ Èç¹ûÄã²åÈëÒ»Ìõ NOP »òÈÎÒâ±ðµÄÖ¸Á ʹµÃMOV ECX£¬[EAX] ¸ú JMP L1 Åä¶Ô£¬ ÕâÑùÕâ×éÖ¸Áî¾ÍÖ»ÐèÒªÏûºÄ 3 ¸öʱÖÓÖÜÆÚÁË¡£

ÏÂÒ»¸öÀý×ÓÊÇ 16 λģʽÏµģ¬ ¼ÙÉè SP ¿ÉÒÔ±» 4 Õû³ý:

L3: ¡¡¡¡¡¡¡¡PUSH AX
¡¡¡¡¡¡¡¡¡¡¡¡PUSH BX
¡¡¡¡¡¡¡¡¡¡¡¡PUSH CX
¡¡¡¡¡¡¡¡¡¡¡¡PUSH DX
¡¡¡¡¡¡¡¡¡¡¡¡CALL FUNC

ÕâÀï PUSH Ö¸Áî×é³ÉÁËÁ½¸öÓÐȱÏÝÅä¶Ô£¬ ÒòΪ¸÷¶ÔÖ¸ÁîÖеÄÁ½¸ö²Ù×÷Êý¶¼·ÅÈëÁËÄÚ´æµÄͬһ DWORD ÖС£ PUSH BX ¿ÉÄÜ¿ÉÒÔºÍ PUSH CX ÍêÃÀÅä¶ÔÆðÀ´ (ÒòΪËüÃÇ·ÃÎʵÄÊÇÁ½¸ö²»Í¬µÄ DWORD) µ«ÊDz¢²»ÊÇÕâÑù£¬ ÒòΪËüÒѾ­ºÍ PUSH AX Åä¶ÔÁË¡£ Õâ×éÖ¸ÁîÏûºÄÁË 5 ¸öʱÖÓÖÜÆÚ¡£ Èç¹ûÄã²åÈëÒ»¸ö NOP »òÕ߯äËüÖ¸Á Èà PUSH BX ¸ú PUSH CX Åä¶Ô£¬ ¶ø PUSH DX ºÍ CALL FUNC Åä¶Ô£¬ ÕâÑùÕâ×éÖ¸Áî¾ÍÖ»ÐèÒª 3 ¸öʱÖÓÖÜÆÚÁË¡£ ÁíÒ»¸ö½â¾ö·½°¸ÊÇ£¬ÈÃSP²»±» 4 Õû³ý¡£ ÏëÖªµÀ SP ÊÇ·ñ±» 4 Õû³ýÔÚ 16 λģʽÏÂÊǺÜÀ§Äѵģ¬ ËùÒÔ±ÜÃâÕâ¸öÎÊÌâµÄ×î¼Ñ·½°¸ÊÇȥʹÓà 32 λģʽ¡£

11£® ½«¸´ÔÓÖ¸Á·Ö¸îΪ¼òµ¥Ö¸Áî (PPlain ¼° PMMX)

Äã¿ÉÒÔ°Ñ ¶Á/ÐÞ¸Ä ºÍ ¶Á/ÐÞ¸Ä/д Ö¸ÁîÇпªÀ´Ìá¸ßÅä¶Ô»ú»á¡£ ÀýÈç:

    ADD [mem1]£¬EAX / ADD [mem2]£¬EBX ; 5 ¸öʱÖÓÖÜÆÚ

Õâ¸ö´úÂë¿ÉÒÔÇпª£¬ ¶øÖ»ÐèÒªÏûºÄ 3 ¸öʱÖÓÖÜÆÚ:

    MOV ECX£¬[mem1] / MOV EDX£¬[mem2] / ADD ECX£¬EAX / ADD EDX£¬EBX
    MOV [mem1]£¬ECX / MOV [mem2]£¬EDX

ͬÑùµÄÄã¿ÉÒ԰Ѳ»ÄÜÅä¶ÔµÄÖ¸ÁîÇпªÈÃËüÃÇ¿ÉÒÔÅä¶Ô:

    PUSH [mem1]
    PUSH [mem2] ; ²»ÄÜÅä¶Ô

Çпª±ä³É:

    MOV EAX£¬[mem1]
    MOV EBX£¬[mem2]
    PUSH EAX
    PUSH EBX ; ËùÓеͼÅä¶ÔÁË

ÏÂÃæ»¹ÓÐÁíһЩÀý×Ó£¬ չʾÁËһЩ²»ÄÜÅä¶ÔµÄÖ¸ÁîÇпªºó±ä³É¼òµ¥µÄ¿ÉÅä¶ÔÖ¸Áî:

CDQ ÇгÉ: MOV EDX£¬EAX / SAR EDX£¬31
NOT EAX ¸ÄΪ XOR EAX£¬-1
NEG EAX ÇÐ³É XOR EAX£¬-1 / INC EAX
MOVZX EAX£¬BYTE PTR [mem] ÇÐ³É XOR EAX£¬EAX / MOV AL£¬BYTE PTR [mem]
JECXZ ÇÐ³É TEST ECX£¬ECX / JZ
LOOP ÇÐ³É DEC ECX / JNZ
XLAT ¸ÄΪ MOV AL£¬[EBX+EAX]

Èç¹ûÇпªÖ¸Áî²¢²»ÄÜÌá¸ßËÙ¶È£¬ ÄãÓ¦¸Ã±£³Ö¸´ÔÓÖ¸Áî»ò²»ÄÜÅä¶ÔµÄÖ¸Á ÕâÑù¿ÉÒÔ¼õС´úÂëµÄ³ß´ç¡£

¶ÔÓÚ PPro£¬ PII and PIII£¬ ²»ÐèÒª½«Ö¸ÁîÇпª£¬ ³ý·ÇÄܲúÉú¸üСµÄ´úÂë¡£

12. ǰ׺(PPlainºÍPMMX)

ÓÐǰ׺µÄÖ¸Áî¿ÉÄÜÎÞ·¨ÔÚV-¹ÜµÀÖ´ÐÐ (¼ûµÚ10Õ£¬µÚ7²¿·Ö)£¬ ²¢ÇÒËüµÄ½âÂëʱ¼ä¶àÓÚÒ»¸öÖÜÆÚ¡£

ÔÚ PPlain ÉÏ£¬³ýÁËÌõ¼þ½üÌø×ªµÄ0FHǰ׺Í⣬ÿ¸öǰ׺µÄ½âÂëʱ¼äÊÇÒ»¸öʱÖÓÖÜÆÚ¡£

PMMX ¶ÔÓÚ0FHǰ׺ûÓнâÂëÑÓ³Ù¡£ ¶Îǰ׺ºÍÖØ¸´Ç°×ºÓà 1 ¸öʱÖÓÖÜÆÚÀ´½âÂë¡£ µØÖ·³ß´çºÍ²Ù×÷Êý³ß´çǰ׺Óà 2 ¸öÖÜÆÚÀ´½âÂë¡£ ÔÚ PMMX ÉÏ£¬Èç¹ûÁ½ÌõÖ¸ÁîÖеÚÒ»ÌõÓÐÒ»¸ö¶Îǰ׺»òÖØ¸´Ç°×º»òûÓÐǰ׺£¬µÚ¶þÌõûÓÐǰ׺£¬ÄÇôËüÄÜÔÚÒ»¸öÖÜÆÚÄÚ½âÂëÕâÁ½ÌõÖ¸Áî¡£ ÓеØÖ·³ß´ç»ò²Ù×÷Êý³ß´çǰ׺µÄÖ¸ÁîÔÚPMMXÉÏÖ»Äܱ»µ¥¶À½âÂë¡£ ¶àÓÚÒ»¸öǰ׺µÄÖ¸Áÿ¸öǰ׺»¯1¸öÖÜÆÚ½âÂë¡£

ÔÚ32λģʽÏ£¬µØÖ·³ß´çǰ׺¿ÉÒÔ²»Óã» ÓÃÁËÆ½Ì¹ÄÚ´æÄ£Ê½ºó£¬¶Îǰ׺ҲÄܲ»Óã» Èç¹ûÖ»ÓÃ8λºÍ32λÕûÐ͵ϰ£¬²Ù×÷Êý³ß´çǰ׺ҲÄܲ»Óá£

ÔÚǰ׺²»¿É±ÜÃâÇé¿öÏ£¬Èç¹ûÇ°ÃæµÄÖ¸ÁîÖ´ÐÐʱ¼ä³¬¹ýÒ»¸öʱÖÓÖÜÆÚµÄ»°£¬ÄÇô½âÂëÑÓ³Ù¿ÉÄܱ»Ñڸǡ£ PPlainµÄ¹æÔòÊÇ£¬ÈκÎÖ´ÐÐʱ¼ä(²»°üÀ¨½âÂë)ΪN¸öʱÖÓÖÜÆÚµÄÖ¸Áî¿ÉÒÔÑÚ¸ÇÏÂÁ½Ìõ£¨ÓÐʱÊÇÈýÌõ£©Ö¸Áî»òÖ¸Áî¶ÔÀïN-1¸öǰ׺µÄ½âÂëÑÓ³Ù¡£ »»¾ä»°Ëµ£¬ÓÃÓÚÖ´ÐÐÖ¸ÁîµÄÿ¸öʱÖÓÖÜÆÚ£¬¶¼¿ÉÒÔÓÃÀ´½âÂëºóÐøÖ¸ÁîµÄÒ»¸öǰ׺¡£ "ÒõӰЧӦ"¶ÔÓÚ±»ÕýÈ·Ô¤²âµÄ·ÖÖ§Ò²ÓÐЧ¡£ ÈκÎÖ´ÐÐʱ¼ä³¬¹ýÒ»¸öʱÖÓÖÜÆÚµÄÖ¸ÁÒÔ¼°ÈκÎÒòΪAGIЧӦ¡¢cache²»ÃüÖС¢Êý¾Ýû¶ÔÆëµÈµÈÀíÓɵÄÑÓ³Ù£¨³ýÁ˽âÂëÑӳٺͷÖÖ§Ô¤²âʧ°Ü£©£¬ËüÃǶ¼ÓÐ"ÒõӰЧӦ"¡£

PMMXÒ²ÓС°ÒõӰЧӦ¡±£¬µ«ÊÇ»úÖÆ¸üÏȽø¡£ ÒѾ­½âÂëÍê±ÏµÄÖ¸Áî±»´æÔÚÒ»¸ö¶ÔÓû§Í¸Ã÷µÄÏȽøÏȳö£¨FIFO£©µÄ»º´æÀïÃæ£¬¸Ã»º´æÄÜ´æ4ÌõÖ¸Áȡ»º´æÖеÄÖ¸ÁîûÓÐÑÓ³Ù¡£Ò»µ©Ö¸Áî½âÂëÍê±Ï¿ªÊ¼Ö´ÐУ¬¾Í±»Å׳ö»º´æ¡£ µ±Ö¸ÁîµÄÖ´ÐÐËÙ¶ÈÂýÓÚÖ¸ÁîµÄ½âÂëËÙ¶Èʱ£¬»º´æ»áÌîÂú¡ª¡ªÒ²¾ÍÊǵ±ÄãÓÐδÅä¶ÔµÄÖ¸Áî»ò¶àʱÖÓµÄÖ¸Áîʱ¡£ µ±Ö¸ÁîµÄÖ´ÐÐËÙ¶È´óÓÚ½âÂëËÙ¶Èʱ£¬»º´æ»á¿Õ³ö¡ª¡ªÒ²¾ÍÊǵ±ÄãÓÐÒòΪǰ׺Ե¹ÊµÄ½âÂëÑÓ³Ù¡£ ÔÚ·ÖÖ§Ô¤²âʧ°ÜµÄʱºò£¬»º´æ±»ÇåÏ´¡£ ÔÚµÚ2ÌõÖ¸ÁîûÓÐǰ׺ÇÒûÓÐÒ»ÌõÖ¸ÁîµÄ³¤¶È³¬¹ý7¸ö×Ö½ÚµÄǰÌáÏ£¬Ö¸ÁîcacheÔÚÒ»¸öʱÖÓÖÜÆÚÄÚ¿ÉÒÔ·ÅÈëÁ½ÌõÖ¸ÁU¡¢VÁ½¸öÁ÷Ë®Ïß¿ÉÒÔÔÚÒ»¸öʱÖÓÖÜÆÚÄÚ¸÷½ÓÊÜÆäÖеÄÒ»ÌõÖ¸ÁîÈ¥Ö´ÐС£

±ÈÈ磺

CLD
REP MOVSD

CLDÖ¸ÁÁ½¸öʱÖÓÖÜÆÚ£¬Òò´ËÑÚ¸ÇÁËREPǰ׺µÄ½âÂëÑÓ³Ù¡£Èç¹ûCLDÔ¶ÀëREP MOVSDµÄ»°£¬ÕâÆ¬´úÂ뽫»¨²»Ö¹Ò»¸öÖÜÆÚ¡£

CMP DWORD PTR [EBX]£¬0  / MOV EAX£¬0 / SETNZ AL

ÓÉÓÚCMPÖ¸ÁîÊÇÒ»Ìõ¶Á/дָÁÒò´Ë»¨Á½¸öÖÜÆÚ¡£ÔÚCMPµÄÁ½¸öÖÜÆÚÖУ¬SETNZÖ¸ÁîµÄǰ׺0FH±»½âÂ룬Òò´ËÔÚPPlain»úÉÏ£¬½âÂëÑÓ³Ù±»ÑÚ¸ÇÁË£¨ÔÚPMMXÉÏûÕâ¸öÎÊÌ⣬ÒòΪËü¶Ô0FHǰ׺ûÓнâÂëÑÓ³Ù£©¡£

ÔÚPPro£¬PII£¬PIII»úÉϵÄǰ׺µÄ¸±×÷Óã¬ÔÚ14ÕÂÃèÊö¡£

 

13. PPro£¬PIIºÍPIIIÁ÷Ë®Ïß×ÛÊö

PPro£¬PIIºÍPIII΢´¦ÀíÆ÷µÄÖÆÔ칤ÒÕÔÚIntelµÄ¸÷ÖÖÖ¸ÄÏÊÖ²áÖÐÓкܺõĽâÊͺͲåͼ¡£ÎªÁËÀí½âÕâЩ´¦ÀíÆ÷ÊÇÔõô¹¤×÷µÄ£¬ÍƼöÄãѧϰÕâЩ²ÄÁÏ¡£ÔÚ´Ë£¬ÎÒÖ»¶Ô´úÂëÓÅ»¯Ïà¹Ø²¿·Ö×÷¼òÒªÃèÊö¡£

Ö¸Áî´úÂë´ÓÖ¸ÁîcacheµÄ16×Ö½Ú¶ÔÆëµÄ¿éÖÐÈ¡µ½Ò»¸öÁ½±¶´óµÄ»º´æÖУ¬¸Ã»º´æÄܹ»ÈÝÄÉÁ½¸ö16×ֽڵĿ顣´Ó¸Ã»º´æ´«µÝµ½½âÂëÆ÷µÄÖ¸Áî¿éÎÒ³ÆÖ®Îªifetch¿é(Ö¸ÁîЯ´ø¿é)¡£ifetch¿éÒ»°ãÊÇ16×Ö½Ú£¬µ«Ã»ÓÐ¶ÔÆë¡£Á½±¶»º´æµÄÄ¿µÄ¾ÍÊÇÏ£ÍûÄܹ»¶Ô¿çÔ½16×ֽڱ߽çµÄÖ¸ÁîÒ²ÄܽâÂë(16×ֽڱ߽çÊÇÖ¸Äܹ»±»16Õû³ýµÄµØÖ·)¡£

Ö¸Á¶È½âÂëÆ÷¾ö¶¨ÁËÿ¸öÖ¸ÁîµÄ¿ªÊ¼ºÍ½áÊøÎ»Ö㬺ͽô½ÓµÄÏÂÒ»ÌõÖ¸Áifetch¿é¾ÍÊǸù¾ÝÖ¸Á¶È½âÂëµÄ½á¹ûÀ´¶¨Î»µÄ¡£ ÓÐÈý¸ö½âÂëÆ÷£¬Òò´ËÄã¿ÉÒÔÔÚÒ»¸öʱÖÓÖÜÆÚÄÚ½âÂëÈýÌõÖ¸Áî¡£ ÔÚͬһ¸öʱÖÓÖÜÆÚÄÚ½âÂëµÄÖ¸Áî(×î¶àÈýÌõ)±»³ÆÎªÒ»¸ö½âÂë×é¡£

½âÂëÆ÷½«Ö¸Áî·­ÒëΪ΢²Ù×÷¡¢Ð¡Ð͵Ä΢ָÁî¡£¼òµ¥µÄÖ¸ÁîÖ»²úÉúÒ»Ìõ΢Â룬¸´ÔÓµÄÖ¸Áî¿ÉÄܲúÉú¼¸Ìõ΢Âë¡£ ±ÈÈçADD EAX£¬[MEM]Ö¸Áî½âÂëΪÁ½Ìõ΢Â룺һÌõ¶ÁÄÚ´æ²Ù×÷Êý£¬Ò»Ìõ×ö¼Ó·¨¡£ °ÑÖ¸Áî·Ö½âΪ΢ÂëµÄÄ¿µÄÊÇʹÒÔºóµÄϵͳ´¦Àí¸üΪÓÐЧ¡£

Èý¸ö½âÂëÆ÷±»³ÆÎªD0£¬D1ºÍD2¡£D0Äܹ»´¦ÀíËùÓеÄÖ¸Áî¡£D1ºÍD2Ö»ÄÜ´¦ÀíÄÇЩֻ²úÉúÒ»Ìõ΢ÂëµÄ¼òµ¥Ö¸Áî¡£

´Ó½âÂëÆ÷³öÀ´µÄ΢Âë¾­¹ýÒ»¸ö¶ÌµÄ¶ÓÁе½´ï¼Ä´æÆ÷·ÖÅä±í(RAT)¡£ ΢ÂëµÄÖ´ÐÐÔÚÁÙʱ¼Ä´æÆ÷ÖнøÐУ¬ÒÔºóÔÙд»Øµ½ÓÀ¾Ã¼Ä´æÆ÷ÖîÈçEAX£¬EBXµÈµÈ¡£ RATµÄÄ¿µÄÊǸøÎ¢Âë·ÖÅäÁÙʱ¼Ä´æÆ÷£¬²¢ÇÒʹ¼Ä´æÆ÷ÖØÃüÃû³ÉΪ¿ÉÄÜ(¼ûºóÐøÕ½Ú)

ÔÚRATÖ®ºó£¬Î¢Âë½øÈëÁËÂÒÐò»º´æ(reorder buffer£¬ROB)¡£ ROBµÄ×÷ÓÃÊÇÂÒÐòÖ´ÐС£ ÔÚ΢ÂëÐèÒªµÄ²Ù×÷Êý²»¿ÉÓÃ֮ǰ£¬Ëü½«´ôÔÚ±£ÁôÕ¾¡£ µ±ÒòÎªÇ°ÃæµÄ΢Âë²úÉúµÄ½á¹û(×÷ΪºóÃæÄ³Ìõ΢ÂëµÄ²Ù×÷Êý)»¹Ã»Íê³Éʱ£¬ROBÔÚÐèÒª¸Ã²Ù×÷ÊýµÄ΢ÂëµÈ´ýÆÚ¼ä£¬»áÕÒÁíÒ»ÌõºóÃæµÄ΢ÂëÀ´Ö´ÐÐ(ǰÌáÊÇÂß¼­ÕýÈ·)£¬´Ó¶ø½ÚÊ¡ÁËʱ¼ä¡£

¾ÍÐ÷̬µÄ΢Âë±»ËÍÈëÖ´Ðе¥Ôª¡£Ö´Ðе¥ÔªÓÐÎå¸ö¶Ë¿Ú£º¶Ë¿Ú0ºÍ1ÄÜ´¦ÀíËãÊõÔËËã£¬Ìø×ªµÈµÈ£»¶Ë¿Ú2¸ºÔðËùÓеÄÄÚ´æ¶Á£»¶Ë¿Ú3¼ÆË㽫Ҫ±»Ð´µÄÄÚ´æµØÖ·£»¶Ë¿Ú4½øÐÐÄÚ´æÐ´¡£

ÔÚROBÖУ¬Ò»Ìõ±»Ö´ÐйýµÄÖ¸Áî±»±ê¼ÇΪ½«ÒªÒýÍË¡£ È»ºóËü½øÈëÒýÍËÕ¾¡£ ÔÚÕâÀ΢ÂëÓùýµÄÁÙʱ¼Ä´æÆ÷µÄÄÚÈÝҪд»ØÓÀ¾Ã¼Ä´æÆ÷¡£ ËäȻ΢ÂëÄܹ»±»ÂÒÐòÖ´ÐУ¬µ«±ØÐëÓÐÐòÒýÍË¡£

ºóÐøÕ½ÚÖУ¬ÎÒ»áÏêϸµØÃèÊöÁ÷Ë®ÏßÖÐÿһ²½µÄÍÌÍÂÁ¿ÈçºÎ½øÐÐÓÅ»¯¡£

 

14. Ö¸Áî½âÂë(PPro£¬PIIºÍPIII)

ÔÚ´ËÎÒÏȽ²Ö¸Áî½âÂ룬ȻºóÔÙ½²È¡Ö¸Áî¡£ ÒòΪҪÀí½âȡָÁîʱ·¢ÉúµÄÑÓ³Ù£¬Äã±ØÐëÏÈÖªµÀ½âÂëÆ÷µÄ¹¤×÷Ô­Àí¡£

Ö»ÓÐÔÚһЩÌõ¼þÂú×ãµÄÇé¿öÏ£¬½âÂëÆ÷²ÅÄÜÔÚÒ»¸öʱÖÓÖÜÆÚÄÚ½âÂë3ÌõÖ¸Áî¡£ ½âÂëÆ÷D0Äܹ»´¦ÀíËùÓеÄÔÚÒ»¸öʱÖÓÖÜÆÚÄÚ×î¶à²úÉú4Ìõ΢ÂëµÄÖ¸Áî¡£ ½âÂëÆ÷D1ºÍD2Ö»ÄÜ´¦ÀíÄÇЩֻ²úÉú1Ìõ΢ÂëµÄÖ¸Á¶øÇÒÄÇЩָÁ¶È²»Äܳ¬¹ý8×Ö½Ú¡£

¸ÅÊöͬһ¸öʱÖÓÖÜÆÚÄÚ½âÂë2»ò3ÌõÖ¸ÁîµÄ¹æÔòÈçÏÂ:

    *µÚÒ»ÌõÖ¸Áî(ÓÉD0½âÂë)²úÉúµÄ΢Âë²»Äܳ¬¹ý4Ìõ
    *µÚ¶þ¡¢ÈýÁ½ÌõÖ¸Áî¶¼Ö»ÄܲúÉú1Ìõ΢Âë
    *µÚ¶þ¡¢ÈýÁ½ÌõÖ¸Á¶È¶¼²»Äܳ¬¹ý8¸ö×Ö½Ú
    *ÕâЩָÁî¶¼ÒªÔÚͬһ¸ö16×Ö½ÚµÄifetch¿éÖÐ(¼ûÏÂÒ»ÕÂ)

ÔÚD0ÖеÄÖ¸Á¶ÈûÓÐÏÞÖÆ(¾¡¹ÜIntelÊÖ²áÖÐÌáµ½ÁËһЩ)£¬Ö»ÒªÕâÈýÌõÖ¸ÁîÄÜ·ÅÈëÒ»¸ö16×Ö½ÚµÄifetch¿é¡£

²úÉú4ÌõÒÔÉÏ΢ÂëµÄÖ¸ÁîÐèÒª2¸ö»ò¸ü¶àʱÖÓÖÜÆÚÀ´½âÂ룬²¢ÇÒÔÚÕâ¸ö¹ý³ÌÖÐûÓÐÆäËüµÄÖ¸Áî¿ÉÒÔ²¢ÐнâÂë¡£

¸ù¾ÝÒÔÉϹæÔò£¬ÎÒÃǵóö½áÂÛ:Ò»¸öʱÖÓÖÜÆÚÄÚ½âÂëÆ÷ÖÁ¶à²úÉú6Ìõ΢Âë(Èç¹ûµÚÒ»ÌõÖ¸Áî²úÉú4Ìõ΢Â룬ºóÁ½ÌõÖ¸Áî¸÷²úÉú1Ìõ΢Âë);ÖÁÉÙ²úÉú2Ìõ΢Âë(Èç¹ûËùÓÐÖ¸Áî¶¼²úÉú2Ìõ΢Â룬ÕâʱD1ºÍD2û·¨ÓÃ)¡£

ΪÁË´ïµ½×î´óÍÌÍÂÁ¿£¬ÍƼöÄã°Ñ´úÂë×éÖ¯³É4-1-1ģʽ£º²úÉú2-4Ìõ΢ÂëµÄÖ¸Áî¿ÉÒÔ"Ãâ·Ñ"¸½´ø2Ìõ²úÉú1Ìõ΢ÂëµÄ¼òµ¥Ö¸ÁijÖÖÒâÒåÉϲ»Ôö¼Ó½âÂëʱ¼ä£¬±ÈÈç:

MOV EBX£¬ [MEM1] ; 1Ìõ΢Âë (D0)
INC EBX          ; 1Ìõ΢Âë (D1)
ADD EAX£¬ [MEM2] ; 2Ìõ΢Âë (D0)
ADD [MEM3]£¬ EAX ; 4Ìõ΢Âë (D0)

½âÂëÒª»¨È¥3¸öʱÖÓ¡£ ÖØ×é´úÂëʹËüÃǽøÈëÁ½¸ö½âÂë×é¿ÉÒÔ½Úʡһ¸öÖÜÆÚ:

ADD EAX£¬ [MEM2] ; 2Ìõ΢Âë (D0)
MOV EBX£¬ [MEM1] ; 1Ìõ΢Âë (D1)
INC EBX          ; 1Ìõ΢Âë (D2)
ADD [MEM3]£¬ EAX ; 4Ìõ΢Âë (D0)

ÏÖÔÚ½âÂëÆ÷ÔÚ2¸öʱÖÓÖÜÆÚÄÚ²úÉú8Ìõ΢Â룬Ӧ¸Ã±È½ÏÂúÒâÁË¡£ÒòΪÁ÷Ë®ÏߵĺóÐø½×¶ÎÖ»ÄÜÔÚÒ»¸öʱÖÓÖÜÆÚÄÚ´¦Àí3Ìõ΢Â룬ËùÒÔ´óÓÚ3Ìõ/ÖÜÆÚµÄ½âÂëÍÌÍÂÂÊÄã¾Í¿ÉÒÔÈÏΪ½âÂë²»ÊÇÆ¿¾±ÁË¡£È»¶ø£¬¾ÍÏñºóÃæµÄÕ½ÚÃèÊöµÄÄÇÑù£¬È¡Ö¸Áî»úÖÆµÄ¸´ÔÓÐÔ¿ÉÄÜ»áʹ½âÂëÑÓ³Ù£¬Òò´Ë°²È«Æð¼û£¬ÄãµÄÄ¿±êÊÇÿ¸öʱÖÓÖÜÆÚµÄ½âÂëÍÌÍÂÂÊ´óÓÚ3¡£

Äã¿ÉÒÔÔÚ29ÕµÄÁбíÖвé³ö¸÷ÖÖÖ¸Áî²úÉúµÄ΢ÂëÊý¡£

ÔÚ½âÂëʱ£¬Ç°×ºÒ²¿ÉÄÜ´øÀ´³Í·£¡£ Ö¸ÁîÄܹ»ÓÐÕâÑùһЩǰ׺:

* ²Ù×÷Êý³ß´çǰ׺¡£ µ±ÄãÔÚ32λ»·¾³ÖÐÓÐÒ»¸ö16λ²Ù×÷Êýʱ½«Óõ½£¬·´Ö®ÒàÈ»(³ýÁËÄÇЩ²Ù×÷ÊýÖ»ÄÜÓÐÒ»ÖֳߴçµÄÖ¸Á±ÈÈçFNSTSW AX)¡£ µ±Ö¸ÁîÓÐÒ»¸ö16»ò32λµÄÁ¢¼´²Ù×÷Êýʱ£¬²Ù×÷Êý³ß´çǰ׺»á´øÀ´¼¸¸öÖÜÆÚµÄ³Í·££¬ÒòΪ²Ù×÷ÊýµÄ³¤¶È±»Ç°×º¸Ä±äÁË¡£ ±ÈÈç:

    ADD BX£¬ 9                  ; ÒòΪÁ¢¼´²Ù×÷ÊýÊÇ8룬¹ÊûÓгͷ£
    MOV WORD PTR [MEM16]£¬ 9    ; ÒòΪ²Ù×÷ÊýÊÇ16룬Óгͷ£

ºóÒ»ÌõÖ¸ÁîÓ¦¸Ã±»Ìæ»»³É:

    MOV EAX£¬ 9
    MOV WORD PTR [MEM16]£¬ AX   ; û³Í·££¬ÒòΪûÓÐÁ¢¼´Êý

* µØÖ·³ß´çǰ׺¡£µ±ÄãÔÚ16λģʽÏÂÓÃ32λµØÖ·Ê±Óõ½£¬·´Ö®ÒàÈ»¡£ËüºÜÉÙÓõ½£¬Ò»°ãÓ¦¸Ã±ÜÃ⡣ÿµ±ÄãÓÐÒ»¸öÏÔʽµÄÄÚ´æ²Ù×÷Êýʱ(ÉõÖÁÓÐʱûÓÐÆ«ÒÆÁ¿)£¬µØÖ·³ß´çǰ׺µ¼ÖÂÒ»´Î³Í·£¡£ÒòΪָÁî±àÂëÖÐÖ¸Ã÷r/mµÄλ±»Ç°×º¸Ä±äÁË¡£ Ö»ÓÐÒþʽÄÚ´æ²Ù×÷ÊýµÄÖ¸Á±ÈÈç´®²Ù×÷Ö¸Á¼´Ê¹ÓÐÁ˵ØÖ·³ß´çǰ׺ҲûÓгͷ£¡£
* ¶Îǰ׺¡£ µ±ÄãÐèÒª¶¨Î»·ÇĬÈϵÄÊý¾Ý¶ÎʱÐèÒªÓõ½¡£ ÔÚPPro£¬PIIºÍPIIIÉÏûÓÐÒò¶Îǰ׺¶ø´øÀ´µÄ³Í·£¡£
* ÖØ¸´Ç°×ººÍËøÇ°×ºÔÚ½âÂëʱûÓгͷ£¡£
* µ±ÄãµÄǰ׺¶àÓÚÒ»¸öʱ×ÜÊÇÓгͷ£¡£ Ò»°ã³Í·£ÊÇÿ¸öǰ׺һ¸öÖÜÆÚ¡£

 

15. ȡָÁî(PPro£¬PIIºÍPIII)

Ö¸Áî´ÓÖ¸ÁîcacheµÄ16×Ö½Ú¶ÔÆëµÄ¿éÖÐÈ¡³ö£¬·ÅÖÃÔÚ´óСÊÇ¿éµÄÁ½±¶µÄ»º´æÄÚ¡£ È»ºóÖ¸Áî´Ó"Á½±¶»º´æ"È¡³ö£¬·ÅÔÚÒ»¸öͨ³£ÊÇ16×Ö½Ú£¬µ«²»ÐèÒª16¶ÔÆëµÄ¿éÖд«µÝ¸ø½âÂëÆ÷¡£ ÎÒÃdzÆÕâЩ¿éÊÇ"ifetch"(Ö¸ÁîЯ´ø¿é)¡£ Èç¹ûÒ»¸öifetchÊÇ¿ç 16 ×ֽڱ߽çµÄ£¬ÄÇôËüÐèÒª´Ó"Á½±¶»º´æ"µÄÁ½¸ö¿éÖжÁ³ö¡£ Òò´Ë"Á½±¶»º´æ"±»Éè¼Æ³ÉÓÐÁ½¸ö¿é£¬Ä¿µÄ¾ÍÊÇΪÁËÄÜ¿çÔ½16×ֽڱ߽çȡָÁî¡£

"Á½±¶»º´æ"ÄÜÔÚÒ»¸öʱÖÓÖÜÆÚÄÚȡһ¸ö16×ֽڵĿ飬²¢ÄÜÔÚÒ»¸öʱÖÓÖÜÆÚÄÚ²úÉúÒ»¸öifetch¿é¡£ Ò»°ãifetch¿é³¤16×Ö½Ú£¬µ«¿éÖÐÓб»Ô¤²âµ½µÄ×ªÒÆÊ±£¬¿ÉÄܶÌÓÚ16×Ö½Ú(¹ØÓÚ·ÖÖ§Ô¤²â£¬¼û22ÕÂ)¡£

²»ÐÒµÄÊÇ£¬"Á½±¶»º´æ"»¹Ã»Óдóµ½Äܹ»ÎÞÑÓ³ÙµØÈ¡³öÌø×ªÖ¸ÁîÖÜΧµÄÖ¸Áî(Òª°üÀ¨²»·¢Éú×ªÒÆµÄ´úÂëºÍ·¢Éú×ªÒÆºóµÄÄ¿µÄ´úÂë)¡£ Èç¹ûÒ»¸ö´©Ô½16×ֽڱ߽çµÄifetch¿é°üÀ¨ÁËÌø×ªÖ¸ÁΪÁ˲úÉúÕâ¸öifetch¿é£¬"Á½±¶»º´æ"ÐèÒª´æ´¢Á½¸öÁ¬ÐøµÄ16×Ö½Ú¶ÔÆëµÄ´úÂë¿é£»Èç¹û×ªÒÆÖ¸ÁîÖ®ºóµÄµÚÒ»ÌõÖ¸Áî´©Ô½ÁË16×ֽڱ߽磬ÄÇôΪÁ˲úÉúÒ»¸öÕýÈ·µÄifetch¿é£¬"Á½±¶»º´æ"ÐèÒªÔØÈëÁ½¿éеÄ16-×Ö½Ú´úÂë¿é¡£ ÕâÒâζ×ÅÔÚ×Çé¿öÏ£¬×ªÒÆÖ¸ÁîÖ®ºóµÚÒ»ÌõÖ¸ÁîµÄ½âÂë¿ÉÄÜÒª±»ÑÓ³ÙÁ½¸öÖÜÆÚ¡£ ÒòΪ´©Ô½16±ß½çµÄifetch¿é°üº¬ÁËÌø×ªÖ¸ÁÄãÒª¸¶³ö´ú¼Û£»×ªÒÆÖ¸ÁîºóµÄµÚÒ»ÌõÖ¸Áî´©¹ý16±ß½ç£¬Ò²µÃ¸¶³ö´ú¼Û¡£ µ«Èç¹ûÔÚifetchÖÐÄãÓжàÓÚÒ»¸ö½âÂë×é°üº¬Ìø×ªÖ¸Áî?£¬ÄÇôÄãÄܵõ½½±ÉÍ¡£ ÒòΪÓпçÔ½16±ß½çµÄ×ªÒÆÖ¸ÁîºóµÄµÚÒ»ÌõÖ¸ÁîµÄ´æÔÚ£¬Ê¹µÃ"Á½±¶»º´æ"ÄÜÓжîÍâµÄʱ¼äÔ¤ÏÈ»ñÈ¡1~2¿é16-×ֽڵĴúÂë¿é¡£ °´ÕÕÏÂ±í£¬¸Ã½±ÉÍÄܲ¹³¥Ëðʧ¡£ Èç¹û"Á½±¶»º´æ"Ö»»ñÈ¡ÁË×ªÒÆÖ¸ÁîºóµÄ´úÂëµÄÒ»¸ö16-×ֽڿ飬ÄÇô²úÉúµÄµÚÒ»¸öifetch¿éÓë¸Ã¿éÏàͬ£¬Ò²¾ÍÊÇ16×Ö½Ú¶ÔÆë¡£ »»¾ä»°Ëµ£¬×ªÒÆÖ¸ÁîºóµÄµÚÒ»¸öifetch¿é½«²»»á´ÓµÚÒ»ÌõÖ¸Áʼ£¬¶øÊÇ´ÓÄܱ»16Õû³ýµÄ¡¢ÓëÏÈǰµØÖ·×î½Ó½üµÄµØÖ·¿ªÊ¼¡£ Èç¹û"Á½±¶»º´æ"ÓÐʱ¼ä¶ÁÈ¡Á½¿é16-×ֽڿ飬ÄÇôеÄifetch¿é¿ÉÄÜ´©¹ý16×ֽڱ߽磬²¢ÇÒ´Ó×ªÒÆÖ¸ÁîºóµÚÒ»ÌõÖ¸Áʼ¡£ ϱí¸ÅÊöÁËÕâ¸ö¹æÂÉ:

ifetch¿éÖаüº¬Ìø×ªµÄ½âÂë×éµÄ¸öÊý
¸Ãifetch¿éÖÐÊÇ·ñÓÐ16×ֽڱ߽ç
Ìø×ªºóµÄµÚÒ»ÌõÖ¸ÁîÖÐÓÐÎÞ16×Ö½ÚÏß
½âÂëÑÓ³Ù
×ªÒÆÖ¸ÁîºóµÚÒ»¸öifetch¿éµÄ¶ÔÆë·½Ê½
1
0
0
0
16×Ö½Ú¶ÔÆë
1
0
1
1
´ÓµÚÒ»ÌõÖ¸Áʼ
1
1
0
1
16×Ö½Ú¶ÔÆë
1
1
1
2
´ÓµÚÒ»ÌõÖ¸Áʼ
2
0
0
0
´ÓµÚÒ»ÌõÖ¸Áʼ
2
0
1
0
´ÓµÚÒ»ÌõÖ¸Áʼ
2
1
0
0
16×Ö½Ú¶ÔÆë
2
1
1
1
´ÓµÚÒ»ÌõÖ¸Áʼ
3 or more
0
0
0
´ÓµÚÒ»ÌõÖ¸Áʼ
3 or more
0
1
0
´ÓµÚÒ»ÌõÖ¸Áʼ
3 or more
1
0
0
´ÓµÚÒ»ÌõÖ¸Áʼ
3 or more
1
1
0
´ÓµÚÒ»ÌõÖ¸Áʼ


Ìø×ªÊ¹È¡Ö¸Áî·¢ÉúÑÓ³Ù£¬Òò´ËʹµÃÒ»¸öÑ­»·µÄÿ´Îµþ´ú×ÜÊÇ»¨ÖÁÉÙÁ½¸ö¶àÖÜÆÚ£¬Õâ±ÈÑ­»·ÖеÄ16×ֽڱ߽çÏßµÄÊýĿҪ¶à¡£

ȡָÁî»úÖÆµÄÁíÒ»¸öÎÊÌâÊÇÔÚǰһ¸öifetchºÄ¾¡Ö®Ç°£¬Ò»¸öеÄifetch¿é²»»á²úÉú¡£ ÿ¸öifetch¿é¿ÉÄܰüº¬¼¸¸ö½âÂë×é¡£ Èç¹ûÒ»¸ö16×Ö½Úifetch¿éµÄ½áÊøÎ»ÖÃÔÚÒ»ÌõÖ¸ÁîÖм䣬ÄÇôÏÂÒ»¸öifetch¿é»á´Ó¸ÃÖ¸ÁîµÄ¿ªÊ¼´¦¿ªÊ¼¡£ ¿ÉÄܵϰ£¬ifetch¿éÖеĵÚÒ»ÌõÖ¸Áî×ÜÊǽøÈëD0½âÂëÆ÷£¬ºóÁ½ÌõÖ¸Áî½øÈëD1ºÍD2¡£ ÕâʹµÃD1ºÍD2ûÓб»×î¼ÑÀûÓᣠ±ÈÈç´úÂë°´ÕÕÍÆ¼öµÄ4-1-1ģʽ×éÖ¯£¬¼Æ»®Òª½øÈëD1»òD2µÄÖ¸ÁîÕýºÃÊÇij¸öifetch¿éµÄµÚÒ»ÌõÖ¸ÁÄÇô¸ÃÖ¸Áî²»µÃ²»½øÈëD0£¬Ò»¸öʱÖÓÖÜÆÚ¾ÍÕâÑùÀË·ÑÁË¡£ Õâ¿ÉÄÜÊÇÒ»¸öÓ²¼þÉè¼ÆµÄȱÏÝ£¬ÖÁÉÙÊǸö²»ÍêÃÀµÄÉè¼Æ¡£ Ëüµ¼ÖÂÁ˽âÂ뿪ÏúºÜ´ó³Ì¶ÈÉÏÈ¡¾öÓÚµÚÒ»¸öifetch¿é¿ªÊ¼µÄλÖá£

Èç¹û½âÂëËÙ¶ÈÒªÇó¿Á¿Ì£¬ÄãÏë±ÜÃâÕâЩÎÊÌ⣬ÄÇôÄã±ØÐëÖªµÀÿ¸öifetch¿é¿ªÊ¼µÄλÖᣠÕâÊǸöÏ൱·¦Î¶µÄ¹¤×÷¡£ Ê×ÏÈ£¬ÎªÁËÖªµÀ16×ֽڱ߽çÏßµÄλÖã¬ÄãÐèÒª½«´úÂë¶Î°´½Ú¶ÔÆë£¨°´ 16 ¶ÔÆë£©¡£ È»ºó²é¿´»ã±àÂëÊä³öÁÐ±í£¬ÖªµÀÿһÌõÖ¸ÁîµÄ³¤¶È(ÍÆ¼öÄãѧϰһÏÂÖ¸ÁîµÄ±àÂ뷽ʽ£¬ÕâÑù¾Í¿ÉÔ¤ÖªÖ¸ÁîµÄ³¤¶È)¡£ µ±ÄãµÃµ½ÁËÒ»¸öifetch¿é¿ªÊ¼µÄλÖú󣬿ÉÒÔͨ¹ýÕâ¸ö·½·¨µÃµ½Ï¸öifetch¿é¿ªÊ¼µÄλÖ㺼ƸÿéΪ16×Ö½Ú£¬Èç¹ûËüµÄ½áÊøÎ»ÖÃÔÚÖ¸ÁîµÄ±ß½çÏßÉÏ£¬ÄÇôϸöifetch¿é¾Í´ÓÕâ¸öλÖÿªÊ¼£»Èç¹ûËüµÄ½áÊøÎ»ÖÃÔÚijÌõÖ¸ÁîµÄÖм䣬ÄÇôϸöifetch¿é´Ó¸ÃÖ¸ÁîµÄÆðʼ´¦¿ªÊ¼(±¾·½·¨Ö»¹ØÐÄÖ¸ÁîµÄ³¤¶È£¬²»¹ØÐÄÖ¸Áî²úÉú¶àÉÙ΢ÂëºÍËüÃÇ×öʲô)¡£ ¶ÔËùÓдúÂëÓô˷½·¨£¬Äã¿ÉÒÔ±ê³öÿ¸öifetch¿é¿ªÊ¼µÄλÖᣠÏÖÔÚΨһµÄÎÊÌâÊÇÈçºÎÖªµÀÆðʼµÄλÖã¬ÒòΪ֪µÀÁËÒ»¸öifetch¿é¿ªÊ¼µÄλÖ㬾ͿÉÒÔÖªµÀËùÓкóÐøifetch£¬Òò´Ë±ØÐëÖªµÀµÚÒ»¸öifetchµÄ¿ªÊ¼Î»ÖᣠÒÔÏÂÊÇÖ¸µ¼·½Õë:

*°´ÕÕÇ°ÃæµÄ±í£¬jump£¬call»òreturnºóµÄµÚÒ»¸öifetch¿é¼È¿ÉÄÜ´ÓµÚÒ»ÌõÖ¸Áʼ£¬Ò²¿ÉÄÜ´ÓÓëÏÈǰµØÖ·×î½Ó½üµÄ16×ֽڱ߽çÏß¿ªÊ¼¡£ µ«Èç¹ûµÚÒ»ÌõÖ¸ÁîÊÇ¶ÔÆëµÄ¡ª¡ªÊ¹Ëü´Ó16×ֽڱ߽çÏß¿ªÊ¼£¬ÄÇôÄã¾ÍÄܱ£Ö¤µÚÒ»¸öifetch¿é´ÓÕâÀ↑ʼ¡£ Òò´Ë£¬ÄãÓ¦¸ÃÊ¹ÖØÒªµÄ×Ó¹ý³ÌÈë¿ÚºÍÑ­»·Èë¿Ú°´ 16 ¶ÔÆë¡£
*Èç¹û´æÔÚÁ½ÌõÁ¬ÐøµÄÖ¸ÁîËüÃǵij¤¶ÈºÍ´óÓÚ16£¬ÄÇôÄãÄܱ£Ö¤µÚ¶þÌõÖ¸ÁîÎÞ·¨ÓëµÚÒ»ÌõÖ¸Áî·Å½øÍ¬Ò»¸öifetch¿é£¬½á¹û¾ÍÊÇ×ÜÄÜÓÐÒ»¸öifetch¿é´ÓµÚ¶þÌõÖ¸Áʼ¡£ ÒÔ´Ëifetch¿éΪ»ù´¡£¬Äã¾ÍÄÜÕÒ³öºóÐøifetch¿éµÄ¿ªÊ¼Î»Öá£
*·ÖÖ§Ô¤²âʧ°ÜºóµÄµÚÒ»¸öifetch¿é×ÜÊÇ´Ó16×ֽڱ߽çÏß¿ªÊ¼¡£ °´ÕÕ22.2½ÚµÄÀíÂÛ£¬Ò»¸öÖØ¸´´ÎÊý´óÓÚ5´ÎµÄÑ­»·µ±ËüÍ˳öʱ×ÜÓÐÒ»´ÎÔ¤²âʧ°Ü¡£ Òò´ËÕâÖÖÑ­»·ºóµÄµÚÒ»¸öifetch¿é´ÓÓëÏÈǰµØÖ·×î½Ó½üµÄ16×ֽڱ߽çÏß¿ªÊ¼¡£
*ÆäËüÐòÁл¯Ê¼þ£¨²»¿É²¢ÐÐʼþ£©Ò²»áʹµÃÏÂÒ»¸öifetch¿é´Ó16×ֽڱ߽çÏß¿ªÊ¼¡£ ÀàËÆÊ¼þ°üÀ¨Öжϣ¬Òì³££¬×ÔÐ޸ĴúÂëºÍCPUID£¬IN£¬OUTµÈÐòÁл¯Ö¸Áî¡£

ÄãÏÖÔÚÒ»¶¨ÐèÒªÒ»¸öʵÀýÁ˰É:

 µØÖ·            Ö¸Áî                  ³¤¶È    Î¢ÂëÊý   ¹À¼ÆÒª½øÈëµÄ½âÂëÆ÷
----------------------------------------------------------------------
1000h      MOV ECX£¬ 1000               5       1            D0
1005h  LL: MOV [ESI]£¬ EAX              2       2            D0
1007h      MOV [MEM]£¬ 0               10       2            D0
1011h      LEA EBX£¬ [EAX+200]          6       1            D1
1017h      MOV BYTE PTR [ESI]£¬ 0       3       2            D0
101Ah      BSR EDX£¬ EAX                3       2            D0
101Dh      MOV BYTE PTR [ESI+1]£¬0      4       2            D0
1021h      DEC ECX                      1       1            D1
1022h      JNZ LL                       2       1            D2

ÎÒÃǼٶ¨µÚÒ»¸öifetch¿é´Ó1000hµØÖ·¿ªÊ¼µ½1010h½áÊø¡£½áÊøÎ»ÖÃÔÚMOV [MEM]£¬0Ö¸ÁîÖм䣬Òò´Ëϸöifetch¿é´Ó1007h¿ªÊ¼µ½1017h½áÊø¡£ ½áÊøÎ»ÖÃÔÚÖ¸Áî±ß½çÉÏ£¬Òò´ËµÚÈý¸öifetch¿é´Ó1017h¿ªÊ¼£¬¸²¸ÇÁËÊ£ÓàµÄÑ­»·¡£ ½âÂ뻨ȥµÄʱÖÓÖÜÆÚµÈÓÚD0Ö¸ÁîµÄÊýÄ¿£¬ÔÚLLÑ­»·ÖÐÊÇÿ´Îµþ´ú5¸öÖÜÆÚ¡£ ×îºóÒ»¸öifetch¿é°üÀ¨ÁËÈý¸ö½âÂë×飬¸²¸ÇÁË×îºóÎåÌõÖ¸Á¶øÇÒ´©Ô½ÁË16×ֽڱ߽ç(1020h)¡£ ¸ù¾ÝÕâЩÌõ¼þ²é¿´Ç°ÃæµÄ±í£¬ÎÒÃÇÖªµÀÌø×ªºóµÄµÚÒ»¸öifetch¿é½«´ÓÌø×ªºóµÄµÚÒ»ÌõÖ¸Áʼ£¬ËüÊÇÔÚ1005hµÄLL±êÇ©£¬µ½1015h½áÊø¡£ ½áÊøÎ»ÖÃÔÚLEAÖ¸ÁîÖм䣬Òò´Ëϸöifetch¿é´Ó1011h¿ªÊ¼µ½1021h½áÊø£¬×îºóÒ»¸öifetch¿é´Ó1021h¿ªÊ¼£¬¸²¸ÇÁËʣϵÄÖ¸Áî¡£ ÏÖÔÚLEAÖ¸ÁîºÍDECÖ¸Áî¶¼²»ÐÒµØÔÚifetch¿éµÄ¿ªÍ·£¬ÆÈʹËüÃǽøÈëD0½âÂëÆ÷¡£ ËùÒÔÔÚµÚ¶þ´Îµþ´úÖÐÎÒÃÇÓÐ7ÌõÖ¸ÁîÔÚD0£¬½âÂ뽫»¨È¥7¸öÖÜÆÚ¡£ ×îºóÒ»¸öifetch¿éÖ»°üº¬Ò»¸ö½âÂë×éÇÒ²»º¬16×ֽڱ߽çÏß¡£ ²é¿´±í¸ñ£¬×ªÒƺóµÄϸöifetch¿é½«´Ó16×ֽڱ߽翪ʼ£¬ËüÊÇ1000h¡£ Õâ¾ÍÓëµÚÒ»´Îµþ´úµÄÇé¿öÏàͬÁË¡£Äã¿ÉÒÔ¿´µ½¸ÃÑ­»·½âÂ뻨ȥµÄʱÖÓÖÜÆÚÔÚ5ºÍ7Ö®¼ä½»Ìæ¡£ ÒòΪûÓÐÆäËüµÄÆ¿¾±£¬ËùÒÔÕû¸öÑ­»·µþ´ú1000´ÎµÄ»°£¬»¨6000ʱÖÓ½âÂë¡£ Èç¹û¿ªÊ¼µØÖ·ÓÐËù²»Í¬£¬Ê¹µÃÄãÔÚÑ­»·µÄµÚÒ»Ìõ»ò×îºóÒ»ÌõÖ¸ÁîÖÐÓÐ16×ֽڱ߽çÏߣ¬ÄÇôҪ»¨8000ʱÖÓ¡£ Èç¹ûÖØÐÂ×é֯ѭ»·£¬Ê¹µÃûÓÐD1»òD2Ö¸Áî´¦ÓÚifetch¿éµÄ¿ªÍ·£¬ÄÇô¿ÉÒÔÖ»»¨5000ʱÖÓ¡£

ÉÏÊöʵÀýÊÇÌØÒâ¹¹ÔìµÄ£¬Ê¹µÃȡָÁîºÍÖ¸Áî½âÂëÊÇΨһµÄÆ¿¾±¡£ ±ÜÃâÕâÖÖÆ¿¾±µÄ×î¼òµ¥µÄ·½·¨ÊÇ×éÖ¯ÄãµÄ´úÂëʹµÃÿ¸öʱÖÓÖÜÆÚ²úÉú3ÌõÒÔÉÏ΢Â룬ÕâÑùÒ»À´¾¡¹ÜÓÐÕâÀïÃèÊöµÄÖÖÖֳͷ££¬µ«½âÂëÒѲ»ÔÙÊÇÆ¿¾±ÁË¡£ ¶ÔÓÚСѭ»·ÕâÖÖ·½·¨²»ÊÊÓã¬Äã±ØÐë¶ÔȡָÁîºÍÖ¸Áî½âÂëÕÒ³öÓÅ»¯µÄ°ì·¨¡£

ΪÁ˱ÜÃâ16×ֽڱ߽çÏßÔÚ²»Ï£ÍûµÄµØ·½³öÏÖ£¬·½·¨Ö®Ò»¾ÍÊǸıä³ÌÐòµÄ¿ªÊ¼µØÖ·¡£ ¼ÇסʹÄãµÄ´úÂë¶Î°´½Ú¶ÔÆë£¨°´16¶ÔÆë£©£¬ÕâÑùÄã¿ÉÒÔÖªµÀ16×ֽڱ߽çµÄλÖá£

Èç¹ûÄãÔÚÑ­»·Ç°Ãæ²åÈëÒ»ÌõALIGN 16ÃüÁÄÇô»ã±àÆ÷»áÓÃNOP»òÕ߯äËüÖ¸ÁîÌî³äµ½×î½üµÄ16×ֽڱ߽硣 ´ó¶àÊý»ã±àÆ÷ÓÃXCHG EBX£¬EBXÖ¸Áî×÷Ϊ2-×Ö½ÚÌî³äÖ¸Áî(±»³Æ×÷"2-×Ö½ÚNOP")¡£ Õâ¸ö·½°¸²»ºÃ£¬ÒòΪÔÚ´ó¶àÊý´¦ÀíÆ÷ÉϸÃÖ¸ÁîµÄ»¨·Ñʱ¼ä±ÈÁ½ÌõNOPÖ¸Áî¶à! Èç¹ûÑ­»·Ö´Ðкܶà´Î£¬ÄÇôÔÚÑ­»·ÍâµÄÈκÎÖ¸Áî¶ÔËٶȶ¼ÊDz»ÖØÒªµÄ£¬Äã²»±ØÔÚÒâÕâ¸ö²»Ì«ºÃµÄÌî³äÖ¸Áî¡£ µ«Èç¹ûÌî³äÖ¸ÁȥµÄʱ¼äÊÇÖØÒªµÄ£¬ÄÇôÄã¿ÉÒÔÊÖ¹¤Ñ¡ÔñÌî³äÖ¸Áî¡£ ×îºÃÑ¡ÔñÄÇЩÓÐÒâÒåµÄÌî³äÖ¸Á±ÈÈçˢмĴæÆ÷¡ª¡ªÎªÁ˱ÜÃâ¼Ä´æÆ÷¶ÁÑÓ³Ù(¼û16.2ÕÂ)¡£ ±ÈÈçÄãÓÃEBP¼Ä´æÆ÷Ѱַ£¬µ«ºÜÉÙ¶ÔËüд»Ø£¬ÄÇôÄã¿ÉÒÔÓÃMOV EBP£¬EBP»òÕßADD EBP£¬0×÷ΪÌî³ä£¬¼õÉټĴæÆ÷¶ÁÑӳٵĿÉÄÜÐÔ¡£ Èç¹ûÄãûÓÐÓÐÓõÄÖ¸Á¶øÇÒST(0)ÖÐÓÐÒ»¸öºÏ·¨µÄ¸¡µãÊýÖµ£¬ÄÇôÄã¿ÉÒÔÓÃFXCH ST(0)×÷ΪºÃµÄÌî³ä£¬ÒòΪËü²»¸øÖ´Ðж˿ÚÔö¼ÓÈκθºµ£¡£

»¹ÓеĴëÊ©¾ÍÊÇÖØÐÂ×éÖ¯ÄãµÄÖ¸Áʹifetch±ß½ç²»³öÏÖÔÚÓꦵÄλÖᣠÕâÊǸöÄÑÌ⣬²»ÊÇÒ»Ö±Äܵõ½ÂúÒâµÄ½á¹ûµÄ¡£

»¹ÓÐÄÜ×öµÄÊÇ¿ØÖÆÖ¸ÁîµÄ³¤¶È¡£ ÓÐʱÄãÄÜÌæ»»Ò»ÌõÖ¸ÁîΪÁíÒ»Ìõ³¤¶È²»Í¬µÄÖ¸Áî¡£ Ðí¶àÖ¸Áî¿ÉÒÔÓò»Í¬·½·¨±àÂ룬µÃµ½²»Í¬µÄ³¤¶È¡£ »ã±àÆ÷Ò»°ãÊÇÑ¡Ôñ×î¶Ì°æ±¾µÄÖ¸Áµ«ÓÐʱºòÐèÒªÓ²ÐԵصõ½½Ï³¤°æ±¾µÄÖ¸Áî¡£ ±ÈÈ磬DEC ECX³¤¶ÈÊÇÒ»¸ö×Ö½Ú£¬SUB ECX£¬1ÊÇ3¸ö×Ö½Ú¡£ ÄãÓÃÁËÒÔϼ¼ÇÉ£¬»¹¿ÉµÃµ½Ò»¸ö6×Ö½Ú°æ±¾µÄ´ø³¤ÕûÐÍÁ¢¼´²Ù×÷ÊýµÄÖ¸Áî:

¡¡¡¡¡¡¡¡¡¡¡¡SUB ECX£¬ 9999
¡¡¡¡¡¡¡¡¡¡¡¡ORG $-4
¡¡¡¡¡¡¡¡¡¡¡¡DD 1

´øÄÚ´æ²Ù×÷ÊýµÄÖ¸Áî¿ÉÒÔÓÃSIB×Ö½Ú¼Ó³¤Ò»¸ö×Ö½Ú£¬µ«×îÈÝÒ×µÄʹָÁî¼Ó³¤Ò»¸ö×ֽڵķ½·¨ÊǼÓÒ»¸öDS:¶Îǰ׺(×Ö½ÚÊÇ3Eh)¡£¡¡´¦ÀíÆ÷ͨ³£½ÓÊܶàÓàµÄÎÞÒâÒåµÄǰ׺(³ýÁËLOCK)£¬Ö»ÒªÖ¸Á¶È²»³¬¹ý15×Ö½Ú¡£¡¡ÉõÖÁûÓÐÄÚ´æ²Ù×÷ÊýµÄÖ¸ÁîÒ²ÄÜÓжÎǰ׺¡£Òò´ËÈç¹ûÄãÏëʹDEC ECXÖ¸Áî±ä³É2¸ö×Ö½Ú£¬Ð´×÷:

¡¡¡¡¡¡¡¡¡¡¡¡DB 3Eh
¡¡¡¡¡¡¡¡¡¡¡¡DEC ECX

¼Çס:Èç¹ûÖ¸ÁîÓжàÓÚÒ»¸öǰ׺£¬½âÂëʱÄã»á¸¶³ö´ú¼Û¡£¡¡¿ÉÄÜÕâÖÖ´øÓÐÎÞÒâÒåǰ׺µÄÖ¸Áî(ÓÈÆäÊÇÖØ¸´Ç°×ººÍËøÇ°×º)×îºÃÔÚÒÔºó±»Î´À´µÄ´¦ÀíÆ÷ÓÃÀ´×÷ΪеÄÖ¸ÁÒòΪÄÇʱºòµÄ²»»áÔÙÓÐÎÞÓõÄÖ¸Áî´úÂë²úÉú¡£¡¡µ«ÎÒÈÏΪ²»¹ÜÔõô˵£¬¶ÔÈκÎÖ¸ÁîÓöÎǰ׺¶¼Êǰ²È«µÄ¡£

ÓÃÁËÕâЩ·½·¨£¬Ó¦¸ÃÄܹ»Ê¹ifetch¿éµÄ±ß½ç³öÏÖÔÚÄãÏ£ÍûµÄλÖÃÁË¡£¡¡µ±È»ÕâÊÇÒ»¸ö·¦Î¶µÄÄÑÌâ¡£

16£®¼Ä´æÆ÷ÖØÃüÃû(PPro£¬PIIºÍPIII)

16.1¡¡Ïû³ýÒÀÀµ

¼Ä´æÆ÷ÖØÃüÃûÊÇÕâЩ΢´¦ÀíÆ÷²ÉÓõĸ߼¶¼¼Êõ£¬ÎªÁËÏû³ý²»Í¬²¿·Ö´úÂëµÄÖ®¼äµÄÒÀÀµ¡£±ÈÈç:
¡¡¡¡¡¡¡¡¡¡
¡¡¡¡¡¡¡¡  MOV EAX£¬ [MEM1]
¡¡¡¡¡¡¡¡¡¡IMUL EAX£¬ 6
¡¡¡¡¡¡¡¡¡¡MOV [MEM2]£¬ EAX
¡¡¡¡¡¡¡¡¡¡MOV EAX£¬ [MEM3]
¡¡¡¡¡¡¡¡¡¡INC EAX
¡¡¡¡¡¡¡¡¡¡MOV [MEM4]£¬ EAX

ÕâÀïµÄ×îºóÈýÌõÖ¸ÁîÊǶÀÁ¢ÓÚ¿ªÊ¼µÄÈýÌõÖ¸ÁîµÄ£¬ÒòΪËüÃDz»Ðè񻂡̾ÈýÌõÖ¸ÁîµÄ½á¹û¡£ ΪÁËÓÅ»¯Ëü£¬ÔÚÔçÆÚµÄ´¦ÀíÆ÷ÖУ¬Äã±ØÐëÔÚºóÈýÌõÖ¸ÁîÖв»ÓÃEAX¼Ä´æÆ÷£¬²¢ÇÒµ÷ÕûÖ¸ÁîµÄ˳ÐòʹµÃÁùÌõÖ¸ÁîÁ½Á½Åä¶Ô¡£ ¶øPPro£¬PII£¬PIII´¦ÀíÆ÷ÒѾ­×Ô¶¯ÎªÄã×öºÃÁËÕâÒ»ÇС£ ÔÚÿ´ÎÄãдEAX¼Ä´æÆ÷µÄʱºò£¬Ëü·ÖÅÉÒ»¸öеÄÁÙʱ¼Ä´æÆ÷¡£ Òò´Ë£¬MOV EAX£¬[MEM3]Ïà¶ÔÇ°ÃæµÄÖ¸Áî¶ÀÁ¢ÁË¡£ ÔÚÂÒÐòÖ´ÐÐÖ®ºó£¬ÓпÉÄÜÔÚ½ÏÂýµÄÖ¸ÁîIMULÍê³É֮ǰ£¬MOV [MEM4]£¬EAXÒѾ­Íê³ÉÁË¡£

¼Ä´æÆ÷ÖØÃüÃûÊÇÍêÈ«×Ô¶¯µÄ¡£ ÿµ±Ò»ÌõÖ¸Áîдһ¸öÓÀ¾ÃÐԵļĴæÆ÷ʱ£¬Ò»¸öеÄÁÙʱ¼Ä´æÆ÷±»µ±×÷ËüµÄ»¯Éí°ã·ÖÅÉ¡£ Ò»Ìõ¶ÔÒ»¸ö¼Ä´æÆ÷¼È¶ÁÓÖдµÄÖ¸ÁîÒ²½«Òý·¢¼Ä´æÆ÷ÖØÃüÃû¡£ ±ÈÈçÇ°ÃæµÄINC EAXÖ¸ÁÓÃÁËÒ»¸öÁÙʱ¼Ä´æÆ÷À´¶Á£¬ÁíÒ»¸öÁÙʱ¼Ä´æÆ÷À´Ð´¡£ Õâ²¢²»ÄܼõÉÙÒÀÀµ£¬µ±È»£¬Õâ¶Ô²¢·¢µÄ¼Ä´æÆ÷¶ÁÓÐЩÒâÒ壬ÉÔºó½âÊÍ¡£

ËùÓеÄͨÓüĴæÆ÷£¬¶ÑÕ»Ö¸Õëesp£¬±êÖ¾¼Ä´æÆ÷£¬¸¡µã¼Ä´æÆ÷£¬MMX¼Ä´æÆ÷£¬XMM¼Ä´æÆ÷ºÍ¶Î¼Ä´æÆ÷Äܱ»ÖØÃüÃû¡£ ¿ØÖÆ×Ö£¬¸¡µã״̬×Ö²»Äܱ»ÖØÃüÃû£¬ÕâÊÇÒòΪÕâЩ¼Ä´æÆ÷ÓÃÆðÀ´ºÜÂý¡£ ¹²ÓÐ40¸öͨÓõÄÁÙʱ¼Ä´æÆ÷£¬Òò´ËÄã²»¿ÉÄÜÓÃÍê¡£

Ò»°ã½«Ò»¸ö¼Ä´æÆ÷Çå0µÄ·½·¨ÊÇXOR EAX£¬EAX»òSUB EAX£¬EAX¡£ ÕâЩָÁî²»ÈÏΪÒÀÀµÓڼĴæÆ÷µÄÔ­Öµ¡£ µ«Èç¹ûÄãÏëÏû³ýÇ°ÃæµÄÂýÖ¸ÁîÔì³ÉµÄÒÀÀµ£¬Äã¾ÍÓÃMOV EAX£¬0¡£

¼Ä´æÆ÷ÖØÃüÃûÓɼĴæÆ÷»¯Ãû±í(RAT)ºÍÂÒÐò»º´æ(ROB)¿ØÖÆ¡£ ´Ó½âÂëÆ÷³öÀ´µÄ΢Âë¾­¹ýÒ»¸ö¶ÓÁнøÈëRAT£¬È»ºó½øÈëROBºÍ±£ÁôÕ¾¡£ ÔÚÒ»¸öʱÖÓÖÜÆÚRATÖ»ÄÜ´¦Àí3Ìõ΢Âë¡£ÕâÒâζ×Å΢´¦ÀíÆ÷ƽ¾ùÒ»¸öÖÜÆÚµÄ×ÜÍÌÍÂÁ¿²»Äܳ¬¹ý3Ìõ΢Âë¡£

ÖØÃüÃûµÄ¸öÊýûÓÐÌØÊâÏÞÖÆ¡£ RATÔÚÒ»¸öʱÖÓÖÜÆÚÄÚ¿ÉÒÔÖØÃüÃûÈý¸ö¼Ä´æÆ÷£¬ÉõÖÁÔÚÒ»¸öʱÖÓÖÜÆÚÄÚËü¿ÉÒÔÖØÃüÃûͬһ¸ö¼Ä´æÆ÷Èý´Î¡£

16.2 ¼Ä´æÆ÷¶ÁÑÓ³Ù

µ«ÓÐÒ»¸öÏÞÖÆ·Ç³£ÑÏÖØ£¬ÄǾÍÊÇÔÚÒ»¸öʱÖÓÖÜÆÚÄÚÄãÖ»ÄܶÁÁ½¸ö²»Í¬µÄÓÀ¾Ã¼Ä´æÆ÷Ãû¡£³ýÁËÖ¸ÁîÖÐÖ»ÓÃÓÚдµÄ¼Ä´æÆ÷Í⣬¶ÔÖ¸ÁîÖÐÆäËüÓõ½µÄ¼Ä´æÆ÷¶¼ÓÐÕâ¸öÏÞÖÆ¡£±ÈÈç:
          
          MOV [EDI + ESI]£¬ EAX
          MOV EBX£¬ [ESP + EBP]

µÚÒ»ÌõÖ¸Áî²úÉúÁ½Ìõ΢Â룺һ¸ö¶ÁEAX£¬Ò»¸ö¶ÁEDIºÍESI¡£ µÚ¶þÌõÖ¸Áî²úÉúÒ»¸ö΢Â룺¶ÁespºÍebp¡£ ebx²»Ëã×÷¶Á£¬ÒòΪÔÚÕâ¸öÖ¸ÁîÖÐËüÖ»±»Ð´¡£ ÈÃÎÒÃǼٶ¨ÕâÈý¸ö΢ÂëÒ»Æð¾­¹ýRAT¡£ ½«ÓÃÈý¸ö×Ö³¤(WORD)À´±£´æÕâÈý¸öÒ»Æð¾­¹ýRATµÄÁ¬ÐøÎ¢Âë¡£ ÒòΪROBÒ»¸öʱÖÓÖÜÆÚÖ»ÄÜ´¦ÀíÁ½¸öÓÀ¾ÃÐԼĴæÆ÷µÄ¶Á£¬¶øÎÒÃÇÓÐÎå¸ö¼Ä´æÆ÷¶Á£¬ËùÒÔÔÚÎÒÃǵÄÈýÔª×éµ½´ï±£Áôվ֮ǰ£¬±»¶îÍâµØÑÓ³ÙÁËÁ½¸öʱÖÓÖÜÆÚ¡£ ÔÙ±ÈÈ磬ÈýÔª×éÀïÓÐ3»ò4¸ö¼Ä´æÆ÷¶Á£¬ÄÇô»áÓÐÒ»¸öÖÜÆÚµÄÑÓ³Ù¡£

µ«ÔÚÒ»¸öÈýÔª×éÄÚ£¬Í¬Ò»¸ö¼Ä´æÆ÷±»¶Á¶à´Î²»±»¼ÆËãÔÚÄÚ¡£±ÈÈçÉÏÊö´úÂë¸ÄΪ:

          MOV [EDI + ESI]£¬ EDI
          MOV EBX£¬ [EDI + EDI]

ÆäʵֻÐèÒªÁ½¸ö¼Ä´æÆ÷¶Á(ESI£¬EDI)£¬ÈýÔª×é²»»á±»ÑÓ³Ù¡£

ÈôÒ»¸ö¼Ä´æÆ÷½«±»Ò»¸öÉÐδ֪µÄ΢ָÁîд£¬ÄÇôΪÁËÎÞ´ú¼ÛµØ»ñµÃÕâ¸ö¼Ä´æÆ÷£¬Ëü½«Ò»Ö±±»±£´æÔÚROBÄÚÖ±µ½±»Ð´»Ø¡£ Õ⽫ÏûºÄ3¸öʱÖÓÖÜÆÚ£¬ÉõÖÁ¸ü¶à¡£ д»ØÊÇ×îºóÒ»¸ö¿É·ÃÎÊÖµµÄÖ´Ðн׶Ρ£ »»¾ä»°Ëµ£¬ÔڼĴæÆ÷µÄÖµÉв»Äܱ»Ö´Ðе¥Ôª·ÃÎʵÄʱºò£¬Äã¿ÉÒÔûÓÐÑӳٵضÁ³öRATÖÐÈκμĴæÆ÷¡£ ÕâÊÇÒòΪµ±Ò»¸öÖµÒ»µ©Äܱ»·ÃÎÊ£¬Ëü½«±»¿ìËٵء¢Ö±½ÓµØÐ´µ½ÈκÎÐèÒªËüµÄºóÐøµÄROB±íÏî¡£ µ«Èç¹ûÔÚÐèÒªËüµÄºóÐøÎ¢Ö¸Áî½øÈëRAT֮ǰ£¬¸ÃÖµÒѾ­±»Ð´»ØÁÙʱ|ÓÀ¾Ã¼Ä´æÆ÷£¬ÄÇôÕâ¸öÖµÖ»ÄÜ´ÓÖ»ÓÐÁ½¸ö¶Á¶Ë¿ÚµÄ¼Ä´æÆ÷ÎļþÖжÁ¡£ ´ÓRATµ½Ö´Ðе¥ÔªÓÐÈý¸öÁ÷Ë®½×¶Î£¬Òò´ËÄã¿ÉÒÔÈ·¶¨£¬ÔÚÒ»¸ö΢ÂëÈýÔª×éÖб»Ð´¹ýµÄ¼Ä´æÆ÷ÖÁÉÙÄܱ»Ï¸öÈýÔª×éÎÞ´ú¼ÛµØ¶Á¡£ Èç¹ûд»Ø¶¯×÷ÒòΪÂÒÐò£¬ÂýÖ¸ÁÒÀÀµÁ´£¬cacheʧЧ£¬»òÆäËüÔµ¹Ê·¢ÉúÑÓ³Ù£¬ÄÇô¼Ä´æÆ÷¾ÍÄܱ»¸ü¿¿ºóµÄÖ¸ÁîÁ÷ÎÞ´ú¼ÛµØ¶Á¡£

±ÈÈç:
          MOV EAX£¬ EBX
          SUB ECX£¬ EAX
          INC EBX
          MOV EDX£¬ [EAX]
          ADD ESI£¬ EBX
          ADD EDI£¬ ECX 

ÕâÁùÌõÖ¸Áî¸÷²úÉúÒ»Ìõ΢ָÁî¡£ÈÃÎÒÃǼٶ¨Ç°ÈýÌõ΢ָÁîÒ»Æð½øÈëRAT¡£ÕâÈýÌõÖ¸Áî¶ÁEBX£¬ECX£¬EAX¡£µ«ÒòΪÎÒÃǶÔEAX¶Á֮ǰÕýÔÚ¶ÔËüд£¬Òò´ËÕâ¸ö¶ÁÊÇûÓдú¼ÛµÄ£¬¼´ÎÒÃÇûÓÐÑÓ³Ù¡£ ÏÂÈýÌõ΢ָÁî¶ÁEAX£¬ ESI£¬ EBX£¬ EDI ºÍ ECX¡£ ËäÈ»ÔÚÇ°ÃæµÄÈýÔª×éÖÐEAX£¬EBX£¬ECX¶¼±»¸Ä¹ý£¬µ«ÔÚËüÃÇÄܱ»ÎÞ´ú¼Û·ÃÎÊ֮ǰ»¹Ã»±»Ð´»Ø£¬Òò´ËÖ»¹ØÏµµ½ESIºÍEDI£¬ÎÒÃÇҲûÓÐÑÓ³Ù¡£ Èç¹ûµÚÒ»¸öÈýÔª×éµÄÖ¸ÁîSUB ECX£¬EAX¸ÄΪCMP ECX£¬EAX£¬ÄÇôÓÉÓÚECXûÓб»Ð´£¬ÎÒÃǽ«ÒòΪÔÚµÚ¶þ¸öÈýÔª×éÖжÁESI£¬EDIºÍECX·¢ÉúÑÓ³Ù¡£ ͬÑùµØ£¬Èç¹ûINC EBX¸ÄΪNOP£¬»òÆäËüÖ¸ÁÄÇôÎÒÃǽ«ÒòΪÔÚµÚ¶þ¸öÈýÔª×éÖжÁESI£¬EBX£¬EDI¶ø·¢ÉúÑÓ³Ù¡£

ûÓÐÒ»ÖÖ΢ָÁîÄܹ»¶ÁÁ½¸öÒÔÉϼĴæÆ÷¡£Òò´Ë£¬ÈκζÁÁ½¸öÒÔÉϼĴæÆ÷µÄÖ¸Á±»²ð·ÖÖÁÁ½Ìõ»òÁ½ÌõÒÔÉÏ΢ָÁî¡£

ΪÁ˸ø¼Ä´æÆ÷¶Á½øÐмÇÊý£¬Äã±ØÐëͳ¼ÆÖ¸ÁîÖÐËùÓйØÁªµÄ¼Ä´æÆ÷£¬°üÀ¨ÕûÐμĴæÆ÷£¬±êÖ¾¼Ä´æÆ÷£¬Õ»Ö¸Õë¼Ä´æÆ÷£¬¸¡µã¼Ä´æÆ÷ºÍMMX¼Ä´æÆ÷¡£XMM¼Ä´æÆ÷¿´×÷Á½¸ö¼Ä´æÆ÷£¬³ýÁËËüÃDZ»²¿·ÖʹÓ㬱ÈÈçADDSSºÍMOVHLPS¡£ ¶Î¼Ä´æÆ÷ºÍÖ¸ÁîÖ¸Õë¼Ä´æÆ÷ip²»¼ÆÔÚÄÚ¡£ ±ÈÈ磬ÔÚÖ¸ÁîSETZ ALÖÐÄãÓ¦¸ÃÖ»¼Æ±êÖ¾¼Ä´æÆ÷£¬¶ø²»ÊÇAL¡£ ADD EBX£¬ECXÖУ¬EBXºÍECX¶¼Òª¼Æ£¬µ«±êÖ¾¼Ä´æÆ÷²»¼Æ£¬ÒòΪËüÃÇÖ»±»Ð´¡£ PUSH EAXÖ¸Áî¶ÁEAXºÍESP£¬È»ºóдESP¡£
¡¡¡¡
FXCHÖ¸ÁîÊǸöÀýÍâ¡£ Ëü½ö½öÊÇÖØÃüÃû£¬µ«Ã»ÓжÁÈκÎÖµ£¬Òò´ËÔڼĴæÆ÷¶ÁÑӳٵĹæÔòÀïËü²»±»¼Æ¡£ FXCHÖ¸ÁîµÄÐÐΪºÃ±ÈÒ»¸ö΢ָÁËü¼Èû¶Á£¬ÓÖûдÈκÎÇ£Éæ¶ÁÑӳٵĹæÔòµÄ¼Ä´æÆ÷¡£
¡¡¡¡
²»Òª°Ñ΢ָÁîÈýÔª×éºÍ½âÂë×é¸ã»ì¡£ Ò»¸ö½âÂë×é¿ÉÒÔ²úÉú1µ½6Ìõ΢ָÁ¼´Ê¹½âÂë×éÓÐÈýÌõÖ¸ÁÇÒÕýºÃ²úÉúÈýÌõ΢ָÁҲ²»Äܱ£Ö¤ÕâÈýÌõ΢ָÁîÒ»Æð½øÈëRAT¡£¡¡

½âÂëÆ÷ºÍRATÖ®¼äµÄ¶ÓÁÐÏ൱¶Ì(Ö»ÓÐ10Ìõ΢ָÁî)£¬Òò´ËÄã²»ÄÜÈÏΪ¼Ä´æÆ÷¶ÁÑÓ³Ù²»»áÓ°Ïì½âÂ룬Ҳ²»ÄÜÈÏΪ½âÂëÆ÷ÍÌÍÂÁ¿µÄ²¨¶¯Æð·ü²»»á¶ÔRATÔì³ÉÑÓ³Ù¡£

³ý·Ç¶ÓÁÐΪ¿Õ£¬·ñÔòºÜÄÑÔ¤ÖªÄÄЩ΢ָÁîÒ»Æð½øÈëRAT£¬µ«¶ÔÓÚÓÅ»¯µÄ´úÂëÀ´Ëµ£¬¶ÓÁÐÖ»ÓÐÔÚ·ÖÖ§Ô¤²âʧ°Üºó²ÅΪ¿Õ¡£ ͬһÌõÖ¸Áî²úÉúµÄ΢ָÁî²»Ò»¶¨Ò»Æð¾­¹ýRAT£¬Î¢Ö¸ÁîÖ»ÊÇÔÚ¶ÓÁÐÖÐÁ¬ÐøµØ½øÈ룬Èý¸öÒ»×é¡£ Èç¹ûÊÇÒ»¸öÔ¤²âµ½µÄÌø×ª£¬ÐòÁв»±»´ò¶Ï£ºÔÚÌø×ªÖ®Ç°ºÍÖ®ºóµÄ΢ָÁî¿ÉÒÔÒ»Æð¾­¹ýRAT¡£ Ö»Óе±Ò»¸öÔ¤²âʧ°ÜµÄÌø×ª£¬¶ÓÁвű»ÇåÏ´£¬ÖØÐ¿ªÊ¼£¬Òò´ËÏÂÈýÌõ΢ָÁîÒ»¶¨ÊÇÒ»Æð½øÈëRAT¡£

Èç¹ûÈýÌõÁ¬ÐøµÄ΢ָÁî¶ÁÁËÁ½¸öÒÔÉϵļĴæÆ÷£¬ÄãÒ»¶¨ÇéÔ¸ËüÃDz»ÒªÒ»Æð½øÈëRAT¡£ ¶øËüÃÇÒ»Æð½øÈëµÄ¿ÉÄÜÐÔÊÇ1/3¡£ÔÚͬһ¸ö΢ÂëÈýÔª×éÖжÁ 3 »ò 4 ¸öÒѾ­Ð´»ØµÄ¼Ä´æÆ÷£¬Æä´ú¼ÛÊÇÑÓ³ÙÒ»¸öʱÖÓÖÜÆÚ¡£ Äã¿ÉÒÔ°ÑÕâÒ»¸öʱÖÓµÄÑӳٵȼ۵ؿ´³ÉÔÚRATÖÐͬʱ¼ÓÔØÈýÌõÒÔÉÏ΢ָÁî¡£ ÓÉÓÚÕâÈýÌõ΢ָÁîÒ»Æð½øÈëRATµÄ¸ÅÂÊÊÇ1/3£¬Òò´Ëƽ¾ù´ú¼ÛÊÇ3/3=1Ìõ΢ָÁî¡£ ¼ÆËãÒ»¶Î´úÂë¾­¹ýRATµÄƽ¾ùʱ¼äµÄ·½·¨ÊÇ£º¼Ä´æÆ÷¶ÁÑӳٵĸöÊý¼ÓÉÏ΢ָÁîµÄ¸öÊý£¬ÔÙ³ýÒÔ3¡£ Äã»á·¢ÏÖΪÁËÈ¥³ýÑÓ³Ù£¬¼ÓÈëÒ»Ìõ¶îÍâµÄÖ¸ÁîµÄ·½·¨ÊÇÎÞ¼ÃÓÚʵġª¡ª ³ý·ÇÄãȷʵ֪µÀÄÄЩ΢ָÁîÒ»Æð½øÈëRAT£¬»òÕßÄãÄÜͨ¹ýÕâÌõ¶îÍâµÄÖ¸Áî×èÖ¹³¬¹ýÒ»¸öµÄ£¬Ç±ÔڵļĴæÆ÷¶ÁÑӳٵķ¢Éú¡£

ΪÁË´ïµ½Ò»¸öʱÖÓÖÜÆÚ3Ìõ΢ָÁîµÄÍÌÍÂÁ¿µÄÄ¿µÄ£¬Ò»¸öʱÖÓÀïÖ»ÄܶÁÁ½¸öÓÀ¾ÃÐԼĴæÆ÷µÄÏÞÖÆ¿ÉÄÜÊÇÐèÒª´¦ÀíµÄÒ»¸öÆ¿¾±¡£È¥³ý¼Ä´æÆ÷¶ÁÑӳٵķ½·¨ÈçÏÂ:

*½«¶Áͬһ¸ö¼Ä´æÆ÷µÄ΢ָÁÁ¿·ÅÔÚÒ»Æð£¬Ê¹ËüÃǽøÈëͬһ¸öÈýÔª×éµÄ¸ÅÂÊÌá¸ß¡£
*½«¶Á²»Í¬¼Ä´æÆ÷µÄ΢ָÁÁ¿¸ô¿ª£¬Ê¹ËüÃÇÎÞ·¨½øÈëͬһ¸öÈýÔª×é¡£
*Èç¹ûÒ»ÌõÖ¸Áîд»òÐÞ¸Äij¸ö¼Ä´æÆ÷£¬ÄÇôÔÚÕâÌõÖ¸ÁîÖ®ºó²»Òª·Å³¬¹ý3-4¸ö¶ÁÕâ¸ö¼Ä´æÆ÷µÄÈýÔª×é΢Âë¡£ ÕâÊÇΪÁ˱£Ö¤ÔÚÕâ¸ö¼Ä´æÆ÷±»¶ÁÒÔǰÉÐûÓб»Ð´»Ø£¨ÆäÖÐÓÐÌø×ªÃ»¹ØÏµ£¬Ö»ÒªËü±»Ô¤²âµ½£©¡£ Èç¹ûÄãÓÐÀíÓɹÀ¼Æµ½¼Ä´æÆ÷µÄд»Ø½«±»ÑÓ³Ù£¬ÄÇôÄ㻹Äܹ»ÔÚ¸ü¿¿ºóµÄÖ¸ÁîÁ÷Öа²È«µØ£¨ÎÞ´ú¼ÛµØ£©¶Á¼Ä´æÆ÷¡£
*Óþø¶ÔµØÖ·´úÌæÖ¸Õ룬ÕâÑùÄܼõÉټĴæÆ÷¶ÁµÄÊýÁ¿¡£
*ÔÚ²»»áÒýÆðÑÓ³ÙµÄij¸öÈýÔª×éÖУ¬Äã¿ÉÒÔÖØÃüÃûÒ»¸ö¼Ä´æÆ÷£¬ÕâÑùÄÜÔÚÒÔºóµÄÒ»¸ö»ò¶à¸öÈýÔª×éÖÐ×èÖ¹¸Ã¼Ä´æÆ÷µÄ¶ÁÑÓ³Ù¡£ ±ÈÈ磺MOV ESP£¬ESP / ... / MOV EAX£¬[ESP+8]¡£ Õâ¸ö·½·¨¶àÁËÒ»Ìõ¶îÍâµÄ΢ָÁÒò´ËËü²»Ì«ÖµµÃ£¬³ý·Ç¹À¼ÆÕâÑù×öÄÜ·ÀÖ¹µÄƽ¾ù¶ÁÑÓ³ÙÊý´óÓÚ1/3¡£

¶ÔÓÚ²úÉúÒ»ÌõÒÔÉÏ΢ָÁîµÄÖ¸ÁÄãÒªÖªµÀ¸ÃÖ¸Áî²úÉúµÄ΢ָÁîµÄ˳Ðò£¬ÕâÑù¾ÍÄܾ«È··ÖÎö¼Ä´æÆ÷¶ÁÑӳٵĿÉÄÜÐÔ¡£ ÎÒÔÚÏÂÃæÁгöÁË´ó¶àÊýÆÕ±éµÄÇé¿ö¡£

*дÄÚ´æ
ÄÚ´æµÄд²úÉúÁ½Ìõ΢ָÁî¡£µÚÒ»Ìõ( ¶Ë¿Ú4 )ÊÇÒ»¸ö´æ´¢²Ù×÷¡ª¡ª¶Á¼Ä´æÆ÷Öµ²¢¼ÇÏ¡£ µÚ¶þÌõ( ¶Ë¿Ú3 )¼ÆËãÄÚ´æµØÖ·£¬¶ÁÖ¸Õë¼Ä´æÆ÷¡£±ÈÈç:
MOV [EDI]£¬ EAX
µÚÒ»Ìõ΢ָÁî¶ÁEAX£¬ µÚ¶þÌõ¶ÁEDI¡£
FSTP QWORD PTR [EBX+8*ECX]
µÚÒ»Ìõ¶ÁST(0)£¬ µÚ¶þÌõ¶ÁEBXºÍECX¡£

*¶Á\д
Ò»¸ö¶ÁÄÚ´æ²Ù×÷Êý£¬Í¨¹ýËãÊõÔËËã»òÂß¼­ÔªËãÐ޸ļĴæÆ÷µÄÖ¸Áî²úÉúÁ½Ìõ΢ָÁî¡£µÚÒ»Ìõ( ¶Ë¿Ú2 )ÊÇÒ»¸ö¶ÁÖ¸Õë¼Ä´æÆ÷²¢ÇÒ¶ÁÄÚ´æÖ¸ÁµÚ¶þÌõÊÇÒ»¸öËãÊõÖ¸Áî( ¶Ë¿Ú0»ò1 )£¬Ëü¶Á\дĿµÄ¼Ä´æÆ÷£¬¿ÉÄÜд±êÖ¾¼Ä´æÆ÷¡£ ±ÈÈç:
ADD EAX£¬ [ESI+20]
µÚÒ»Ìõ΢Âë¶ÁESI£¬ µÚ¶þÌõ¶ÁEAX£¬Ð´EAXºÍ±êÖ¾¼Ä´æÆ÷¡£

*¶Á\ÐÞ¸Ä\д
¶Á\ÐÞ¸Ä\дָÁî²úÉúËÄÌõ΢ָÁî¡£ µÚÒ»Ìõ( ¶Ë¿Ú2 )¶ÁÖ¸Õë¼Ä´æÆ÷£¬µÚ¶þÌõ( ¶Ë¿Ú0»ò1 )¶Á\дËùÓеÄÔ´¼Ä´æÆ÷£¬¿ÉÄÜд±êÖ¾¼Ä´æÆ÷¡£µÚÈýÌõ( ¶Ë¿Ú4 )Ö»¶Á²»¼ÆÔÚÕâÀïµÄÁÙʱ½á¹û¡£ µÚËÄÌõ( ¶Ë¿Ú3 )ÔÙÒ»´Î¶ÁÖ¸Õë¼Ä´æÆ÷¡£ ÒòΪµÚÒ»ÌõºÍµÚËÄÌõ΢ָÁî²»ÄÜÒ»Æð½øÈëRAT£¬Òò´ËÄãÎÞ·¨ÀûÓÃËüÃǶÁµÄÊÇͬһ¸öÖ¸Õë¼Ä´æÆ÷Õâ¸öÊÂʵ¡£ ±ÈÈ磺
        
         OR [ESI+EDI]£¬ EAX

µÚÒ»Ìõ΢ָÁî¶ÁESIºÍEDI£¬µÚ¶þÌõ΢ָÁî¶ÁEAX£¬Ð´EAXºÍ±êÖ¾£¬ µÚÈýÌõÖ»¶ÁÁÙʱ½á¹û£¬ µÚËÄÌõÔٴζÁESIºÍEDI¡£ ²»¹ÜÕâЩ΢ÂëÈçºÎ½øÈëRAT£¬ÄãÄܱ£Ö¤¶ÁEAXµÄ΢ÂëÓëÆäÖÐÒ»¸ö¶ÁESIºÍEDIµÄ΢ÂëÊÇÒ»Æð½øÈëµÄ¡£ËùÒÔ¶ÔÓÚÕâÌõÖ¸Á¼Ä´æÆ÷¶ÁÑÓ³Ù²»¿É±ÜÃâµØ·¢ÉúÁË£¬³ý·ÇÕâÈý¸ö¼Ä´æÆ÷ÖеÄÒ»¸ö×î½ü¸Õ±»Ð޸Ĺý¡£

*¼Ä´æÆ÷ѹջ
Ò»Ìõ¼Ä´æÆ÷ѹջָÁî²úÉúÈýÌõ΢ָÁî¡£µÚÒ»Ìõ( ¶Ë¿Ú4 )ÊǶÁ³ö¼Ä´æÆ÷Öµºó¼ÇÏ£¬µÚ¶þÌõ¶Á¶ÑÕ»Ö¸Õë¼Ä´æÆ÷ESP£¬²úÉúÄÚ´æµØÖ·£¬µÚÈýÌõ( ¶Ë¿Ú0»ò1 )¶Á²¢ÐÞ¸ÄESP£¬¼õÈ¥Ò»¸ö×ֵĴóС( »òÒ»¸öË«×Ö )¡£

*¼Ä´æÆ÷³öÕ»
¼Ä´æÆ÷³öÕ»Ö¸Áî²úÉúÁ½Ìõ΢Âë¡£µÚÒ»Ìõ( ¶Ë¿Ú2 )¶Á³öESP£¬¶Á³öÄÚ´æÖµ£¬Ð´Èë¼Ä´æÆ÷£¬µÚ¶þÌõ¶Á²¢ÐÞ¸ÄÕ»¶¥Ö¸Õ룬µ÷ÕûÕ»¶¥Ö¸Õë¡£

*µ÷ÓÃ
½üµ÷ÓòúÉú4Ìõ΢Âë( ·Ö±ð½øÈë¶Ë¿Ú 1£¬ 4£¬ 3£¬ 01 )¡£Ç°Á½ÌõÖ»¶Áip£¬Õâ²»Äܱ»¼Æ£¬ÒòΪËü²»Äܱ»ÖØÃüÃû¡£ µÚÈýÌõ¶Á¶ÑÕ»Ö¸Õë¡£ µÚËÄÌõ¶Á²¢Ð޸ĶÑÕ»Ö¸Õë¡£

*·µ»Ø
½ü·µ»Ø²úÉú4Ìõ΢Âë( ·Ö±ð½øÈë¶Ë¿Ú 2£¬ 01£¬ 01£¬ 1 )¡£µÚÒ»Ìõ¶Á¶ÑÕ»Ö¸Õë¡£ µÚÈýÌõ¶Á²¢Ð޸ĶÑÕ»Ö¸Õë¡£

ÈçºÎ±ÜÃâ¼Ä´æÆ÷¶ÁÑÓ³ÙµÄÀý×ÓÔÚ ÊµÀý2.6 Öиø³ö

17. ÂÒÐòÖ´ÐÐ(PPro£¬ PII and PIII)

ÂÒÐò»º´æ(reorder buffer£¬¼ò³ÆROB)¿ÉÒÔÈÝÄÉ40Ìõ΢Âë¡£ Ò»Ìõ΢Âë´ôÔÚROBÖУ¬Ö±µ½ËùÓÐËüÐèÒªµÄ²Ù×÷Êý¶¼ÒѾÍÐ÷²¢ÇÒÓÐÒ»¸ö¿ÕµÄÖ´Ðе¥Ôª¿ÉÓᣠÕâÒ»ÇÐʹµÃÂÒÐòÖ´ÐгÉΪ¿ÉÄÜ¡£ Èç¹ûÒ»²¿·Ö´úÂëÒòΪcache²»ÃüÖб»ÑÓ³Ù£¬ÇÒÖ®ºóµÄ´úÂë¶ÀÁ¢ÓÚ±»ÑӳٵIJÙ×÷£¬ÄÇôºóÃæµÄ´úÂë²»»á±»ÑÓ³Ù¡£

дÄÚ´æµÄ²Ù×÷ÎÞ·¨ÂÒÐòÖ´ÐУ¬ÆäËüµÄд²Ù×÷¶¼ÄÜ¡£ Ò»¹²ÓÐ4¸öд»º´æ¡£ Òò´ËÈç¹ûÄãÔ¤¼ÆÐ´²Ù×÷ʱ»áÓкܶàcache²»ÃüÖлòÕßÄãÕýÔÚÏòδÃüÖÐcacheµÄÄÚ´æÐ´£¬ÄÇô½¨ÒéÄãÏÈÒ»´Î°²ÅÅ4¸öд²Ù×÷£¬²¢ÇÒ±£Ö¤ÔÚÏÂ4¸öд²Ù×÷֮ǰCPUÓÐÆäËüÊÂÇé×ö¡£ ÄÚ´æ¶ÁºÍÆäËüÖ¸ÁîÒ»°ã¶¼ÄÜÂÒÐòÖ´ÐУ¬³ýÁËIN£¬OUTºÍÐòÁл¯µÄÖ¸Áî¡£

Èç¹ûÄãµÄ³ÌÐòÏòij¸öÄÚ´æµØÖ·Ð´£¬²»¾ÃÖ®ºóÓÖ´Óͬһ¸öµØÖ·¶Á£¬ÄÇô¶Á²Ù×÷»á´íÎóµØÔÚд²Ù×÷֮ǰִÐУ¬ÒòΪÂÒÐòÖ´ÐеÄʱºòROB²»ÄÜ·Ö±æÕâ¸öÄÚ´æµØÖ·¡£µ±Ð´µØÖ·±»¼ÆËãµÄʱºò´íÎó²Å±»·¢ÏÖ£¬È»ºó¶Á²Ù×÷(ËüÊDZ»"Ͷ»úÖ´ÐÐ"µÄ)±ØÐëÖØ×ö¡£ ³Í·£´óÔ¼ÊÇ3¸öʱÖÓÖÜÆÚ¡£ ±ÜÃâËüµÄΨһ°ì·¨ÊDZ£Ö¤Ö´Ðе¥ÔªÔÚд²Ù×÷ºÍºóÃæµÄ¶Áͬһ¸öµØÖ·µÄ²Ù×÷Ö®¼äÓÐÆäËüÊÂÇé×ö¡£

ÔÚÎå¸ö¶Ë¿ÚÖÜΧÓм¸¸ö³ÉȺµÄÖ´Ðе¥Ôª¡£ ¶Ë¿Ú0ºÍ1ÓÃÓÚËãÊõÔËËãµÈ¡£ ¼òµ¥µÄmove£¬ËãÊõºÍÂß¼­ÔËËãÄܹ»½ø0ºÍ1¶Ë¿ÚµÄÈÎÒâÒ»¸ö£¬¾Í¿´ÄĸöÓпÕÁË¡£ ¶Ë¿Ú0»¹´¦Àí³Ë·¨£¬³ý·¨£¬ÕûÐÍÒÆÎ»ºÍÕûÐÍÑ­»·ÒÆÎ»£¬¸¡µã²Ù×÷¡£ ¶Ë¿Ú1»¹´¦ÀíÌø×ªºÍһЩMMX£¬XMM²Ù×÷¡£ ¶Ë¿Ú2´¦ÀíËùÓеÄÄÚ´æ¶Á£¬Ò»Ð©´®²Ù×÷ºÍһЩXMM²Ù×÷¡£ ¶Ë¿Ú3ΪÄÚ´æÐ´¼ÆËãµØÖ·¡£ ¶Ë¿Ú4Ö´ÐÐËùÓеÄÄÚ´æÐ´²Ù×÷¡£ ÔÚ29ÕÂÄãÄÜ¿´µ½Ö¸Áî²úÉúµÄ΢ÂëµÄÍêÕûÁÐ±í£¬»¹Ö¸³ö¸÷¸ö΢Âë½øÈëÄĸö¶Ë¿Ú¡£ ×¢Ò⣬ÄÚ´æÐ´²Ù×÷×ÜÊÇÐèÒªÁ½Ìõ΢Â룬һÌõ½ø¶Ë¿Ú3£¬Ò»Ìõ½ø¶Ë¿Ú4¡£ ÄÚ´æ¶Á²Ù×÷Ö»ÐèÒªÒ»Ìõ΢Âë( ½øÈë¶Ë¿Ú2 )¡£

¶àÊýÇé¿öÏ£¬Ò»¸ö¶Ë¿Úÿ¸öÖÜÆÚ½ÓÊÜÒ»Ìõ΢Âë¡£ ÕâÒâζ×ÅÒ»¸öÖÜÆÚ×î¶à¿ÉÒÔÖ´ÐÐ5Ìõ΢Âë(Èç¹ûËüÃÇ·Ö±ð½øÈë5¸ö²»Í¬µÄ¶Ë¿Ú)¡£ È»¶øÒòΪ֮ǰµÄÁ÷Ë®ÏßÔÚÒ»¸öʱÖÓ×î¶à²úÉú3Ìõ΢Â룬ËùÒÔ²»¿ÉÄÜÆ½¾ùÒ»¸öʱÖÓÖ´ÐÐ3ÌõÒÔÉÏ΢Âë¡£

Èç¹ûÄãÏëά³Öÿ¸öʱÖÓ3Ìõ΢ÂëµÄÍÌÍÂÂÊ£¬ÄÇô±ØÐ뱣֤ûÓÐÖ´Ðе¥Ôª½ÓÊÕ³¬¹ýÈý·ÖÖ®Ò»ÊýÁ¿µÄ΢Âë¡£ ÓÃÁË29ÕµÄ΢Âë±í¿ÉÒÔÊý³ö½øÈë¸÷¸ö¶Ë¿ÚµÄ΢ÂëÊý¡£ Èç¹û¶Ë¿Ú0ºÍ1ºÜ棬¶ø¶Ë¿Ú2¿ÕÏУ¬ÄÇôÄãÒªÓÃMOV register£¬memoryÖ¸ÁîÈ¡´úMOV register£¬register »ò MOV register£¬immediateÖ¸ÁîÀ´¸Ä½ø´úÂ룬ÕâÑù¿ÉÒÔ´Ó¶Ë¿Ú0ºÍ1ÉÏÒÆ³ö²¿·Ö¸ºµ£µ½¶Ë¿Ú2¡£

´ó¶àÊý΢ÂëµÄÖ´ÐÐʱ¼äÊÇÒ»¸öʱÖÓÖÜÆÚ¡£ µ«³Ë·¨£¬³ý·¨ºÍÐí¶à¸¡µãÔËËãÒªÓøü¶à£º

¸¡µã¼Ó·¨ºÍ¸¡µã¼õ·¨ÓÃ3¸öÖÜÆÚ£¬µ«Ö´Ðе¥ÔªÊÇÍêÈ«Á÷Ë®»¯µÄ£¬Òò´ËÔÚÉÏÒ»¸ö¸¡µã¼Ó/¼õ½áÊøÖ®Ç°£¬Ëü¾ÍÄÜÔÚÿ¸öʱÖÓÖÜÆÚ½ÓÊÜÒ»¸öеÄFADD»òFSUB(µ±È»Òª»ùÓÚËüÃÇÊǶÀÁ¢µÄÕâ¸ö¼ÙÉè)¡£

ÕûÐͳ˷¨»¨4¸öÖÜÆÚ£¬¸¡µã³Ë·¨»¨5¸öÖÜÆÚ£¬MMX³Ë·¨»¨3¸öÖÜÆÚ¡£ ÕûÐͺÍMMX³Ë·¨ÊÇÁ÷Ë®»¯µÄ£¬¿ÉÔÚÿ¸öʱÖÓ½ÓÊÜÒ»ÌõÐÂÖ¸Áî¡£ ¸¡µã³Ë·¨ÊDz¿·ÖÁ÷Ë®»¯µÄ£ºÖ´Ðе¥Ôª¿ÉÒÔÔÚǰһ¸ö¸¡µã³Ë·¨µÄ2¸öʱÖÓÖ®ºó½ÓÊÜÒ»¸öеÄFMUL£¬Òò´Ë×î´óÍÌÍÂÁ¿ÊÇÿÁ½¸öʱÖÓÒ»ÌõFMUL¡£ Á½ÌõFMULÖ®¼äµÄ¿Õ¶´ÓÃÕûÐͳ˷¨È¥Ìî³äÎÞ¼ÃÓÚÊ£¬ÒòΪËüÃÇÓÃͬһÌõµç·¡£ XMM¼Ó·¨ÓÃ3¸öʱÖÓ£¬XMM³Ë·¨ÓÃ4¸öʱÖÓ£¬¶øÇÒ¶¼ÊÇÍêÈ«Á÷Ë®»¯µÄ¡£ µ«ÒòΪÂß¼­ÉϵÄXMM¼Ä´æÆ÷ÔÚÎïÀíÉÏÊÇÓÃÁ½¸ö64λ¼Ä´æÆ÷ʵÏֵģ¬ÄãÐèÒªÁ½Ìõ΢ÂëÕûºÏÒ»¸öXMM²Ù×÷£¬Òò´ËÍÌÍÂÁ¿ÊÇÿÁ½¸öʱÖÓÒ»¸öXMM²Ù×÷¡£ XMM¼Ó·¨ºÍXMM³Ë·¨¿ÉÒÔ²¢ÐÐÖ´ÐУ¬ÒòΪËüÃÇÓõIJ»ÊÇͬһ¸öÖ´Ðе¥Ôª¡£

ÕûÐͺ͸¡µãÐͳý·¨ÐèÒª39¸öʱÖÓ£¬¶øÇÒ²»ÊÇÁ÷Ë®»¯µÄ¡£ ÕâÒâζ×ÅÔÚǰһ¸ö³ý·¨Íê³É֮ǰ£¬Ö´Ðе¥ÔªÎÞ·¨¿ªÊ¼Ðµijý·¨¡£ ¶Ô¿ª·½ºÍһЩ³¬Ô½º¯ÊýͬÑùÈç´Ë¡£

jump£¬callºÍreturnÖ¸ÁîÒ²²»ÊÇÍêÈ«Á÷Ë®»¯µÄ¡£ ÔÚÌø×ªºóµÄµÚÒ»¸öʱÖÓÖÜÆÚÄÚÄã²»ÄÜÖ´ÐÐÒ»¸öеÄÌø×ª¡£ Òò´Ëjump£¬callºÍreturnÖ¸ÁîµÄ×î´óÍÌÍÂÁ¿ÊÇÿÁ½¸öʱÖÓÒ»ÌõÖ¸Áî¡£

Ä㵱Ȼ»¹Ó¦¸Ã±ÜÃâÄÇЩ²úÉúºÜ¶à΢ÂëµÄÖ¸Áî¡£±ÈÈçLOOP XXÖ¸ÁӦ¸Ã±»Ì滻Ϊ:DEC ECX/JNZ XX¡£

Èç¹ûÄãÓÐÁ¬ÐøµÄPOPÖ¸ÁÄÇôÄãÓ¦¸Ã°ÑËüÃÇ"´òËé"ÒÔ¼õÉÙ΢ÂëÊý:

POP ECX / POP EBX / POP EAX ; ¿ÉÒÔ±ä³É:
MOV ECX£¬[ESP] / MOV EBX£¬[ESP+4] / MOV EAX£¬[ESP] / ADD ESP£¬12

ǰÕß²úÉú6Ìõ΢Â룬ºóÕßÖ»²úÉú4Ìõ΢Âë¶øÇÒ½âÂë¸ü¿ì¡£ ¶ÔÓÚPUSHÖ¸ÁîÓÃͬÑùµÄ·½·¨¾Í²»Ì«ºÃÁË£¬ÒòΪ±»"´òËé"µÄ´úÂëÐòÁпÉÄܲúÉú¼Ä´æÆ÷¶ÁÑÓ³Ù£¬³ý·ÇÄãÓÐÆäËüµÄÖ¸Áî¿ÉÒÔ²åÈë»òÕ߼ĴæÆ÷×î½ü±»ÖØÃüÃû¹ý¡£ ¶ÔÓÚCALLºÍRETÖ¸ÁîÓÃÕâ¸ö·½·¨Ò²²»ºÃ£¬»á·Á°­·µ»ØÕ»»º´æ(return stack buffer£¬¼ò³ÆRSB)µÄÔ¤²â¹¦ÄÜ¡£ »¹Òª×¢ÒâµÄ¾ÍÊÇÔÚÔçÆÚµÄ´¦ÀíÆ÷ÖУ¬ADD ESPÖ¸ÁîÒ²»áÒýÆðAGIÑÓ³Ù¡£

 

18. ÒýÍË(PPro£¬PIIºÍPIII)

ÒýÍËÊÇ΢ÂëʹÓõÄÁÙʱ¼Ä´æÆ÷Êý¾Ý¿½»ØÓÀ¾Ã¼Ä´æÆ÷(EAX£¬EBXµÈ)µÄ¹ý³Ì¡£ ÔÚROBÖУ¬Ò»ÌõÒѾ­Ö´ÐйýµÄ΢Âë±»±ê¼ÇΪ׼±¸ÒýÍË¡£

ÒýÍËÕ¾¿ÉÒÔÔÚÒ»¸öʱÖÓÖÜÆÚ´¦Àí3Ìõ΢Âë¡£ Õâ²»³ÉÎÊÌ⣬ÒòΪÔÚRATÖÐÍÌÍÂÁ¿ÒѾ­±»ÏÞÖÆÎªÒ»¸öʱÖÓ3Ìõ΢Âë¡£ µ«ÓÐÁ½¸öÔ­Òò»áʹÒýÍËÒ²³ÉΪƿ¾±: µÚÒ»£¬Ö¸Áî±ØÐëÓÐÐòÒýÍË¡£ Èç¹ûÒ»Ìõ΢Âë±»ÂÒÐòÖ´ÐÐÁË£¬ÄÇôÔÚËüÇ°ÃæµÄÈ«²¿Î¢Â뻹ûÒýÍË֮ǰËü²»ÄÜÒýÍË¡£ µÚ¶þ¸öÏÞÖÆÊDZ»È·ÈÏΪ·¢ÉúµÄÌø×ªÖ¸Áî±ØÐëÔÚÒýÍËÕ¾µÄÈý¸ö²ÛµÄµÚÒ»¸ö²ÛÖÐÒýÍË¡£ ¾ÍÏñÒ»ÌõÖ¸ÁîÖ»ÊʺϽâÂëÆ÷D0£¬½âÂëÆ÷D1¡¢D2Ö»ÄÜÏÐÖÃÒ»Ñù£¬Èç¹ûÒ»ÌõÒªÒýÍ˵Ä΢ÂëÊÇÒ»¸ö±»È·ÈÏΪ·¢ÉúµÄÌø×ª£¬ÄÇôÒýÍËÕ¾µÄºóÁ½¸ö²ÛÖ»ÄÜÏÐÖᣠÒò´Ë¼ÙÈçÄãÓÐÒ»¸öСѭ»·£¬ÄÇôÆäÖеÄ΢ÂëÊý²»Äܱ»3Õû³ýºÜÖØÒª¡£

ÈκÎ΢ÂëÔÚÒýÍË֮ǰ¶¼´ôÔÚÂÒÐò»º´æÖÐ(ROB)¡£ ROB¿ÉÒÔÈÝÄÉ40Ìõ΢Âë¡£ Õâ¾ÍÏÞÖÆÁËÔÚ³ý·¨µÈÂýÖ¸ÁîµÄ´óÑÓ³ÙÆÚ¼ä¿ÉÒÔÖ´ÐеÄÖ¸ÁîÊý¡£ ÔÚ³ý·¨Íê³É֮ǰ£¬ROB»á´óÁ¿³äÈûÖ´ÐйýºóµÈ´ýÒýÍ˵Ä΢Â룬¶øÖ»ÓÐÔÚ³ý·¨Íê³É²¢ÒýÍ˺ó£¬ÄÇЩºóÀ´²¢ÐеÄ΢Âë²Å¿ªÊ¼ÒýÍË£¬ÒòΪÒýÍËÊÇÓÐÐò½øÐеġ£

ÔÚÔ¤²â·ÖÖ§"Ͷ»ú"Ö´ÐÐ(µÚ22ÕÂ)µÄÇé¿öÏ£¬ÔÚÈ·ÈÏ·ÖÖ§Ô¤²âÕýÈ·ÒÔǰÄÇЩ"Ͷ»ú"Ö´ÐеÄ΢Âë²»ÄÜÒýÍË¡£ Èç¹û·¢ÏÖÔ¤²â½á¹ûÊÇ´íÎóµÄ£¬ÄÇô"Ͷ»ú"Ö´ÐйýµÄ΢Âë²»ÒýÍËÁË£¬È«±»·ÏÆú¡£

ÕâЩָÁî²»Äܱ»"Ͷ»ú"Ö´ÐÐ:ÄÚ´æÐ´£¬IN£¬OUTºÍÐòÁл¯µÄÖ¸Áî¡£

 

19. ²¿·ÖÑÓ³Ù(PPro£¬PIIºÍPIII)

19.1 ²¿·Ö¼Ä´æÆ÷ÑÓ³Ù

µ±Äã¶ÔÒ»¸ö32λ¼Ä´æÆ÷µÄ²¿·Öд£¬²»¾Ãºó¶Á¸ü´óµÄÒ»²¿·Ö»òÕû¸ö£¬²¿·Ö¼Ä´æÆ÷ÑÓ³Ù½«·¢Éú¡£ ±ÈÈç:

        MOV AL£¬ BYTE PTR [M8]
        MOV EBX£¬ EAX ¡¡¡¡¡¡¡¡¡¡; ²¿·Ö¼Ä´æÆ÷ÑÓ³Ù

ÑÓ³ÙÊÇ5-6¸öʱÖÓ¡£ ÀíÓÉÊÇÒ»¸öÁÙʱ¼Ä´æÆ÷Òѱ»·ÖÅ䏸AL(ʹËü¶ÀÁ¢ÓÚAH)£¬ÔÚÖ´Ðе¥Ôª°ÑALµÄÖµÓëEAXÆäÓಿ·ÖµÄÖµ×éºÏÆðÀ´½øÐжÁÒÔǰ£¬±ØÐëµÈ´ýALд²Ù×÷µÄÒýÍË¡£ ͨ¹ý¸Ä±ä´úÂë±ÜÃâÑÓ³Ù:

¡¡¡¡¡¡¡¡MOVZX EBX£¬ BYTE PTR [MEM8]
¡¡¡¡¡¡¡¡AND EAX£¬ 0FFFFFF00h
¡¡¡¡¡¡¡¡OR EBX£¬ EAX

µ±È»Ò²¿ÉÒÔÔڼĴæÆ÷µÄ²¿·Öд²Ù×÷Ö®ºó²åÈëһЩÆäËüÖ¸ÁîÀ´±ÜÃâÕâÖÖÑÓ³Ù£¬ÕâÑùÔÚÄã¶ÁÕû¸ö¼Ä´æÆ÷֮ǰ¿ÉÒÔÓгä·Öʱ¼äÒýÍË¡£

Ö»ÒªÄãÔÚ´úÂëÖлìºÏʹÓÃÁ˲»Í¬µÄÊý¾Ý³ß´ç(8£¬16ºÍ32λ)£¬Äã¾ÍҪעÒâµ½²¿·ÖÑÓ³Ù:

¡¡¡¡¡¡¡¡ MOV BH£¬ 0
  ¡¡¡¡¡¡ADD BX£¬ AX ¡¡¡¡¡¡¡¡; ÑÓ³Ù
¡¡¡¡¡¡¡¡INC EBX ¡¡¡¡¡¡¡¡¡¡¡¡; ÑÓ³Ù

Èç¹ûÊÇÏÈдÁË´óµÄ²¿·Ö»òÕû¸ö¼Ä´æÆ÷£¬È»ºóÔÙ¶Á²¿·Ö¼Ä´æÆ÷Ôò²»»áÓÐÑÓ³Ù:

¡¡¡¡¡¡¡¡MOV EAX£¬ [MEM32]
¡¡¡¡¡¡¡¡ADD BL£¬ AL ¡¡¡¡¡¡¡¡; ÎÞÑÓ³Ù
¡¡¡¡¡¡¡¡ADD BH£¬ AH ¡¡¡¡¡¡¡¡; ÎÞÑÓ³Ù
¡¡¡¡¡¡¡¡MOV CX£¬ AX ¡¡¡¡¡¡¡¡; ÎÞÑÓ³Ù
¡¡¡¡¡¡¡¡MOV DX£¬ BX ¡¡¡¡¡¡¡¡; ÑÓ³Ù

±ÜÃⲿ·Ö¼Ä´æÆ÷ÑÓ³ÙµÄ×î¼òµ¥µÄ·½·¨ÊÇÒ»Ö±ÓÃÕû¸ö¼Ä´æÆ÷¡ª¡ªÔÚ¶ÁСµÄÄÚ´æ²Ù×÷ÊýʱÓÃMOVZX»òMOVSX¡£ ÕâЩָÁîÔÚPPro£¬PIIºÍPIIIÉϺܿ죬µ«ÔÚÔçÆÚµÄ´¦ÀíÆ÷ÉÏÂý¡£ÒªÔÚËùÓд¦ÀíÆ÷ÉÏÔËÐпìµÃÏë¸öÕÛÖеİ취¡£ ¿ÉÒÔ°ÑMOVZX EAX£¬BYTE PTR [M8]Ìæ»»³ÉÈçÏÂÖ¸Á

¡¡¡¡¡¡¡¡XOR EAX£¬ EAX
¡¡¡¡¡¡¡¡MOV AL£¬ BYTE PTR [M8]

ÒªÖªµÀ£¬ÎªÁ˱ÜÃâÒÔºó¶ÁEAXÔì³ÉµÄ²¿·Ö¼Ä´æÆ÷ÑÓ³Ù£¬PPro£¬PIIºÍPIIIרÃÅΪ´ËÀàÖ¸Áî×éºÏ×öÁËÒ»¼þÌØÊâµÄÊ£¬Ëü²ÉÈ¡µÄ¼¼ÇɾÍÊǵ±Ò»¸ö¼Ä´æÆ÷Óë×ÔÉíÒì»òµÄʱºò¼Ä´æÆ÷Ö±½Ó±»¼ÇΪÇåÁã¡£ ´¦ÀíÆ÷¼ÇסEAXµÄ¸ß24λÊÇÁ㣬Òò´Ë±ÜÃâÁ˲¿·ÖÑÓ³Ù¡£ Õâ¸ö»úÖÆÖ»ÔÚÈçϵÄ×éºÏ¹¤×÷£º

¡¡¡¡¡¡¡¡XOR EAX£¬ EAX
¡¡¡¡¡¡¡¡MOV AL£¬ 3¡¡
¡¡¡¡¡¡¡¡MOV EBX£¬ EAX ; ÎÞÑÓ³Ù

¡¡¡¡¡¡¡¡XOR AH£¬ AH
¡¡¡¡¡¡¡¡MOV AL£¬ 3
¡¡¡¡¡¡¡¡MOV BX£¬ AX ; ÎÞÑÓ³Ù

¡¡¡¡¡¡¡¡XOR EAX£¬ EAX
¡¡¡¡¡¡¡¡MOV AH£¬ 3
¡¡¡¡¡¡¡¡MOV EBX£¬ EAX ; ÑÓ³Ù

¡¡¡¡¡¡¡¡SUB EBX£¬ EBX
¡¡¡¡¡¡¡¡MOV BL£¬ DL
¡¡¡¡¡¡¡¡MOV ECX£¬ EBX ; ÎÞÑÓ³Ù

¡¡¡¡¡¡¡¡MOV EBX£¬ 0
¡¡¡¡¡¡¡¡MOV BL£¬ DL
¡¡¡¡¡¡¡¡MOV ECX£¬ EBX ; ÑÓ³Ù

¡¡¡¡¡¡¡¡MOV BL£¬ DL
¡¡¡¡¡¡¡¡XOR EBX£¬ EBX ¡¡¡¡; ÎÞÑÓ³Ù

ͨ¹ýÒ»¸ö¼Ä´æÆ÷ÓëËü×ÔÉíÏà¼õÇåÁãÓëXORµÄ¹¤×÷·½Ê½Ïàͬ£¬µ«ÓÃMOVÖ¸ÁîÇåÁãÔòÎÞ·¨×èÖ¹ÑÓ³Ù·¢Éú¡£

Äã¿ÉÒÔÔÚÑ­»·Íâдһ¸öXORÖ¸Á

¡¡¡¡¡¡¡¡XOR EAX£¬ EAX
¡¡¡¡¡¡¡¡MOV ECX£¬ 100
¡¡LL: ¡¡MOV AL£¬ [ESI]
¡¡¡¡¡¡¡¡MOV [EDI]£¬ EAX ¡¡; ÎÞÑÓ³Ù
¡¡¡¡¡¡¡¡INC ESI
¡¡¡¡¡¡¡¡ADD EDI£¬ 4
¡¡¡¡¡¡¡¡DEC ECX
¡¡¡¡¡¡¡¡JNZ LL

ֻҪûÓÐÖжϣ¬Ô¤²âʧ°Ü»òÆäËüÐòÁл¯Ê¼þ·¢Éú£¬´¦ÀíÆ÷»á¼ÇסEAXµÄ¸ß24λÊÇ0¡£

ÔÚµ÷ÓÃÒ»¸ö¿ÉÄÜ»áPUSHÕû¸ö¼Ä´æÆ÷µÄ×Ó¹ý³Ì֮ǰ£¬ÄãÓ¦¸Ã¼ÇµÃ¡°Ñ¹ÖÆ¡±ÈκÎǰ²»¾ÃÓùýµÄ²¿·Ö¼Ä´æÆ÷£º

¡¡¡¡¡¡¡¡ADD BL£¬ AL
¡¡¡¡¡¡¡¡MOV [MEM8]£¬ BL
¡¡¡¡¡¡¡¡XOR EBX£¬ EBX ¡¡¡¡¡¡; Ñ¹ÖÆBL
¡¡¡¡¡¡¡¡CALL _HighLevelFunction

´ó¶àÊý¸ß¼¶ÓïÑÔ»áÔÚÒ»¸ö¹ý³Ì¿ªÊ¼µÄµØ·½PUSH EBX£¬Èç¹ûÏñÉÏÃæÕâÀàÇé¿öÄãûÓÐÑ¹ÖÆBL£¬»á²úÉú²¿·Ö¼Ä´æÆ÷ÑÓ³Ù¡£

ÓÃXORÇåÁãÒ»¸ö¼Ä´æÆ÷µÄ·½·¨²¢²»ÄÜ´òÆÆËü¶ÔÇ°ÃæÖ¸ÁîµÄÒÀÀµ£º

¡¡¡¡¡¡¡¡DIV EBX
¡¡¡¡¡¡¡¡MOV [MEM]£¬ EAX
¡¡¡¡¡¡¡¡MOV EAX£¬ 0 ¡¡¡¡¡¡¡¡; ´òÆÆÒÀÀµ
¡¡¡¡¡¡¡¡XOR EAX£¬ EAX ¡¡¡¡¡¡; ×èÖ¹²¿·Ö¼Ä´æÆ÷ÑÓ³Ù
¡¡¡¡¡¡¡¡MOV AL£¬ CL
¡¡¡¡¡¡¡¡ADD EBX£¬ EAX

Á½´Î°ÑEAXÉèΪ0¿´ÉÏÈ¥¶àÓ࣬µ«ÒªÖªµÀÈç¹ûûÓÐMOV EAX£¬0£¬ÄÇôºóÐøµÄÖ¸Áî±ØÐëµÈ´ý³ý·¨ÂýÖ¸Áî½áÊø£¬Ã»ÓÐXOR EAX£¬EAXÔò»á²úÉú²¿·Ö¼Ä´æÆ÷ÑÓ³Ù¡£

FNSTSW AXÖ¸ÁîÊÇÌØÊâµÄ£ºÔÚ32λģʽÏÂËüµÄÐÐΪ¾ÍºÍдÕû¸öEAXÒ»Ñù¡£ÊÂʵÉÏ£¬ÔÚ32λģʽÏÂËü×öµÄÊÂÇéÀàËÆÓÚ£º
¡¡¡¡¡¡AND EAX£¬0FFFF0000h / FNSTSW TEMP / OR EAX£¬TEMP
Òò´Ë32λģʽÏ£¬ÄãÔÚ¸ÃÖ¸ÁîºóÃæ¶ÁEAX²»»á·¢Éú²¿·Ö¼Ä´æÆ÷ÑÓ³Ù£º

¡¡¡¡¡¡ FNSTSW AX / MOV EBX£¬EAX ¡¡¡¡; Ö»ÔÚ16λģʽÏÂÓÐÑÓ³Ù
¡¡¡¡¡¡ MOV AX£¬0 / FNSTSW AX ¡¡¡¡¡¡; Ö»ÔÚ32λģʽÏÂÓÐÑÓ³Ù

19.2 ²¿·Ö±êÖ¾ÑÓ³Ù

±êÖ¾¼Ä´æÆ÷Ò²»áÒýÆð²¿·Ö¼Ä´æÆ÷ÑÓ³Ù£º
¡¡¡¡¡¡¡¡
¡¡¡¡¡¡¡¡ CMP EAX£¬ EBX
¡¡¡¡¡¡¡¡INC ECX
¡¡¡¡¡¡¡¡JBE XX ; ²¿·Ö±êÖ¾ÑÓ³Ù

JBEÖ¸Áî¼È¶Á½øÎ»±êÖ¾(CF)ÓÖ¶ÁÁã±êÖ¾(ZF)¡£ ÒòΪINCÖ¸ÁîÐÞ¸ÄZF£¬²»ÐÞ¸ÄCF£¬ÔÚJBEÖ¸Áî½áºÏCF(CMPÐÞ¸ÄCF)ºÍZF(INCÐÞ¸ÄZF)֮ǰ£¬Ëü±ØÐëµÈ´ýǰÁ½ÌõÖ¸ÁîµÄÒýÍË¡£ÕâÖÖÇéÐÎÓëÆä˵ÊǹÊÒâ½øÐбêÖ¾µÄ×éºÏ£¬²»Èç˵¿ÉÄÜÊÇÒ»¸öbug¡£ ¸ÄÕýbugµÄ·½·¨ÊÇÓÃADD ECX£¬1È¡´úINC ECX¡£ ÀàËÆÒýÆð²¿·Ö±êÖ¾ÑÓ³ÙbugÊÇSAHF / JL XX¡£ JLÖ¸Áî²âÊÔ·ûºÅ±êÖ¾(SF)ºÍÒç³ö±êÖ¾(OF)£¬µ«SAHFÖ¸Áî²»¸Ä±äÒç³ö±êÖ¾¡£ ¸ÄÕýbugµÄ·½·¨ÊÇÓÃJS XXÌæ»»JL XX¡£

³öºõÒâÁϵÄÊÇ(ÓëIntelÊÖ²áÉÏ˵µÄÏà·´)£¬µ±ÄãÔÚÒ»ÌõÐÞ¸ÄÁËһЩ±êÖ¾µÄÖ¸ÁîÖ®ºóÖ»¶ÁһЩûÓÐÐ޸ĹýµÄ±êÖ¾£¬Ò²»á²úÉú²¿·Ö±êÖ¾ÑÓ³Ù£º

¡¡¡¡¡¡¡¡CMP EAX£¬ EBX
¡¡¡¡¡¡¡¡INC ECX
¡¡¡¡¡¡¡¡JC XX ¡¡¡¡¡¡¡¡; ²¿·Ö±êÖ¾ÑÓ³Ù

µ«Ö»¶ÁÐ޸Ĺý±êÖ¾ÔòûÓÐÑÓ³Ù£º

¡¡¡¡¡¡  CMP EAX£¬ EBX
¡¡¡¡¡¡¡¡INC ECX
¡¡¡¡¡¡¡¡JE XX ¡¡¡¡¡¡¡¡; ÎÞÑÓ³Ù

²¿·Ö±êÖ¾ÑÓ³Ù¿ÉÄÜ·¢ÉúÔÚÄÇЩ¶ÁºÜ¶à±ê־λµÄÖ¸ÁîÉÏ£¬Ò²¾ÍÊÇLAHF£¬PUSHF£¬PUSHFD¡£ ÒÔÏÂÖ¸ÁîºóÃæÈô¸úLAHF»òPUSHF(D)»áÓв¿·Ö±êÖ¾ÑÓ³Ù£ºINC£¬ DEC£¬ TEST£¬ λ ²âÊÔ£¬ λɨÃ裬 CLC£¬ STC£¬ CMC£¬ CLD£¬ STD£¬ CLI£¬ STI£¬ MUL£¬ IMULºÍËùÓÐÒÆÎ»¡¢Ñ­»·ÒÆÎ»¡£ ÒÔÏÂÖ¸Áî²»»áÒýÆð²¿·Ö±êÖ¾ÑÓ³Ù£ºAND£¬ OR£¬ XOR£¬ ADD£¬ ADC£¬ SUB£¬ SBB£¬ CMP£¬ NEG¡£ Ææ¹ÖµÄÊÇTESTºÍANDµÄÐÐΪ²»Ò»ÑùµÄ¡ª¡ª¾¡¹Ü¸ù¾Ý¶¨Ò壬ËüÃÇȷʵ¶Ô±êÖ¾¼Ä´æÆ÷×öÁËͬÑùµÄÊÂÇé¡£ Äã¿ÉÒÔÓÃSETccÖ¸ÁîÈ¡´úLAHF»òPUSHF(D)À´´¢´æÒ»¸ö±êÖ¾£¬±ÜÃâÑÓ³Ù¡£

±ÈÈç:

¡¡¡¡¡¡¡¡INC EAX / PUSHFD ; ÑÓ³Ù
¡¡¡¡¡¡¡¡ADD EAX£¬1 / PUSHFD ; ÎÞÑÓ³Ù

¡¡¡¡¡¡¡¡SHR EAX£¬1 / PUSHFD ; ÑÓ³Ù
¡¡¡¡¡¡¡¡SHR EAX£¬1 / OR EAX£¬EAX / PUSHFD ; ÎÞÑÓ³Ù

¡¡¡¡¡¡¡¡TEST EBX£¬EBX / LAHF ; ÑÓ³Ù
¡¡¡¡¡¡¡¡AND EBX£¬EBX / LAHF ; ÎÞÑÓ³Ù
¡¡¡¡¡¡¡¡TEST EBX£¬EBX / SETZ AL ; ÎÞÑÓ³Ù

¡¡¡¡¡¡¡¡CLC / SETZ AL ; ÑÓ³Ù
¡¡¡¡¡¡¡¡CLD / SETZ AL ; ÎÞÑÓ³Ù

²¿·Ö±êÖ¾Ñӳٵijͷ£´óÔ¼ÊÇ4¸öʱÖÓ¡£

19£®3 ÒÆÎ»ºÍÑ­»·ÒÆÎ»ºóµÄ±êÖ¾ÑÓ³Ù

ÔÚÒÆÎ»»òÑ­»·ÒÆÎ»ºó¶ÁÈÎÒâ±ê־룬»á·¢ÉúÀàËÆ²¿·Ö±êÖ¾ÑÓ³ÙµÄÑÓ³Ù£¬³ýÁËÒÆÎ»ºÍÑ­»·ÒÆÎ»µÄλÊýÊÇ1ÇÒΪ¼òÒ׸ñʽ(²»ÓüÆÊýÆ÷)µÄÇé¿ö:

¡¡¡¡¡¡¡¡SHR EAX£¬1 / JZ XX ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡; ÎÞÑÓ³Ù
¡¡¡¡¡¡¡¡SHR EAX£¬2 / JZ XX ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡; ÑÓ³Ù
¡¡¡¡¡¡¡¡SHR EAX£¬2 / OR EAX£¬EAX / JZ XX  ; ÎÞÑÓ³Ù

¡¡¡¡¡¡¡¡SHR EAX£¬5 / JC XX ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡; ÑÓ³Ù
¡¡¡¡¡¡¡¡SHR EAX£¬4 / SHR EAX£¬1 / JC XX ¡¡; ÎÞÑÓ³Ù

¡¡¡¡¡¡¡¡SHR EAX£¬CL / JZ XX ¡¡¡¡¡¡¡¡¡¡; ÄÄÅÂCL=1Ò²ÓÐÑÓ³Ù
¡¡¡¡¡¡¡¡SHRD EAX£¬EBX£¬1 / JZ XX ¡¡¡¡¡¡; ÑÓ³Ù
¡¡¡¡¡¡¡¡ROL EBX£¬8 / JC XX ¡¡¡¡¡¡¡¡¡¡¡¡; ÑÓ³Ù

ÕâÖÖÀàÐ͵ÄÑÓ³Ù´óÔ¼ÊÇ4¸öʱÖÓ¡£

19£®4 ²¿·ÖÄÚ´æÑÓ³Ù

²¿·ÖÄÚ´æÑÓ³ÙÓ벿·Ö¼Ä´æÆ÷ÑÓ³ÙÓÐЩÏàÏñ¡£µ±Äã¶Ôͬһ¸öÄÚ´æµØÖ·£¬»ìºÏ²»Í¬³ß´çµÄÊý¾Ý½øÐвÙ×÷ʱ·¢Éú£º

¡¡¡¡¡¡¡¡MOV BYTE PTR [ESI]£¬ AL
¡¡¡¡¡¡¡¡MOV EBX£¬ DWORD PTR [ESI] ; ²¿·ÖÄÚ´æÑÓ³Ù

ÔÚ´Ë£¬ÒòΪ´¦ÀíÆ÷±ØÐë°ÑALд»ØµÄ1¸ö×ֽںͺóÃæ3¸öÔ­À´ÔÚÄÚ´æÖеÄ×Ö½Ú×éºÏ£¬ÒԵõ½ÐèÒª¶Á½øEBXµÄ4¸ö×Ö½Ú£¬ËùÒԻᷢÉúÑÓ³Ù¡£ ³Í·£´óÔ¼ÊÇ7-8¸öʱÖÓ¡£

ºÍ²¿·Ö¼Ä´æÆ÷ÑÓ³Ù²»Í¬µÄÊÇ£¬µ±Äã°ÑÒ»¸ö´ó³ß´çµÄ²Ù×÷ÊýдÈëÄڴ棬Ȼºó¶ÁÆäÖеÄÒ»²¿·ÖÇÒÕⲿ·ÖµÄÆðʼµØÖ·ÓëÔ­À´²»Í¬Ê±£¬Ò²»áÓв¿·ÖÄÚ´æÑÓ³Ù£º

¡¡¡¡¡¡¡¡MOV DWORD PTR [ESI]£¬ EAX
¡¡¡¡¡¡¡¡MOV BL£¬ BYTE PTR [ESI] ¡¡; ÎÞÑÓ³Ù
¡¡¡¡¡¡¡¡MOV BH£¬ BYTE PTR [ESI+1] ; ÑÓ³Ù

Äã¿ÉÒÔͨ¹ý°Ñ×îºóÒ»ÐиijÉMOV BH£¬AHÀ´±ÜÃâÑÓ³Ù£¬µ«ÕâÖÖ½â¾ö·½·¨ÔÚÒÔÏÂÇé¿öÊÇ×ö²»µ½µÄ£º

¡¡¡¡¡¡¡¡FISTP QWORD PTR [EDI]
¡¡¡¡¡¡¡¡MOV EAX£¬ DWORD PTR [EDI]
¡¡¡¡¡¡¡¡MOV EDX£¬ DWORD PTR [EDI+4] ; ÑÓ³Ù

ÓÐȤµÄÊÇ£¬ÔÚдºóÈç¹û¶ÁÒ»¸öÍêÈ«²»Í¬µÄµØÖ·£¬Ö»ÊÇÅöÇÉÓëдµÄµØÖ·ÔÚ²»Í¬µÄcacheÐÐÓÐÏàͬ×éֵʱ£¬Ò²»áÓв¿·ÖÄÚ´æÑÓ³Ù£º

¡¡¡¡¡¡¡¡MOV BYTE PTR [ESI]£¬ AL
¡¡¡¡¡¡¡¡MOV EBX£¬ DWORD PTR [ESI+4092] ; ÎÞÑÓ³Ù
¡¡¡¡¡¡¡¡MOV ECX£¬ DWORD PTR [ESI+4096] ; ÑÓ³Ù

 

20£®ÒÀÀµ»·(PPro£¬PIIºÍPIII)

Ò»×éÖ¸ÁÆäÖÐÿһÌõÖ¸ÁîÒÀÀµÓÚǰһÌõÖ¸ÁîµÄ½á¹û£¬³ÆÕâ×éÖ¸ÁîÊÇÒ»¸öÒÀÀµ»·¡£ ³¤µÄÒÀÀµ»·Ó¦¸Ã¾¡¿ÉÄܱÜÃ⣬ÒòΪËü×èÖ¹ÁËÂÒÐòÖ´ÐкͲ¢ÐÐÖ´ÐС£

±ÈÈç:

¡¡¡¡¡¡¡¡MOV EAX£¬ [MEM1]
¡¡¡¡¡¡¡¡ADD EAX£¬ [MEM2]
¡¡¡¡¡¡¡¡ADD EAX£¬ [MEM3]
¡¡¡¡¡¡¡¡ADD EAX£¬ [MEM4]
¡¡¡¡¡¡¡¡MOV [MEM5]£¬ EAX

ÔÚÕâ¸öÀý×ÓÖУ¬Ã¿ÌõADDÖ¸Áî²úÉú2Ìõ΢Â룬һÌõ´ÓÄÚ´æÖжÁ(¶Ë¿Ú2)£¬Ò»Ìõ×ö¼Ó·¨(¶Ë¿Ú0»ò1)¡£ ¶ÁÄÚ´æµÄ΢Âë¿ÉÒÔÂÒÐòÖ´ÐУ¬µ«¸÷Ìõ¼Ó·¨Î¢Âë¶¼±ØÐëµÈ´ýÇ°ÃæµÄ¼Ó·¨Î¢ÂëÍê³É¡£ Õâ¸öÒÀÀµ»·Ö´ÐеÄʱ¼ä²¢²»³¤£¬ÒòΪÿ¸ö¼Ó·¨Ö»ÐèÒªÒ»¸öʱÖÓ¡£ µ«Èç¹ûÄãÓÐÖîÈç³Ë·¨ÕâÑùµÄÂýÖ¸ÁÉõÖÁ¸ü»µµÄ³ý·¨ÐγÉÒÀÀµ»·£¬ÄÇôÃ÷ÏÔÄãÓ¦¸Ã×öһЩÊÂÇéÀ´´òÆÆÒÀÀµ»·¡£ ¿ÉÒÔÓöà¸öÀÛ¼ÓÆ÷ʵÏÖÕâ¸öÄ¿µÄ£º

¡¡¡¡¡¡¡¡MOV EAX£¬ [MEM1] ; ¿ªÊ¼µÚÒ»¸ö»·
¡¡¡¡¡¡¡¡MOV EBX£¬ [MEM2] ; ÓÃÁíÒ»¸öÀÛ¼ÓÆ÷¿ªÊ¼µÚ¶þ¸ö»·
¡¡¡¡¡¡¡¡IMUL EAX£¬ [MEM3]
¡¡¡¡¡¡¡¡IMUL EBX£¬ [MEM4]
¡¡¡¡¡¡¡¡IMUL EAX£¬ EBX ; ×îºó½áºÏÁ½¸ö»·
¡¡¡¡¡¡¡¡MOV [MEM5]£¬ EAX

ÕâÀµÚ¶þ¸ö³Ë·¨Ö¸Áî¿ÉÒÔÔÚµÚÒ»¸ö½áÊøÖ®Ç°¿ªÊ¼¡£ ÒòΪ³Ë·¨Ö¸Á·Ñ4¸öÖÜÆÚÇÒÊÇÍêÈ«Á÷Ë®»¯µÄ£¬ËùÒÔÄã×î¶à¿ÉÉè4¸öÀÛ¼ÓÆ÷¡£

³ý·¨ÊÇ·ÇÁ÷Ë®»¯µÄ£¬Òò´ËÄã²»ÄÜΪ³ý·¨ÒÀÀµ»·×öÀàËÆµÄÊÂÇé¡£µ±È»£¬Äã¿ÉÒÔÏȽ«ËùÓеijýÊýÏà³Ë£¬×îºóÔÙ×öÒ»¸ö³ý·¨¡£

¸¡µãÖ¸ÁîµÄÑÓ³Ù±ÈÕûÐÍÖ¸Áî´ó£¬Òò´ËÄãÓ¦¸ÃÃ÷È·µØ´òÆÆ³¤µÄ¸¡µãÒÀÀµ»·£º

¡¡¡¡¡¡¡¡FLD [MEM1] ; ¿ªÊ¼µÚÒ»¸ö»·
¡¡¡¡¡¡¡¡FLD [MEM2] ; ÓÃÁíÒ»¸öÀÛ¼ÓÆ÷¿ªÊ¼µÚ¶þ¸ö»·
¡¡¡¡¡¡¡¡FADD [MEM3]
¡¡¡¡¡¡¡¡FXCH
¡¡¡¡¡¡¡¡FADD [MEM4]
¡¡¡¡¡¡¡¡FXCH
¡¡¡¡¡¡¡¡FADD [MEM5]
¡¡¡¡¡¡¡¡FADD ; ×îºó°Ñ»·½áºÏ
¡¡¡¡¡¡¡¡FSTP [MEM6]

ÄãÐèÒªºÜ¶àFXCHÖ¸Á²»Óõ£ÐÄ£¬ËüÃǺܡ°±ãÒË¡±¡£ ¾¡¹ÜÔÚRAT£¬ROBºÍÒýÍËÕ¾ÖÐFXCHÖ¸ÁîÒ²±»¼ÆÎª1Ìõ΢Â룬µ«ÔÚRATÖÐFXCHÖ¸Áîͨ¹ý¼Ä´æÆ÷ÖØÃüÃû±»¡°»¯½â¡±£¬´Ó¶ø²»»á¸øÖ´Ðж˿ÚÔì³ÉÈκθºÔØ¡£

Èç¹ûÒÀÀµ»·ºÜ³¤£¬ÄãÐèÒªÉè3¸öÀÛ¼ÓÆ÷£º

¡¡¡¡¡¡¡¡FLD [MEM1] ; ¿ªÊ¼µÚÒ»¸ö»·
¡¡¡¡¡¡¡¡FLD [MEM2] ; ¿ªÊ¼µÚ¶þ¸ö»·
¡¡¡¡¡¡¡¡FLD [MEM3] ; ¿ªÊ¼µÚÈý¸ö»·
¡¡¡¡¡¡¡¡FADD [MEM4] ; µÚÈý¸ö»·
¡¡¡¡¡¡¡¡FXCH ST(1)
¡¡¡¡¡¡¡¡FADD [MEM5] ; µÚ¶þ¸ö»·
¡¡¡¡¡¡¡¡FXCH ST(2)
¡¡¡¡¡¡¡¡FADD [MEM6] ; µÚÒ»¸ö»·
¡¡¡¡¡¡¡¡FXCH ST(1)
¡¡¡¡¡¡¡¡FADD [MEM7] ; µÚÈý¸ö»·
¡¡¡¡¡¡¡¡FXCH ST(2)
¡¡¡¡¡¡¡¡FADD [MEM8] ; µÚ¶þ¸ö»·
¡¡¡¡¡¡¡¡FXCH ST(1)
¡¡¡¡¡¡¡¡FADD ¡¡¡¡¡¡¡¡; ½áºÏ1¡¢3»·
¡¡¡¡¡¡¡¡FADD ¡¡¡¡¡¡¡¡; ÓëµÚ2¸ö»·½áºÏ
¡¡¡¡¡¡¡¡FSTP [MEM9]

²»Òª°ÑÖмä½á¹û´æÈëÄÚ´æºóÂíÉ϶Á³ö£º

¡¡¡¡¡¡¡¡MOV [TEMP]£¬ EAX
¡¡¡¡¡¡¡¡MOV EBX£¬ [TEMP]

ÊÔͼÔÚÇ°ÃæµÄдÄÚ´æ²Ù×÷Íê³É֮ǰ´ÓÏàͬµØÖ·¶Á»á´øÀ´³Í·£¡£ ¾ÍÏñÉÏÃæµÄÀý×ÓÄÇÑù¡£¿ÉÒÔ°Ñ×îºóÒ»ÌõÖ¸Áî¸Ä³ÉMOV EBX£¬EAX»òÔÚÁ½ÌõÖ¸ÁîÖ®¼ä²åÈëһЩÆäËüÖ¸Áî¡£

ÓÐÒ»ÖÖÇéÐÎʹÄã²»¿É±ÜÃâµØÒª°ÑÖмä½á¹û´æÈëÄڴ棬¼´´ÓÒ»¸öÕûÐͼĴæÆ÷´«ÊäÊý¾Ýµ½Ò»¸ö¸¡µã¼Ä´æÆ÷£¬·´Ö®ÒàÈ»¡£ ±ÈÈ磺

¡¡¡¡¡¡¡¡MOV EAX£¬ [MEM1]
¡¡¡¡¡¡¡¡ADD EAX£¬ [MEM2]
¡¡¡¡¡¡¡¡MOV [TEMP]£¬ EAX
¡¡¡¡¡¡¡¡FILD [TEMP]

Èç¹ûÔÚTEMPµÄд²Ù×÷ºÍTEMPµÄ¶Á²Ù×÷Ö®¼äÄãûÓÐÆäËüÖ¸Áî¿É²åÈ룬ÄÇôÄã¿ÉÒÔ¿¼ÂÇÓø¡µã¼Ä´æÆ÷È¡´úEAX:

¡¡¡¡¡¡¡¡FILD [MEM1]
¡¡¡¡¡¡¡¡FIADD [MEM2]

Á¬ÐøµÄÌø×ª¡¢µ÷Óúͷµ»ØÒ²¿ÉÒÔ¿´×÷ÊÇÒÀÀµ»·¡£ ¶ÔÓÚÕâЩָÁÍÌÍÂÁ¿ÊÇÿ2¸öʱÖÓÖÜÆÚ1¸ö×ªÒÆÖ¸Áî¡£ Òò´ËÍÆ¼öÄãÔÚÕâÐ©×ªÒÆÖ¸ÁîÖÐ¼ä¸ø´¦ÀíÆ÷һЩÆäËüµÄÊÂÇé×ö¡£



21. ѰÕÒÆ¿¾±(PPro£¬PIIºÍPIII)

ÔÚÕâЩ´¦ÀíÆ÷ÉÏ×÷´úÂëÓÅ»¯Ê±£¬·ÖÎöÆ¿¾±µÄÔ­ÒòºÜÖØÒª¡£ µ±ÓÐÒ»¸öÒªº¦µÄÆ¿¾±´æÔÚʱ£¬»¨Ê±¼äÓÅ»¯²»ÊÇÆ¿¾±µÄ·½ÃæÊÇûÓÐÒâÒåµÄ¡£

Èç¹ûÄã¹À¼Æµ½Ö¸ÁîcacheʧЧ£¬ÄÇôÄãÓ¦¸ÃÖØ×é´úÂ룬½«ÓõÃ×î¶àµÄ²¿·Ö·ÅÔÚÒ»Æð¡£

Èç¹ûÄã¹À¼ÆÓкܶà´ÎÊý¾ÝcacheʧЧ£¬ÄÇô²»ÒªÔÙÏëÆäËüÊÂÇéÁË£¬¼¯Öо«Á¦ÓÚÖØ×éÊý¾Ý¼õÉÙcacheʧЧµÄ´ÎÊý£¨µÚ7Õ£©£¬ÇÒÒª±ÜÃâÔÚ¶ÁÊý¾ÝcacheʧЧºó´æÔÚÒ»¸ö³¤µÄÒÀÀµ»·£¨µÚ20Õ£©¡£

Èç¹ûÄãÓкܶà³ý·¨£¬ÄÇôÊÔ׿õÉÙËüÃÇ£¨µÚ27.2½Ú£©£¬ÇÒ±£Ö¤´¦ÀíÆ÷ÔÚ×ö³ý·¨ÆÚ¼äÓÐÆäËüÊÂÇé×ö¡£

ÒÀÀµ»·ÓзÁ°­ÂÒÐòÖ´ÐеÄÇãÏò£¨µÚ20Õ£©£¬ÊÔ×Å´òÆÆ³¤µÄÒÀÀµ»·£¬ÓÈÆäÊÇÆäÖаüÀ¨Ïñ³Ë·¨¡¢³ý·¨ºÍ¸¡µãÖ¸ÁîÕâÑùµÄÂýÖ¸ÁîµÄʱºò¡£

Èç¹ûÄãÓÐÐí¶àÌø×ª¡¢µ÷Óᢻò·µ»Ø£¬ÓÈÆäÊÇÓдóÁ¿²»´óºÃÔ¤²âµÄ×ªÒÆÖ¸Áîʱ£¬ÊÔ×űÜÃâһЩ£¬¿ÉÄܵϰÓÃÌõ¼þ´«Êä´úÌæÌõ¼þÌø×ª£¬Óúê´úÌæÐ¡µÄ¹ý³Ì£¨µÚ22.3½Ú£©¡£

Èç¹ûÄã»ìÓÃÁ˲»Í¬³ß´çµÄÊý¾Ý£¨8£¬16ºÍ32룩£¬ÄÇôÁôÒⲿ·ÖÑÓ³Ù¡£ Èç¹ûÓÃÁËPUSHF»òLAHFÖ¸ÁÄÇôÁôÒⲿ·Ö±êÖ¾ÑÓ³Ù¡£ ±ÜÃâÔÚÒÆÎ»»òÑ­»·ÒÆÎ»Êý´óÓÚ1µÄÖ¸Áîºó²âÊÔ±ê־루µÚ19Õ£©¡£

Èç¹ûÄãÒÔÒ»¸öʱÖÓ3Ìõ΢ÂëµÄÍÌÍÂÁ¿ÎªÄ¿±ê£¬ÄÇôҪעÒâȡָÁîºÍÖ¸Áî½âÂë¿ÉÄܵÄÑÓ³Ù£¨µÚ14Õº͵Ú15Õ£©£¬ÌرðÊÇÔÚСѭ»·ÖС£

Ò»¸öʱÖÓÖÜÆÚ×î¶à¶Á2¸öÓÀ¾Ã¼Ä´æÆ÷µÄÏÞÖÆ¿ÉÄÜ»áʹһ¸öʱÖÓµÄ΢ÂëÍÌÍÂÁ¿¼õΪ3ÌõÒÔÏ£¨µÚ16.2½Ú£©¡£ Èç¹ûÄã¾­³£ÔڼĴæÆ÷д²Ù×÷µÄ4¸ö¶àʱÖÓÒÔºó¶Á¸Ã¼Ä´æÆ÷£¬ÕâÖÖÏÞÖÆ¿ÉÄܻᷢÉú¡£ ±ÈÈ磬Äã¾­³£ÓÃÖ¸Õë¶ÔÊý¾ÝѰַ£¬µ«ºÜÉÙÐÞ¸ÄÕâЩָÕë¡£

Ò»¸öʱÖÓ3Ìõ΢ÂëµÄÍÌÍÂÁ¿µÄ±ØÒªÌõ¼þÊǸ÷¸öÖ´Ðж˿ڵõ½Î¢ÂëÊý²»Äܳ¬¹ý×ÜÊýµÄÈý·ÖÖ®Ò»£¨µÚ17Õ£©¡£

ÒýÍËÕ¾¿ÉÒÔÔÚÒ»¸öʱÖÓ´¦Àí3Ìõ΢Â룬µ«¶ÔÓÚ´¦Àí·¢ÉúµÄÌø×ªÖ¸Áî²»ÊǺܸßЧ£¨µÚ18Õ£©¡£



22. ·ÖÖ§ºÍÌø×ª(ËùÓд¦ÀíÆ÷)

±¼ÌÚ¼Ò×åµÄ´¦ÀíÆ÷ÊÔͼԤ²âÌø×ªµÄλÖã¬Ìõ¼þÌø×ªÊÇ·ñ·¢Éú¡£Èç¹ûÔ¤²âÕýÈ·£¬Í¨¹ýÔÚÌø×ª·¢Éú֮ǰ¶ÁÈ¡ºóÐøÖ¸Áî½øÈë¹ÜµÀ²¢½âÂ룬Äܹ»½Úʡһ´ó±Êʱ¼ä£»Èç¹ûÔ¤²âʧ°Ü£¬¹ÜµÀ±»ÇåÏ´£¬»¨µÄ´ú¼ÛÈ¡¾öÓڹܵÀµÄ³¤¶È¡£

Ô¤²â»ùÓÚ·ÖÖ§Ä¿±ê»º´æ²¿¼þ(Branch Target Buffer £¬¼ò³Æ BTB )£¬ËüΪÿһ¸ö·ÖÖ§´æÁËÀúÊ·¼Ç¼»òÌø×ªÖ¸ÁʹԤ²â»ùÓÚÿÌõÖ¸ÁîÖ´ÐеÄÀúÊ·¼Ç¼¡£ BTB×éÖ¯µÃÏñÒ»¸ö×éÏàÁªcache£¬ÄÇÀïеıíÏî°´ÕÕÎ±Ëæ»úÌæ»»Ëã·¨·ÖÅä¡£

ΪÁËÓÅ»¯´úÂë£¬ÖØÒªµÄÊÇÒª¼õÉÙÔ¤²âʧ°ÜµÄ´ú¼Û¡£ ÕâÐèÒªºÜºÃµØÀí½â·ÖÖ§Ô¤²âµÄ¹¤×÷»úÖÆ¡£

·ÖÖ§Ô¤²â»úÖÆÔÚÈκεط½¶¼Ã»ÓкܺõØÃèÊö£¬°üÀ¨IntelµÄÊֲᡣ Òò´ËÎÒÕâÀï×öÁËÏêϸµÄÃèÊö¡£ ÕâЩÐÅÏ¢»ùÓÚÎÒµÄÑо¿(ÔÚ PPlain µÄ Karki Jitendra Bahadur µÄ°ïÖúÏÂ)¡£

½ÓÏÂÈ¥£¬ÎÒÒªÓÃÊõÓï"¿ØÖÆ×ªÒÆÖ¸Áî"´úÌæËùÓÐÄܹ»Ê¹ip±ä»¯µÄÖ¸Á°üÀ¨Ìõ¼þ\·ÇÌõ¼þÌø×ª£¬Ö±½Ó\¼ä½ÓÌø×ª£¬½ü\Ô¶£¬Ìø×ª£¬µ÷Ó㬷µ»Ø¡£ ËùÓÐÕâЩָÁî¶¼ÒªÔ¤²â¡£

22.1  PPlainµÄ·ÖÖ§Ô¤²â

PPlainµÄ·ÖÖ§Ô¤²â»úÖÆ±ÈÆäËüÈýÖÖ´¦ÀíÆ÷¸´Ôӵöࡣ ¹ØÓÚÕâ¸ö¿ÎÌ⣬ÔÚIntelÎĵµ»òÆäËüµØ·½µÄÐÅÏ¢Ö±½ÓÎóµ¼¶ÁÕߣ¬¸ù¾ÝÕâЩÎĵµ»áд³ö²»¹»ÀíÏëµÄ´úÂë¡£

22.1.1  BTBµÄ×éÖ¯£¨PPlain£©

PPlainÓÐÒ»¸ö·ÖÖ§Ä¿±ê»º´æ(BTB)£¬ËüÄÜ»º´æ256ÌõÌø×ªÖ¸Áî¡£ ¸ÃBTBÏñÒ»¸ö4·µÄ×éÏàÁªcache£¬Ã¿Â·ÓÐ64Ïî¡£ ÕâÒâζ×ÅBTB²»ÄÜ´¢´æ4¸öÒÔÉÏ×éÖµÏàͬµÄÏî¡£ ºÍÊý¾Ýcache²»Í¬µÄÊÇ£¬BTBÓÃÁËÎ±Ëæ»úÊýÌæ»»Ëã·¨£¬ÕâÒâζ×ÅÒ»¸öÐÂÏî²»Ò»¶¨Ìæ»»¾ßÓÐÏàͬ×éÖµµÄ×î½ü×îÉÙʹÓõÄÏî¡£ ×éÖµµÄ¼ÆËã·½·¨ºóÃæ½éÉÜ¡£ ÿ¸öBTBÏî´æ´¢Ä¿±êÌø×ªµØÖ·ºÍÔ¤²â״̬£¬¿ÉÄÜÓÐËÄÖÖ״̬:

״̬0:Ç¿ÁÒÔ¤ÑÔ²»·¢Éú
״̬1:ÈõÔ¤ÑÔ²»·¢Éú
״̬2:ÈõÔ¤ÑÔ·¢Éú
״̬3:Ç¿ÁÒÔ¤ÑÔ·¢Éú

ÔÚ״̬2»ò3£¬Ò»¸öÌø×ªÖ¸Áî±»Ô¤²âΪ½«Òª·¢Éú£»ÔÚ״̬0»ò1£¬±»Ô¤²âΪ²»·¢Éú¡£ ״̬±ä»¯¾ÍÏñÒ»¸ö2λµÄ¼ÆÊýÆ÷£¬ÔÚ·¢Éúºó£¬×´Ì¬ÖµÔö¼Ó£»ÔÚ²»·¢Éúºó£¬×´Ì¬Öµ¼õÉÙ¡£ ¼ÆÊýÆ÷ÊDZ¥ºÍ¼ÆÊý¶ø²»ÊÇ»·ÈƼÆÊý£¬Òò´Ëµ½ÁË0£¬Ëü²»ÔÙ¼õÉÙ£»µ½ÁË3£¬Ëü²»ÔÙÔö¼Ó¡£ ¿´À´£¬Ó¦¸ÃÔ¤²âµÃÂù×¼£¬ÒòΪҪʹԤ²â½á¹û·¢Éú±ä»¯(±ÈÈçÒÔǰԤÑÔ²»·¢Éú£¬ÏÖÔÚ±ä³ÉÔ¤ÑÔ·¢Éú)£¬·ÖÖ§Ö¸Áî¿ÉÄÜÒªÁ½´Î±³ÀëËüÒÔǰµÄÐÐΪ¡£

È»¶ø£¬¸Ã»úÖÆµÄÒ»´óÈõµãÊÇBTB±íÏî´¦ÓÚ״̬0ÒâζןÃBTB±íÏîÊÇûÓÐÓõġ£ Òò´Ë´¦ÓÚ״̬0µÄBTB±íÏîÓÐÁËÒ²µÈÓÚûÓС£ ÕâÒâÒåÔÚÓÚ£¬Èç¹ûÒ»¸ö·ÖÖ§Ö¸ÁîûÓÐBTB±íÏÄÇôËü±»Ô¤²âΪ²»·¢Éú¡£ Õâ¸ÄÉÆÁËBTBµÄÀûÓã¬ÒòΪһ°ãµØ£¬ÄÇЩºÜÉÙ·¢ÉúµÄ·ÖÖ§Ö¸Áî²»»áÕ¼ÓÃBTB±íÏî¡£

ÏÖÔÚÈç¹ûÓÐÒ»Ìõ¼þ×ªÒÆÖ¸ÁËüûÓÐBTB±íÏî¡£ÄÇôһ¸öеÄÏî»á²úÉú£¬¸ÃÏîµÄ³õÖµ×ÜÊDZ»ÖÃΪ״̬3¡£ÕâÒâζ×ÅËü²»¿ÉÄÜ´Ó״̬0µ½×´Ì¬1(³ýÁ˺óÃæÌÖÂÛµÄÒ»ÖÖÌØÊâÇé¿ö)¡£Èç¹û·¢Éú£¬´Ó״̬0ÄãÖ»Äܵ½×´Ì¬3?¡£Èç¹û²»·¢Éú£¬·ÖÖ§±»ÒƳöBTB±í¡£

ÕâÊǸöÑÏÖØµÄÉè¼ÆÈ±ÏÝ¡£Í¨¹ý½«×´Ì¬ÖµÎª0µÄ±íÏîÈÓ³öBTB£¬²¢ÇÒ×ÜÊǽ«ÐµÄÏîÖÃΪ״̬3£¬Éè¼ÆÕßÏÔȻֻÓÅÏÈ¿¼ÂǰÑÎÞÌõ¼þÌø×ªºÍ¾­³£·¢ÉúµÄ·ÖÖ§Ö¸ÁîµÄµÚÒ»´ÎÔËÐдú¼Û×îС»¯£¬¶ø²»¹ËÕâÑÏÖØÆÆ»µÁ˸ûúÖÆµÄ»ù±¾Ë¼Ï룬½µµÍÁËÄÚ²¿Ð¡Ñ­»·µÄÐÔÄÜ¡£ Õâ»áʹµÃÒ»¸ö¾­³£²»·¢ÉúµÄ·ÖÖ§Ö¸Áî±ØÐë¾­¹ýÈý´ÎÔ¤²âʧ°Ü¡ª¡ªºÍÒ»¸ö¾­³£·¢ÉúµÄ·ÖÖ§Ö¸ÁîÒ»Ñù¶à(ÏÔÈ»£¬Intel¹¤³ÌʦÃÇûÓÐ×¢Òâµ½Õâ¸öȱÏÝ£¬Ö±µ½ÎÒ¹«¿ªÁËÎҵķ¢ÏÖ)¡£

ΪÁËÑо¿Õâ¸ö²»¶Ô³Æ£¬Äã¿ÉÒÔ×éÖ¯ÄãµÄ·ÖÖ§Ö¸ÁʹËüÃÇ·¢ÉúµÄ¸ÅÂÊ´óÓÚ²»·¢ÉúµÄ¸ÅÂÊ¡£ ¿´Õâ¸öif-then-elseÓï¾ä:

¡¡¡¡¡¡¡¡TEST EAX£¬EAX
¡¡¡¡¡¡¡¡JZ A
¡¡¡¡¡¡ <·ÖÖ§ 1>
¡¡¡¡¡¡¡¡JMP E
A: ¡¡¡¡<·ÖÖ§ 2>
E:

Èç¹û·ÖÖ§1µÄ¸ÅÂʱȷÖÖ§2´ó£¬ ·ÖÖ§2ºÜÉÙÁ¬ÐøÖ´ÐÐ2´Î£¬ÄÇôÄã¿ÉÒÔ½»»»ÕâÁ½¸ö·ÖÖ§£¬ÕâÑùJA AÖ¸Áî·¢ÉúµÄ¸ÅÂʾʹóÓÚ²»·¢ÉúµÄ¸ÅÂÊÁË£¬Ê¹ÏàÓ¦µÄBTB±íÏî½øÈë״̬3£¬ÕâÑù¿ÉÒÔ¼õÉÙÔ¤²âʧ°Ü£º

¡¡¡¡¡¡¡¡TEST EAX£¬EAX
¡¡¡¡¡¡¡¡JNZ A
¡¡¡¡¡¡ <·ÖÖ§ 2>
¡¡¡¡¡¡¡¡JMP E
A: ¡¡  <·ÖÖ§ 1>
E:

(ÕâÓëIntelµÄÖ¸ÄÏÊÖ²áÖÐÍÆ¼öµÄÍêÈ«Ïà·´)¡£

ÓÐÀíÓɽ«¾­³£Ö´ÐеķÖÖ§·ÅÔÚ·¢ÉúµÄλÖã¬È»¶ø£º
  
  1. °ÑºÜÉÙÖ´ÐеķÖÖ§Ô¶ÀëÄãµÄ´úÂëµ×²¿È´ÓÐÀûÓÚ¸ÄÉÆÖ¸ÁîcacheµÄÀûÓá£
  2. ʹºÜÉÙ·¢ÉúµÄ·ÖÖ§Ö¸Áî´ó¶àÊýʱ¼ä²»ÔÚBTBÄÚ£¬¿ÉÄܸÄÉÆBTBµÄÀûÓá£
  3. Èç¹ûÒ»Ìõ·ÖÖ§Ö¸ÁîÒòΪÆäËü·ÖÖ§Ö¸Áî¼ÓÈë¶ø±»¸Ï³öBTBµÄ»°£¬Ëü»á±»Ô¤²âΪ²»·¢Éú¡£
  4. Ö»ÓÐPPlain»úÉÏ´æÔÚ²»¶Ô³ÆµÄ·ÖÖ§Ô¤²â¡£

È»¶øÑ­»·Ê½Ë¼Î¬ÊÇÓеã¶àÂÇÁË£¬Òò´ËÎÒÈÔÈ»ÍÆ¼öÊ¹Ìø×ªÖ¸ÁîµÄ·¢Éú¸ÅÂÊ´óÓÚ²»·¢Éú¡£ ³ý·Ç·ÖÖ§2ʹÓøÅÂÊ̫СÁË£¬ÄÇô·ÖÖ§Ô¤²âµÄʧ°Ü¿ÉÒÔºöÂÔÁË£¬ÄÇô¿¼ÂÇIntelµÄÍÆ¼ö¡£

ͬÑùµÄ£¬ÄãÐèÒªÍêÉÆµØ×éÖ¯µ×²¿ÓзÖÖ§Ö¸ÁîµÄÑ­»·£¬¾ÍÏñÏÂÃæµÄÀý×Ó£º

¡¡¡¡¡¡  MOV ECX£¬ [N]
¡¡L: ¡¡ MOV [EDI]£¬EAX
¡¡¡¡¡¡¡¡ADD EDI£¬4
¡¡¡¡¡¡¡¡DEC ECX
¡¡¡¡¡¡¡¡JNZ L

Èç¹ûNºÜ´ó£¬ÄÇôJNZÖ¸Áî»á´óÁ¿µØ·¢Éú£¬²»¿ÉÄÜÓÐÁ½´ÎÁ¬ÐøµÄ²»·¢Éú¡£

¿¼ÂÇÕâÑùÒ»ÖÖÇé¿ö¡ª¡ªÃ¿Á½´Î·¢ÉúÒ»´Î¡£ ×ªÒÆÖ¸ÁîµÚÒ»´Î½øÈëBTBÏîµÄʱºòÊÇ״̬3£¬È»ºó¾Í»áÔÚ2ºÍ3Ö®¼äµßô¤¡£ ÕâÑùËüÿ´Î¶¼±»Ô¤²âΪ·¢Éú£¬µ¼ÖÂ50%µÄÔ¤²âʧ°Ü¡£ ¼Ù¶¨ÏÖÔÚËü±³ÀëÁ˹æÂÉ£¬ÓÐÁËÒ»´ÎÒâÍâµÄ²»·¢Éú¡£Ìø×ªÄ£Ê½ÈçÏÂ:

01010100101010101010101, £°±íʾ²»·¢Éú, 1±íʾ·¢Éú¡£
       ^

ÒâÍâµÄ²»·¢ÉúÓÃ^±íʾ¡£¡¡ÔÚÕâ¸öʱäÖ®ºó£¬BTB±íÏÔÚ1ºÍ2Ö®¼äµßô¤£¬µ¼ÖÂ100%µÄÔ¤²âʧ°Ü¡£¡¡Õâ¸ö²»ÐÒµÄģʽ½«Ò»Ö±¼ÌÐø£¬Ö±µ½ÓÖÒ»¸ö0101µÄ±³Àë·¢Éú¡£¡¡ÕâÊÇÕâ¸ö·ÖÖ§Ô¤²â»úÖÆµÄ×Çé¿öÁË¡£

22.1.2  BTB¼Ç¼µÄÊÇǰһ¸öÖ¸Áî¶ÔµÄU¹ÜµÀÖ¸ÁîµÄµØÖ·

BTB»úÖÆ¼ÆËãµÄÊÇÖ¸Áî¶Ô£¬¶ø²»Êǵ¥ÌõÖ¸Áî¡£ Òò´Ë£¬ÎªÁË·ÖÎöBTB±íÏî´æÁËʲôµØÖ·£¬Äã±ØÐëÖªµÀÖ¸ÁîµÄÅä¶ÔÇé¿ö¡£ ¶ÔÓÚÈκÎ×ªÒÆÖ¸ÁBTB±íÏî×ÜÊǼǼǰһ¸öÖ¸Áî¶ÔµÄU¹ÜµÀÖ¸ÁîµÄµØÖ·(²»Åä¶ÔµÄÖ¸ÁîÒ²¿´×÷Ò»¸ö"Ö¸Áî¶Ô")¡£ ±ÈÈç:

¡¡¡¡¡¡¡¡SHR EAX£¬1
¡¡¡¡¡¡¡¡MOV EBX£¬[ESI]
¡¡¡¡¡¡¡¡CMP EAX£¬EBX
¡¡¡¡¡¡¡¡JB L

ÕâÀïSHRÖ¸ÁîÓëMOVÖ¸ÁîÅä¶Ô£¬CMPÓëJBÅä¶Ô¡£ Òò´Ë¶ÔÓÚJB LÖ¸ÁBTB±íÏî¼Ç¼ÁËSHR EAX£¬1µÄµØÖ·¡£ µ±µ½´ïÕâ¸öBTB±íÏî²¢ÇÒËü´¦ÓÚ״̬2»ò3£¬Pentium»á¶Á³öBTB±íÏîÖеÄÄ¿±êµØÖ·£¬¼ÓÔØLÖ®ºóµÄÖ¸Áî½øÈëÁ÷Ë®Ïß¡£ ÕâÒ»²½ÔÚ·ÖÖ§Ö¸ÁîJB L±»½âÂë֮ǰ¾ÍÒÑ·¢Éú£¬Òò´Ë¶ÔÓÚ·ÖÖ§Ô¤²â£¬PentiumÖ»ÒÀÀµBTBÖеÄÐÅÏ¢¡£

ÄãÓ¦¸ÃÖªµÀ£¬Ö¸ÁîÔÚµÚÒ»´ÎÖ´ÐеÄʱºòºÜÉÙÅä¶ÔµÄ(¼ûµÚ°ËÕÂ)¡£ Èç¹ûÉÏÊöµÄÖ¸ÁîÍêÈ«²»Åä¶Ô£¬BTB±íÏî»á¼Ç¼CMPÖ¸ÁîµÄµØÖ·£¬¶øÕâ¶ÔÓÚÏÂÒ»´ÎÖ´ÐУ¨´ËʱָÁîÊÇÅä¶ÔµÄ£©ÏÔÈ»ÊÇ´íµÄ¡£ È»¶ø£¬¶àÊýÇé¿öÏÂPPlain×ã¹»´ÏÃ÷£¬ËüÒ»°ã²»»á¶Ô´ÓûʹÓùýµÄ"Ö¸Áî¶Ô"·ÖÅäBTB±íÏî¡£ Òò´ËÒªµ½µÚ¶þ´ÎÖ´ÐУ¬²Å»áÓÐBTB±íÏîµÄ·ÖÅä£»ÍÆÂÛÊÇÒªµ½µÚÈý´ÎÖ´ÐУ¬²Å»áÓзÖÖ§Ô¤²â (²»¹ýÀýÍâµÄÊÇ£¬Èç¹ûµÚ¶þÌõÖ¸ÁîÊǵ¥×Ö½ÚÖ¸ÁÄÇôÔÚµÚÒ»´ÎÖ´ÐеÄʱºò£¬Äã¾Í»áµÃµ½Ò»¸öBTB±íÏ¶øÔÚµÚ¶þ´ÎÖ´ÐеÄʱºòÕâ¸ö±íÏîÊÇÎÞЧµÄ¡£ µ«¼ÈÈ»Õâ»ØBTB±íÏî¼Ç¼µÄÖ¸Á·¢Ë͵½V¹ÜµÀ£¬Õ⽫±»ºöÂÔ¶ø²»»á´øÀ´³Í·££¬ÒòΪBTB±íÏîÖ»¶ÁU¹ÜµÀµÄÖ¸Áî)¡£

Ò»¸öBTB±íÏîµÄidÊÇËüµÄ×éºÅ£¬µÈÓÚËü¼Ç¼µÄµØÖ·µÄ0-5λ¡£ 6-31λҲ´æÈëBTB×öΪ±ê־λ¡£ µØÖ·²îΪ64×ֽڵı¶ÊýµÄµØÖ·½«ÓµÓÐÏàͬµÄ×éºÅ¡£ ×î¶àÔÊÐíÓÐËĸöBTB±íÏîÓµÓÐÏàͬµÄ×éºÅ¡£ Èç¹ûÄãÏë¼ì²éÊÇ·ñÄãµÄ×ªÒÆÖ¸ÁîÕùÓÃͬһ¸öBTB±íÏÄã±ØÐë±È½ÏËüµÄǰһ¸öÖ¸Áî¶ÔÖÐU¹ÜµÀÖ¸ÁîµØÖ·µÄ0-5λ¡£ ÕâºÜÒªÃüµÄ£¬ÎÒ´ÓÀ´Ã»Óмû¹ýÓÐÈËÕâô¸É¹ý¡£ ҲûÓÐʲô¹¤¾ß¿ÉÒÔ°ïÄã¸ÉÕâ¼þÊ¡£


22.1.3  Á¬ÐøµÄÌø×ª(PPlain)

µ±Ìø×ªÔ¤²âʧ°ÜµÄʱºò£¬Á÷Ë®Ïß±»ÇåÏ´¡£ Èç¹ûÏÂÒ»¸öÖ´ÐйýµÄÖ¸Áî¶ÔÒ²°üÀ¨×ªÒÆÖ¸ÁPPlain²»»á¼ÓÔØËüµÄÌø×ªÄ¿±ê¡£ ÒòΪÔÚÁ÷Ë®Ïß±»ÇåÏ´µÄʱºò²»ÄܼÓÔØÐµÄÌø×ªÄ¿±ê¡£ ½á¹ûÊDz»¹ËµÚ¶þ¸ö×ªÒÆÖ¸ÁîµÄBTB±íÏî״̬£¬Ëü±»Ô¤²âΪ²»·¢Éú¡£ Òò´Ë£¬Èç¹ûµÚ¶þ¸ö×ªÒÆÊÇ·¢ÉúµÄ£¬ÄãÓÖ»áµÃµ½³Í·££¬ÄÄÅÂÊÂʵÉ϶ÔÓÚµÚ¶þ¸öÌø×ªÖ¸ÁBTB±íÏîµÃµ½ÁËÕýÈ·µÄ¸üС£ Èç¹ûÄãÓÐÒ»¸öºÜ³¤µÄ×ªÒÆÖ¸ÁîµÄÁ´£¬²¢ÇÒµÚÒ»¸ö×ªÒÆÖ¸ÁîÔ¤²âʧ°Ü£¬ÄÇôÁ÷Ë®Ï߻᲻¶ÏµØË¢Ð£¬ÔÚ´ËÆäÖÐÈç¹ûûÓв»·¢ÉúµÄ"Ö¸Áî¶Ô"£¬Äã¾Í»áÿ¸ö×ªÒÆÖ¸Áî¶¼Ô¤²âʧ°Ü¡£ ×¶ËµÄÀý×ÓÊÇÒ»¸öÌø×ªÖÁËü±¾ÉíµÄÑ­»·: ÿ´Îµþ´ú¶¼»áµÃµ½Ô¤²âʧ°ÜµÄ³Í·£¡£

Á¬ÐøµÄ×ªÒÆÖ¸Áî´øÀ´µÄÎÊÌ⻹²»Ö¹Õâ¸ö¡£ ÔÙÒ»¸öÎÊÌâÊÇÈç¹ûÄãÓÐBTB±íÏîºÍÊôÓÚËüµÄ×ªÒÆÖ¸ÁîÖ®¼äµÄÁíÒ»×ªÒÆÖ¸ÁÈç¹ûµÚÒ»¸ö×ªÒÆÖ¸ÁîÌø×ªµ½ÆäËüµØ·½£¬Ææ¹ÖµÄÊÂÇé·¢ÉúÁË¡£ ¿´Õâ¸öÀý×Ó:

¡¡¡¡¡¡¡¡SHR EAX£¬1
¡¡¡¡¡¡¡¡MOV EBX£¬[ESI]
¡¡¡¡¡¡¡¡CMP EAX£¬EBX
¡¡¡¡¡¡¡¡JB L1
¡¡¡¡¡¡¡¡JMP L2

L1: ¡¡¡¡MOV EAX£¬EBX
¡¡¡¡¡¡¡¡INC EBX

µ±JB L1²»·¢ÉúµÄʱºò£¬¶ÔÓÚJMP L2£¬Äã»áµÃµ½Ò»¸ö¸½ÉÏCMP EAX£¬EBXµØÖ·µÄBTB±íÏî¡£ µ«Èç¹ûJB L1·¢ÉúʱÇé¿öÓÖÈçºÎÄØ£¿ÔÚÕâ¸öʱºòJMP L2µÄBTB±íÏîÒѾ­±»¶Áµ½£¬µ«´¦ÀíÆ÷²»ÖªµÀÏÂÒ»¸öÖ¸Áî¶Ô²»°üÀ¨×ªÒÆÖ¸ÁÒò´ËËü°ÑÖ¸Áî¶ÔMOV EAX£¬EBX /INC EBXÔ¤²âÎªÌø×ªµ½L2¡£ Ô¤²â·Ç×ªÒÆÖ¸ÁîÎªÌø×ªµÄ³Í·£ÊÇ3¸öʱÖÓÖÜÆÚ¡£ JMP L2µÄBTB±íÏîµÄ״ֵ̬¼õ1£¬ÒòΪËü±»Ó¦ÓÃÓÚ²»·¢ÉúÌø×ªµÄÖ¸ÁîÉÏ¡£ Èç¹ûÎÒÃDz»¶ÏÔÚÑ­»·ÖÐÌø×ªµ½L1£¬JMP L2µÄBTB±íÏî״̬»á±»¼õΪ1ºÍ0¡£ ÓÚÊÇÎÊÌâÒ»Ö±³öÏÖ£¬Ö±µ½Ä³Ò»´ÎJMP L2±»Ö´ÐС£

Ô¤²â·Ç×ªÒÆÖ¸ÁîÎªÌø×ªµÄ´ú¼Û½ö½ö·¢ÉúÔÚÌø×ªÖÁL1±»Ô¤²âµ½µÄÇé¿öÏ¡£ Èç¹ûJB L1ÊÇÔ¤²âʧ°ÜµÄÌø×ª£¬ÄÇôÁ÷Ë®Ïß±»ÇåÏ´£¬ÎÒÃDz»»áÏñÇ°ÃæÄÇÑù¼ÓÔØL2Õâ¸ö´íÎóÄ¿±ê¡£ËùÒÔÕâ»ØÎÒÃDz»»áÓÐÔ¤²â·Ç×ªÒÆÖ¸ÁîÎªÌø×ªµÄ³Í·££¬µ«JMP L2µÄBTB±íÏî״ֵ̬»¹ÊǼõС¡£

ÏÖÔÚ¼Ù¶¨ÎÒÃǰÑINC EBXÖ¸ÁîÌæ»»ÎªÁíÒ»¸öjumpÖ¸Áî¡£ ÄÇôÕâ¸öjumpÖ¸Áî»áÓúÍJMP L2ÏàͬµÄBTB±íÏî(¸Ã±íÏîÔ¤²âÌø×ªµ½L2)£¬¸Ã±íÏî¿ÉÄÜ»áÔ¤²âµ½´íÎóµÄÄ¿±ê¶ø´øÀ´³Í·£(³ý·ÇÕâ¸öjumpÖ¸ÁîÅöÇÉÒ²ÒÔL2ΪĿ±ê)¡£

×ܽáһϣ¬Á¬ÐøµÄ×ªÒÆÖ¸Áî¿ÉÄܵ¼ÖÂÏÂÃæÎÊÌâ:
  
  *Èç¹ûǰһ¸ö×ªÒÆÔ¤²âʧ°Ü£¬Á÷Ë®Ïß±»Ë¢Ð£¬ÎÞ·¨¼ÓÔØÏÂÒ»¸ö×ªÒÆÖ¸ÁîµÄ×ªÒÆÄ¿±ê(Ç¿ÖÆÔ¤²âΪ²»·¢Éú)
  *BTB±íÏî¿ÉÄܱ»´íÎóµØÓÃÓÚ·Ç×ªÒÆÖ¸Á²¢ÇÒÔ¤²âËüÃÇÊÇÌø×ªµÄ¡£
  *ÉÏÊöµÄÒ»¸öÍÆÂÛÊÇ:Ò»¸ö±»´íÎóÓ¦ÓõÄBTB±íÏîµÄ״ֵ̬»á¼õС£¬¿ÉÄܵ½ÒÔºóÕæÕýÊôÓÚËüµÄÌø×ªÒª·¢ÉúËüÈ´Ô¤²â²»·¢Éú¡£ ÓÉÓÚÕâ¸öÀíÓÉ£¬ÉõÖÁÎÞÌõ¼þÌø×ªµÄÖ¸Áî¶¼»á±» Ô¤²âΪ²»·¢Éú¡£
  *Á½¸öºÜ½üµÄjumpÖ¸Áî¿ÉÄܻṲÓÃÒ»¸öBTB±íÏµ¼ÖÂÔ¤²âµ½´íÎóµÄÄ¿±ê¡£

ËùÓÐÕâЩ»ìÂÒ»á´ø¸øÄãÐí¶à³Í·£¡£ Òò´ËÄãÒªÃ÷È·±ÜÃâÔÚÒ»¸öËæ»ú×ªÒÆ(²»Ì«ºÃÔ¤²âµÄ)µÄÖ¸ÁîµÄºóÃæ£¬ºÍËü×ªÒÆÄ¿±êµÄºóÃæ½ô¸úÒ»¸ö°üÀ¨×ªÒÆÖ¸ÁîµÄÖ¸Áî¶Ô(Á½Ìõ×ªÒÆÖ¸ÁîÖ®¼äÖÁÉÙÒª¼ä¸ôÁ½ÌõÆäËüÖ¸Áî)¡£

Ò»¸öʵÀý:

¡¡¡¡¡¡¡¡CALL P
¡¡¡¡¡¡¡¡TEST EAX£¬EAX
¡¡¡¡¡¡¡¡JZ L2
L1£º ¡¡ MOV [EDI]£¬EBX
¡¡¡¡¡¡¡¡ADD EDI£¬4
¡¡¡¡¡¡¡¡DEC EAX
¡¡¡¡¡¡¡¡JNZ L1
L2£º ¡¡ CALL P

¿´ÉÏÈ¥ÕâËÆºõÊÇÒ»¶Î"ÓÅÃÀµÄ"´úÂë:Ò»¸ö¹ý³Ìµ÷Ó㬵±¼ÆÊý²»Îª0µÄʱºòÀ´¸öÑ­»·£¬ÔÙµ÷Óùý³Ì¡£ÄãÄÜ·¢ÏÖ¶àÉÙÎÊÌâÄØ?

Ê×ÏÈ£¬ÎÒÃÇ×¢Òâµ½P¹ý³ÌÔÚÁ½¸ö²»Í¬µÄλÖñ»µ÷ÓᣠÕâÒâζ×ÅPµÄ·µ»ØµØÖ·Ò»Ö±Ôڱ䣬´Ó¶ø£¬¶ÔPµÄ·µ»ØÖ¸Áî×ÜÊÇÔ¤²âʧ°Ü¡£

ÏÖÔÚ¼ÙÉèEAXÊÇ0¡£¶øÒòΪP¹ý³Ì·µ»ØµÄÔ¤²âʧ°Üµ¼ÖµÄÁ÷Ë®ÏßˢУ¬Ê¹µÃ¸ÃÌø×ªµ½L2£¬È´ÎÞ·¨¼ÓÔØËüµÄÄ¿±êµØÖ·¡£ È»ºó£¬ÒòΪJZ L2Ô¤²âʧ°Ü¶øË¢Ð£¬µÚ¶þ¸öPµ÷ÓÃÓÖÎÞ·¨¼ÓÔØËüµÄÄ¿±êµØÖ·¡£ ÎÒÃǾͽøÈëÁËÕâÑùÒ»¸ö"¾³½ç":ÒòΪµÚÒ»¸öjumpÔ¤²âʧ°Ü£¬Á¬ÐøµÄjumpµ¼ÖÂÁ÷Ë®Ïß²»¶ÏˢС£ JZ L2µÄBTB±íÏî´æ´¢PµÄ·µ»ØÖ¸ÁîµÄµØÖ·£¬Õâ¸öBTB±íÏî»á±»´íÎóµØÓ¦ÓÃÓÚµÚ¶þ¸öPµ÷ÓúóµÄÈκÎÖ¸Áî¡£ µ«Õâµ¹²»»á´øÀ´³Í·££¬ÒòΪµÚ¶þ¸ö·µ»ØµÄÔ¤²âʧ°ÜÁ÷Ë®Ïß±»Ë¢ÐÂÁË¡£

ÏÖÔÚÎÒÃÇ¿¼ÂÇEAX·Ç0µÄÇé¿ö:ÒòΪˢУ¬JZ L2Ò»Ö±±»Ô¤²âΪ²»·¢Éú¡£ µÚ¶þ¸öPµ÷ÓõÄBTB±íÏî¼Ç¼TEST EAX£¬EAXµÄµØÖ·¡£ Õâ¸ö±íÏî»á±»´íÎóµØÓÃÓÚMOV/ADDÖ¸Áî¶Ô£¬Ô¤²âËüÌø×ªµ½P¡£ ÕâÒýÆðˢУ¬×èÖ¹JNZ L1¼ÓÔØËüµÄÄ¿±ê¡£ Èç¹ûÎÒÃÇÒÔǰִÐйýÕâÀµÚ¶þ¸öPµ÷ÓûáÓÐÁíÒ»¸ö¸½×ÅDEC EAXµØÖ·µÄBTB±íÏî¡£ ÔÚµÚ¶þ¡¢µÚÈý´Îµþ´úºó£¬Õâ¸ö±íÏîÒ²±»´íÎóµØÓ¦Óõ½MOV/ADDÖ¸Áî¶Ô£¬Ö±µ½ËüµÄ״̬¼õΪ1»ò0¡£ ÕâÖÖÇé¿öÊÇÔÚµÚ¶þ´Îµþ´úµÄʱºòûÓгͷ££¬ÒòΪJNZ L1µÄÔ¤²âʧ°Üµ¼ÖÂÁËˢУ¬×èÖ¹ÁË´íÎóÄ¿±êµÄ¼ÓÔØ¡£ µ«ÔÚµÚÈý´Îµþ´úµÄʱºòÓгͷ£¡£ ºóÐøµÄµþ´úûÓгͷ££¬µ«ÒòΪÉÏÊöÇé¿öµÄ´æÔÚ£¬JNZ L1Ò»Ö±Ô¤²âʧ°Ü£¬Ë¢Ð»á×èÖ¹Pµ÷ÓüÓÔØËüµÄÄ¿±êµØÖ·¡£ Ö±µ½Pµ÷ÓõÄBTB±íÏîÒòΪ¼¸´Î´íÎóµÄÓ¦Óöø±»·Ï³ý¡£

ÎÒÃÇ¿ÉÒÔͨ¹ý²åÈëһЩNOP£¬·Ö¿ªËùÓÐÁ¬ÐøµÄ×ªÒÆÀ´¸Ä½ø´úÂë:

¡¡¡¡¡¡¡¡CALL P
¡¡¡¡¡¡¡¡TEST EAX£¬EAX
¡¡¡¡¡¡¡¡NOP
¡¡¡¡¡¡¡¡JZ L2
L1: ¡¡¡¡MOV [EDI]£¬EBX
¡¡¡¡¡¡¡¡ADD EDI£¬4
¡¡¡¡¡¡¡¡DEC EAX
¡¡¡¡¡¡¡¡JNZ L1
L2: ¡¡¡¡NOP
¡¡¡¡¡¡¡¡NOP
¡¡¡¡¡¡¡¡CALL P

ËäÈ»¶îÍâµÄNOP»¨·Ñ2¸öʱÖÓÖÜÆÚ£¬µ«½ÚÊ¡µÃ¸ü¶à¡£ ´ËÍ⣬JZ L2Õâ»ØÒÆÈëÁËU¹ÜµÀ(ÒòΪCALL½øÈëV¹ÜµÀ)£¬ÕâÑùµ±Ô¤²âʧ°ÜµÄʱºò£¬´ú¼Û¾ÍÓÉ4¸öʱÖÓÖÜÆÚ¼õΪ3¸öʱÖÓÖÜÆÚ¡£ ֻʣµÄÎÊÌâ¾ÍÊÇP¹ý³ÌµÄ·µ»ØµØÖ·Ò»Ö±»áÔ¤²âʧ°Ü¡£ Òª½â¾öµÄ»°£¬Ö»ÓÐÓÃÄÚÁªºêÀ´´úÌæP¹ý³ÌµÄµ÷ÓÃ(Èç¹ûÄãµÄCPUÖ¸Áîcache×ã¹»´óµÄ»°)¡£

ͨ¹ýÕâ¸öÀý×Ó£¬Äã¶®µÃÁËÓ¦¸Ã×ÐϸµØÑ°ÕÒÁ¬ÐøµÄ×ªÒÆÖ¸ÁîÈ»ºó¿¼ÂÇÊÇ·ñ¿ÉÒÔͨ¹ý²åÈëһЩNOP½Úʡʱ¼ä¡£ ÁíÍ⣬Äã¿´µ½ÁËһЩ±ØÈ»Ô¤²âʧ°ÜµÄÇé¿ö£¬±ÈÈçÑ­»·Í˳öµÄʱºò£¬µ±Ò»¸ö±»²»Í¬Î»Öõ÷ÓõĹý³Ì·µ»ØµÄʱºò¡£ µ±È»£¬Èç¹ûÄãÓÐһЩÓÐÓõĴúÂë¿ÉÒÔ²åÈ룬ÄÇôӦ¸ÃÑ¡ÔñÓÐÓõĴúÂë¶ø²»ÊÇNOP¡£

¶à·ÖÖ§(case: ״̬)¼È¿ÉÒÔÓÃÊ÷Ð͵ĴóÁ¿×ªÒÆÖ¸ÁîʵÏÖ£¬Ò²¿ÉÒÔÓÃÌø×ª±íʵÏÖ¡£ Èç¹ûÄãÑ¡ÔñÁËÊ÷Ð͵Ä×ªÒÆÖ¸ÁÄÇôÄã±ØÐëÓÃһЩNOP»òÆäËüÖ¸Áî¸ô¿ªÁ¬ÐøµÄ×ªÒÆÖ¸Áî¡£Òò´ËÔÚPPlainÉÏ£¬Ìø×ª±í¿ÉÄÜÊÇÒ»¸ö¸üºÃµÄ½â¾ö·½°¸¡£ Ìø×ªµØÖ·±íÓ¦¸Ã·ÅÔÚÊý¾Ý¶Î£¬¾ö²»ÄÜ·ÅÔÚ´úÂë¶Î!


22.1.4  Ð¡Ñ­»·(PPlain)

ÔÚСѭ»·ÖУ¬Äã¾­³£ÒԺ̵ܶÄʱ¼ä¼ä¸ôÖØ¸´·ÃÎÊͬһ¸öBTB±íÏî¡£ Õâ²»»áÒýÆðÑÓ³Ù¡£ ÒòΪPPlain²»ÖªÔõô´ÓÁ÷Ë®ÏßÉÏ¿ªÁËÒ»¸ö"ºóÃÅ": ËüÄÜÔÚд»ØBTB֮ǰµÃµ½×î½üÒ»´ÎÌø×ªµÄ״ֵ̬£¬¶ø²»ÊǵȴýBTB±íÏîµÄ¸üС£ ¸Ã»úÖÆ¶ÔÓû§¼¸ºõÊÇ͸Ã÷µÄ£¬µ«ÓÐʱËü»á²úÉúÓÐȤµÄЧ¹û: Èç¹û״̬0À´²»¼°Ð´»ØBTB£¬Äã»á¿´µ½·ÖÖ§Ô¤²âµÄ״̬×ÜÊÇ´Ó0µ½1£¬¶ø²»ÊÇ3¡£ ÕâÔÚÒ»¸öÑ­»·Ð¡ÓÚ4¸öÖ¸Áî¶Ôʱ·¢Éú¡£ ÔÚÖ»ÓÐÁ½¸öÖ¸Áî¶ÔµÄÑ­»·ÖУ¬Äã¿ÉÄÜ»áÔÚÁ¬ÐøÁ½´Îµþ´úÖУ¬Ê¹Óò»ÊÇÀ´×ÔBTBµÄ״̬0£»ÔÚÈç´ËСµÄÑ­»·ÖУ¬ÉõÖÁ»áżȻµØÓÃÁ½´ÎÒÔǰµþ´úµÄ״ֵ̬£¬¶ø²»ÓÃ×î½üµÄÒ»´ÎÀ´Ô¤²â¡£ Ò»°ãÀ´Ëµ£¬ÕâЩÓÐȤµÄЧ¹ûÔÚÖ´ÐÐʱ²»»á´øÀ´Ê²Ã´¸±×÷Óá£


22.2  PMMX£¬ PPro£¬ PII and PIIIµÄ·ÖÖ§Ô¤²â

22.2.1  BTBµÄ×éÖ¯(PMMX£¬PPro£¬PIIºÍPIII)

PMMXµÄ·ÖÖ§Ä¿±ê»º´æ(BTB)ÓÐ256¸ö±íÏ×éÖ¯³É16·*16×é¡£ ÿ¸ö±íÏîÓÃÊôÓÚËüµÄ×ªÒÆÖ¸ÁîµÄ×îºóÒ»¸ö×ֽڵĵØÖ·µÄ2-31λ×÷ΪID¡£ 2-5λ×÷Ϊ×éÖµ£¬6-31λ´æÈëBTBÖÐ×÷Ϊ±ê¼Ç¡£ Á½ÌõµØÖ·Ïà¸ô64×Ö½ÚµÄ×ªÒÆÖ¸ÁÓÐÏàͬµÄ×éÖµ£¬¿ÉÄܻᱻÌß³öBTB±í¡£ µ«ÒòΪÿ×éÓÐ16·£¬Òò´Ë²»»á¾­³£·¢ÉúÕâÖÖÊÂÇé¡£

PPro£¬PIIºÍPIIIµÄ·ÖÖ§Ä¿±ê»º´æ(BTB)ÓÐ512¸ö±íÏ×éÖ¯³É16·*32×é¡£ ÿ¸ö±íÏîÓÃÊôÓÚËüµÄ×ªÒÆÖ¸ÁîµÄ×îºóÒ»¸ö×ֽڵĵØÖ·µÄ4-31λ×÷ΪID¡£ 4-8λ×÷Ϊ×éÖµ£¬²¢ÇÒËùÓеÄ4-31λ¶¼´æÈëBTB×÷Ϊ±ê¼Ç¡£ Á½ÌõµØÖ·Ïà¸ô512×Ö½ÚµÄ×ªÒÆÖ¸ÁÓÐÏàͬµÄ×éÖµ£¬¿ÉÄܻᱻÌß³öBTB±í¡£ µ«ÒòΪÿ×éÓÐ16·£¬Òò´Ë²»»á¾­³£·¢ÉúÕâÖÖÊÂÇé¡£

¶ÔÓÚÈκοØÖÆ×ªÒÆÖ¸ÁPPro£¬PIIºÍPIIIÔÚËüµÚÒ»´ÎÖ´ÐеÄʱºò¾Í»á·ÖÅäBTB±íÏî¡£ ¶øÔÚPMMXÉÏ£¬ÊÇÔÚ×ªÒÆÖ¸ÁîµÚÒ»´Î·¢ÉúµÄʱºò·ÖÅä±íÏû·¢Éú¹ýµÄ·ÖÖ§Ö¸Áî²»½øÈëBTB±í£¬Ò»µ©Ëü·¢ÉúÒÔºó£¬ÄÄÅÂËüÒÔºóÒ»Ö±ÊDz»·¢Éú£¬ËüҲפÁôÔÚBTB±íÖС£

ÔÚÁíÒ»ÌõÓµÓÐÏàͬ×éÖµµÄ×ªÒÆÖ¸ÁîÐèÒªÒ»¸öBTB±íÏîµÄʱºò£¬Ô­À´µÄ±íÏî±»Ìß³öBTB¡£


22.2.2 Ô¤²âʧ°ÜµÄ³Í·£(PMMX£¬PPro£¬PIIºÍPIII)

ÔÚPMMXÉÏ£¬U¹ÜµÀÉÏÖ´ÐеÄÌõ¼þjumpÖ¸Áî(JXX)Ô¤²âʧ°ÜµÄ´ú¼ÛÊÇ4¸öÖÜÆÚ£¬ÔÚV¹ÜµÀÉÏÊÇ5¸öÖÜÆÚ¡£ ÆäËüµÄ×ªÒÆÖ¸Áî¶¼ÊÇ4¸öÖÜÆÚµÄ³Í·£¡£

ÔÚPPro£¬PIIºÍPIIIÉÏ£¬ÒòΪ¹ÜµÀ±È½Ï³¤£¬Ô¤²âʧ°ÜµÄ´ú¼ÛºÜ´ó£¬Ò»°ãÐèÒª10-20¸öʱÖÓÖÜÆÚ¡£ Òò´ËÔÚPPro£¬PIIºÍPIIIÉϵijÌÐòÒª¸ñÍâÁôÒâÄÇЩ²»´óºÃÔ¤²âµÄ·ÖÖ§¡£


22.2.3 Ìõ¼þÌø×ªµÄģʽʶ±ð(PMMX£¬PPro£¬PIIºÍPIII)

ÕâЩ´¦ÀíÆ÷ÓÐÏȽøµÄģʽʶ±ð»úÖÆ£¬Äܹ»ÕýÈ·Ô¤²âÓйæÂɵķÖÖ§Ö¸Á±ÈÈçÿËĴεþ´úÀ´Ò»´Î·¢Éú£¬ÆäËüÈý´ÎÊDz»·¢Éú¡£ ÊÂʵÉÏ£¬ËüÃÇÄܹ»Ô¤²âËùÓг¤¶È²»³¬¹ý5µÄģʽµÄ·¢ÉúºÍ²»·¢Éú£¬ºÍÐí¶à¸ü³¤µÄģʽ¡£

¸Ã»úÖÆºÅ³Æ"Á½¼¶×ÔÊÊÓ¦·ÖÖ§Ô¤²âģʽ"£¬ÓÉ T.-Y.Yeh ºÍ Y.N.Patt ·¢Ã÷¡£ ËüÒÔÇ°ÃæÃèÊöµÄPPlainÉϵÄ2λ¼ÆÊýÆ÷ģʽΪ»ù´¡(µ«Ã»ÓÐ2λ¼ÆÊýÆ÷ÄÇÑù²»¶Ô³ÆµÄȱÏÝ)¡£ 2 Î»¼ÆÊýÆ÷ÊÇÔÚÌø×ª·¢Éúʱ״ֵ̬Ôö¼Ó£¬ÔÚ²»·¢Éúʱ¼õÉÙ£»ÔÚµ½´ï3»ò0ʱ±¥ºÍ£»·ÖÖ§Ö¸ÁîÔÚÏàÓ¦µÄ¼ÆÊýÆ÷ÖµÊÇ2»ò3ʱ±»Ô¤²âΪ·¢Éú£¬0ºÍ1ʱԤ²âΪ²»·¢Éú¡£ÏÖÔÚͨ¹ýÔÚÿһ¸öBTB±íÏîÖÐÓÐ16¸öÕâÑùµÄ¼ÆÊýÆ÷»ñµÃÁË´ó´óµÄ¸Ä½ø¡£ ²Î¿¼·ÖÖ§Ö¸Áî×î½ü4´ÎµÄÖ´ÐÐÀúÊ·£¬´Ó16¸ö¼ÆÊýÆ÷ÖÐÑ¡³ö1¸ö¡£ ±ÈÈ磬·ÖÖ§Ö¸Áî·¢ÉúÒ»´ÎÈ»ºó²»·¢ÉúÈý´Î£¬Äã»áµÃµ½Àúʷλ´®1000(1=·¢Éú£¬0=²»·¢Éú)¡£ Õâ¾ÍʹµÃCPUÏÂÒ»´ÎÔ¤²âÓüÆÊýÆ÷8(1000b=8)£¬²¢ÇÒÒÔºó¸üмÆÊýÆ÷8¡£

Èç¹û1000ÐòÁÐ×ÜÊÇ·¢Éú£¬¼ÆÊýÆ÷8½«ºÜ¿ìµ½´ïËü×î´ó״ֵ̬3£¬ÕâÑùËü½«Ò»Ö±Ô¤²â1000ÐòÁС£ ÒªÁ½´Î±³ÀëÕâ¸öģʽ²Å»á¸Ä±äÔ¤²â½á¹û¡£ ÖØ¸´Ä£Ê½100010001000ʹµÃ¼ÆÊýÆ÷8µÄ״ֵ̬ÊÇ3£¬¼ÆÊýÆ÷1£¬2£¬4µÄ״ֵ̬Ϊ0¡£ ÁíÍâ12¸ö¼ÆÊýÆ÷²»Óá£


22.2.4  ¿ÉÍêÃÀÔ¤²âµÄģʽ(PMMX£¬PPro£¬PIIºÍPIII)

Èç¹ûij¸ö³¤¶È´óÓÚ5µÄģʽ´®ÖÐÈκÎÒ»¸ö4λµÄ×Ó´®¶¼ÊÇΨһµÄ£¬ÄÇôÕâ¸öģʽ´®Äܱ»ÍêÃÀµØÔ¤²â¡£ ÏÂÃæÁгöÁËÄܱ»ÍêÃÀÔ¤²âµÄģʽ´®:

 ³¤¶È  
¿ÉÍêÃÀÔ¤²âµÄģʽ 
1-5 all
6 000011, 000101, 000111, 001011
7 0000101, 0000111, 0001011
8 00001011, 00001111, 00010011, 00010111, 00101101
9 000010011, 000010111, 000100111, 000101101
10 0000100111, 0000101101, 0000101111, 0000110111, 0001010011, 0001011101
11 00001001111, 00001010011, 00001011101, 00010100111
12 000010100111, 000010111101, 000011010111, 000100110111, 000100111011
13 0000100110111, 0000100111011, 0000101001111
14 00001001101111, 00001001111011, 00010011010111, 00010011101011, 00010110011101, 00010110100111
15 000010011010111, 000010011101011, 000010100110111, 000010100111011, 000010110011101, 000010110100111, 000010111010011, 000011010010111
16 0000100110101111, 0000100111101011, 0000101100111101, 0000101101001111

¿´ÁËÕâ¸ö±í£¬ÄãÓ¦¸ÃÒâʶµ½Èç¹ûÒ»¸öģʽ´®Äܱ»ÕýÈ·µØÔ¤²â£¬ÄÇôËüµÄ»ØÎÄ´®(·´¹ýÀ´¶Á)ºÍ²¹´®Ò²Äܱ»ÕýÈ·Ô¤²â¡£ ±ÈÈ磬ÎÒÃÇ·¢ÏÖÁËģʽ0001011£¬Æä»ØÎÄ´®ÊÇ: 1101000£¬²¹´®ÊÇ1110100£¬²¹´®µÄ»ØÎÄ´®ÊÇ0010111¡£ ÕâËĸö´®¶¼¿ÉÔ¤²â¡£ Сѭ»·×óÒÆÒ»Î»µÃµ½:0010110£¬Õâ²»ÊÇÒ»¸öеÄģʽ£¬½ö½öÊÇͬһ¸öģʽµÄСѭ»·ÒÆÎ»°æ¡£ ËùÓÐÓÉÉϱíÖеÄģʽ¾­¹ý»ØÎÄ£¬È¡²¹£¬Ð¡Ñ­»·ÒÆÎ»µÃµ½µÄģʽ¶¼ÄÜʶ±ð¡£ ÖÁÓÚÃ÷È·µÄÀíÓÉÕâÀïûÓиø³ö¡£

ÔÚBTB±íÏî·ÖÅäÖ®ºó£¬Ä£Ê½Ê¶±ð»úÖÆÑ§Ï°Ò»¸ö¹æÂÉ»¯µÄģʽÐèÒªÁ½¸ö½×¶Î¡£ ѧϰ¹ý³ÌÖÐÔ¤²âʧ°ÜµÄģʽ²»¿ÉÔÙÉú¡£ Õâ¿ÉÄÜÊÇÒòΪBTB±íÏî°üÀ¨ÁËһЩ·ÖÅä֮ǰµÄ¶«Î÷¡£¼ÈÈ»BTB±íÏîÊÇËæ»ú·ÖÅäµÄ£¬ÔÚ³õʼ»¯Ñ§Ï°¹ý³ÌÖкÜÉÙÓлú»áÈ¥Ô¤²â¡£


22.2.5  ´¦Àí±³Àë¹æÂÉģʽµÄÇé¿ö(PMMX£¬PPro£¬PIIºÍPIII)

·ÖÖ§Ô¤²â»úÖÆ»¹Äܹ»ÍêÉÆµØ´¦Àí"¼¸ºõÓйæÂÉ"µÄģʽ£¬ºÍ±³Àë¹æÂÉģʽµÄÇé¿ö¡£Ëü²»½öѧϰ¹æÂÉ»¯µÄģʽµÄÑù×Ó£¬»¹Ñ§Ï°¹æÂÉ»¯µÄģʽ·¢Éú±³ÀëµÄÇé¿ö¡£Èç¹û±³ÀëÒ²ÓÐÏàͬµÄģʽ£¬Ëü»á¼Çס±³ÀëµÄģʽ£¬ÕâÑù±³ÀëµÄÔ¤²âʧ°ÜÖ»·¢ÉúÒ»´Î¡£

±ÈÈç:

0001110001110001110001011100011100011100010111000
                      ^                   ^

Õâ¸öÐòÁÐÖУ¬0Òâζ×Ų»·¢Éú£¬1Òâζ×Å·¢Éú¡£ »úÆ÷ѧϰµ½Öظ´Ä£Ê½ÊÇ000111¡£ µÚÒ»´Î±³ÀëÊÇÒ»¸ö0£¬ÓÃ^±ê³ö¡£ ÔÚÕâ¸ö0ÒÔºóµÄÈý´ÎÌø×ª¿ÉÄÜÔ¤²â²»µ½ÁË£¬ÒòΪËü»¹Ã»Ñ§Ï°µ½0010£¬0101£¬1011ºó»á·¢Éúʲô¡£ ÔÚͬÑùµÄÒâÍâ·¢Éú1´Î»ò2´Îºó£¬Ëüѧϰµ½0010ºóÊǸö1£¬0101ºóÊǸö1£¬1011ºóÊǸö1¡£ ÕâÒâζ×ÅÏàͬÀàÐ͵ÄÒâÍâ×î¶à·¢ÉúÁ½´Î£¬¾­¹ýÒ»´ÎÔ¤²âʧ°Ü£¬Ëü¾Íѧ»á´¦ÀíÕâÀàÒâÍâ¡£

¶ÔÓÚÁ½¸ö²»Í¬µÄ¹æÂÉ»¯Ä£Ê½µÄÇл»£¬¸Ã»úÖÆÒ²ºÜÓÐЧ¡£ ±ÈÈ磬ÎÒÃÇÒѾ­Öظ´ÁË000111ģʽ(³¤¶ÈΪ6)ºÜ¶à´Î£¬È»ºóÖØ¸´01ģʽ(³¤¶ÈΪ2)ºÜ¶à´Î£¬È»ºóÓֻص½000111ģʽµÄʱºò£¬Ëü²»ÐèÒªÔÙѧϰ000111ģʽ£¬ÒòΪ000111ÐòÁÐËùÓõļÆÊýÆ÷ÔÚ01ÆÚ¼äûÓб»¸Ä¹ý¡£ ÔÚÁ½¸öģʽ֮¼ä½»ÌæµÄ¼¸´Îºó£¬Ëü»¹»á¶®µÃ´¦ÀíģʽµÄ±ä»»£¬¶ÔÓÚÿ´ÎģʽÇл»£¬´ú¼ÛÖ»ÓÐÒ»´ÎÔ¤²âʧ°Ü¡£


22.2.6  ²»ÄÜÍêÃÀÔ¤²âµÄģʽ(PMMX£¬PPro£¬PIIºÍPIII)

×î¼òµ¥µÄ²»Äܱ»ÍêÃÀÔ¤²âµÄģʽÊÇÿÁù´ÎÓÐÒ»´Î·¢Éú¡£¸ÃģʽÊÇ:

000001000001000001
    ^^    ^^    ^^
    ab    ab    ab

0000ÐòÁÐ×ÜÊǸúÔÚÒ»¸ö0(ÓÃa±ê³ö)ºÍÒ»¸ö1(ÓÃb±ê³ö)ºóÃæ¡£ ÕâʹµÃ¼ÆÊýÆ÷0Ò»Ö±ÔÚÉÏÉÏÏÂÏ¡£ Èç¹û¼ÆÊýÆ÷0´Ó״̬0»ò1¿ªÊ¼£¬ÄÇôËü»áÒ»Ö±ÔÚ0ºÍ1Ö®¼ä½»Ì棬bλÖý«Ò»Ö±·¢ÉúÔ¤²âʧ°Ü£»Èç¹û¼ÆÊýÆ÷0´Ó״̬3¿ªÊ¼£¬ÄÇôËü»áÒ»Ö±ÔÚ2ºÍ3Ö®¼ä½»Ì棬aλÖý«Ò»Ö±·¢ÉúÔ¤²âʧ°Ü¡£ ×µÄÇé¿öÊÇËü´Ó״̬2¿ªÊ¼£¬Ëü»á²»ÐÒÔÚ1ºÍ2Ö®¼ä½»Ì棬ÎÒÃÇÔÚaºÍb´¦¶¼»áÔ¤²âʧ°Ü(ÕâÓеãÏñÇ°ÃæËµµÄPPlainµÄ×Çé¿ö)¡£ ÎÒÃÇ»á´ÓÄĸö״̬¿ªÊ¼È¡¾öÓÚ¸Ã×ªÒÆÖ¸ÁîµÄBTB±íÏî·ÖÅä֮ǰµÄÀúÊ·¡£ ÒòÎªËæ»ú·ÖÅ䣬ËùÒÔÎÒÃÇÎÞ·¨¿ØÖÆ¡£

ΪÁ˱ÜÃâÿ´ÎÑ­»·ÓÐÁ½¸öÔ¤²âʧ°ÜµÄ×Çé¿ö£¬ÀíÂÛÉÏÎÒÃÇ¿ÉÒÔ¸øCPUÒ»¸öרÃÅÉè¼ÆµÄ·ÖÖ§ÐòÁУ¬Ê¹ËüµÄ¼ÆÊýÆ÷ֵΪÀíÏëµÄ״̬£¬È»¶ø£¬²»ÍƼöÕâ¸ö°ì·¨£¬ÒòΪ¿¼Âǵ½¶îÍâ´úÂëµÄ¿ªÏú£¬¶øÇÒ²»¹ÜÎÒÃÇÔÚ¼ÆÊýÆ÷ÖзÅÈëʲôÐÅÏ¢£¬ÔÚÒÔºóÓÐÖжϻòÈÎÎñÇл»µÄʱºòÈÔÈ»»á¶ªÊ§¡£


22.2.7¡¡ÍêÈ«Ëæ»úµÄģʽ(PMMX£¬PPro£¬PIIºÍPIII)

ÔÚÍêȫûÓйæÂɵÄÐòÁÐÏ£¬Ç¿´óµÄģʽʶ±ð»úÖÆÒ²ÓÐСµÄȱµã¡£

ÏÂÃæµÄ±í¸ñÁгöÁËÔÚÍêÈ«Ëæ»úµÄÌø×ª·¢Éú/²»·¢ÉúÐòÁÐϵÄÔ¤²âʧ°ÜÂÊ:

 
·¢Éú£¯²»·¢ÉúµÄ±ÈÀý 
 
Ô¤²âʧ°ÜµÄ±ÈÀý 
0.001/0.999
0.001001
0.01/0.99
0.0101
0.05/0.95
0.0525
0.10/0.90
0.110
0.15/0.85
0.171
0.20/0.80
0.235
0.25/0.75
0.300
0.30/0.70
0.362
0.35/0.65
0.418
0.40/0.60
0.462
0.45/0.55
0.490
0.50/0.50
0.500

Ô¤²âʧ°ÜÂʱÈûÓÐģʽʶ±ð»úÖÆÂԸߡ£ ÒòΪ´¦ÀíÆ÷ÔÚºÁÎÞ¹æÂɵÄÐòÁÐÀïÈÔÈ»ÔÚÊÔͼÕÒÖØ¸´µÄģʽ¡£


22.2.8 Сѭ»·(PMMX)

ÔÚСѭ»·Ï£¬PMMXµÄ·ÖÖ§Ô¤²âÊDz»¿É¿¿µÄ£¬ÒòΪģʽʶ±ð»úÖÆÔÚÓÖÒ»´ÎÅöµ½·ÖÖ§Ö¸Áî֮ǰÀ´²»¼°¸üÐÂËüµÄÊý¾Ý¡£ ÕâÒâζ×Åͨ³£Äܹ»ÍêÃÀÔ¤²âµÄ¼òµ¥Ä£Ê½Ò²²»ÄÜÔ¤²âÁË¡£È»¶ø£¬Õý³£Çé¿öϲ»ÄÜʶ±ðµÄģʽ£¬ÄÜÔÚСѭ»·ÏÂÍêÃÀµØÔ¤²â¡£ ±ÈÈ磬һ¸ö×ÜÊÇÑ­»·6´Î£¬µ×²¿ÓÐÒ»¸ö·ÖÖ§Ö¸ÁîµÄÑ­»·½«ÓÐ111110µÄģʽ¡£ Õâ¸öģʽÔÚÕý³£Çé¿öÏÂ×ܵÃÓÐ1µ½2´ÎÔ¤²âʧ°Ü£¬µ«ÔÚСѭ»·Àï²»»áÓÐÔ¤²âʧ°Ü¡£ ¶ÔÓÚ×ÜÊÇÑ­»·7´ÎµÄСѭ»·Ò²ÊÇÈç´Ë¡£ ´ó¶àÊýÆäËüÑ­»·´ÎÊýµÄÑ­»·×÷ΪСѭ»·¶¼±ÈÕý³£Çé¿öÏÂÔ¤²âµÃ²î¡£ ÕâÒâζ×ŵþ´ú6»ò7´ÎµÄÑ­»·¸üÊʺÏ×ö³ÉСѭ»·£¬ÆäËüÇé¿öϲ»Êʺϡ£ Èç¹ûÐèÒª°ÑÑ­»·×ö´ó£¬Äã¿ÉÒÔ½«ËüÕ¹¿ª¡£

ÅжÏÔÚPMMXÉϵÄÒ»¸öÑ­»·ÊÇ·ñÊÇСѭ»·£¬Äã¿ÉÒÔ×ñÑ­Ä´Ö¸·¨Ôò:¸øÑ­»·ÖеÄÖ¸Áî¼ÆÊý¡£ Èç¹ûСÓÚµÈÓÚ6£¬¸ÃÑ­»·ÊÇСѭ»·¡£ Èç¹ûÓжàÓÚ7ÌõÖ¸ÁÄã¾ÍÄܱ£Ö¤Ä£Ê½Ê¶±ðµÄ¹¦ÄÜÕý³£ÁË¡£ Ïàµ±Ææ¹ÖµÄÊÇ£¬¸÷ÌõÖ¸ÁîÓöàÉÙʱÖÓÖÜÆÚ£¬ÓÐûÓÐÑÓ³Ù£¬ÊÇ·ñÅä¶Ô¶¼ÎÞËùν¡£ ¸´ÔÓµÄÕûÐÎÖ¸Áî²»¼ÆÔÚÄÚ(¸´ÔÓµÄÕûÐÎÖ¸ÁîÊÇÖ¸²»ÄÜÅä¶ÔµÄ(NP)ÕûÐÎÖ¸Áͨ³£ÐèÒª¶àÓàÒ»¸öÖÜÆÚÀ´Ö´ÐÐ)£¬Ò»¸ö¿ÉÒÔÓÐÐí¶à¸´ÔÓµÄÕûÐÎÖ¸Áî¶øÔÚÐÐΪÉÏÈÔÊÇÒ»¸öСѭ»·¡£ ¸´Ôӵĸ¡µãÖ¸ÁîºÍMMXÖ¸ÁîÒ²¼ÆÎª1ÌõÖ¸Áî¡£ ×¢Ò⣬¸Ã·¨ÔòÖ»ÊÇÆô·¢ÐԵ쬲¢·ÇÍêÈ«¿É¿¿¡£ ÖØÒªµÄÊÇʵÑé²âÊÔ¡£ ÔÚPMMXÉÏ£¬Äã¿ÉÒÔÓÃÐÔÄÜ¼à¿ØÆ÷35HΪ·ÖÖ§Ô¤²âµÄʧ°Ü¼ÆÊý¡£ ²âÊÔ½á¹ûÒ²ÊDz»È·¶¨µÄ£¬ÒòΪ·ÖÖ§Ô¤²âµÄ½á¹ûÈ¡¾öÓÚBTB±íÏî·ÖÅä֮ǰµÄÀúÊ·¼Ç¼¡£

ÔÚPPro£¬PIIºÍPIIIÉÏСѭ»·µÄÔ¤²âÊÇÕý³£µÄ£¬ÒòΪÿ´Îµþ´úÖÁÉÙÒª»¨È¥2¸öʱÖÓÖÜÆÚÓÃÓÚ¸üÐÂÊý¾Ý¡£


22.2.9  ¼ä½ÓÌø×ªºÍµ÷ÓÃ(PMMX£¬PPro£¬PIIºÍPIII)

¼ä½ÓÌø×ªºÍµ÷ÓÃûÓÐģʽʶ±ð»úÖÆ£¬¶ÔÓÚÒ»¸ö¼ä½ÓÌø×ª£¬BTB Ö»ÄܼÇסһ¸öÄ¿±ê¡£ËüÖ»ÊǼòµ¥µØÔ¤²âµ½´ïÓëÉÏÒ»´ÎÏàͬµÄÄ¿±ê¡£


22.2.10 ¡¡JECXZºÍLOOP(PMMX)

ÔÚPMMXÉÏ£¬ÕâÁ½¸öÖ¸ÁîûÓÐģʽʶ±ð¡£ ËüÃDZ»¼òµ¥µØÔ¤²âÓë×î½üÒ»´ÎÖ´ÐеÄÄ¿±êÏàͬ¡£ Òò´ËPMMXÉÏ£¬¶ÔÔËÐÐʱ¼ä¿Á¿ÌµÄ´úÂëÒª±ÜÃâÕâÁ½ÌõÖ¸Áî(ÔÚPPro£¬PIIºÍPIIIÉ϶ÔËüÃÇÓÐģʽʶ±ð»úÖÆ£¬µ«ÊÇloopÖ¸ÁîµÄЧÂÊÈÔÈ»µÍÓÚDEC ECX/JNZ)¡£


22.2.11  ·µ»Ø(PMMX£¬PPro£¬PIIºÍPIII)

PMMX£¬PPro£¬PIIºÍPIIIÉÏÓÐÒ»¸ö·µ»ØÕ»»º´æ(RSB)ÓÃÓÚÔ¤²â·µ»ØÖ¸Áî¡£ RSB¹¤×÷ʱÊÇÏȽøºó³ö¡£ ÿµ±CALLÖ¸Áî±»Ö´ÐÐʱ£¬ÏàÓ¦µÄ·µ»ØµØÖ·±»Ñ¹ÈëRSB¡£ ÿ´Î·µ»ØÖ¸ÁîÖ´ÐÐʱ£¬Ò»¸ö·µ»ØµØÖ·µ¯³öRSBÓÃÓÚÔ¤²â·µ»ØµØÖ·¡£ ¸Ã»úÖÆ±£Ö¤ÁËͬһ¸ö×Ó³ÌÐò£¬ÄÄÅÂÔÚ²»Í¬µÄµØ·½±»µ÷Óã¬Æä·µ»ØÖ¸ÁîÒ²Äܱ»ÕýÈ·µØÔ¤²â¡£

ΪÁ˱£Ö¤¸Ã»úÖÆµÄÕý³£¹¤×÷£¬Äã±ØÐë±£Ö¤ËùÓеÄCALLºÍ·µ»ØÖ¸ÁîÆ¥Åä¡£ ²»ÒªÃ»Óзµ»Ø±ã´ÓÒ»¸ö×Ó¹ý³ÌÌø³ö£¬Èç¹ûËÙ¶ÈÒªÇó¿Á¿ÌµÄ»°£¬²»Òª½«·µ»ØÖ¸Áîµ±×÷¼ä½ÓÌø×ªÖ¸ÁîʹÓá£

ÔÚPMMXÉÏ£¬RSB¿ÉÓÐËĸö±íÏÔÚPPro£¬PIIºÍPIIIÉÏ¿ÉÓÐ16¸ö¡£ ÔÚRSB¿ÕµÄÇé¿öÏ£¬·µ»ØÖ¸ÁîµÄÔ¤²âÓë¼ä½ÓÌø×ªÖ¸ÁîÏàͬ£¬¼´Ëü±»Ô¤²âΪµ½´ïÓëÉÏÒ