²Ä24³¹¡@²L½Í¾÷±ñ½X

¦b²Ä¤@³¹®É´¿´£¨ì¹L¾÷±ñ½X¡]machine code¡^¡A¨º®É­Ô»¡¹L¾÷±ñ½X¬O¤@³s¦êªº¤Q¤»¶i¦ì¼Æ­È¡A´«ºâ¦¨¤G¶i¦ì¡A´N¬O¤@³s¦êªº¡u0¡v»P¡u1¡v¡A´N¦¨¬° CPU ¯à¬Ý±oÀ´¡A¤]ª¾¹D¦p¦ó°õ¦æªº«ü¥O»P¸ê®Æ¡C¨Ò¦p CPU ¬Ý¨ì¡u00¡v´Nª¾¹D³o¬O¡uADD¡v«ü¥O¡A¬Ý¨ì¡u10H¡v´Nª¾¹D¬O¡uADC¡v«ü¥O¡C¡u00¡v¡B¡u10H¡v¬O¾÷±ñ½X¡F¡uADD¡v¡B¡uADC¡v¬O x86 «ü¥O¡A¥ç¥iºÙ§U°O¾Ð½X¡]mnemonic code¡^¡C

³Ìªñ¬Ý¨£¦ÑùªºÄ}¯É¤Ñ¦a¡A¦³¤¶²Ð¾÷±ñ½Xªº¤@ºØ»¡ªk¡A«Ü¦³³Ð·N¡C¥H¤U¸`¦Û¦ÑùªºÄ}¯É¤Ñ¦a¡G

¦b¶}©l¦^µª¤°»ò¬O OpCode ¤§«e¡A½ÐÅý§Ú¥ý¨Ó´£´X­Ó¤p°ÝÃD¡C

  1. ­pºâ¾÷¥u»{ÃÑ 0 ©M 1 ¶Ü¡H
  2. ¦pªG¤W­±ªº¦^µª¬O¡u¬O¡v¡A¨º»ò§Ú­Ì¥­®É¼gªºµ{§Ç·½¥N½X¬O 0 ©M 1 ¶Ü¡H
  3. ¦pªG¤W­±ªº¦^µª¬O¡u¤£¬O¡v¡A¨º»ò­pºâ¾÷¬O«ç»ò¡uª¾¹D¡v§Ú­Ìªºµ{§Çªº·N«äªº¡H

«ö¶¶§Ç§@µª¡A¨Ì¦¸¬O¡G

  1. ¬O¡C
  2. ¤£¬O¡C
  3. ¡H¡H¡H

³Ì«á¤@­Ó°ÝÃDªºµª®×¬O¡K¡K¡H§Ú­Ì¨ÓÁ|­Ó¨Ò¤l¡K¡K

¦Ñù©ÒÁ|ªº¨Ò¤l¬O¡uNOP¡v«ü¥O¡A¨ä¾÷±ñ½X¬O¡u90H¡v¡C´N¸ò¤p¤ì°¸Á|¡uADD¡v¡B¡uADC¡v«ü¥O¡A¨ä¾÷±ñ½X¬O¡u00¡v¡B¡u10H¡v¤@¼Ëªº­ì²z¡C

¹ï¤HÃþ¦Ó¨¥¡A§U°O¾Ð½X¸û©ö²z¸Ñ¡A¾÷±ñ½X«hÃø¥H²z¸Ñ¡C³o¤]´N¬O§Ú­Ì¥Î²Õ¦X»y¨¥¼¶¼g¦n­ì©lµ{¦¡¤§«á¡AÁÙ­n¥æ¥Ñ²ÕĶ¾¹±N¨ä¡u½Ķ¡v¦¨¾÷±ñ½X¡CÁÙ°O±o¶Ü¡H§â¥Î²Õ¦X»y¨¥¼¶¼g¦nªº­ì©lµ{¦¡Âà´«¦¨¾÷±ñ½Xªº¹Lµ{ºÙ¬°²ÕĶ¡A¤Ï¹L¨Óªº¹Lµ{«hºÙ¬°¤Ï²ÕĶ¡A¦p¤U¹Ï¡C³o¤@³¹±N­n½Í x86 «ü¥O©M¾÷±ñ½XªºÃö«Y¡C

x86 CPU ®a±Ú¦Û¥Á°ê 67 ¦~¡]¦è¤¸ 1978 ¦~¡^µo®i¦Ü¤µ¡A¸g¾ú¹L³\¦h¦¸§ï­²¡C¸û¬°­«¤jªº¬O±q 16 ¦ì¤¸¨ì 32 ¦ì¤¸¶¥¬q¡A¦h¤F«OÅ@¼Ò¦¡»PµêÀÀ 86 ¼Ò¦¡¡F±q 32 ¦ì¤¸¨ì 64 ¦ì¤¸¡A¤S·s¼W¤Fªø¼Ò¦¡¡]long mode¡^¡C¦]¬°·L³n»P­^¯Sº¸µLªk©ñ±ó¬J¦³ªºÃe¤j«È¤á¡A©Ò¥HÁöµM¸g¹L¦h¦¸ÅÜ­²¡A³£·|¿í¦u¦V¤U¬Û®e¡]downward compatibility¡A¤SºÙ¦^·¹¬Û®e©Î¦V«á¬Û®e¡A­^¤å¬O backward compatibility¡^ªº­ì«h¡C

¦V¤U¬Û®eªº·N«ä¬O¸û±ß¶}µoªº CPU ¯à°õ¦æ¸ûªº CPU ©Ò¦³¥\¯à¡A¦ý·s¼W¤F¤@¨Ç¥\¯à©Î§ï¶i¤@¨Ç¯ÊÂI¡C¦P®É¦³®É­Ô¤S¦³°Ó·~¦Ò¶q¡A³o¼Ë´N³y¦¨ x86 CPU ¶V¨Ó¶V½ÆÂø¡C¹ï©óªì¾ÇªÌ¡A¤]¶V¨Ó¶VÃø¥H²z¸Ñ¡A³y¦¨¾Ç²ß¤Wªº§xÃø¡C¦b³o¸Ì¡A¤p¤ì°¸¥ý¤¶²Ð x86 CPU ªº¶}¤s¦Ñ¯ª¡A8086/8088 µ¥¤Q¤»¦ì¤¸ CPU ªº¾÷±ñ½X¡AµM«á¤¶²Ð¤T¤Q¤G¦ì¤¸ CPU ªº¾÷±ñ½X¡A³Ì«á¤¶²Ð¤»¤Q¥|¦ì¤¸ CPU ªº¾÷±ñ½X¡C


¤Q¤»¦ì¤¸ CPU ªº¾÷±ñ½X

ÁöµM x86 ®a±Ú¤¤¡A¤Q¤»¦ì¤¸ CPU ¦³ 8086/8088 ¥H¤Î 80286 ¤TºØ¡A¦ý 80286 Á٨㦳¤Q¤»¦ì¤¸ªº«OÅ@¼Ò¦¡«ü¥O¡A¦ý²{¤w²^¨O¥B¤£¦A¨Ï¥Î¡A©Ò¥H¦¹³B¶È¤¶²Ð 8086/8088 CPU ªº¾÷±ñ½X¡C

¤@¹D 8086/8088 «ü¥O¡AÂà´«¦¨¾÷±ñ½X¤§«á¡A¾÷±ñ½Xªºªø«×¨Ã¤£©T©w¡A³Ì¤Ö¤@­Ó¦ì¤¸²Õ¡A³Ì¦h¦³¤»­Ó¦ì¤¸²Õ¡C8086/8088 CPU ¾÷±ñ½Xªº®æ¦¡¦p¤U¹Ï¡G ²Ä¤@­Ó¦ì¤¸²ÕºÙ¬° BYTE1¡A¦ì©ó³Ì§C¦ì§}¡F²Ä¤G­Ó¦ì¤¸²ÕºÙ¬° BYTE2¡A¦ì©ó¤ñ BYTE1 °ª¤@­Ó¦ì¤¸²Õªº¦ì§}¤W¡F¨ä¾l¦ì¤¸²Õ¨Ì¦¸©¹°ª¦ì§}¦s©ñ¡C³o¤»­Ó¦ì¤¸²Õ¡A¥u¦³ BYTE1 ¬O¥²©w¦s¦bªº¡A¨ä¾l«h¬O¨Ì¾Ú BYTE1 ¨M©w¬O§_¦³¥²­n¡A¦]¦¹ BYTE2¡ãBYTE6 ¥i¦³¥iµL¡C

¾Þ§@½X¡]OpCode¡^

¤j³¡¤Àªº¤åÄm§â BYTE1 ºÙ¬°¡uOpCode¡v¡A¬O operation code ªºÁY¼g¡A¤@¯ë½Ķ¬°¡u¾Þ§@½X¡v¡A©Î¡u¹Bºâ½X¡v¡C¥¦¨M©w¤F CPU ­n°õ¦æ­þ¤@ºØ«ü¥O¡A¨Ò¦p OpCode ¦b 00H¡ã05H ¤§¶¡¡A³£¬O ADD «ü¥O¡F°²¦p OpCode ¬O 06H¡A´N¬O PUSH «ü¥O¡COpCode ªº²Ä¹s¡B²Ä¤@¦ì¤¸µø OpCode ¤£¦P¡A¦³®É­Ô¦³¯S®í·N¸q¡A¦³®É«h¨S¦³¡C¦pªG¦³ªº¸Ü¡A¨ä·N¸q¬O¡G

1.²Ä¹s¦ì¤¸¡GºÙ W ¦ì¤¸¡Aªí¥Ü¹Bºâ¤¸¼e«×¡C­Y¬° 0¡Aªí¥Ü¤K¦ì¤¸¡F­Y¬° 1¡Aªí¥Ü 16 ¦ì¤¸¡C

2.²Ä¤@¦ì¤¸¡GºÙ D ¦ì¤¸¡Aªí¥Ü¸ê®Æ¦V­þ­Ó¤è¦V¦s¤J¡A§ó·Ç½Tªº»¡¡AD ¦ì¤¸¬O¥Î¨Óªí¥Ü BYTE2 ªº Reg ¬O¨Ó·½¹Bºâ¤¸ÁÙ¬O¥Øªº¹Bºâ¤¸¡C­Y D¡×0¡Aªí¥Ü Reg ¬O¨Ó·½¹Bºâ¤¸¡FD¡×1¡Aªí¥Ü Reg ¬O¥Øªº¹Bºâ¤¸¡C

OpCode ªº§¹¾ã¦Cªí¡AÀ³¸Ó¬d¾\­^¯Sº¸ªº¸ê®Æ¡AIntel® Architecture Software Developer Manual ªº²Ä¤G¨÷ Volume 2:Instruction Set Reference¡A¦b¨ä«á­±ªº Appendix A OpCode Map ¦³§¹¾ãªº¸ê®Æ¡C³o¥÷¤åÄm¥]§t¤F±q 8086/8088 ¨ì³Ì·sªº x86¡Ð64 «ü¥O¡C¦ý¬O³o¥»¤Ó½ÆÂø¤F¡A¥t¥~ÁÙ¦³¤@¥»­^¯Sº¸µo¦æªº¹q¤l®Ñ 9800722-03_The_8086_Family_Users_Manual_Oct79.pdf¡A¤]¦³¸ÔºÉªº¸ê®Æ¡A¦Ó¥B¶È¤¶²Ð 8086/8088 CPU¡C¦¹¥~¡A¦b¤p¤ì°¸ªººô­¶ DOS ²Õ¦X»y¨¥ªþ¿ý¤C¤]¦C¥X¡u8086/8088 OpCode Map¡vªí®æ¡C

ModR/M ¦ì¤¸²Õ

BYTE2 ¤]ºÙ¬° ModR/M ¦ì¤¸²Õ¡A¥i¤À¬°¤T­ÓÄæ¦ì¡G①²Ä 6¡ã7 ¦ì¤¸¬O Mod¡A¨M©w©w§}¼Ò¦¡¡]addressing mode¡^¡C②²Ä 3¡ã5 ¦ì¤¸¬O Reg¡A«ü©w¤F¼È¦s¾¹¡C③²Ä 0¡ã2 ¦ì¤¸¡G¬O R/M¡]register/memory¡^¡A»P Mod ¬Û¤¬·f°t¨M©w©w§}¼Ò¦¡¤¤ªº¼È¦s¾¹¡CR/M »P Mod ¤§¶¡ªºÃö«Y¤Î·N¸q¦p¤Uªí¡G

8086/8088 Mod »P R/M ªºÃö«Y
R/MMod¡×00Mod¡×01 Mod¡×10Mod¡×11
W¡×1W¡×0
000[BX+SI][BX+SI+D8][BX+SI+D16]AXAL
001[BX+DI][BX+DI+D8][BX+DI+D16]CXCL
010[BP+SI][BP+SI+D8][BP+SI+D16]DXDL
011[BP+DI][BP+DI+D8][BP+DI+D16]BXBL
100[SI][SI+D8][SI+D16]SPAH
101[DI][DI+D8][DI+D16]BPCH
110°O¾ÐÅé¦ì§}[BP+D8][BP+D16]SIDH
111[BX][BX+D8][BX+D16]DIBH

¤Ö¼Æ±¡§Î¤U¡AOpCode ·|©µ¦ù¨ì ModR/M¡A³oºØ±¡§Îµo¥Í¦b OpCode ¬O 80H¡ã83H¡B0D0H¡ã0D3H¡B0F6H¡B0F7H¡B0FEH¡B0FFH ªº®É­Ô¡CModR/M ­ì¥»¬O¤T­ÓÄæ¦ì¡GMod¡BReg¡AR/M ©Ò²Õ¦¨¡A·í¾Þ§@½X©µ¦ù¨ì ModR/M ®É¡AReg Äæ¦ì´NÅܦ¨¾Þ§@½X©µ¦ùªº¦a¤è¡A¨ä¾l¨â­ÓÄæ¦ì¤´¤£ÅÜ¡C

°²¦p OpCode ©µ¦ù¨ì ModR/M ¦ì¤¸²Õ¡A¨º»ò¦bªþ¿ý¤Cªº¡u8086/8088 OpCode MAP¡vªí®æ¤¤¡A·|¼Ð¥Ü¦¨¡uGRP?¡v¡]? ªí¥Ü¼Æ¦r¡^¡C³o®É­Ô­nª¾¹D¯u¥¿ªº«ü¥O¡AÁÙ¥²¶·¬d¾\ªþ¿ý¤Cªº¡u8086/8088 OpCode Extensions¡v¡C

ModR/M ¦ì¤¸²Õ¤¤¤T­ÓÄæ¦ì¤w¤¶²Ð§¹¨â­Ó¡A¥u³Ñ Reg Äæ¦ì¡A¨ä¼Æ­È»P·N¸q¡A¦p¤Uªí¡G

Reg ©Ò¥Nªíªº¼È¦s¾¹
Reg000001010011100101110111
¤K¦ì¤¸¼È¦s¾¹ALCLDLBLAHCHDHBH
¤Q¤»¦ì¤¸¼È¦s¾¹AXCXDXBXSPBPSIDI
¤T¤Q¤G¦ì¤¸¼È¦s¾¹EAXECXEDXEBXESPEBPESIEDI

ÁöµM©|¥¼´£¨ì¤T¤Q¤G¦ì¤¸ªº CPU¡A¦ý¬O¬°¤F¸`¬Ù½g´T¡A©Ò¥H¤Wªí¤]¦C¥X¤T¤Q¦ì¤¸ªº¼È¦s¾¹¡C

°¾²¾¦ì§}¡GBYTE3¡BBYTE4

BYTE3 »P BYTE4 ¥Nªí°¾²¾¦ì§}¡A´N¬O¤Wªí¤¤ªº D8 ©Î D16¡A¨Ì¾Ú OpCode ¤Î ModR/M ¨M©w»Ý­n D8 ÁÙ¬O D16¡A¬Æ¦Ü¥þ¬Ù²¤¡CD8 »P D16 ¬O¦³¸¹¼Æ¡A¤]´N¬O»¡¥¦­Ì¥i¥H¬O¥¿¼Æ¡A¤]¥i¥H¬O­t¼Æ¡C¦pªG¬O¥¿¼Æªí¥Ü©¹°ª¦ì§}¤è¦V©w§}¡F¦pªG¬O­t¼Æªí¥Ü©¹§C¦ì§}¤è¦V©w§}¡C

D8 ¥Nªí¤K¦ì¤¸ªº°¾²¾¦ì§}¡A¨ä½d³ò¦b¡Ð128¡ã127¤§¶¡¡A¦b BYTE2 ¤§«áÁÙ·|¦³ BYTE3 ¦Ó¬Ù²¤ BYTE4¡FD16 ¥Nªí¤Q¤»¦ì¤¸ªº°¾²¾¦ì§}¡A¨ä½d³ò¦b¡Ð32768¡ã32767¤§¶¡¡A¦b BYTE2 ¤§«áÁÙ·|¦³ BYTE3¡BBYTE4¡C

¥ß§Y­È¡GBYTE5¡BBYTE6

BYTE5¡BBYTE6 ¥Nªí¥ß§Y­È¡]immediate value¡A¥iµø¬°±`¼Æ¡^¡A¨Ì¾Ú OpCode ¤Î ModR/M ¨M©w¬O§_»Ý­n¥ß§Y­È¡A¦pªG¤£»Ý­n¡A¨º»ò BYTE5¡BBYTE6 ´N·|³Q¬Ù²¤¡F¦pªG»Ý­n¥ß§Y­È¡A¤]¨Ì¾Ú OpCode ¨M©w»Ý­n¤K¦ì¤¸ÁÙ¬O¤Q¤»¦ì¤¸ªº¥ß§Y­È¡A¦pªG¬O¤K¦ì¤¸¨º´N·|¬Ù²¤ BYTE6¡A¦pªG¬O¤Q¤»¦ì¤¸¨º BYTE5¡BBYTE6 ³£¦s¦b¡C

«e¸m½X¡]Prefix Byte¡^

ÁöµM¯u¥¿Åý«ü¥O°õ¦æªº¾÷±ñ½X´N¥u¬O¤W­±´£¨ìªº±q¾Þ§@½X¨ì¥ß§Y­È¡A¦ý¦³®É­Ô¬Y¨Ç«ü¥O·|¦b¾÷±ñ½X¤§«e¡A¥[¤W¸Ó«ü¥O»Ý­nªº¡u­×¹¢¡v°Ê§@¡A¨Ò¦p¬Y¨Ç«ü¥O¥i¥H¥[¤W­«½Æªº­×¹¢¡A¨Ï¨ä­«½Æ°Ê§@¡C³o¼Ëªº­×¹¢«ü¥OºÙ¬°«e¸m½X¡A¨ì¤F 32 ¦ì¤¸®É¡A¥¿¦¡§â«e¸m½X¯Ç¤J¨ì¾÷±ñ½X¤§¤¤¡C«e¸m½X¬O©ñ¦b BYTE1 ¤§«e¡A¤]´N¬O¤ñ BYTE1 §ó§C¦ì§}ªº¤@­Ó¦ì¤¸²Õ¡C8086/8088 «ü¥O¤¤¡A«e¸m½X¥i¤À¬°¤TºØ¡G

①¡G²Ä¤@ºØ¬O­«½Æ«ü¥O¡A¤S¤À¦¨¨âÃþ¡G⑴REP¡BREPE¡BREPZ ªº¾÷±ñ½X³£¬O 0F3H¡A³o¤T­Ó«ü¥O³£¬O¤@¼Ëªº¡C
¡@¡@¡@¡@¡@¡@¡@¡@¡@¡@¡@¡@¡@¡@¡@⑵REPNE¡BREPNZ ªº¾÷±ñ½X³£¬O 0F2H¡A³o¨â­Ó«ü¥O³£¬O¤@¼Ëªº¡C
³o¨âÃþ«ü¥O¦h¥Î©ó³B²z¦r¦ê¡A±`»P MOVSB¡BSTOSB¡K¡Kµ¥«ü¥O·f°t¡A¦]¦¹ 0F2H¡B0F3H ³Q·í§@¬O«e¸m½X¡C

②¡G²Ä¤GºØ¬O­â¶V°Ï¬q¡]¨£²Ä¤Q¤T³¹¡^¡A¨ä®æ¦¡¦p¥k¹Ï¡A¨â­Ó R ¦ì¤¸ªº·N¸q¦p¤Uªí¡G

¡@¡@¡@¡@¡@
RR ¦ì¤¸«e¸m¦ì¤¸²Õ°Ï¬q¼È¦s¾¹
0026HES
012EHCS
1036HSS
113EHDS

③¡G²Ä¤TºØ¬O LOCK «ü¥O¡A¨ä¾÷±ñ½X¬O 0F0H¡C

¥Ñ³o¤TÃþ±oª¾¡A¦pªG¾÷±ñ½X°_©lªº¦ì¤¸²Õ¬O¥H¤U¤C­Ó¡G0F3H¡B0F2H¡B26H¡B2EH¡B36H¡B3EH¡B0F0H ªº¨ä¤¤¤§¤@ªº¸Ü¡A¨º»ò´Nªí¥Ü¦¹¾÷±ñ½X¦³«e¸m½X¡A¥²¶·¤ñ¹ï¤W­±¤TºØ±¡§Î¡A§ä¥X«e¸m½Xªº·N¸q¡C¤@¹D«ü¥Oªº¾÷±ñ½X¦³¥i¯à¶W¹L¤@­Ó«e¸m½X¡A¦pªG³o¼Ëªº¸Ü¡A¶¶§Ç¨Ã¤£­«­n¡A³£¯à¥¿±`°õ¦æ¡C

¨Ò¤l

¾÷±ñ½X»P 8086/8088 «ü¥OªºÃö«Y¡A¤w¸g¤¶²Ð§¹¤F¡A©³¤U¨Ó¬Ý¬Ý´X­Ó¨Ò¤l¡C

¨Ò¤l¤@¡G¡u00 00¡v

  1. ­º¥ý 00 ¤£¬O¨º¤C­Ó«e¸m½X¤¤ªº¤@­Ó¡A©Ò¥H¦¹«ü¥O¨ÃµL«e¸m½X¡A±q¾Þ§@½X¶}©l¡C
  2. ²Ä¤@­Ó¾Þ§@½X 00¡A¬dªþ¿ý¤Cªº¡u8086/8088 OpCode Map¡v¡A±oª¾ 00 ªº«ü¥O¬O¡uADD Eb,Gb¡v¡C
    1. ¬d¾\ªþ¿ý¤C¡u8086/8088 Argument Addressing Codes¡v¡A±oª¾ E ªº·N«ä¬O¦¹¹Bºâ¤¸¥i¯à¬O³q¥Î¼È¦s¾¹¡A¤]¥i¯à¬O°O¾ÐÅé¡FG ªº·N«ä¬O ModR/M ªº Reg ¥Nªí³q¥Î¼È¦s¾¹¡C
    2. ¬d¾\ªþ¿ý¤C¡u8086/8088 Argument Operand Codes¡v¡A±oª¾ b ¥Nªí¦ì¤¸²Õ¡]byte¡^¡C
    ºî¦X¤W­±¨BÆJ i¡Bii¡A±oª¾ Eb ªí¥Üªø«×¬°¤@­Ó¦ì¤¸²Õªº°O¾ÐÅé©Î¼È¦s¾¹¡]¤@­Ó¦ì¤¸²Õ¨ä¹ê´N¬O¤K¦ì¤¸¡^¡C¦P²z¡AGb ¬Oªø«×¬°¤@­Ó¦ì¤¸²Õªº³q¥Î¼È¦s¾¹¡A¦Ó¦¹¼È¦s¾¹¬O­þ¤@­Ó«h¥²¶·¬d¾\¡uReg ©Ò¥Nªíªº¼È¦s¾¹¡v¡C
    ¦]¦¹¡A¡uADD Eb,Gb¡vªº·N«ä¬O§â¬Y­Ó¤@­Ó¦ì¤¸²Õªøªº°O¾ÐÅé©Î¼È¦s¾¹¡]Eb¡^¤§­È¡A¥[¤W Reg ©Ò¥Nªíªø«×¤@­Ó¦ì¤¸²Õªº¼È¦s¾¹¡]Gb¡^¤§­È¡A¦A¼g¤J¸Ó°O¾ÐÅé©Î¼È¦s¾¹ùØ­±¡C
  3. ModR/M ¬° 00¡A´«ºâ¦¨¤G¶i¦ì¬O 0000 0000¡A¬G Mod ¬° 00¡AReg ¬° 000¡AR/M ¬° 000¡C
    1. ¥Ñ Reg µ¥©ó 000¡A¬d¾\¡uReg ©Ò¥Nªíªº¼È¦s¾¹¡v±oª¾ 000 ¥i¯à¥Nªí EAX¡BAX ©Î AL¡A¦]¬°¥Ñ¨BÆJ 2 ±oª¾¬O¤K¦ì¤¸¡A©Î¥Ñ W ¦ì¤¸¬°¹s¤]¥iª¾¼È¦s¾¹¬O¤K¦ì¤¸¡A¬G Reg ¥Nªí¡uAL¡v¡A¤]´N¬O»¡¡uGb¡v¥Nªí¡uAL¡v¡C
    2. ¥H Mod ¬° 00 ¥H¤Î R/M ¬° 000 ·f°t¡A¬d¾\¡u8086/8088 Mod »P R/M ªºÃö«Y¡v¡A±o¨ì Ev ¬°¡u[BX+SI]¡v¡A¦¹¬°°O¾ÐÅé¨Ã«D¼È¦s¾¹¡C
  4. ºî¦X²Ä 2¡B3 ¨BÆJ¡A±oª¾¡u00 00¡v¤Ï²ÕĶ«á¬O¡uADD [BX+SI],AL¡v¡C

¨Ò¤l¤G¡G¡u05 77H 2AH¡v

  1. ­º¥ý 05 ¤£¬O¨º¤C­Ó«e¸m½X¤¤ªº¤@­Ó¡A©Ò¥H¦¹«ü¥O¨ÃµL«e¸m½X¡A±q¾Þ§@½X¶}©l¡C
  2. ²Ä¤@­Ó¾Þ§@½X 05¡A¬dªþ¿ý¤Cªº¡u8086/8088 OpCode Map¡v¡A±oª¾ 05 ªº«ü¥O¬O¡uADD AX,Iv¡v¡C¨ä¤¤ªº I ¬O¥ß§Y­È¡]immediate value¡A¨£ªþ¿ý¤C8086/8088 Argument Addressing Codes¡^¡Av ¥Nªí¦r²Õ¡]¨£ªþ¿ý¤C8086/8088 Argument Operand Codes¡^¡C¨ì¦¹±oª¾¡A05 ¬O§â AX ¤§­È¥[¤W¬Y­Óªø¬°¤@¦r²Õªº±`¼Æ¡C
  3. ¦¹¥ß§Y­È´N¬O«á­±ªº 77H 2AH¡A¦ý¦]¬° x86 ®a±Úªº¹q¸£¡A¨ä¸ê®ÆÀx¦s³£¬O¥H¤p§ÇºÝ¤è¦¡¦s©ó°O¾ÐÅ餤¡A¬G¥ß§Y­È¬°¡u2A77H¡v¡C
  4. ºî¦X²Ä 2¡ã3 ¨BÆJ¡A±oª¾¡u05 77H 2AH¡v¤Ï²ÕĶ«á¬O¡uADD AX,2A77H¡v¡C

¨Ò¤l¤T¡G¡u0EH¡v

  1. ­º¥ý 0EH ¤£¬O¨º¤C­Ó«e¸m½X¤¤ªº¤@­Ó¡A©Ò¥H¦¹«ü¥O¨ÃµL«e¸m½X¡A±q¾Þ§@½X¶}©l¡C
  2. ²Ä¤@­Ó¾Þ§@½X 0EH¡A¬dªþ¿ý¤Cªº¡u8086/8088 OpCode Map¡v¡A±oª¾ 0EH ªº«ü¥O¬O¡uPUSH CS¡v¡C¨ì¦¹´Nµ²§ô¤F¡C

¨Ò¤l¥|¡G¡u89H 0D8H¡v

  1. ­º¥ý 89H ¤£¬O¨º¤C­Ó«e¸m½X¤¤ªº¤@­Ó¡A©Ò¥H¦¹«ü¥O¨ÃµL«e¸m½X¡A±q¾Þ§@½X¶}©l¡C
  2. ²Ä¤@­Ó¾Þ§@½X 89H¡A¬dªþ¿ý¤Cªº¡u8086/8088 OpCode Map¡v¡A±oª¾ 89H ªº«ü¥O¬O¡uMOV Ev,Gv¡v¡]Ev¡BGv ªº·N¸q¥i¥H¬Ý«e¤T­Ó¨Ò¤l¡A©Î¬O¬d¾\ªþ¿ý¤Cªº¡u8086/8088 Argument Addressing Codes¡v¥H¤Î¡u8086/8088 Argument Operand Codes¡v¡^¡C¨ì¦¹±oª¾¡A89H ¬O§â Reg ©Ò¥Nªíªø¤@­Ó¦r²Õªº¼È¦s¾¹¡]Gv¡^¤§­È¡A²¾¨ì¬Y­Ó¼È¦s¾¹©Î°O¾ÐÅé¡]Ev¡^ùØ­±¡C
  3. ModR/M ¬° 0D8H¡A´«ºâ¦¨¤G¶i¦ì¬O 1101 1000¡A¬G Mod ¬° 11¡AReg ¬° 011¡AR/M ¬° 000¡C
    1. ¥Ñ Reg µ¥©ó 011¡A¬d¾\¡uReg ©Ò¥Nªíªº¼È¦s¾¹¡v±oª¾ 011 ¥i¯à¥Nªí EBX¡BBX ©Î BL¡A¦]¬°¥Ñ¤W¤@¨BÆJ±oª¾¬O¦r²Õ¡A©Î¥Ñ W ¦ì¤¸¬°¤@¤]¥iª¾¼È¦s¾¹ªø«×¬O¦r²Õ¡A¬G¿ï¾Ü¡uBX¡v¡C
    2. ¥H Mod ¬° 11 ¥H¤Î R/M ¬° 000 ·f°t¡A¬d¾\¡u8086/8088 Mod »P R/M ªºÃö«Y¡v¡A±o¨ì Ev ¬°¡uAX¡v¦Ó«D°O¾ÐÅé¦ì§}¡C
  4. ¥Ñ OpCode ªº D ¦ì¤¸¡]²Ä¤@­Ó¦ì¤¸¡^¬°¹s±oª¾¡AReg ¬°¨Ó·½¹Bºâ¤¸¡A¤]´N¬O BX ¬°¨Ó·½¹Bºâ¤¸¡C©Î¬O¥Ñ Gv ©Ò¥Nªíªº Reg ¬O BX¡A¥B¥Ñ 89H ªº«ü¥O¬O¡uMOV Ev,Gv¡v¡A¤]¥iª¾¹D BX ¬O¨Ó·½¹Bºâ¤¸¡C
  5. ºî¦X²Ä 2¡B3 ii¡B4 ¨BÆJ±oª¾¡u89H 0D8H¡v¤Ï²ÕĶ«á¬O¡uMOV AX,BX¡v¡C

¨Ò¤l¤­¡G¡u80H 07 2AH¡v

  1. ­º¥ý 80H ¤£¬O¨º¤C­Ó«e¸m½X¤¤ªº¤@­Ó¡A©Ò¥H¦¹«ü¥O¨ÃµL«e¸m½X¡A±q¾Þ§@½X¶}©l¡C
  2. ²Ä¤@­Ó¾Þ§@½X 80H¡A¬dªþ¿ý¤Cªº¡u8086/8088 OpCode Map¡v¡A±oª¾ 80H ªº«ü¥O¬O¡uGRP1 Eb,Ib¡v¡C
  3. ¦]¬°¬d¨ì¤F GRP?¡A¬G ModR/M ªº Reg ¬O OpCode ªº©µ¦ù¡CModR/M ¬° 07¡A´«ºâ¦¨¤G¶i¦ì¬O 0000 0111¡A¬G Mod ¬° 00¡AOpCode ªº©µ¦ù¬° 000¡AR/M ¬° 111¡C
  4. ¥H OpCode ©µ¦ù¦Ü ModR/M ªº²Ä 3¡ã5 ¦ì¤¸¡A000¡A¥H¤Î GRP1 ¬d¾\ªþ¿ý¤Cªº¡u8086/8088 OpCode Extensions¡v±oª¾ GRP1 ¥Nªí¡uADD¡v¡C
  5. ¥Ñ¨BÆJ 2¡B4 ±oª¾ 80H 07 ¥Nªí¡uADD Eb,Ib¡v¡A±µ¤U¨Ó¬d¥X Eb¡BIb ªº·N¸q¡G
    1. ¬d¾\ªþ¿ý¤C¡u8086/8088 Argument Addressing Codes¡v¡A±oª¾ E ªº·N«ä¬O¦¹¹Bºâ¤¸¥i¯à¬O³q¥Î¼È¦s¾¹¡A¤]¥i¯à¬O°O¾ÐÅé¡FI ªº·N«ä¬O±`¼Æ¡C
    2. ¬d¾\ªþ¿ý¤C¡u8086/8088 Argument Operand Codes¡v¡A±oª¾ b ¥Nªí¦ì¤¸²Õ¡C
    ºî¦X¤W­±¨BÆJ i¡Bii¡A±oª¾¡uADD Eb,Ib¡v¬O§â¬Y­Ó¤K¦ì¤¸ªº°O¾ÐÅé©Î¼È¦s¾¹¥[¤W¬Y­Ó±`¼Æ¡C
  6. ¦¹±`¼Æ Ib ´N¬O±µ¦b ModR/M ¦ì¤¸²Õ¤§«áªº 2AH¡C
  7. ¥H Mod ¬° 00 ¥H¤Î R/M ¬° 111 ·f°t¡A¬d¾\¡u8086/8088 Mod »P R/M ªºÃö«Y¡v¡A±o¨ì Eb ¬O¡u[BX]¡v¡C
  8. ºî¦X¨BÆJ 5¡ã7¡A±o¨ì¡u80H 07 2AH¡v¤Ï²ÕĶ«á¬O¡uADD BYTE PTR [BX],2AH¡v¡C¡]¥[¤W¡uBYTE PTR¡vªº­ì¦]¬O¦]¬°¡A¡u[BX]¡v¡B2AH ³o¨â­Ó¹Bºâ¤¸³£µLªk¬Ý¥X¨äªø«×¬O¦r²ÕÁÙ¬O¦ì¤¸²Õ¡C¡^

¨Ò¤l¤»¡G¡u2EH 8BH 56H 0F0H¡v

  1. ­º¥ý 2EH ¬O¤C­Ó«e¸m½X¤¤ªº¤@­Ó¡A¬d¾\«e¸m½X¡A±oª¾ 2EH ¥Nªí­â¶V°Ï¬q¡A¡uCS:¡v¡C
  2. ²Ä¤@­Ó¾Þ§@½X 8BH¡A¬dªþ¿ý¤Cªº¡u8086/8088 OpCode Map¡v¡A±oª¾ 8BH ªº«ü¥O¬O¡uMOV Gv,Ev¡v¡C¨ì¦¹±oª¾ 8BH ¬O§â¬Y­Óªø«×¬°¦r²Õªº°O¾ÐÅé©Î¼È¦s¾¹¡]Ev¡^¤§­È¦s¤J Reg ©Ò¥Nªíªº¼È¦s¾¹¡]Gv¡^ùØ­±¡C
  3. ModR/M ¬° 056H¡A´«ºâ¦¨¤G¶i¦ì¬O 0101 0110¡A¬G Mod ¬° 01¡AReg ¬° 010¡AR/M ¬° 110¡C
    1. ¥Ñ Reg µ¥©ó 010¡A¬d¾\¡uReg ©Ò¥Nªíªº¼È¦s¾¹¡v±oª¾ 010 ¥i¯à¥Nªí EDX¡BDX ©Î DL¡A¦]¬°¥Ñ¤W¤@¨BÆJ±oª¾ªø«×¬O¦r²Õ¡A©Î¥Ñ W ¦ì¤¸¬° 1¡A¤]¥iª¾¼È¦s¾¹ªø«×¬O¦r²Õ¡A¬G Gv ¬O¡uDX¡v¡C
    2. ¥H Mod ¬° 01 ¥H¤Î R/M ¬° 110 ·f°t¡A¬d¾\¡u8086/8088 Mod »P R/M ªºÃö«Y¡v¡A±o¨ì Ev ¬°¡u[BP+D8]¡v¡A¦¹¬°°O¾ÐÅé¨Ã«D¼È¦s¾¹¡C
    3. ¥Ñ¨BÆJ ii¡A±o¨ìªº¡u[BP+D8]¡v¡A¨ä¤¤ªº D8 ¬°¤K¦ì¤¸ªº°¾²¾¦ì§}¡A§Y ModR/M «á­±±µµÛªº 0F0H¡C¦ý¬O 0F0H ¬°­t­È¡A¨ä¹ê´N¬O¡Ð10H¡A¦]¦¹ D8 ´N¬O¡Ð10H¡C
  4. ºî¦X©Ò¦³¨BÆJ±oª¾¡A¡u2EH 8BH 56H 0F0H¡v¤Ï²ÕĶ«á¬O¡uMOV DX,CS:[BP¡Ð10H]¡v¡C

¾÷±ñ½XÁÙ¥X²{¦b­þ¸Ì¡Hµª®×¬O¦CªíÀÉ

¤@¯ë¦Ó¨¥¡A¾÷±ñ½X¤£±`¨Ï¥Î¡A³Ì±`¥X²{ªº¦a¤è¬O°£¿ùµ{¦¡¡A¹³ DEBUG¡BSYMDEB ³£¤@©w·|¥Î¨ì¡C°£¦¹¤§¥~¡AÁÙ·|¥X²{¦b­þ¸Ì©O¡HÁÙ¦³´N¬O¦CªíÀÉ¡C

¦CªíÀɬO¦b²ÕĶ­ì©lµ{¦¡®É¡A«ü©w¡u/Fl¡v©Î¡u-Fl¡v¿ï¶µ«á¡A¥Ñ ML.EXE ®Ú¾Ú­ì©lµ{¦¡»s³y¥X¨ÓªºÀɮסC¦CªíÀɪº°ÆÀɦW¬O¡uLST¡v¡A¬O¯Â¤å¦rÀÉ¡A¥i¥H¥Î¤@¯ë¤å®Ñ³B²z³nÅé¡A¨Ò¦p UltraEdit32¡B°O¨Æ¥»µ¥³nÅé¶}±Ò¡C

¤f»¡µL¾Ì¡A¹ê»Ú»s§@¤@¥÷¦CªíÀɨӸոաC¥H²Ä¤Q¤@³¹ªº HELLOW1.ASM ¬°¨Ò¤l¡A¦b¶i¤J MS¡ÐDOS µêÀÀ¾÷¾¹®É¡A¿é¤J¤U­±¶À¦â¦rªº«ü¥O¡G

C:\>e: [Enter]

E:\>cd dos\exe [Enter]

E:\DOS\EXE>ml /Fl hellow1.asm [Enter] ¡÷¥[¤W¡u/Fl¡v¿ï¶µ¡A¥H»s³y¦CªíÀÉ
Microsoft (R) Macro Assembler Version 6.11
Copyright (C) Microsoft Corp 1981-1993.  All rights reserved.

 Assembling: hellow1.asm

Microsoft (R) Segmented Executable Linker  Version 5.31.009 Jul 13 1992
Copyright (C) Microsoft Corp 1984-1992.  All rights reserved.

Object Modules [.obj]: hellow1.obj
Run File [ascii2.com]: "hellow1.exe"
List File [nul.map]: NUL
Libraries [.lib]: 
Definitions File [nul.def]:

E:\DOS\EXE>

²ÕĶ¹Lµ{¤¤¿é¤J¡u/Fl¡v¡A¥i¥H©R¥O ML.EXE »s§@¥X¦CªíÀɨӡC­n»s§@¦CªíÀÉ¡A¶·ª`·N©³¤Uªº¨Æ¡G

  1. ¿é¤J¡u-Fl¡v¤]¦³¤@¼Ëªº®ÄªG¡C¨Æ¹ê¤W¡AML.EXE ªº©Ò¦³¿ï¶µ°_ÀY¡A¥i¥Î¡u/¡v©Î¡u-¡v¡A®ÄªG¤@¼Ë¡C
  2. ML.EXE ªº¿ï¶µ¦³¤j¤p¼g¤§¤À¡A©Ò¥H¤£¥i¥H¼g¦¨¡u/fl¡v©Î¡u/FL¡v¡C
  3. ¡u/Fl¡v¤§«á¥i¥H¤£«ü©w¦CªíÀÉÀɦW¡A¤]¥i¥H«ü©w¦CªíÀɪºÀɦW¡C

­ì©lµ{¦¡»P¦CªíÀɪº®t§O

­ì©lµ{¦¡¡]°ÆÀɦW¬O ASM¡^»P¦CªíÀÉ¡]°ÆÀɦW¬O LST¡^³£¬O¯Â¤å¦rÀÉ¡A¨º»ò¦³¦ó°Ï§O¡H§Ú­Ì§â¤w»s§@¦n HELLOW1.ASM »P HELLOW1.LST ¦C¦¨¤Uªí¬Û¤¬¤ñ¸û¡A´Nª¾¹D¦³¦ó¤£¦P¤F¡G

HELLOW1.ASMHELLOW1.LST




.Model SMALL,C .386 .STACK ;*************************************** .DATA msg DB "Hellow, World.$" ;*************************************** .CODE .STARTUP mov dx,OFFSET msg mov ah,9 int 21h .EXIT 0 ;*************************************** END
Microsoft (R) Macro Assembler Version 6.11                    10/12/23 21:47:27
hellow1.asm                                                     Page 1 - 1


                                .Model  SMALL,C
                                .386
                                .STACK
                                ;***************************************
 0000                           .DATA
 0000  48 65 6C 6C 6F 77        msg     DB      "Hellow, World.$"
       2C 20 57 6F 72 6C
       64 2E 24
                                ;***************************************
 0000                           .CODE
                                        .STARTUP
 0010  BA 0000 R                        mov     dx,OFFSET msg
 0013  B4 09                            mov     ah,9
 0015  CD 21                            int     21h
                                        .EXIT   0
                                ;***************************************
                                END
 
.Microsoft (R) Macro Assembler Version 6.11                    10/12/23 21:47:27
hellow1.asm                                                     Symbols 2 - 1




Segments and Groups:

                N a m e                 Size     Length   Align   Combine Class

DGROUP . . . . . . . . . . . . .        GROUP
_DATA  . . . . . . . . . . . . .        16 Bit   000F     Word    Public  'DATA'
STACK  . . . . . . . . . . . . .        16 Bit   0400     Para    Stack   'STACK'
_TEXT  . . . . . . . . . . . . .        16 Bit   001C     Word    Public  'CODE'


Symbols:

                N a m e                 Type     Value    Attr

@CodeSize  . . . . . . . . . . .        Number   0000h
@DataSize  . . . . . . . . . . .        Number   0000h
@Interface . . . . . . . . . . .        Number   0001h
@Model . . . . . . . . . . . . .        Number   0002h
@Startup . . . . . . . . . . . .        L Near   0000     _TEXT
@code  . . . . . . . . . . . . .        Text     _TEXT
@data  . . . . . . . . . . . . .        Text     DGROUP
@fardata?  . . . . . . . . . . .        Text     FAR_BSS
@fardata . . . . . . . . . . . .        Text     FAR_DATA
@stack . . . . . . . . . . . . .        Text     DGROUP
msg  . . . . . . . . . . . . . .        Byte     0000     _DATA

           0 Warnings
           0 Errors

¤Wªíªº¥ª¥b³¡¬O­ì©lµ{¦¡¡AHELLOW1.ASM¡A³o¬O§Ú­Ì¦Û¤v¼¶¼gªº¡AÀ³¸Ó«Ü¼ô±x¡C

¤Wªí¥k¥b³¡¬O¦CªíÀÉ¡C¦CªíÀɦ³¨â­¶¡GPage 1¡Ð1 »P Symbols 2-1¡CPage 1-1 ¥i¤À¦¨¤TÄæ¡C³Ì¥ªÄæ¬O¦ì§}¡A¤£½×¬O¸ê®Æ°Ï¬q©Î¬Oµ{¦¡½X°Ï¬q³£·|¦C¥X¨C­Ó¦r¦ê¡BÅܼơB¨C¤@¹D x86 «ü¥Oªº¦ì§}¡C¤¤¶¡´N¬O¾÷±ñ½X¡A¸ê®Æ°Ï¬q¤ºªº¸ê®ÆÂà´«¦¨¤Q¤»¶i¦ì¼Æ­È¡Bµ{¦¡½X°Ï¬qÂà´«¦¨¾÷±ñ½X¡A¦¹¤GªÌ³£¬O¤Q¤»¶i¦ì¼Æ­È¡C³Ì¥kÄæ¬O¨Ï¥ÎªÌ¼¶¼gªº­ì©l½X¡C

²{¦b¨Ó¸Õ¸Õ¬Ý±N²Ä¤@¦æ«ü¥O²ÕĶ¦¨ªº¾÷±ñ½X¤Ï²ÕĶ¡C²Ä¤@¦æ«ü¥Oªº OpCode ¬O 0BAH¡A¬d¾\ªþ¿ý¤C¡u8086/8088 OpCode Map¡v±oª¾¬O¡uMOV DX,Iv¡v¡A¥ç§Y§â¤Q¤»¦ì¤¸ªº¥ß§Y­È¦s¤J DX ¤º¡A¦Ó¥ß§Y­È´N±µ¦b 0BAH ¤§«áªº 0000¡C§Ú­Ì¥iÅçÃҬݬݡA¦b .DATA ¤¤¡Amsg ¦r¦ê¬O§_¯uªº¦b¦ì§} 0000 ³B¡H

¦A¬Ý Symbols 2¡Ð1¡A³o¤@­¶¬O ML.EXE ®Ú¾Ú­ì©lµ{¦¡©Ò»s§@ªº²Î­p¸ê®Æ¡A¬ö¸ü¤F¦U­Ó²Å¸¹¦WºÙ¡C¨Ò¦p HELLOW1.ASM ¤¤¨Ï¥Î¤F¤T­Ó°Ï¬q¡A¥¦­Ì¤À§O¬O¸ê®Æ°Ï¬q¡B°ïÅ|°Ï¬q¡Bµ{¦¡½X°Ï¬q¡A¦b SMALL °O¾ÐÅé¼Ò¦¡¤U¡A¨Ï¥Î²©ö¤è¦¡©w¸q°Ï¬q®É¡A¤´µM¦³¦U¦Ûªº¦WºÙ¡A¤À§O¬O _DATA¡BSTACK¡B_TEXT¡A¤]¦U¦Û¦³¨ä©Ê½è¡C


¤T¤Q¤G¦ì¤¸ CPU ªº¾÷±ñ½X

¤Q¤»¦ì¤¸ CPU ªº¾÷±ñ½X¨ì¦¹¤w¸g³£±Ô­z§¹²¦¡A¬O¤£¬O«Ü²³æ©O¡H¬Æ¦Ü·Q¼g¥XÃþ¦ü DEBUG ªº¤Ï²ÕĶ¾¹¤]¨Ã«D¤£¥i¯à¡C

©³¤U¤p¤ì°¸¦A±µ¦A¼F¡AÄ~Äò»¡¤@»¡¤T¤Q¤G¦ì¤¸ CPU ªº¾÷±ñ½X¡C­^¯Sº¸¦b»s§@¤T¤Q¤G¦ì¤¸ªº CPU ®É¡A¨î©w¤F¤@®M³W®æ¡A¥Î¨Ó©w¸q 32 ¦ì¤¸ªº CPU ¦³­þ¨Ç«ü¥O¡A³o®M³W®æºÙ¬° IA¡Ð32¡]Intel Architecture, 32-bit¡^¡A¥]§t±q 80386¡B80486 ¨ì Pentium 4¡BPentium M¡AÁÙ¦³¶W·L³c°âªº Am386DX ¨ì Athlon XP¡A¬Æ¦ÜÁÙ¦³ Cyrix¡BVIA ³c°âªº CPU¡CÁ`¤§ IA¡Ð32 CPU ¥]§t¤F©Ò¦³ x86 ®a±Úªº 32 ¦ì¤¸ CPU¡C

§ó¦³¬ÆªÌ¡A¨º´N¬O 8086/8088/80286 ³o¤T­Ó¤Q¤»¦ì¤¸ªº CPU ¤]³Q­^¯Sº¸ÂkÃþ¬° IA¡Ð32 ¤º¡A³o¤j·§¬O¥¦­Ì¤]¨ã¦³³Ì°ò¥»ªº IA¡Ð32 «ü¥O¶°§a¡I¡H¦ý³o¤@¸`©Ò»¡ªº IA¡Ð32 CPU ±M«ü¤T¤Q¤G¦ì¤¸ªº CPU¡A¤£¥]§t 8086¡B8088¡B80286¡C

IA¡Ð32 ªº©w§}¤è¦¡»P 8086/8088 ³Ì¤jªº¤£¦P¦b©ó¤K­Ó³q¥Î¼È¦s¾¹³£¯à®³¨Ó©w§}¡A¨Ã¥B·s¼W¤F³\¦h«ü¥O¡A¦]¦¹­^¯Sº¸±N IA¡Ð32 CPU ªº¾÷±ñ½X®æ¦¡­«·s©w¸q¤F¡A¦ý¤S¥²¶·»P 8086/8088 ¬Û®e¡C¨ä®æ¦¡¦p¤U¹Ï¡G ¥Ñ¤W¹Ï¤¤¥i¥H±oª¾¡AIA¡Ð32 ªº¾÷±ñ½X¤À¦¨¤»³¡¤À¡A¨C­Ó³¡¤À¥Î¶À¦â®Ø®Ø¦í¡C¤W¹Ï¤¤¾÷±ñ½Xªº¦U³¡¤À¥u¬O¥Nªí¶¶§Ç¡A¦b¤@¹D«ü¥Oªº¾÷±ñ½X¤¤¡A¥u¦³ OpCode ¬O¥²­nªº¡A¨ä¾l³¡¤À¬O»Ý­n¦Ó¨M©w¡A¦pªG¬O¤£»Ý­nªº³¡¤À´N·|¬Ù²¤¦Ó¸õ¹L¡C¨Ò¦p¤j³¡¤À«ü¥O³£¨S¦³ Prefixes¡A¨º»ò´N±q OpCode ¶}©l¡C¦¹¥~¡A¤W¹Ïªº¶À¦â®ØÁöµM³£¤@¼Ë¤j¡A¦ý¨Ã¤£¬O¥Nªí¥¦­Ì©Ò¦û¥Îªº¦ì¤¸²Õ³£¤@¼Ë¦h¡C¨ä¤¤¥u¦³ ModR/M »P SIB ¦U¦û¤@­Ó¦ì¤¸²Õ¡A¨ä¾l³¡¤À¦³®É¦û¤@­Ó¦ì¤¸²Õ¡A¦h®É¬Æ¦Ü¦û¥|­Ó¦ì¤¸²Õ¡C

«e¸m½X¡]Prefixes¡^

ÅU¦W«ä¸q¡A«e¸m½X´N¬O©ñ¦b¾Þ§@½X¤§«eªºµ{¦¡½X¡C«e¸m½X¦@¦³¤­ºØ¡A¦b¤¶²Ð¡u8086/8088 ªº¾÷±ñ½X¡v®É¡A¤w¸g¤¶²Ð¹L¤TºØ¤F¡A½Ð«ö³oùؾ\Ū¡C¨ì¤F¤T¤Q¤G¦ì¤¸ªº CPU ®É¡A·s¼W¤F²Ä¥|ºØ©M²Ä¤­ºØ¡A¨Ã­×§ï²Ä¤GºØ¡C¦¹³B¥u¤¶²Ð¤£¦P©ó 8086/8088 ªº¦a¤è¡AµM«á¦b³o¤@¸`ªºµ²§À°µ­Ó¤p¤pªºµ²½×¡A¦]¬° x86¡Ð64 CPU ªº«e¸m½X¸ò IA¡Ð32 ¤@¼Ë¡C

·s¼Wªº­â¶V°Ï¬q«e¸m½X

²Ä¤GºØ«e¸m½X¬O­â¶V°Ï¬q¡A¦]¬° IA¡Ð32 ¦h¤F¨â­Ó°Ï¬q¼È¦s¾¹¡AFS »P GS¡A¦]¦¹¤]¦h¤F 64H ©M 65H ¤À§O¥Nªí FS: ©M GS: ªº­â¶V°Ï¬q«e¸m½X¡C

¹Bºâ¤¸«e¸m½X

²Ä¥|ºØ¬O 66H¡AºÙ¬°¹Bºâ¤¸«e¸m½X¡A¥Î¨Ó¤Á´«¹Bºâ¤¸ªø«×¡A¤£¹L¤K¦ì¤¸ªøªº¹Bºâ¤¸¤£¨ü 66H ªº¼vÅT¡C·í°Ï¬q¬O¤Q¤»¦ì¤¸®É¡A¹w³]ªº¹Bºâ¤¸¤]¬O¤Q¤»¦ì¤¸¡F¦pªG¥X²{¤F 66H «e¸m½X®É¡A´N·|¤Á´«¦¨¤T¤Q¤G¦ì¤¸ªº¹Bºâ¤¸¡C¤Ï¹L¨Ó¡A·í°Ï¬q¬O¤T¤Q¤G¦ì¤¸®É¡A¹w³]ªº¹Bºâ¤¸¤]¬O¤T¤Q¤G¦ì¤¸¡F¦pªG¥X²{¤F 66H «e¸m½X®É¡A´N·|¤Á´«¦¨¤Q¤»¦ì¤¸ªº¹Bºâ¤¸¡C

¨Ò¦p«e¤@³¹ªº MUL32_1.ASM ¬O DOS µ{¦¡¡A¬O¤Q¤»¦ì¤¸ªºµ{¦¡¡A¬G¨ä°Ï¬qÀ³¬°¤Q¤»¦ì¤¸¡C¥H DEBUG/SYMDEB ¸ü¤J®É¡A²Ä¤@­Ó«ü¥O¦b¦ì§} 0010 ³B¡A¨ä¾÷±ñ½X¬O¡u66H 33H 0D2H¡v¡A¥X²{¹Bºâ¤¸«e¸m½X 66H¡A©Ò¥H¤Q¤»¦ì¤¸ªº¼È¦s¾¹·|ÅܤT¤Q¤G¦ì¤¸¡CŪªÌ¥i¥H¦Û¦æ±N¡u33H 0D2H¡v¨Ì·Ó¤W­±ªº¤è¦¡¤Ï²ÕĶ¡A¦pªG¥¿½Tªº¸Ü¡A©Ò±oµ²ªG¬°¡uXOR DX,DX¡v¡C¦ý¬O¦pªG³Ì«e­±¦³¹Bºâ¤¸«e¸m½X 66H ªº¸Ü¡A´N¥²¶·±N¹Bºâ¤¸¤Á´«¦¨¤T¤Q¤G¦ì¤¸¡A¦]¦¹¡u66H 33H 0D2H¡v¤Ï²ÕĶµ²ªG¬°¡uXOR EDX,EDX¡v¡C

¤@¯ë¦Ó¨¥¡ADOS µ{¦¡ªº°Ï¬q¬O¤Q¤»¦ì¤¸¡A¤T¤Q¤G¦ì¤¸ªº Windows ¨ä°õ¦æµ{¦¡ªº°Ï¬q¬O¤T¤Q¤G¦ì¤¸¡C¤£¹L³o¼ËªºÁ¿ªk¨Ã¤£¤Óºë½T¡A¸ûºë½Tªº§PÂ_¤è¦¡¬O¥H¡u°Ï¬q´y­z¾¹¡vªº²Ä 54 ¦ì¤¸¨Ó§PÂ_¡C¸Ó¦ì¤¸ºÙ¬° D ¦ì¤¸¡A¦pªG¬O¤@¡Aªí¥Ü¸Ó°Ï¬q¬O¤T¤Q¤G¦ì¤¸ªº°Ï¬q¡F¦pªG¬O¹s¡Aªí¥Ü¸Ó°Ï¬q¬O¤Q¤»¦ì¤¸ªº°Ï¬q¡C

©w§}«e¸m½X

²Ä¤­ºØ¬O 67H¡AºÙ¬°©w§}«e¸m½X¡A¥Î¨Ó¤Á´«©w§}¼Ò¦¡¡C¤]´N¬O»¡¦b¤Q¤»¦ì¤¸°Ï¬q¤¤¡A°²³]¦³ 67H ©w§}«e¸m½X¡A´N·|¤Á´«¦¨¤T¤Q¤G¦ì¤¸ªº©w§}¼Ò¦¡¡F¤Ï¤§¡A¦b¤T¤Q¤G¦ì¤¸°Ï¬q¤¤¡A¦³ 67H ©w§}«e¸m½X¡A´N·|¤Á´«¦¨¤Q¤»¦ì¤¸ªº©w§}¼Ò¦¡¡C¦ý¬O¨Ã«D¹³§â¡uMOV AL,[BX]¡vÅܦ¨¡uMOV AL,[EBX]¡v³o¼Ë²³æ¡C³o¬O¦]¬°¡A¤£½×¤Q¤»¦ì¤¸°Ï¬qÁÙ¬O¤T¤Q¤G¦ì¤¸°Ï¬q¡A¥¦­Ìªº©w§}¼Ò¦¡³£¬O¨Ì¾Ú Mod »P R/M ¨M©w¡A¦Ó³o¨âºØ°Ï¬qªº Mod »P R/M ·f°t©Ò±oªºµ{¦¡½X¨Ã¤£¬Û¦P¡C

«e¸m½Xµ²½×

¨ì¦¹«e¸m½X¤w¸g¤¶²Ð§¹²¦¡A°µ­Ó¤p¤pªºµ²½×¡C«e¸m½X¥u¦³ 26H¡B2EH¡B36H¡B3EH¡B64H¡B65H¡B66H¡B67H¡B0F0H¡B0F2H¡B0F3H ³o¤Q¤@­Ó¡A¨Ã¥B¨Ã¤@©w©ñ¦b¾÷±ñ½Xªº³Ì«e­±¡A¨ä·N¸q¨£¤Uªí¡G

32-Bit «e¸m½X
­â¶V°Ï¬q26H¡B2EH¡B36H¡B3EH
64H¡B65H
ES:¡BCS:¡BSS:¡BDS:
FS:¡BGS:
¹Bºâ¤¸«e¸m½X66H¤Á´«¹Bºâ¤¸ªø«×
©w§}«e¸m½X67H¤Á´«©w§}¼Ò¦¡
Âê©w¶×¬y±Æ0F0HLOCK
­«½Æ«ü¥O0F2H¡B0F3HREP¡BREPNZ

¦b³o¤­ºØ«e¸m½X¤¤¡A¦³¨Ç¤S¦³³\¦h¤£¦Pªº·N¸q¡A¨Ò¦p­â¶V°Ï¬q¤S¥i¤À¬° 6 ºØ¤£¦Pªº·N¸q¡C¦ý¤£½×¦p¦ó¡A¦PºØÃþªº«e¸m½X³£¥u¥Î¨Ï¥Î¤@­Ó¦ì¤¸²Õ¡A¦]¬°¦PºØ¦ý¤£¦P·N¸qªº«e¸m½X¬O¤¬¥¸ªº¡A¨Ò¦p¤@¹D«ü¥O¤£¥i¯à¦P®É±q ES °Ï¬q¤Î FS °Ï¬qŪ¨ú¸ê®Æ¡C¤£¹L¡A¤@¹D«ü¥O¤¤¥i¥H¥X²{¦h­Ó¤£¦PºØÃþªº«e¸m½X¡A³o®É­Ô«e¸m½Xªº¶¶§Ç¥i¥H¥ô·N¦w±Æ¡C

¨Ò¦p¦b DOS µ{¦¡¤¤¡A¦pªG­ì©lµ{¦¡¦³¤@¦æ¡uMOV WORD PTR ES:[EBX],3344H¡v¡A¤£¦P²ÕĶ¾¹²ÕĶ®É¡A¥i¯à²£¥Í¡u67H 26H 0C7H 03 44H 33H¡v¡A¤]¥i¯à¬O¡u26H 67H 0C7H 03 44H 33H¡v¡A¦Ó CPU ³£¯à¥¿½T°õ¦æ¡C³o¹D«ü¥O¥Î¤F¨â­Ó¤£¦PºØÃþªº«e¸m½X¡A­â¶V°Ï¬q»P©w§}«e¸m½X¡C

¾Þ§@½X¡]OpCode¡^

¾÷±ñ½Xªº²Ä¤G­Ó³¡¤ÀºÙ¬°¾Þ§@½X¡]operation code¡AÁY¼g¬° OpCode¡^¡A¨M©w¤F CPU ©Ò­n°õ¦æªº«ü¥O¡CIA¡Ð32 ªº¾Þ§@½X¤j¦h¬O¤@­Ó¦ì¤¸²Õ¡A¦ý¤]¦³¨â­Ó¦ì¤¸²Õ¡A³Ì¦h¤T­Ó¦ì¤¸²Õ¡C­n¥Ñ¾Þ§@½X¬d¥X©Ò°õ¦æªº«ü¥O¡A»Ý­n¤@±i«Ü¤jªºªí®æ¡A³o±iªí®æºÙ¬°¡u32-Bit OpCode Map¡v¡A¦bªþ¿ý¤C¡A½Ð«ö³oùجd¾\¡C¦pªG¾Þ§@½X¦³¨â­Ó¦ì¤¸²Õ¡A¨º»ò²Ä¤@­Ó¦ì¤¸²Õ³q±`¬O 0FH¡A¤]¦bªþ¿ý¤C¡A«ö³oùجd¾\¡C

¸ò 8086/8088 ¤@¼Ë¡A¦³¨Ç«ü¥Oªº¾Þ§@½X·|©µ¦ù¨ì RegR/M ³¡¤Àªº²Ä¤T¡ã¤­¦ì¤¸¡A³oºØ¾Þ§@½X³q±`·|¥H²Ä´X¸sªº¤è¦¡ªí²{¡C¤]´N¬O»¡¦b¤W­z¨â±iªí®æ¤¤·|¼Ð¥Ü¡uGRP??¡v¡AµM«á´N­n¨ìªþ¿ý¤Cªº¡u32-Bit OpCode Extensions¡v¬d¾\¡C

ModR/M ¦ì¤¸²Õ

¾÷±ñ½Xªº²Ä¤T­Ó³¡¤ÀºÙ¬° ModR/M ¦ì¤¸²Õ¡A¥¦¨M©w¤F©w§}¤è¦¡¡C¸ò 8086/8088 ¤@¼Ë¡AModR/M ¦ì¤¸²Õ©î¦¨¤T³¡¤À¡A²Ä¹s¡ã¤G¦ì¤¸ºÙ¬° R/M¡A²Ä¤T¡ã¤­¦ì¤¸ºÙ¬° Reg¡A²Ä¤»¡B¤C¦ì¤¸ºÙ¬° Mod¡CMod »P R/M ¬Û¤¬·f°t¨M©w¤F©w§}¼Ò¦¡¡A³o¤@³¡¤À»P 8086/8088 ¤j¤£¬Û¦P¡CŪªÌ¥i¥H¦Û¦æ±N¤Uªí»P¡u8086/8088 Mod »P R/M ªºÃö«Yªí®æ¡v¤ñ¸û¡A´N·|µo²{¡A¦b¨Ï¥Î­þ¤@­Ó¼È¦s¾¹¡B°¾²¾¦ì§}¤j¤p¡B¦³µL­¼¤W­¿²v«Ü¤£¤@¼Ë¡C

Bit-32 Mod »P R/M ªºÃö«Y
R/MMod¡×00Mod¡×01 Mod¡×10Mod¡×11
W¡×0W¡×1
000[EAX][EAX+D8][EAX+D32]ALAX/EAX
001[ECX][ECX+D8][ECX+D32]CLCX/ECX
010[EDX][EDX+D8][EDX+D32]DLDX/EDX
011[EBX][EBX+D8][EBX+D32]BLBX/EBX
100SIB ©w§}SIB ©w§}SIB ©w§}AHSP/ESP
101[D32][EBP+D8][EBP+D32]CHBP/EBP
110[ESI][ESI+D8][ESI+D32]DHSI/ESI
111[EDI][EDI+D8][EDI+D32]BHDI/EDI

¤Wªí¤¤¡A¦pªG Mod¡×11 ¥B W¡×1 ®É¡]W ¦ì¤¸¬O¾Þ§@½Xªº²Ä¹s­Ó¦ì¤¸¡^¡A±o¨ìªº¼È¦s¾¹¥i¯à¬O 16 ¦ì¤¸¡A¤]¥i¯à¬O 32 ¦ì¤¸¡A¨º»ò¨ì©³¬O­þ¤@­Ó©O¡H³o®É´N­n¬Ý©Ò¦b°Ï¬q¹w³]ªº¹Bºâ¤¸¤j¤p¡A¥H¤Î¦³¨S¦³¹Bºâ¤¸«e¸m½X¤F¡C¦b¡u¤T¤Q¤G¦ì¤¸ CPU ªº¾÷±ñ½X¡G¹Bºâ¤¸«e¸m½X¡v¤¤¤w¸g¸Ô­z¹L¤F¡A¦¹³B¤£¦AÂØ­z¡C

¤Wªí¤¤¡A·í R/M ¬° 100 ®É¡A¦³®É·|¥X²{¡uSIB ©w§}¡v¡C³oºØ±¡§Îµo¥Í®É¡AModR/M ¦ì¤¸²Õ¤§«á±µµÛªº´N¬O SIB ¦ì¤¸²Õ¡C

SIB ¦ì¤¸²Õ

SIB ¦ì¤¸²Õ¬O IA¡Ð32 ·s¼Wªº³¡¤À¡A¦b 8086/8088 ¨Ã¨S¦³³o³¡¤À¡CSIB §¹¥þ¬O IA¡Ð32 ¬°¤F¥[±j©w§}¼Ò¦¡¦Ó·s¼Wªº¡CSIB ¬O¨Ï¥Î¨â­Ó³q¥Î¼È¦s¾¹¡A¤@­Ó·í§@¯Á¤Þ¡]index¡ASIB ¤¤ªº I ´N¬O«ü index¡^¡A¤@­Ó·í§@°ò©³¡]base¡ASIB ¤¤ªº B ´N¬O base¡^¨Ï¥Î¡A¬Æ¦Ü¥i¥HÅý¯Á¤Þ¦A­¼¤W¤@­Ó 2 ªº¾­¦¸¤è§@¬°­¿²v¡]scale¡A¤]´N¬O SIB ¤¤ªº S¡^¡F¤]¥i¥H¥u¥Î¤@­Ó³q¥Î¼È¦s¾¹¡A¨º»ò³o­Ó³q¥Î¼È¦s¾¹¥i¥H¬Ý¦¨¯Á¤Þ©Î°ò©³³£µL©Ò¿×¡Cµo¥Í¡uSIB ©w§}¡v®É¡A³q±`¬O¦s¨ú°}¦C¤ºªº¸ê®Æ¡C

¬Ý¤W¹Ï IA¡Ð32 ªº¾÷±ñ½X®æ¦¡¡A¥i¥H±oª¾¡ASIB ¦ì¤¸²Õ¤]©î¦¨¤T³¡¤À¡A²Ä¹s¡ã¤G¦ì¤¸ºÙ¬° Base¡A²Ä¤T¡ã¤­¦ì¤¸ºÙ¬° Index¡A²Ä¤»¡B¤C¦ì¤¸ºÙ¬° Scale¡C¨ä¤¤ Index ¥Nªí¼È¦s¾¹¡]¥i¥H·Q¦¨¬O¯Á¤Þ¼È¦s¾¹¡^¡AScale ¥Nªí­¿²v¡A¦¹­¿²v­¼¦b Index ©Ò¥Nªíªº¼È¦s¾¹¤W¡A©Ò§Î¦¨ªº¦¡¤l´NºÙ¬°¡u¯Á¤Þ­¿²v¡v¡CIndex¡BScale ©Ò¥Nªíªº·N¸q¦p¤Uªí¡G

Index ©Ò¥Nªíªº¼È¦s¾¹
Index¼È¦s¾¹Index¼È¦s¾¹
000EAX100ESP
001ECX101EBP
010EDX110ESI
011EBX111EDI
Scale ©Ò¥Nªíªº­¿²v
Scale­¿²v
001
012
104
118

 
¨Ì¾Ú Base »P Mod ¬d¾\¤Uªí¡AµM«á±N¡u¯Á¤Þ­¿²v¡v¥N¤J¤§«á¡A´N¯à¬d¥X Mod¡BSIB ©Ò¥Nªíªº©w§}¤è¦¡¤F¡C¤Uªí¬O Base »P Mod ¬Û¤¬°t¦X¡A©Ò±oªºÃö«Yªí¡G

32-Bit Mod »P Base ªºÃö«Y
BaseMod¡×00Mod¡×01Mod¡×10
000[EAX+¯Á¤Þ­¿²v][EAX+D8+¯Á¤Þ­¿²v][EAX+D32+¯Á¤Þ­¿²v]
001[ECX+¯Á¤Þ­¿²v][ECX+D8+¯Á¤Þ­¿²v][ECX+D32+¯Á¤Þ­¿²v]
010[EDX+¯Á¤Þ­¿²v][EDX+D8+¯Á¤Þ­¿²v][EDX+D32+¯Á¤Þ­¿²v]
011[EBX+¯Á¤Þ­¿²v][EBX+D8+¯Á¤Þ­¿²v][EBX+D32+¯Á¤Þ­¿²v]
100[ESP+¯Á¤Þ­¿²v][ESP+D8+¯Á¤Þ­¿²v][ESP+D32+¯Á¤Þ­¿²v]
101[D32+¯Á¤Þ­¿²v][EBP+D8+¯Á¤Þ­¿²v][EBP+D32+¯Á¤Þ­¿²v]
110[ESI+¯Á¤Þ­¿²v][ESI+D8+¯Á¤Þ­¿²v][ESI+D32+¯Á¤Þ­¿²v]
111[EDI+¯Á¤Þ­¿²v][EDI+D8+¯Á¤Þ­¿²v][EDI+D32+¯Á¤Þ­¿²v]

°¾²¾¦ì§}»P¥ß§Y­È

·í¸Ñ½X§¹¾Þ§@½X¡BModR/M¡BSIB µ¥¤T³¡¤À«á¡A´N¯àª¾¹D¬O§_¦³¨ä¥L¹Bºâ¤¸¡A¦pªG¦³ªº¸Ü¡A¹Bºâ¤¸¦³¦h¤j¡A¤]´N¯àª¾¹D«á­±ªº°¾²¾¦ì§}¡]displacement¡^»P¥ß§Y­È¡]immediate¡^¡C

¨Ò¤l

©³¤UÁ|­Ó¨Ò¤l¨Ó¸Õ¸Õ¬Ý¤H¤u¤Ï²ÕĶ¡C­º¥ý­n¥ý»¡©úªº¬O¡A©³¤Uªº¨Ò¤l³£¬O¦b¤T¤Q¤G¦ì¤¸ªº°Ï¬q¤º¡C

¨Ò¤l¤@¡G¡u85H 34H 9DH 3CH 20H 04 00¡v

  1. ­º¥ý 85H ¤£¬O¨º¤Q¤@­Ó«e¸m½X¤¤ªº¤@­Ó¡A©Ò¥H¦¹«ü¥O¨ÃµL«e¸m½X¡A±q¾Þ§@½X¶}©l¡C
  2. ²Ä¤@­Ó¾Þ§@½X 85H¡A¬dªþ¿ý¤Cªº¡u32-Bit OpCode Map¡v¡A±oª¾ 85H ªº«ü¥O¬O¡uTEST Ev,Gv¡v¡C
    1. ¬d¾\ªþ¿ý¤C¡u32-Bit Argument Addressing Codes¡v¡A±oª¾ G ¥Nªí Reg ¬O³q¥Î¼È¦s¾¹¡FE ¥Nªí¦¹¹Bºâ¤¸¥i¯à¬O³q¥Î¼È¦s¾¹¡A¤]¥i¯à¬O°O¾ÐÅé¡C
    2. ¬d¾\ªþ¿ý¤C¡u32-Bit Argument Operand Codes¡v¡A±oª¾ v ¥Nªí¦¹¹Bºâ¤¸¬O¦r²Õ©ÎÂù¦r²Õ¡C
    ¦]¬°¬O¤T¤Q¤G¦ì¤¸°Ï¬q¡A¥B¨S¦³«e¸m½X¡A©Ò¥H¹w³]ªº¹Bºâ¤¸¬OÂù¦r²Õ¡A¬G¡uTEST Ev,Gv¡v¬O§â¦s©ó¬Y­Ó°O¾ÐÅé©Î¼È¦s¾¹¡]Ev¡^ùØ­±ªºÂù¦r²Õ»P¬Y­Ó¼È¦s¾¹¡]Gv¡^¤§­È¡A¶i¦æ TEST ¹Bºâ¡C
  3. ModR/M ¬° 34H¡A´«ºâ¦¨¤G¶i¦ì¬O 0011 0100¡A¬G Mod ¬° 00¡AReg ¬° 110¡AR/M ¬° 100¡C
    1. ¥Ñ Reg µ¥©ó 110¡A¬d¾\¡uReg ©Ò¥Nªíªº¼È¦s¾¹¡v±oª¾ 110 ¥i¯à¥Nªí ESI¡BSI ©Î DH¡A±q¨BÆJ 2 ii ±oª¾¹Bºâ¤¸¬OÂù¦r²Õ¡A¬G Gv ¬O¡uESI¡v¡C
    2. ¥H Mod ¬° 00 ¥H¤Î R/M ¬° 100 ·f°t¡A¬d¾\¡u32-Bit Mod »P R/M ªºÃö«Y¡v¡A±o¨ì¡uSIB ©w§}¡v¡C
  4. SIB ºò±µµÛ ModR/M ¤§«á¡A¬G SIB ¬° 9DH¡A´«ºâ¦¨¤G¶i¦ì¬O 1001 1101¡A¬G Scale ¬° 10¡AIndex ¬° 011¡ABase ¬° 101¡C
    1. ¨Ì¾Ú Scale ¬O 10¡AIndex ¬O 011¡A¤À§O¬d¾\¡uScale ©Ò¥Nªíªº­¿²v¡v¤Î¡uIndex ©Ò¥Nªíªº¼È¦s¾¹¡v±oª¾ Scale ¥Nªí­¼¥H 4¡AIndex ¥Nªí EBX¡A¦X°_¨Ó¡u¯Á¤Þ­¿²v¡v´N¬O¡uEBX¡Ñ4¡v¡C
    2. ¥H Mod ¬° 00 ¥H¤Î Base ¬° 101 ¬d¾\¡u32-bit Mod »P Base ªºÃö«Y¡v¡A±oª¾¬°¡u[D32+¯Á¤Þ­¿²v]¡v¡C
    3. D32 ¬O«ü 32 ¦ì¤¸ªº°¾²¾¦ì§}¡A´N¬O¦b SIB ¤§«áªº 04203CH¡C
    ¥Ñ¤W­±¨BÆJ i¡ãiii¡A±oª¾ Ev ¬O¡u[04203CH+EBX¡Ñ4]¡v
  5. ¥Ñ¨BÆJ 2¡B3 i¡B4 ±oª¾¡u85H 34H 9DH 3CH 20H 04 00¡v¤Ï²ÕĶ«á¬O¡uTEST [04203CH+EBX¡Ñ4],ESI¡v¡C

¨Ò¤l¤G¡G¡u81H 05 1CH 00 00 00 99H 20 00 0AH¡v

  1. ­º¥ý 81H ¤£¬O¨º¤Q¤@­Ó«e¸m½X¤¤ªº¤@­Ó¡A©Ò¥H¦¹«ü¥O¨ÃµL«e¸m½X¡A±q¾Þ§@½X¶}©l¡C
  2. ²Ä¤@­Ó¾Þ§@½X 81H¡A¬dªþ¿ý¤Cªº¡u32-Bit OpCode Map¡v¡A±oª¾ 81H ªº«ü¥O¬O¡uGRP1 Ev,Iv¡v¡C
  3. ¦]¬°¬d¨ì GRP?¡A¬G ModR/M ªº Reg ¬O OpCode ªº©µ¦ù¡CModR/M ¬° 05¡A´«ºâ¦¨¤G¶i¦ì¬O 0000 0101¡A¬G Mod ¬° 00¡AOpCode ªº©µ¦ù¬° 000¡AR/M ¬° 101¡C
  4. ¥H OpCode ©µ¦ù¦Ü ModR/M ªº²Ä 3¡ã5 ¦ì¤¸¡A000¡A¥H¤Î GRP1 ¬d¾\ªþ¿ý¤Cªº¡u32-Bit OpCode Extensions¡v±oª¾ GRP1 ¥Nªí¡uADD¡v¡C
  5. ¥Ñ¨BÆJ 2¡B4¡A±oª¾ 81H 05 ¥Nªí¡uADD Ev,Iv¡v¡A±µ¤U¨Ó¬d¥X Ev¡BIv ªº·N¸q¡G
    1. ¬d¾\ªþ¿ý¤C¡u32-Bit Argument Addressing Codes¡v¡A±oª¾ E ¥Nªí¦¹¹Bºâ¤¸¥i¯à¬O³q¥Î¼È¦s¾¹¡A¤]¥i¯à¬O°O¾ÐÅé¡FI ¥Nªí¥ß§Y­È¡A¥ß§Y­È¥iµø¬°±`¼Æ¡C
    2. ¬d¾\ªþ¿ý¤C¡u32-Bit Argument Operand Codes¡v¡A±oª¾ v ¥Nªí¦¹¹Bºâ¤¸¬O¦r²Õ©ÎÂù¦r²Õ¡C
    ¦]¬°¬O¤T¤Q¤G¦ì¤¸°Ï¬q¡A¥B¨S¦³«e¸m½X¡A©Ò¥H¹w³]ªº¹Bºâ¤¸¬OÂù¦r²Õ¡A¬G¡uADD Ev,Iv¡v¬O§â¦s©ó¬Y­Ó°O¾ÐÅé©Î¼È¦s¾¹¡]Ev¡^ùØ­±ªºÂù¦r²Õ¦A¥[¤W¬Y­Ó±`¼Æ¡]Iv¡^¡C
  6. ¥Ñ¨BÆJ 3¡A¥H Mod ¬° 00 ¥H¤Î R/M ¬° 101 ·f°t¡A¬d¾\¡u32-Bit Mod »P R/M ªºÃö«Y¡v¡A±o¨ì Ev ¬O¡u[D32]¡v¡CD32 ¥Nªí¤T¤Q¤G¦ì¤¸ªº°¾²¾¦ì§}¡A¤]´N¬O SIB «á­±±µµÛ¡A¥B¨Ì·Ó¤p§ÇºÝ±Æ¦C©ó°O¾ÐÅ餤ªº 1CH 00 00 00¡C¦]¦¹ Ev ´N¬O¡u[0000001CH]¡v¡C
  7. ¥ß§Y­È¬Oºò±µµÛ°¾²¾¦ì§}«á­±ªº 99H 20 00 0AH¡A¨ä¼Æ­È¬° 0A002099H¡C¬G Iv ¬O 0A002099H¡C
  8. ºî¦X²Ä 4¡ã7 ¨BÆJ¡A±o¨ì¡u81H 5 1CH 00 00 00 99H 20 00 0AH¡v¤Ï²ÕĶ«á¬O¡uADD DWORD PTR [0000001CH],0A002099H¡v¡]¥[¤W DWORD PTR ¬O¦]¬°µLªk±q³o¨â­Ó¹Bºâ¤¸±oª¾¹Bºâ¤¸ªø«×¡^¡C

¨Ò¤l¤T¡G¡u8BH 9CH 079H 10H 20H 33H 44H¡v

  1. ­º¥ý 8BH ¤£¬O¨º¤Q¤@­Ó«e¸m½X¤¤ªº¤@­Ó¡A©Ò¥H¦¹«ü¥O¨ÃµL«e¸m½X¡A±q¾Þ§@½X¶}©l¡C
  2. ²Ä¤@­Ó¾Þ§@½X 8BH¡A¬dªþ¿ý¤Cªº¡u32-Bit OpCode Map¡v¡A±oª¾ 8BH ªº«ü¥O¬O¡uMOV Gv,Ev¡v¡C
    1. ¬d¾\ªþ¿ý¤C¡u32-Bit Argument Addressing Codes¡v¡A±oª¾ G ¥Nªí Reg ¬O³q¥Î¼È¦s¾¹¡FE ¥Nªí¦¹¹Bºâ¤¸¥i¯à¬O³q¥Î¼È¦s¾¹¡A¤]¥i¯à¬O°O¾ÐÅé¡C
    2. ¬d¾\ªþ¿ý¤C¡u32-Bit Argument Operand Codes¡v¡A±oª¾ v ¥Nªí¦¹¹Bºâ¤¸¬O¦r²Õ©ÎÂù¦r²Õ¡C
    ¦]¬°¬O¤T¤Q¤G¦ì¤¸°Ï¬q¡A¥B¨S¦³«e¸m½X¡A©Ò¥H¹w³]ªº¹Bºâ¤¸¬OÂù¦r²Õ¡A¬G¡uMOV Gv,Ev¡v¬O§â¦s©ó¬Y­Ó°O¾ÐÅé©Î¼È¦s¾¹¡]Ev¡^ùØ­±ªºÂù¦r²Õ¦s¤J¬Y­Ó¼È¦s¾¹¡]Gv¡^ùØ¡C
  3. ModR/M ¬° 9CH¡A´«ºâ¦¨¤G¶i¦ì¬O 1001 1100¡A¬G Mod ¬° 10¡AReg ¬° 011¡AR/M ¬° 100¡C
  4. ¥Ñ Reg µ¥©ó 011¡A¬d¾\¡uReg ©Ò¥Nªíªº¼È¦s¾¹¡v±oª¾ 011 ¥i¯à¥Nªí EBX¡BBX ©Î BL¡A¦]¬°¬O¤T¤Q¤G¦ì¤¸¡]§YÂù¦r²Õ¡^¡A¬G¥Nªí Reg ªº Gv¡A¨ä¹ê´N¬O¡uEBX¡v¡C
  5. ¥H Mod ¬° 10 ¥H¤Î R/M ¬° 100 ·f°t¡A¬d¾\¡u32-Bit Mod »P R/M ªºÃö«Y¡vªí®æ¡A±oª¾¥Nªí¡uSIB ©w§}¡v¡C
  6. SIB ¦ì¤¸²Õ´N¬O±µµÛ ModR/M ¤§«áªº 079H¡C079H ´«ºâ¦¨¤G¶i¦ì¬O 0111 1001¡AScale ¬O 01¡AIndex ¬O 111¡ABase ¬O 001¡C
    1. ¨Ì¾Ú Scale ¬O 01¡AIndex ¬O 111¡A¤À§O¬d¾\¡uScale ©Ò¥Nªíªº­¿²v¡v¤Î¡uIndex ©Ò¥Nªíªº¼È¦s¾¹¡v±oª¾ Scale ¥Nªí­¼¥H 2¡AIndex ¥Nªí EDI¡A¦X°_¨Ó¡u¯Á¤Þ­¿²v¡v´N¬O¡uEDI¡Ñ2¡v¡C
    2. ¥H Mod ¬° 10 ¥H¤Î Base ¬° 001 ¬d¾\¡u32-bit Mod »P Base ªºÃö«Y¡v¡A±oª¾¬°¡u[ECX+D32+¯Á¤Þ­¿²v]¡v¡C
    3. D32 ¬O¥Nªí¤T¤Q¤G¦ì¤¸ªº°¾²¾¦ì§}¡A¦Ó¦¹°¾²¾¦ì§}´N±µ¦b SIB ¤§«áªº¥|­Ó¦ì¤¸²Õ¡A¨ä­È¬° 44332010H¡C
    ºî¦X¤W­±¨BÆJ i¡ãiii¡A±oª¾ Ev ´N¬O¡u[ECX+EDI¡Ñ2+44332010H]¡v¡C
  7. µ²¦X¨BÆJ 2¡B4¡B6¡A±oª¾¡u8BH 9CH 0B9H 10H 20H 33H 44H¡v¤Ï²ÕĶ«á¬O¡uMOV EBX,[ECX+EDI¡Ñ2+44332010H]¡C

¨Ò¤l¥|¡G¡u66H 0FH 0BAH 64H 18H 1CH 99H¡v

  1. 66H ¬O¹Bºâ¤¸«e¸m½X¡A¦]¬°­ì¥ý°²³]¦b¤T¤Q¤G¦ì¤¸°Ï¬q¡A©Ò¥H¤Á´«¹Bºâ¤¸¤j¤pÅܬ°¤Q¤»¦ì¤¸¡]¤Q¤»¦ì¤¸¦X°_¨Ó¤]ºÙ¬°¦r²Õ¡^¡C
  2. ²Ä¤@­Ó¾Þ§@½X¬° 0FH¡A¬dªþ¿ý¤Cªº¡u32-Bit OpCode Map¡v¡A±oª¾ 0FH ¥Nªí¡u2-Byte Esc¡v¡A·N«ä¬O¾Þ§@½X¦³¨â­Ó¦ì¤¸²Õ¡C
  3. ¦A¥H²Ä¤G­Ó¾Þ§@½X¡A0BAH¡A¬d¾\ªþ¿ý¤Cªº¡u32-Bit OpCode Map Two-byte Opcode Map, Two-byte Opcode Map ( First Byte is 0FH )¡v±o¨ì¡uGRP8 Ev,Ib¡v¡C
  4. ¦]¬°¬d¨ì GRP?¡A¬G ModR/M ªº Reg ¬O OpCode ªº©µ¦ù¡CModR/M ¬O 64H¡A´«ºâ¦¨¤G¶i¦ì¬O 0110 0100¡A¬G Mod ¬° 01¡AOpCode ªº©µ¦ù¬O 100¡AR/M ¬° 100¡C
  5. ¥H OpCode ©µ¦ù¦Ü ModR/M ªº²Ä 3¡ã5 ¦ì¤¸¡A100¡A¥H¤Î GRP8 ¬d¾\ªþ¿ý¤Cªº¡u32-Bit OpCode Extensions¡v±oª¾ GRP8 ¥Nªí¡uBT¡v¡C
  6. ¥Ñ¨BÆJ 3¡B5¡A±oª¾¡u0FH 0BAH 64H¡v¥Nªí¡uBT Ev,Ib¡v¡A±µ¤U¨Ó¬d¥X Ev¡BIb ªº·N¸q¡G
    1. ¬d¾\ªþ¿ý¤C¡u32-Bit Argument Addressing Codes¡v¡A±oª¾ E ¥Nªí¦¹¹Bºâ¤¸¥i¯à¬O³q¥Î¼È¦s¾¹©Î°O¾ÐÅé¡FI ¥Nªí±`¼Æ¡C
    2. ¬d¾\ªþ¿ý¤C¡u32-Bit Argument Operand Codes¡v¡A±oª¾ v ¥Nªí¦¹¹Bºâ¤¸¬O¦r²Õ©ÎÂù¦r²Õ¡Bb ¥Nªí¦¹¹Bºâ¤¸¬O¦ì¤¸²Õ¡C
    ¥Ñ¨BÆJ 1 ±oª¾¹Bºâ¤¸¤j¤p¬O¦r²Õ¡A¬G Ev ¥Nªí¦¹¹Bºâ¤¸¬Oªø«×¬°¦r²Õªº³q¥Î¼È¦s¾¹©Î°O¾ÐÅé¡FIb ªø«×¬°¦ì¤¸²Õªº±`¼Æ¡C¦]¦¹¡uBT Ev,Ib¡v¬O§â¬Y­Ó°O¾ÐÅé©Î¼È¦s¾¹¡]Ev¡^ùØ­±ªº¦r²Õ¡A»Pªø«×¬°¤@­Ó¦ì¤¸²Õªº±`¼Æ¶i¦æ BT ¹Bºâ¡C
  7. ¥Ñ¨BÆJ 4¡A¥H Mod ¬° 01 ¥H¤Î R/M ¬° 100 ·f°t¡A¬d¾\¡u32-Bit Mod »P R/M ªºÃö«Y¡vªí®æ¡A±oª¾¥Nªí¡uSIB ©w§}¡v¡C
  8. SIB ¦ì©ó ModR/M ¤§«á¡A¬G SIB ¬° 18H¡A´«ºâ¦¨¤G¶i¦ì¬O 0001 1000¡AScale ¬O 00¡AIndex ¬O 011¡ABase ¬O 000¡C
    1. ¨Ì¾Ú Scale ¬° 00¡BIndex ¬° 011¡A¤À§O¬d¾\¡uScale ©Ò¥Nªíªº­¿²v¡v¤Î¡uIndex ©Ò¥Nªíªº¼È¦s¾¹¡v±oª¾ Scale ¥Nªí­¼¥H 1¡AIndex ¥Nªí EBX¡A¦X°_¨Ó¯Á¤Þ­¿²v´N¬O¡uEBX¡v¡C
    2. ¥H Mod ¬° 01 ¥H¤Î Base ¬° 000 ¬d¾\¡u32-bit Mod »P Base ªºÃö«Y¡v¡A±oª¾¬°¡u[EAX+D8+¯Á¤Þ­¿²v]¡v¡C
    3. D8 ¬O¥Nªí¤K¦ì¤¸ªº°¾²¾¦ì§}¡A¦Ó¦¹°¾²¾¦ì§}´N¬O¦ì©ó SIB ¤§«áªº 1CH¡C
    ¤W­±¨BÆJ i¡ãiii¡A±oª¾ Ev ´N¬O¡u[EAX+EBX+1CH¡v¡C
  9. Ib ¦ì©ó°¾²¾¦ì§}¤§«á¡A¬G Ib ´N¬O 99H¡C
  10. ºî¦X¨BÆJ 6¡B8¡B9¡A±o¨ì¡u66H 0FH 0BAH 64H 18H 1CH 99H¡v¤Ï²ÕĶ«á¬O¡uBT WORD PTR [EAX+EBX+1CH],99H¡v¡C

¨Ò¤l¤­¡G¡u85H 0CAH¡v

  1. ­º¥ý 85H ¤£¬O¨º¤Q¤@­Ó«e¸m½X¤¤ªº¤@­Ó¡A©Ò¥H¦¹«ü¥O¨ÃµL«e¸m½X¡A±q¾Þ§@½X¶}©l¡C
  2. ²Ä¤@­Ó¾Þ§@½X 85H¡A¬dªþ¿ý¤Cªº¡u32-Bit OpCode Map¡v¡A±oª¾ 85H ªº«ü¥O¬O¡uTEST Ev,Gv¡v¡C
    1. ¬d¾\ªþ¿ý¤C¡u32-Bit Argument Addressing Codes¡v¡A±oª¾ E ¥Nªí¦¹¹Bºâ¤¸¥i¯à¬O³q¥Î¼È¦s¾¹©Î°O¾ÐÅé¡FG ¥Nªí Reg ¬O³q¥Î¼È¦s¾¹¡C
    2. ¬d¾\ªþ¿ý¤C¡u32-Bit Argument Operand Codes¡v¡A±oª¾ v ¥Nªí¦¹¹Bºâ¤¸¬O¦r²Õ©ÎÂù¦r²Õ¡C
    ¦]¬°¬O¤T¤Q¤G¦ì¤¸°Ï¬q¡A©Ò¥H¹w³]¬OÂù¦r²Õ¡A¬G Ev ¥Nªí¦¹¹Bºâ¤¸¬Oªø«×¬°Âù¦r²Õªº³q¥Î¼È¦s¾¹©Î°O¾ÐÅé¡FGv ªº·N«ä¬O Reg ©Ò¥Nªíªº¬Oªø«×¬°Âù¦r²Õªº³q¥Î¼È¦s¾¹¡C¡uTEST Ev,Gv¡v´N¬O¨Ïªø«×¬°Âù¦r²Õªº³q¥Î¼È¦s¾¹©Î°O¾ÐÅé¡]Ev¡^»Pªø«×¬°Âù¦r²Õªº³q¥Î¼È¦s¾¹¡]Gv¡^¶i¦æ TEST ¹Bºâ¡C
  3. ModR/M ¬° 0CAH¡A´«ºâ¦¨¤G¶i¦ì¬O 1100 1010¡A¬G Mod ¬° 11¡AReg ¬° 001¡AR/M ¬° 010¡C
    1. ¥Ñ Reg µ¥©ó 001¡A¬d¾\¡uReg ©Ò¥Nªíªº¼È¦s¾¹¡v±oª¾ 001 ¥i¯à¥Nªí ECX¡BCX ©Î CL¡A±q¨BÆJ 2 ±oª¾¹Bºâ¤¸¬OÂù¦r²Õ¡A¬G Gv ¬O¡uECX¡v¡C
    2. ¥H Mod ¬° 11 ¥H¤Î R/M ¬° 010 ·f°t¡A¬d¾\¡u32-Bit Mod »P R/M ªºÃö«Y¡v¡A±o¨ì¥i¯à¥Nªí EDX¡BDX ©Î DL¡A±q¨BÆJ 2 ±oª¾¹Bºâ¤¸¬OÂù¦r²Õ¡A¬G Ev ¬O¡uEDX¡v¡C
  4. ºî¦X¨BÆJ 2¡B3¡A¡u85H 0CAH¡v¤Ï²ÕĶ«á¬O¡uTEST EDX,ECX¡v¡C

¤ñ¸û¯S§Oªº¬O¡A¦b¨BÆJ 2 ®É¡A¦pªG¬d¾\¤£¦P¸ê®Æ®É¡A¦³¥i¯à¬d¨ìªº¬O¡uTEST Gv,Ev¡v¡C¨Æ¹ê¤W¡A¡uTEST Gv,Ev¡v»P¡uTEST Ev,Gv¡v¬O¤@¼Ëªº«ü¥O¡A³o¬O¦]¬° TEST «ü¥O¶È¶ÈÅý¨â­Ó¹Bºâ¤¸¶i¦æ AND ¹BºâµM«á§ïÅܺX¼Ð¼È¦s¾¹¡A¦ý¬O¨Ã¨S¦³±N¹Bºâªºµ²ªGÂмg¥Øªº¹Bºâ¤¸¡C¤]´N¬O»¡ TEST «ü¥O¨Ã¤£·|§ïÅܥتº¹Bºâ¤¸¤§­È¡A©Ò¥H¥Øªº¹Bºâ¤¸¬O Gv ÁÙ¬O Ev ´N¤£­«­n¤F¡C

¨Ò¤l¤»¡G¡u41H¡v»P¡u0FFH 0C1H¡v

¨Ò¤l¤»­n¤Ï²ÕĶ¨â¹D«ü¥Oªº¾÷±ñ½X¡G¡u41H¡v»P¡u0FFH 0C1H¡v¡C¬°¦ó­n±N³o¨â²Õ¾÷±ñ½XÂ\¦b¤@°_¡Hµ¥¤Ï²ÕĶ§¹¤§«á´N·|©ú¥Õ¤F¡C²{¦b¥ý¨Ó°µ¡u41H¡v¡C

  1. ­º¥ý 41H ¤£¬O¨º¤Q¤@­Ó«e¸m½X¤¤ªº¤@­Ó¡A©Ò¥H¦¹«ü¥O¨ÃµL«e¸m½X¡C
  2. ¬dªþ¿ý¤Cªº¡u32-Bit OpCode Map¡v¡A±oª¾ 41H ªº«ü¥O¬O¡uINC eCX¡v¡C
  3. ¬d¾\32-Bit Argument Operand Codes¡A±oª¾ e ¥Nªí¦¹¹Bºâ¤¸¥i¯à¬O¤Q¤»¦ì¤¸ªº¼È¦s¾¹¡A¥ç¥i¯à¬O¤T¤Q¤G¦ì¤¸ªº¼È¦s¾¹¡A¦]¬°¦b¤T¤Q¤G¦ì¤¸°Ï¬q¡A¬G¹w³]¬°¤T¤Q¤G¦ì¤¸¡A©Ò¥H¡u41H¡v¤Ï²ÕĶ«á±o¨ì¡uINC ECX¡v¡C

©³¤U¨Ó¬Ý¬Ý¦p¦ó¤Ï²ÕĶ¡u0FFH 0C1H¡v¡A¨BÆJ¦p¤U¡G

  1. ­º¥ý 0FFH ¤£¬O¨º¤Q¤@­Ó«e¸m½X¤¤ªº¤@­Ó¡A©Ò¥H¦¹«ü¥O¨ÃµL«e¸m½X¡A±q¾Þ§@½X¶}©l¡C
  2. ²Ä¤@­Ó¾Þ§@½X 0FFH¡A¬dªþ¿ý¤Cªº¡u32-Bit OpCode Map¡v¡A±oª¾ 0FFH ªº«ü¥O¬O¡uGRP5 Ev¡v¡C¨ì¦¹¥iª¾¥Øªº¹Bºâ¤¸¬O¦s©ó¬Y­Ó°O¾ÐÅé¦ì§}©Î¼È¦s¾¹¤ºªºÂù¦r²Õ©Î¦r²Õ¡CGRP5 ¥Nªí ModR/M ¦ì¤¸²Õªº²Ä 3¡ã5 ¦ì¤¸¨Ã¤£¬O¥Nªí¼È¦s¾¹¡A¦Ó¬O OpCode ªº©µ¦ù¡C
  3. ModR/M ¬O 0C1H¡A´«ºâ¦¨¤G¶i¦ì¬O 1100 0001¡A¬G Mod ¬° 11¡AOpCode ªº©µ¦ù¬O 000¡AR/M ¬° 001¡C¥H OpCode ©µ¦ù¦Ü ModR/M ªº²Ä 3¡ã5 ¦ì¤¸¡A000¡A¥H¤Î GRP5 ¬d¾\ªþ¿ý¤Cªº¡u32-Bit OpCode Extensions¡v±oª¾ GRP5 ¥Nªí¡uINC¡v¡C¦A¥Ñ¨BÆJ 3¡A±oª¾«ü¥O¬°¡uINC Ev¡v¡C
  4. ¥H Mod ¬° 11 ¥H¤Î R/M ¬° 001 ·f°t¡A¬d¾\¡u32-Bit Mod »P R/M ªºÃö«Y¡vªí®æ¡A±o¨ì Ev ¬O CX/ECX ©Î CL¡A¥B W ¦ì¤¸¬°¤@¡B¤T¤Q¤G¦ì¤¸°Ï¬q¹w³]¹Bºâ¤¸ªø«×¬°¤T¤Q¤G¦ì¤¸¡A¬G¿ï¾Ü ECX¡C
  5. ºî¦X¤W­±¨BÆJ¡A¡u0FFH 0C1H¡v¤Ï²ÕĶ«á¬O¡uINC ECX¡v¡C

³o¨â²Õ¤£¦Pªº¾÷±ñ½X¡A¤@­Ó¬O¡u41H¡v¡A¥t¤@­Ó¬O¡u0FFH 0C1H¡v¸g¹L¤Ï²ÕĶ¤§«á¡A³ºµM³£¬O¡uINC ECX¡v¡C¥Ñ¦¹¥iª¾¡A¾÷±ñ½X»P x86 «ü¥O¡A¨Ã«Dµ´¹ïªº¤@¹ï¤@Ãö«Y¡C¦Ü¤Ö¦³¥i¯à¬O¨â²Õ¤£¦Pªº¾÷±ñ½X¡A¹ïÀ³¨ì¬Û¦Pªº x86 «ü¥O¡C°£¦¹¤§¥~¡A¨ì¤Fµo®i 64 ¦ì¤¸ CPU ªº®É¥N¡A¤]§Q¥Î³o­Ó­ì²z¡A±N 40H¡ã4FH ªº¾÷±ñ½X§ï¦¨ REX «e¸m½X¡A¤£¹L³o¬O¤U¤@¸`ªº¥DÃD¤F¡C


¤»¤Q¥|¦ì¤¸ªº¾÷±ñ½X

³oùØ©ÒÁ¿ªº¤»¤Q¥|¦ì¤¸ CPU «üªº¬O¶W·L©Ò´£¥X¨Óªº AMD64 ¬[ºcªº CPU¡A¦Ó«á¥Ñ©ó¥«³õªºÀ£¤O¡A­^¯Sº¸¤]±µ¨ü³oºØ¬[ºc¨Ã³c°â¦¹¬[ºcªº CPU¡A³Ì«á´¶Ã¹¤j²³´N§â³oºØ¬[ºcºÙ¬° x86¡Ð64¡A©Î²ºÙ¬° x64¡C¦Ü¤µ¡]¥Á°ê 110 ¦~¡A¦è¤¸ 2021 ¦~¥ª¥k¡^¡Ax64 ¤´¬O¥«­±¤W¥D¬yªº CPU¡C¥¦¥]§t¤F¶W·Lªº Athlon 64/Athlon 64 FX ¨ì AMD Ryzen/AMD Epyc¡A¥H¤Î­^¯Sº¸ªº Pentium 4 (Prescott)¡BPentium D ¨ì Core i3/i5/i7¡C

x64 ¦³³\¦hºØ¾Þ§@¼Ò¦¡¡]¨£µù¤@¡^¡A³oùØ¥D­n¤¶²Ð¤»¤Q¥|¦ì¤¸¼Ò¦¡¡]64-bit mode¡^ªº¾÷±ñ½X¡A¦Ü©ó¨ä¥L¼Ò¦¡¡A¦b«e­±¤w¸g´£¹L¡C¦b¤»¤Q¥|¦ì¤¸¼Ò¦¡¤U¡Ax64 CPU «ü¥O¶°»P IA¡Ð32 «ü¥O¶°³Ì¤jªº¤£¦P¦³¡G

  1. ³q¥Î¼È¦s¾¹¥Ñ¤K­ÓÅܬ°¤Q¤»­Ó¡Aªø«×³£¬O¤»¤Q¥|¦ì¤¸¡A¨ä¦WºÙ¤À§O¬° RAX¡BRBX¡BRCX¡BRDX¡BRBP¡BRSP¡BRSI¡BRDI¡BR8¡BR9¡BR10¡BR11¡BR12¡BR13¡BR14¡BR15¡C
  2. ³o¨Ç¼È¦s¾¹¡A¨C¤@­Ó¤S¯à¦A¤À¥X¤T¤Q¤G¦ì¤¸¡B¤Q¤»¦ì¤¸¡B¤K¦ì¤¸ªº¼È¦s¾¹¡C
  3. ¯à³B²zªº¹Bºâ¤¸ªø«×¦³¦ì¤¸²Õ¡]¤K¦ì¤¸¡^¡B¦r²Õ¡]¤Q¤»¦ì¤¸¡^¡BÂù¦r²Õ¡]¤T¤Q¤G¦ì¤¸¡^¡B¥|¦r²Õ¡]¤»¤Q¥|¦ì¤¸¡^¡C

¬°¤Fªí¥Ü³o¨Ç·s²Kªº 64 ¦ì¤¸¼È¦s¾¹¤Î¨ä¦A¤À¥Xªº¼È¦s¾¹¡A¥H¤Î³B²z¤£¦Pªø«×ªº¹Bºâ¤¸¡Ax64 «ü¥O¶°¦h¤F REX «e¸m½X¡C¤U¹Ï¬O x64 «ü¥O¶°ªº®æ¦¡¡G

¥Ñ¤W¹Ï¥i¥Hª¾¹D¡Ax64 ªº¾÷±ñ½X¥i¤À¬°¤C³¡¤À¡A²Ä¤@³¡¤Àªº¦WºÙ¦b IA¡Ð32 ¤¤¡A­ì¥»ºÙ¬°«e¸m½X¡]prefixes¡^¡A¦b x64 §ïºÙ¶Ç²Î«e¸m½X¡]legacy prefixes¡^¡C²Ä¤G­Ó³¡¤ÀºÙ¬° REX «e¸m½X¡]REX prefix¡AREX ªº­ì¤å¬O register extension¡^¡A¬O·s²Kªº¡A¨ä¾l¦WºÙ¤£ÅÜ¡C

¶Ç²Î«e¸m½X¡]Legacy Prefixes¡^

»P IA¡Ð32 ¬Û¦P¡A²Ó¸`¦b«e­±¤w¤¶²Ð¹L¡A¤]¤w¾ã²z¥Xµ²½×¡A¥i¥H«ö³oùجd¾\¡A¦¹³B¤£ÂØ­z¡C

REX «e¸m½X¡]REX prefix¡^

¦pªG¤w¸g¤j­P¾é¸Ñ IA¡Ð32 ªº¾÷±ñ½X¡A¨º»òÁA¸Ñ¤F REX «e¸m½X¤§«á¡A´N´X¥G¤]´x´¤¦í¤F x64 ¾÷±ñ½X¡C

¦b¤@¹D x64 «ü¥Oªº¾÷±ñ½X¤¤¡AREX «e¸m½X¤£¬O¬Ù²¤¤£¥X²{¡A´N¬O¥e¥Î¤@­Ó¦ì¤¸²Õ¡C¦pªG¦³¥X²{ REX «e¸m½Xªº¸Ü¡A¨º»ò³o­Ó¦ì¤¸²Õªº²Ä¥|¡ã²Ä¤C¦ì¤¸ªº¼Æ­È¬O©T©wªº¡A¨Ì§Ç¬O 0¡B0¡B1¡B0¡F¦Ó²Ä¹s¡B¤@¡B¤G¡B¤T¦ì¤¸¨Ì»Ý­n¦Ó©w¡A¬G¤£¬O©w­È¡A¨ä¦WºÙ¨Ì§Ç¬O REX.B¡BREX.X¡BREX.R ¥H¤Î REX.W¡A¨£¤W¹Ï¡C

¥Ñ¤W±Ô­z¥i±oª¾¡AREX «e¸m½Xªº¼Æ­È¦b 40H¡ã4FH ¤§¶¡¡C¦ý¦pªG¬dªþ¿ý¤Cªº¡u32-Bit OpCode Map¡v¡A·|µo²{¦b 40H¡ã4FH ¤w¸g¦³½s½X¤F¡A¨ä«ü¥O¬O INC ©Î DEC¡C­ì¨Ó x64 ½s½X OpCode ªº³]­pªÌ¤w¸g·Q¹L³o­Ó°ÝÃD¤F¡A¦b¤T¤Q¤G¦ì¤¸°Ï¬q®É¡A40H¡ã4FH ³Q·í°µ INC ©Î DEC «ü¥O¡F¦b¤»¤Q¥|¦ì¤¸°Ï¬q®É¡A¤~¬O³Q·í°µ¬O REX «e¸m½X¡A¦Ó INC ©Î DEC «ü¥O¥i¥Ñ 0FEH¡B0FFH »P ModR/M ²Ä¤T¡ã¤­¦ì¤¸·f°t·Ó¼Ë¥i¥H±o¨ì¡]¨£¤T¤Q¤G¦ì¤¸ CPU ªº¾÷±ñ½X¨Ò¤l¤»¡^¡C

REX.W

REX «e¸m½Xªº²Ä¤T­Ó¦ì¤¸ºÙ¬° REX.W¡A¥¦­t³d±±¨î¹Bºâ¤¸ªº¤j¤p¡C·í REX.W ¬°¤@®É¡A¹Bºâ¤¸ªø«×³]¬° 64 ¦ì¤¸¡F·í REX.W ¬°¹s®É¡A¹Bºâ¤¸ªºªø«×¬°¥Ñ¹Bºâ¤¸ªº¹w³]ªø«×¥H¤Î¹Bºâ¤¸«e¸m½X 66H ¨M©w¡C¸Ô²Ó±¡§Î¦p¤U¡G

  1. ·í REX.W ¬°¤@®É¡A¹Bºâ¤¸ªø«×³]¬° 64 ¦ì¤¸¡C
  2. ·í REX.W ¬°¹s®É¡A¥Ñ¹Bºâ¤¸¹w³]ªø«×¤Î¹Bºâ¤¸«e¸m½X 66H ¨M©w¡A¦³¤U­±¨âºØ±¡§Î¡G
    1. ¦pªG¹Bºâ¤¸¹w³]¤j¤p¬° 32 ¦ì¤¸¡G
      • ¨S¦³¹Bºâ¤¸«e¸m½X 66H¡A¹Bºâ¤¸ªø«×´N¬O 32 ¦ì¤¸¡C
      • ¦pªG¦³¹Bºâ¤¸«e¸m½X 66H ªº¸Ü¡A¹Bºâ¤¸¤j¤p´N·|¤Á´«¦¨ 16 ¦ì¤¸¡C
    2. ¦pªG¹Bºâ¤¸¹w³]¤j¤p¬° 16 ¦ì¤¸¡G
      • ¨S¦³¹Bºâ¤¸«e¸m½X 66H¡A¹Bºâ¤¸ªø«×´N¬O 16 ¦ì¤¸¡C
      • ¦pªG¦³¹Bºâ¤¸«e¸m½X 66H ªº¸Ü¡A¹Bºâ¤¸¤j¤p´N·|¤Á´«¦¨ 32 ¦ì¤¸¡C

¹Bºâ¤¸ªº¹w³]ªø«×·|¨Ì¾Ú x64 ±o¾Þ§@¼Ò¦¡¨M©w¡A½Ð°Ñ¾\µù¤@¡C

REX.R

REX.R ¦ì¤¸¬O REX «e¸m½Xªº²Ä¤G­Ó¦ì¤¸¡A¥¦»P ModR/M ¤¤ªº Reg Äæ¦ì¦X°_¨Ó¡A¦@¦³¥|­Ó¦ì¤¸¡A«ê¦n¥i¥H¥Nªí 16 ­Ó¼È¦s¾¹¡A¥Î¥Hªí¥Ü x64 ·s¼W¥[ªº¼È¦s¾¹¡C´«¥y¸Ü»¡¡A¦pªG REX.R ¬°¹s¡AReg Äæ¦ì´N¥Nªí¦³ªº¼È¦s¾¹¡F­Y REX.R ¬°¤@¡AReg Äæ¦ì´N¥Nªí R8¡ãR15 µ¥·s²Kªº¼È¦s¾¹¡C

¨Ò¦p REX.R ¬° 0¡AReg ¬° 010 ®É¡A¥Nªí DL¡BDX¡BEDX ©Î RDX¡F­Y REX.R ¬° 1¡AReg ¬° 010 ®É¡A¥Nªí R10B¡BR10W¡BR10D ©Î R10 ¼È¦s¾¹¡C·íµMÁÙ¥²¶·¦A·f°t«ü¥Ü REX.W ¥H¤Î¹Bºâ¤¸«e¸m½X¡A¤~¯à½T¹êª¾¹D¬O­þ­Ó¼È¦s¾¹¡C

REX.R ¦ì¤¸»P Reg Äæ¦ìÃö«Y¦p¤Uªí¡G¡]¤Uªí¦P®É¤]¦C¥X REX.X »P REX.B ªº¸ê®Æ¡A¦]¬°³o¤TªÌ«Ü¬Û¹³¡A¥¦­Ì³£¬OÂX¥R¼È¦s¾¹¦Ó¦s¦b¡A®t§O¦b©óÂX¥R­þ­ÓÄæ¦ì¤£¦P¡^

REX.R¡BREX.X¡BREX.B »P Reg¡BIndex¡BBase Äæ¦ì¤§Ãö«Y
REX.R
/X/B
¼È¦s¾¹
ªø«×
Reg¡BIndex ©Î Base Äæ¦ì
000001010011100101110111
0¤K¦ì¤¸ALCLDLBLAH/SPL CH/BPLDH/SILBH/DIL
¤Q¤»¦ì¤¸AXCXDXBXSPBPSIDI
¤T¤Q¤G¦ì¤¸EAXECXEDXEBXESPEBPESIEDI
¤»¤Q¥|¦ì¤¸RAXRCXRDXRBXRSPRBPRSIRDI
1¤K¦ì¤¸R8BR9BR10BR11BR12BR13BR14BR15B
¤Q¤»¦ì¤¸R8WR9WR10WR11WR12WR13WR14WR15W
¤T¤Q¤G¦ì¤¸R8DR9DR10DR11DR12DR13DR14DR15D
¤»¤Q¥|¦ì¤¸R8R9R10R11R12R13R14R15

¦b¤Wªí¤¤¡A¦³¥|¹ï¤K¦ì¤¸ªº¼È¦s¾¹¡A¨â¨â¨ã¦³¬Û¦Pªº½s½X¡A¨º´N¬O AH/SPL¡BCH/BPL¡BDH/SIL¡BBH/DIL¡A¨º­n«ç»ò°Ï§O©O¡H¨Æ¹ê¤W¡A¤W­±ªºªí®æ¦³¤@ÂI¨à·å²«¥²»Ý»¡©ú¡AÁA¸Ñ¤F³o­Ó»¡©ú¤§«á¡A¤]´N¦P®É¸Ñ¨M¤F­è­èªº°ÝÃD¡C¤Wªí¤¤¥Hµµ¦âªí¥Üªº¼È¦s¾¹¬O IA¡Ð32 ®É¥N´N¤w¸g¦³ªº¼È¦s¾¹¡A¤£»Ý­n¥[¤W REX «e¸m½X´N¯àªí¥Ü¡A©Ò¥H¨Ã¨S¦³ REX.R ¦ì¤¸¬°¹sªº°ÝÃD¡C¦]¦¹´N¯à°÷¥Ñ¦³¨S¦³ REX «e¸m½X¨Ó°Ï§O AH/SPL¡A¨ä¾l¤T¹ï¤]¬O¦p¦¹¡C¨Ò¦p©³¤Uªº¨Ò¤l¡G

¾÷±ñ½X     x86«ü¥O
------------------
FEC4      inc  ah
40FEC4    inc  spl

¥¿¦]¬°¦p¦¹¡A¥H¤U¥|­Ó¼È¦s¾¹¡GAH¡BCH¡BDH¡BBH¡A¤£¯à»P»Ý­n¦³ REX «e¸m½X¤~¯àªí¥Üªº¼È¦s¾¹¡A¨Ò¦p SPL¡BBPL¡BSIL¡BDIL¡BRAX¡BRBX¡K¡K¡A¦P®É¥X²{¦b¤@¹D«ü¥O¤§¤¤¡C¨Ò¦p©³¤Uªº¤T¹D«ü¥O¡A³£¬O¿ù»~ªº¡A³£µLªk²ÕĶ¦¨¥\¡G

        mov     ah,dil
        add     ch,sil
        movzx   rax,bh

REX.X »P REX.B

REX.X ¦ì¤¸§@¥Î»P REX.R ¦ì¤¸ªº§@¥ÎÃþ¦ü¡AREX.X ¦ì¤¸»P SIB ¤¤ªº Index Äæ¦ì¦X°_¨Ó¡A¦@¦³¥|­Ó¦ì¤¸¡A«ê¦n¥i¥H¥Nªí¤Q¤»­Ó¼È¦s¾¹¡CREX.X ¦ì¤¸»P Index Äæ¦ì¬Û¤¬°t¦X¡A©Ò±oªº¼È¦s¾¹¦p¤Wªí¡C¦P²z¡AREX.B ¦ì¤¸ªº§@¥Î¤]¬O©µ¦ù¦³ªºÄæ¦ì¡A¨Ï±o¯à°÷ªí¥Ü¤Q¤»­Ó¼È¦s¾¹¡F®t§O¦b¥¦¥i¥H©µ¦ùÄæ¦ì¦³¨âºØ¡G①SIB ¤¤ªº Base Äæ¦ì¡B②ModRM ¤¤ªº R/M Äæ¦ì¡C

¾Þ§@½X¡]OpCode¡^

¤»¤Q¥|¦ì¤¸¼Ò¦¡¤U¡A¾÷±ñ½Xªº²Ä¤T­Ó³¡¤À¬O¾Þ§@½X¡A¥¦¨M©w¤F CPU ­n°õ¦æªº«ü¥O¡C¦b¤»¤Q¥|¦ì¤¸¼Ò¦¡¤U¡A¾Þ§@½X³Ì¤Ö¨Ï¥Î¤@­Ó¦ì¤¸²Õ¡A³Ì¦h¤T­Ó¦ì¤¸²Õ¡A¦p¤Uªí¡G

  1. ¦pªG¾Þ§@½X¥u¦³¤@­Ó¦ì¤¸²Õ¡A¥i¬d¾\ªþ¿ý¤C¡u64-Bit OpCode Map¡v¡A´N¯à±oª¾¦¹¾Þ§@½X¥Nªí¤°»ò«ü¥O¡C
  2. ¦pªG¾Þ§@½X¦³¨â­Ó¦ì¤¸²Õ¡A¨º»ò²Ä¤@­Ó¦ì¤¸²Õ¥²©w¬O 0FH¡A¥iÂǥѲĤG­Ó¾Þ§@½X¬d¾\ªþ¿ý¤C¡u64-Bit OpCode Map, Two-byte Opcode Map ( First Byte is 0FH )¡v¡A¬d¥X¬O­þ¤@­Ó«ü¥O¡C
  3. ¦pªG¾Þ§@½X¦³¤T­Ó¦ì¤¸²Õ¡A¨º»ò²Ä¤@­Ó¦ì¤¸²Õ¥²©w¬O 0FH¡A²Ä¤G­Ó¾Þ§@½X¤£¬O 38H¡A´N¬O 3AH¡A¥²¬O³o¨âªÌ¤§¤@¡C³o³¡¤Àªº¾Þ§@½X©Ò¥Nªíªº«ü¥O¡A¤j¦h²o¯A¨ì¦h´CÅé©Î¦V¶qªº­pºâ¡C

¸ò 8086/8088¡BIA¡Ð32 ¤@¼Ë¡A¦³¨Ç¾Þ§@½X·|©µ¦ù¨ì ModR/M ¤¤ªº²Ä 3¡ã5 ¦ì¤¸¡C¦pªG¬O³oºØ±¡§Î¡A¦b OpCode Map ¤¤·|¼Ð¥Ü GRP?¡A³o®É­Ô¨Ì¾Ú GRP? »P ModR/M ¤¤²Ä 3¡ã5 ¦ì¤¸¤§­È¡A¬d¾\ªþ¿ý¤C¡u64-Bit OpCode Extensions¡v¡A¤~¯àª¾¹D¬O­þ¤@­Ó«ü¥O¡C

ModR/M ¦ì¤¸²Õ

¾÷±ñ½Xªº²Ä¥|­Ó³¡¤ÀºÙ¬° ModR/M ¦ì¤¸²Õ¡A¥¦¨M©w¤F©w§}¤è¦¡¡C¸ò IA¡Ð32 ¤@¼Ë¡AModR/M ¦ì¤¸²Õ©î¦¨¤T³¡¤À¡A²Ä¹s¡ã¤G¦ì¤¸ºÙ¬° R/M¡A²Ä¤T¡ã¤­¦ì¤¸ºÙ¬° Reg¡A²Ä¤»¡B¤C¦ì¤¸ºÙ¬° Mod¡CMod »P R/M ¬Û¤¬·f°t¨M©w¤F©w§}¼Ò¦¡¡C³o¤@³¡¤À»P¤T¤Q¤G¦ì¤¸Ãþ¦ü¡A¦ý¬O¬°¤F­nªí¥Ü¦b¤»¬O¥|¦ì¤¸¼Ò¦¡¤U¡A¯S¦³ªº R8¡ãR15 ¼È¦s¾¹¡A¦]¦¹­n¦Ò¼{ REX «e¸m½Xªº B ¦ì¤¸¡C½Ð¬Ý¤Uªí¡G

64-Bit Mod »P R/M ªºÃö«Y
R/MMod¡×00Mod¡×01Mod¡×10Mod¡×11
REX.B
¡×0
REX.B
¡×1
REX.B
¡×0
REX.B
¡×1
REX.B
¡×0
REX.B
¡×1
µLREXREX.B¡×0REX.B¡×1
W¡×0W¡×0W¡×1W¡×0W¡×1
000[RAX][R8][RAX+D8][R8+D8][RAX+D32][R8+D32]ALRAX/EAX/AXR8BR8/R8D/R8W
001[RCX][R9][RCX+D8][R9+D8][RCX+D32][R9+D32]CLRCX/ECX/CXR9BR9/R9D/R9W
010[RDX][R10][RDX+D8][R10+D8][RDX+D32][R10+D32]DLRDX/EDX/DXR10BR10/R10D/R10W
011[RBX][R11][RBX+D8][R11+D8][RBX+D32][R11+D32]BLRBX/EBX/BXR11BR11/R11D/R11W
100SIB ©w§}SIB ©w§}SIB ©w§}AHBPLRSP/ESP/SPR12BR12R/R12D/R12W
101[D32][D32][RBP+D8][R13+D8][RBP+D32][R13+D32]CHBPLRBP/EBP/BPR13BR13R/R13D/R13W
110[RSI][R14][RSI+D8][R14+D8][RSI+D32][R14+D32]DHSILRSI/ESI/SIR14BR14R/R14D/R14W
111[RDI][R15][RDI+D8][R15+D8][RDI+D32][R15+D32]BHDILRDI/EDI/DIR15BR15R/R15D/R15W

¤Wªí¤¤¡A·í Mod¡×11 ¥B W¡×1 ®É¡A¦³ 16 ¦ì¤¸¡B32 ¦ì¤¸¡B64 ¦ì¤¸ªº¼È¦s¾¹¡A¨º»ò¨ì©³­n¿ï­þ¤@­Ó©O¡H³o®É­Ô¥²¶·¬Ý¸Ó¹w³]ªº¹Bºâ¤¸¤j¤p¡A¥H¤Î¬O§_¦³¥X²{ 66H «e¸m½X¨M©w¡A¦b«e­±¤w¸g±Ô­z¹L¡A¦¹³B´N¤£­«½Æ¤F¡C

SIB ¦ì¤¸²Õ

64 ¦ì¤¸¼Ò¦¡ªº SIB ¸ò IA¡Ð32 ªº SIB Ãþ¦ü¡A¨ä¤¤ Scale Äæ¦ìªº·N¸q§¹¥þ¤@¼Ë¡A½Ð°Ñ¾\ IA¡Ð32 ªº¡uScale ©Ò¥Nªíªº­¿²v¡v¡FIndex Äæ¦ì«h°µ¤FÂX¥R¡A¥²¶·»P REX.X ¦ì¤¸·f°t¡A½Ð°Ñ¾\¡uREX.R¡BREX.X¡BREX.B »P Reg¡BIndex¡BBase Äæ¦ì¤§Ãö«Y¡v¡CBase ¤]¦]¬°¼È¦s¾¹ÂX¥R¦¨¤F¤Q¤»­Ó¡A¥²¶·»P REX.B ¦ì¤¸·f°t¡A¦Cªí®æ¦p¤U¡C

64-Bit Mod »P Base ªºÃö«Y
BaseMod¡×00Mod¡×01Mod¡×10
REX.B¡×0REX.B¡×1REX.B¡×0REX.B¡×1REX.B¡×0REX.B¡×1
000[RAX+¯Á¤Þ­¿²v][R8+¯Á¤Þ­¿²v][EAX+D8+¯Á¤Þ­¿²v][R8+D8+¯Á¤Þ­¿²v][EAX+D32+¯Á¤Þ­¿²v][R8+D32+¯Á¤Þ­¿²v]
001[RCX+¯Á¤Þ­¿²v][R9+¯Á¤Þ­¿²v][ECX+D8+¯Á¤Þ­¿²v][R9+D8+¯Á¤Þ­¿²v][ECX+D32+¯Á¤Þ­¿²v][R9+D32+¯Á¤Þ­¿²v]
010[RDX+¯Á¤Þ­¿²v][R10+¯Á¤Þ­¿²v][EDX+D8+¯Á¤Þ­¿²v][R10+D8+¯Á¤Þ­¿²v][EDX+D32+¯Á¤Þ­¿²v][R10+D32+¯Á¤Þ­¿²v]
011[RBX+¯Á¤Þ­¿²v][R11+¯Á¤Þ­¿²v][EBX+D8+¯Á¤Þ­¿²v][R11+D8+¯Á¤Þ­¿²v][EBX+D32+¯Á¤Þ­¿²v][R11+D32+¯Á¤Þ­¿²v]
100[RSP+¯Á¤Þ­¿²v][R12+¯Á¤Þ­¿²v][ESP+D8+¯Á¤Þ­¿²v][R12+D8+¯Á¤Þ­¿²v][ESP+D32+¯Á¤Þ­¿²v][R12+D32+¯Á¤Þ­¿²v]
101[D32+¯Á¤Þ­¿²v][D32+¯Á¤Þ­¿²v][EBP+D8+¯Á¤Þ­¿²v][R13+D8+¯Á¤Þ­¿²v][EBP+D32+¯Á¤Þ­¿²v][R13+D32+¯Á¤Þ­¿²v]
110[RSI+¯Á¤Þ­¿²v][R14+¯Á¤Þ­¿²v][ESI+D8+¯Á¤Þ­¿²v][R14+D8+¯Á¤Þ­¿²v][ESI+D32+¯Á¤Þ­¿²v][R14+D32+¯Á¤Þ­¿²v]
111[RDI+¯Á¤Þ­¿²v][R15+¯Á¤Þ­¿²v][EDI+D8+¯Á¤Þ­¿²v][R15+D8+¯Á¤Þ­¿²v][EDI+D32+¯Á¤Þ­¿²v][R15+D32+¯Á¤Þ­¿²v]

¨Ò¤l

©³¤Uªº¨Ò¤l³£¬O°²³]¦b x64 CPU ªº¤»¤Q¥|¦ì¤¸¼Ò¦¡¤U°õ¦æ¡C

¨Ò¤l¤@¡G¡u0F7H 0D0H¡v¡B¡u66H 0F7H 0D0H¡v¡B¡u48H 0F7H 0D0H¡v

³o¤T²Õ¾÷±ñ½X¥Î¨Ó»¡©ú W ¦ì¤¸ªº§@¥Î¡C¥ý¬Ý¡u0F7H 0D0H¡v¡C

  1. ­º¥ý 0F7H ¤£¬O¨º¤Q¤@­Ó¶Ç²Î«e¸m½X©Î REX «e¸m½X¤¤ªº¤@­Ó¡A©Ò¥H¦¹«ü¥O¨ÃµL«e¸m½X¡A±q¾Þ§@½X¶}©l¡C
  2. ²Ä¤@­Ó¾Þ§@½X 0F7H¡A¬dªþ¿ý¤Cªº¡u64-Bit OpCode Map¡v¡A±oª¾ 0F7H ªº«ü¥O¬O¡uGRP3b Ev¡v¡C
  3. ¦]¬°¬d¨ì¤F GRP3b¡A¬G ModR/M ªº Reg ¬O OpCode ªº©µ¦ù¡CModR/M ¬° 0D0H¡A´«ºâ¦¨¤G¶i¦ì¬O 1101 0000¡A¬G Mod ¬° 11¡AOpCode ªº©µ¦ù¬° 010¡AR/M ¬° 000¡C
  4. ¥H OpCode ©µ¦ù¦Ü ModR/M ªº²Ä 3¡ã5 ¦ì¤¸¡A010¡A¥H¤Î GRP3b ¬d¾\ªþ¿ý¤Cªº¡u64-Bit OpCode Extensions¡v±oª¾ GRP3b ¥Nªí¡uNOT¡v¡C
  5. ¥Ñ¨BÆJ 2¡B4 ±oª¾ 0F7H 0D0H ¥Nªí¡uNOT Ev¡v¡A±µ¤U¨Ó¬d¥X Ev ªº·N¸q¡G
    1. ¬d¾\ªþ¿ý¤C¡u64-Bit Argument Addressing Codes¡v¡A±oª¾ E ¥Nªí¦¹¹Bºâ¤¸¥i¯à¬O³q¥Î¼È¦s¾¹¡A¤]¥i¯à¬O°O¾ÐÅé¡C
    2. ¦A¬d¾\ªþ¿ý¤C¡u64-Bit Argument Operand Codes¡v¡A±oª¾ v ¥Nªí¦r²Õ¡BÂù¦r²Õ©Î¥|¦r²Õ¡C
    ¦]¬°¬O¤»¤Q¥|¦ì¤¸¼Ò¦¡¡A¥B¨S¦³«e¸m½X¡A©Ò¥H¹w³]ªº¹Bºâ¤¸¬OÂù¦r²Õ¡A¬G¡uNOT Ev¡v¬O§â¦s©ó¬Y­Ó°O¾ÐÅé©Î¼È¦s¾¹¡]Ev¡^ùØ­±ªºÂù¦r²Õ¶i¦æ NOT ¹Bºâ¡C
  6. ¥Ñ¨BÆJ 3¡A¥H Mod ¬° 11 ¥H¤Î R/M ¬° 000 ·f°t¡A¬d¾\¡u64-Bit Mod »P R/M ªºÃö«Y¡v¡A¥B¦]¬°¨S¦³ REX «e¸m½X¡A¬G§â REX.B µø¬° 0¡A©ó¬O Ev ¥i¯à¬O RAX¡BEAX¡BAX¡C¦]¬°¤»¤Q¥|¦ì©ó¼Ò¦¡¤U¡A¹Bºâ¤¸¹w³]ªø«×¬O 32 ¦ì¤¸¡A¥B¨S¦³¹Bºâ¤¸«e¸m½X 66H¡A¬G Ev ¬O EAX¡C
  7. ºî¦X¨BÆJ 5¡B6 ±oª¾¡A¡u0F7H 0D0H¡v¤Ï²ÕĶ«á¬O¡uNOT EAX¡v¡C

¦A¨Ó¬Ý²Ä¤G²Õ¾÷±ñ½X¡A¡u66H 0F7H 0D0H¡v¤Ï²ÕĶªº¹Lµ{¡C

  1. ­º¥ý 66H ¬O¤Q¤@­Ó¶Ç²Î«e¸m½X¤¤ªº¹Bºâ¤¸«e¸m½X¡A¥¦·|¤Á´«¹w³]ªº¹Bºâ¤¸ªø«×¡C
  2. °Ñ¦Ò¤W­±ªº¨Ò¤l¡A±oª¾¡u0F7H 0D0H¡v¤Ï²ÕĶ¤§«á¬O NOT Ev¡A¥B Ev ¬O RAX¡BEAX¡BAX ¤¤ªº¨ä¤¤¤@­Ó¡C
  3. ¦]¬°¥u¦³·í REX.W µ¥©ó 1 ®É¡A¹Bºâ¤¸¡AEv¡A¤~·|¬O 64 ¦ì¤¸ªº RAX¡A¦ý³o­Ó¨Ò¤l¨S¦³ REX «e¸m½X¡A©Ò¥H Ev ¤£¬O RAX¡C¦b¤»¤Q¥|¦ì©ó¼Ò¦¡¤U¡A¹Bºâ¤¸¹w³]ªø«×¬O 32 ¦ì¤¸¡A¦ý¦]¬°¦³¹Bºâ¤¸«e¸m½X 66H¡A¥²¶·±N Ev ¤Á´«¦¨ 16 ¦ì¤¸¡A©Ò¥H Ev ¬O AX¡C
  4. ¥Ñ¤W­±¨â¨BÆJ¡A±oª¾¡u66H 0F7H 0D0H¡v¤Ï²ÕĶ¤§«á¬O¡uNOT AX¡v¡C

³Ì«á¨Ó¬Ý²Ä¤T²Õ¾÷±ñ½X¡u48H 0F7H 0D0H¡v¤Ï²ÕĶªº¹Lµ{¡C

  1. ­º¥ý 48H ¬O REX «e¸m½X¡A´«ºâ¦¨¤G¶i¦ì«á¬O 0100 1000¡A±oª¾ REX.W ¬°¤@¡A¬G¹Bºâ¤¸¬° 64 ¦ì¤¸¡C
  2. °Ñ¦Ò¤W­±ªº¡u0F7H 0D0H¡v¡A±oª¾¤Ï²ÕĶ¤§«á¬O NOT Ev¡A¥B Ev ¬O RAX¡BEAX¡BAX ¤¤ªº¨ä¤¤¤@­Ó¡C
  3. ¥Ñ¤W­±¨â¨BÆJ¡A±oª¾¡u48H 0F7H 0D0H¡v¤Ï²ÕĶ¤§«á¬O¡uNOT RAX¡v¡C

¨Ò¤l¤G¡G¡u0FEH 0C1H¡v»P¡u41H 0FEH 0C1H¡v

³o¨â²Õ¾÷±ñ½X¨ä¹ê¬O¥Î¨Ó»¡©ú REX.B ¦ì¤¸ªº§@¥Î¡C¥ý¬Ý¡u0FEH 0C1H¡v¡G

  1. ­º¥ý 0FEH ¤£¬O¨º¤Q¤@­Ó¶Ç²Î«e¸m½X©Î REX «e¸m½X¤¤ªº¤@­Ó¡A©Ò¥H¦¹«ü¥O¨ÃµL«e¸m½X¡A±q¾Þ§@½X¶}©l¡C
  2. ²Ä¤@­Ó¾Þ§@½X 0FEH¡A¬dªþ¿ý¤Cªº¡u64-Bit OpCode Map¡v¡A±oª¾ 0FEH ªº«ü¥O¬O¡uGRP4 Eb¡v¡C
  3. ¦]¬°¬d¨ì¤F GRP4¡A¬G ModR/M ªº Reg ¬O OpCode ªº©µ¦ù¡CModR/M ¬° 0C1H¡A´«ºâ¦¨¤G¶i¦ì¬O 1100 0001¡A¬G Mod ¬° 11¡AOpCode ªº©µ¦ù¬° 000¡AR/M ¬° 001¡C
  4. ¥H OpCode ©µ¦ù¦Ü ModR/M ªº²Ä 3¡ã5 ¦ì¤¸¡A000¡A¥H¤Î GRP4 ¬d¾\ªþ¿ý¤Cªº¡u64-Bit OpCode Extensions¡v±oª¾ GRP4 ¥Nªí¡uINC¡v¡C
  5. ¥Ñ¨BÆJ 2¡B4 ±oª¾ 0FEH 0C1H ¥Nªí¡uINC Eb¡v¡A±µ¤U¨Ó¬d¥X Eb ªº·N¸q¡G
    1. ¬d¾\ªþ¿ý¤C¡u64-Bit Argument Addressing Codes¡v¡A±oª¾ E ¥Nªí¦¹¹Bºâ¤¸¥i¯à¬O³q¥Î¼È¦s¾¹¡A¤]¥i¯à¬O°O¾ÐÅé¡C
    2. ¦A¬d¾\ªþ¿ý¤C¡u64-Bit Argument Operand Codes¡v¡A±oª¾ b ¥Nªí¦ì¤¸²Õ¡C
    ºî¦X¤W­±¨BÆJ i¡ãii¡A±oª¾¡uINC Eb¡v¬O¨Ï¬Y­Óªø«×¬°¤@­Ó¦ì¤¸²Õªº°O¾ÐÅé©Î¼È¦s¾¹¤§­È¼W¥[¤@¡C
  6. ¥Ñ¨BÆJ 3¡A¥H Mod ¬° 11 ¥H¤Î R/M ¬° 001 ·f°t¡A¬d¾\¡u64-Bit Mod »P R/M ªºÃö«Y¡v¡A¥B¦]¬°¨S¦³ REX «e¸m½X¡A©ó¬O Eb ´N¬O CL¡C
  7. ºî¦X¨BÆJ 5¡B6 ±oª¾¡A¡u0FEH 0C1H¡v¤Ï²ÕĶ«á¬O¡uINC CL¡v¡C

¦A¨Ó¬Ý¬Ý¡u41H 0FEH 0C1H¡v¤Ï²ÕĶªº¹Lµ{¡C

  1. ­º¥ý 41H ¬O REX «e¸m½X¡A´«ºâ¦¨¤G¶i¦ì«á¬O 0100 0001¡A±oª¾ REX.B ¬°¤@¡C
  2. °Ñ¦Ò¤W­±ªº¡u0FEH 0C1H¡v¨Ò¤l¡A±oª¾¤Ï²ÕĶ«á¬O INC Eb¡C
  3. ¥H Mod ¬° 11 ¥H¤Î R/M ¬° 001 ·f°t¡A¬d¾\¡u64-Bit Mod »P R/M ªºÃö«Y¡v¡A¥B REX.B ¬°¤@¡A©Ò¥H±o¨ì Eb ¬O R9B¡C
  4. ¥Ñ¤W­±¨â¨BÆJ¡A±oª¾¡u41H 0FEH 0C1H¡v¤Ï²ÕĶ¤§«á¬O¡uINC R9B¡v¡C

¨Ò¤l¤T¡G¡u4CH 69H 15H 20H 00 00 00 4AH 3BH 2CH 1DH¡v

³o­Ó¾÷±ñ½X«Üªø¡A¦@ 11 ­Ó¦ì¤¸²Õ¡A¦ý¤£¥²¾á¤ß¡A¸Õ¸Õ¬Ý´N¹ï¤F¡C

  1. ­º¥ý 4CH ¬O REX «e¸m½X¡A´«ºâ¦¨¤G¶i¦ì«á¬O 0100 1100¡A±oª¾ REX.W »P REX.R §¡¬°¤@¡C¦]¬° REX.W ¬° 1¡A¹Bºâ¤¸¬° 64 ¦ì¤¸¡F¦]¬° REX.R ¬° 1¡AModR/M ªº Reg Äæ¦ì·|»P REX.R µ²¦X¡A·|¥Î¨ì R8¡ãR15 ¼È¦s¾¹¡C
  2. ²Ä¤@­Ó¾Þ§@½X¬O 69H¡A¬dªþ¿ý¤Cªº¡u64-Bit OpCode Map¡v¡A±oª¾ 69H ªº«ü¥O¬O¡uIMUL Gv,Ev,Iz¡v¡C
    1. ¬d¾\ªþ¿ý¤C¡u64-Bit Argument Addressing Codes¡v¡A±oª¾ G ¥Nªí ModR/M ¦ì¤¸²Õ¤¤ªº Reg Äæ¦ì¬O³q¥Î¼È¦s¾¹¡FE ¥Nªí¦¹¹Bºâ¤¸¥i¯à¬O³q¥Î¼È¦s¾¹¡A¤]¥i¯à¬O°O¾ÐÅé¡FI ¥Nªí±`¼Æ¡C
    2. ¦A¬d¾\ªþ¿ý¤C¡u64-Bit Argument Operand Codes¡v¡A±oª¾ v ¥Nªí¦r²Õ¡BÂù¦r²Õ©Î¥|¦r²Õ¡Az ¥NªíÂù¦r²Õ©Î¦r²Õ¡C
  3. ModR/M ¬° 15H¡A´«ºâ¦¨¤G¶i¦ì¬O 0001 0101¡A¬G Mod ¬° 00¡AReg ¬° 010¡AR/M ¬° 101¡C
  4. ¥Ñ Reg ¬° 010 ¥H¤Î REX.R ¬° 1¡A¬d¾\¡uREX.R¡BREX.X¡BREX.B »P Reg¡BIndex¡BBase Äæ¦ì¤§Ãö«Y¡v±oª¾ Gv ¥i¯à¬O R10W¡BR10D¡BR10¡F¤Sª¾ REX.W ¬° 1¡A¥Nªí¹Bºâ¤¸¬O 64 ¦ì¤¸¡C³Ì«á±o¨ì Gv ¥Nªí R10¡C
  5. ¥H Mod ¬° 00 ¥H¤Î R/M ¬° 101 ·f°t¡A¬d¾\¡u64-Bit Mod »P R/M ªºÃö«Y¡vªí®æ¡A±o¨ì Ev ¬O¡u[D32]¡v¡A¡u[D32]¡vªí¥Ü 32 ¦ì¤¸ªº°¾²¾¦ì§}¡A´N¬O ModR/M ¤§«áªº 00000020H¡A¬G Ev ¬°¡u[20H]¡v¡C
  6. Iz ¤¤ªº z ¥i¯à¬O¦r²Õ¤]¥i¯à¬OÂù¦r²Õ¡C®Ú¾Úªþ¿ý¤C¡u64-Bit Argument Operand Codes¡vªº»¡©ú¡A·í¹Bºâ¤¸¬O¦r²Õ®É¡Az ¥Nªí¦r²Õ¡F·í¹Bºâ¤¸¬OÂù¦r²Õ©Î¥|¦r²Õ®É¡Az ¥NªíÂù¦r²Õ¡C¦]¬° REX.W ¬° 1¡Aªí¥Ü¹Bºâ¤¸¬°¥|¦r²Õ¡A©Ò¥H z ¬OÂù¦r²Õ¡CIz ¬OÂù¦r²Õªº±`¼Æ¡A´N¬O 1D2C3B4AH¡C
  7. ºî¦X¨BÆJ 2¡B4¡ã6¡A±oª¾¡u4CH 69H 15H 20H 00 00 00 4AH 3BH 2CH 1DH¡v¤Ï²ÕĶ«á¬O¡uIUML R10,[20H],1D2C3B4AH¡v¡C

¨Ò¤l¥|¡G¡u4FH 8BH 0A4H 88H 3CH 00 00 00¡v

  1. ­º¥ý 4FH ¬O REX «e¸m½X¡A´«ºâ¦¨¤G¶i¦ì«á¬O 0100 1111¡A±oª¾ REX.W¡BREX.R¡BREX.X¡BREX.B §¡¬°¤@¡C
  2. ²Ä¤@­Ó¾Þ§@½X¬O 8BH¡A¬dªþ¿ý¤Cªº¡u64-Bit OpCode Map¡v¡A±oª¾ 8BH ªº«ü¥O¬O¡uMOV Gv,Ev¡v¡C
    1. ¬d¾\ªþ¿ý¤C¡u64-Bit Argument Addressing Codes¡v¡A±oª¾ G ¥Nªí ModR/M ¦ì¤¸²Õ¤¤ªº Reg Äæ¦ì¬O³q¥Î¼È¦s¾¹¡AE ¥Nªí¦¹¹Bºâ¤¸¥i¯à¬O³q¥Î¼È¦s¾¹¡A¤]¥i¯à¬O°O¾ÐÅé¡C
    2. ¬d¾\ªþ¿ý¤C¡u64-Bit Argument Operand Codes¡v¡A±oª¾ v ¥Nªí¦r²Õ¡BÂù¦r²Õ©Î¥|¦r²Õ¡C
  3. ¥Ñ¨BÆJ 1¡AREX.W ¬° 1¡A±oª¾¹Bºâ¤¸¬O 64 ¦ì¤¸¡A§Y¥|¦r²Õ¡C¦A¥[¤W¨BÆJ 2¡A±oª¾¡u4FH 8BH¡v¤Ï²ÕĶ«á¬O¡uMOV Gv,Ev¡v¡A§â¤@­Ó¥|¦r²Õªøªº³q¥Î¼È¦s¾¹©Î°O¾ÐÅ餺®e¡]Ev¡^¡A¦s¤J³q¥Î¼È¦s¾¹¡]Gv¡^¤¤¡C
  4. ModR/M ¬° 0A4H¡A´«ºâ¦¨¤G¶i¦ì¬O 1010 0100¡A¬G Mod ¬° 10¡AReg ¬° 100¡AR/M ¬° 100¡C
  5. ¥Ñ¨BÆJ 1¡A±oª¾ REX.R ¬° 1¡F¥B¥Ñ¨BÆJ 4¡A±oª¾ Reg ¬° 100¡C¥H¦¹¤GªÌ¬°¨Ì¾Ú¡A¬d¾\REX.R¡BREX.X¡BREX.B »P Reg¡BIndex¡BBase Äæ¦ì¤§Ãö«Y¡A±oª¾ Gv ¬O R12¡C
  6. ¥Ñ¨BÆJ 1¡A±oª¾ REX.B ¬° 1¡A¦A¥Ñ¨BÆJ 4¡AMod ¬° 10¡AR/M ¬° 100¡A¬d¾\64-Bit Mod »P R/M ªºÃö«Y¡A±oª¾¦¹¬° SIB ©w§}¡A¦]¦¹¦b ModR/M ¤§«áªº 88H ¬O SIB ¦ì¤¸²Õ¡C
  7. SIB ¦ì¤¸²Õ¬O 88H¡A´«ºâ¦¨¤G¶i¦ì¬O 1000 1000¡A¬G Scale ¬° 10¡AIndex ¬° 001¡ABase ¬° 000¡G
    1. Scale ¬° 10¡A¬d¾\ Scale ©Ò¥Nªíªº­¿²v¡A±oª¾­¿²v¬° 4¡C
    2. Index ¬° 001¡A¥B¥Ñ¨BÆJ 1 ª¾ REX.X ¬° 1¡A¥H¦¹¤GªÌ¬°¨Ì¾Ú¡A¬d¾\REX.R¡BREX.X¡BREX.B »P Reg¡BIndex¡BBase Äæ¦ì¤§Ãö«Y¡A±oª¾¯Á¤Þ¬° R9¡C
    3. ¥Ñ¤W­±¨â¨BÆJ¡A±oª¾¯Á¤Þ­¿²v¬O¡uR9*4¡v¡C
    4. Base ¬° 000 ¥B¥Ñ¨BÆJ 1 ª¾ REX.B ¬° 1¡B¨BÆJ 4 ª¾ Mod ¬° 10¡C¥H¦¹¤TªÌ¡A¬d¾\64-Bit Mod »P R/M ªºÃö«Y¡A±oª¾ Ev ¬°¡u[R8+D32+¯Á¤Þ­¿²v]¡v¡C
    5. D32 ¬° 32 ¦ì¤¸ªº°¾²¾¦ì§}¡A´N¬O±µ¦b SIB ¤§«áªº 0000003CH¡C
    ºî¦X¦¹¨BÆJ¸ÑªR SIB «á¡A±oª¾ Ev ¬°¡u[R8+3CH+R9*4]¡v¡C
  8. ³Ì«á¥Ñ¨BÆJ 3¡B5¡B7¡A±oª¾¡u4FH 8BH 0A4H 88H 3CH 00 00 00¡v¤Ï²ÕĶ«á¬°¡uMOV R12,[R8+3CH+R9*4]¡v

¨Ò¤l¤­¡G¡u96H¡v¡B¡u48H 96H¡v¡B¡u41H 96H¡v¡B¡u66H 41H 96H¡v¡B¡u66H 96H¡v

ÁöµM³o­Ó¨Ò¤l­n»¡©ú¤­²Õ¾÷±ñ½X¡A¦ý¦pªG¥J²ÓÆ[¹î¡A´N·|µo²{³o¤­²Õ¾÷±ñ½X¤¤¡A¶È¶È¬O¶Ç²Î«e¸m½X©ÎREX «e¸m½X¤£¦P¡A¦Ó¾Þ§@½X³£¬O¡u96H¡v¡A¦]¦¹¥i¥H²q·Q³o¤­²ÕÀ³¸Ó¬OÃþ¦üªº«ü¥O¡C¥ý¨Ó¤Ï²ÕĶ¡u96H¡v§a¡I

  1. ­º¥ý 96H ¤£¬O¨º¤Q¤@­Ó¶Ç²Î«e¸m½X©Î REX «e¸m½X¤¤ªº¤@­Ó¡A©Ò¥H¦¹«ü¥O¨ÃµL«e¸m½X¡A±q¾Þ§@½X¶}©l¡C
  2. ²Ä¤@­Ó¾Þ§@½X¬O 96H¡A¬dªþ¿ý¤Cªº¡u64-Bit OpCode Map¡v¡A±oª¾ 96H ªº«ü¥O¬O¡uXCHG rAX,rSI/r14¡v¡A¥ç§Y rAX »P rSI ©Î r14 ¥æ´«¤º®e¡C
  3. ¬d¾\ªþ¿ý¤C¡u64-Bit Argument Addressing Codes¡v¡A±oª¾ r ¥Nªí¹Bºâ¤¸¬O 16 ¦ì¤¸¡B 32 ¦ì¤¸©Î 64 ¦ì¤¸ªº¼È¦s¾¹¡C
  4. ¦]¬°¦¹¾÷±ñ½X¨S¦³ REX «e¸m½X¡A¬G¹Bºâ¤¸¬°¤£»Ý¨Ï¥Î¨ì REX «e¸m½Xªº¼È¦s¾¹¡A¥ç§Y¦b IA¡Ð32 ¤¤­ì¥»´N¦³ªº¼È¦s¾¹¡A¬G rSI/r14 À³¿ï rSI¡C¦P®É¨S¦³¹Bºâ¤¸«e¸m½X 66H¡A¬G¨Ï¥Î¹w³]ªº¹Bºâ¤¸¤j¤p¡C¦b¤»¤Q¥|¦ì¤¸¼Ò¦¡¤U¡A¹w³]ªº¹Bºâ¤¸¤j¤p¬O¤T¤Q¤G¦ì¤¸¡A¬G rAX ¬° EAX¡ArSI ¬° ESI¡C
  5. ºî¦X¨BÆJ 2¡B4¡A±oª¾¡u96H¡v¤Ï²ÕĶ«á¬°¡uXCHG EAX,ESI¡v¡C

¦A¨Ó¬Ý²Ä¤G²Õ¾÷±ñ½X¡A¡u48H 96H¡v¡G

  1. ­º¥ý 48H ¬O REX «e¸m½X¡A´«ºâ¦¨¤G¶i¦ì«á¬O 0100 1000¡A±oª¾ REX.W ¬° 1¡A©Ò¥H¹Bºâ¤¸¬° 64 ¦ì¤¸¡C
  2. ²Ä¤@­Ó¾Þ§@½X¬O 96H¡A¬dªþ¿ý¤Cªº¡u64-Bit OpCode Map¡v¡A±oª¾ 96H ªº«ü¥O¬O¡uXCHG rAX,rSI/r14¡v¡C
  3. ¥Ñ¨BÆJ 1 ª¾¼È¦s¾¹¬° 64 ¦ì¤¸¡A¬G rAX ¬O RAX¡FrSI/r14 ¬O RSI ©Î R14¡C¦]¬° REX.B ¬°¹s¡A¬G¿ï¾Ü RSI¡C
  4. ³Ì«á¡A¡u48H 96H¡v¤Ï²ÕĶ«á¬°¡uXCHG RAX,RSI¡v¡C

¨Ó¬Ý²Ä¤T²Õ¾÷±ñ½X¡A¡u41H 96H¡v¡G

  1. ­º¥ý¡A41H ¬O REX «e¸m½X¡A´«ºâ¦¨¤G¶i¦ì«á¬O 0100 0001¡A±oª¾ REX.B ¬° 1¡A·N«ä¬O¦¹¹Bºâ¤¸·|¦b R8¡ãR15¡C
  2. ¦]¬°¨S¦³¹Bºâ¤¸«e¸m½X 66H¡A¬G¹Bºâ¤¸¤j¤p¬°¹w³]­È¡F¦Ó¤»¤Q¥|¦ì¤¸¼Ò¦¡®É¡A¹Bºâ¤¸¤j¤p¹w³]­È¬O 32 ¦ì¤¸¡C¤]´N¬O»¡¹Bºâ¤¸¬° R8D¡ãR15D¡C
  3. ²Ä¤@­Ó¾Þ§@½X¬O 96H¡A¬dªþ¿ý¤Cªº¡u64-Bit OpCode Map¡v¡A±oª¾ 96H ªº«ü¥O¬O¡uXCHG rAX,rSI/r14¡v¡C
  4. ¥Ñ¤W¨â¨BÆJ¡A±oª¾¡u41H 96H¡v¤Ï²ÕĶ«á¬°¡uXCHG EAX,R14D¡v¡C

¨Ó¬Ý²Ä¥|²Õ¾÷±ñ½X¡A¡u66H 41H 96H¡v¡G

  1. ­º¥ý¡A66H ¬O¹Bºâ¤¸«e¸m½X¡A¤Á´«¹Bºâ¤¸¤j¤p¡C¤»¤Q¥|¦ì¤¸¼Ò¦¡®É¡A¹Bºâ¤¸¤j¤p¹w³]­È¬O 32 ¦ì¤¸¡A¤Á´««á¬O 16 ¦ì¤¸¡C
  2. ®Ú¾Ú¤W­±²Ä¤T²Õ¾÷±ñ½X¡A¡u41H 96H¡v¤Ï²ÕĶ«á¬°¡uXCHG EAX,R14D¡v¡A¦p¤µÅܦ¨ 16 ¦ì¤¸¡C¦]¦¹¡u66H 41H 96H¡v¤Ï²ÕĶ«á¬°¡uXCHG AX,R14W¡v¡C

³Ì«á¨Ó¬Ý²Ä¤­²Õ¾÷±ñ½X¡A¡u66H 96H¡v¤Ï²ÕĶªº¨BÆJ¡G

  1. ­º¥ý¡A66H ¬O¹Bºâ¤¸«e¸m½X¡A¤Á´«¹Bºâ¤¸¤j¤p¡C¨S¦³ REX «e¸m½X¡A¬G¹Bºâ¤¸¤j¤p¤£¬O 64 ¦ì¤¸¡C
  2. ¤»¤Q¥|¦ì¤¸¼Ò¦¡®É¡A¹Bºâ¤¸¤j¤p¹w³]­È¬O 32 ¦ì¤¸¡A¦³ 66H¡A¬G¤Á´«¦¨ 16 ¦ì¤¸¡C
  3. ®Ú¾Ú¤W­±¨â²Õªº¸gÅç¡A96H ¥Nªí¡uXCHG rAX,rSI/r14¡v¡A¥B¨S¦³ REX.B¡A¬G¿ï¾Ü rSI¡C
  4. ³Ì«á¡A¡u66H 96H¡v¤Ï²ÕĶ«á±o¨ì¡uXCHG AX,SI¡v¡C

²Ä¤­²Õ¤]¯à³o¼Ë·Q¡A®Ú¾Ú²Ä¥|²Õ¡u66H 41H 96H¡v¤Ï²ÕĶ«á¬°¡uXCHG AX,R14W¡v¡A¦p¤µ¥u¬O±N REX «e¸m½X®³±¼¡A©Ò¥H REX.B Åܬ°¹s¡A¬G§â R14W §ï¦¨ SI ´N¦æ¤F¡C


µù¤@¡Gx32¡Ð64 ªº¤u§@¼Ò¦¡

x64 ¨âºØ¾Þ§@¼Ò¦¡¡G①ªø¼Ò¦¡¡]long mode¡^»P②¶Ç²Î¼Ò¦¡¡]legacy mode¡^¡A¦Ó¨C¤@ºØ¼Ò¦¡¤S¥i²Ó¤À¬°¼ÆºØ¤l¼Ò¦¡¡]sub-mode¡^¡A¦³¨Ç½ÆÂø¡A¦p¤U­±±Ô­z¡G

①¡Bªø¼Ò¦¡¡]long mode¡^³Q­^¯Sº¸ºÙ¬°¡uIA-32e ¼Ò¦¡¡v¡]ÂX¥Rª©ªº IA¡Ð32¡^¡C·í¨Ï¥ÎªÌ±Ò°Ê¹q¸£¡A¤»¤Q¥|¦ì¤¸ª©ªº Windows 7/8/10/11 µ¥´x±±¹q¸£®É¡A³o®É­Ô x¡Ð64 CPU ´N¦bªø¼Ò¦¡¤§¤U¡Cªø¼Ò¦¡¤S¤À¬°¨âºØ¤l¼Ò¦¡¡G

⑴¡B¤»¤Q¥|¦ì¤¸¼Ò¦¡¡]64-bit mode¡^¡G¦¹¼Ò¦¡¨Ï 64 ¦ì¤¸§@·~¨t²Î¯à°÷¦s¨ú 64 ¦ì¤¸½u©Ê¦ì§}¡A¨ä¹w³]¦ì§}¤j¤p¬° 64 ¦ì¤¸¡A¹w³]¹Bºâ¤¸¤j¤p¬° 32 ¦ì¤¸¡C¤]´N¬O»¡¡A·í 64 ¦ì¤¸ª©ªº Windows °õ¦æ 64 ¦ì¤¸ªºµ{¦¡®É¡A´N¬O¦b¦¹¼Ò¦¡¡C
⑵¡B¬Û®e¼Ò¦¡¡]Compatibility Mode¡^¡G¬Û®e¼Ò¦¡¤¹³\¤j¦h¼Æ¶Ç²Î 16 ¦ì¤¸©M 32 ¦ì¤¸À³¥Îµ{¦¡¦b 64 ¦ì¤¸§@·~¨t²Î¤U¹B¦æ¡AµL»Ý­«·s½sĶ¡C¨Ò¦p¨Ï¥ÎªÌ¦b 64 ¦ì¤¸ª©ªº Windows °õ¦æ 32 ¦ì¤¸ªºµ{¦¡®É¡A64 ¦ì¤¸ª©ªº Windows ´N·|Åý¦¹ 32 ¦ì¤¸µ{¦¡ªºµ{¦¡½X°Ï¬q©ó¦¹¼Ò¦¡¤U°õ¦æ¡C±qÀ³¥Îµ{¦¡ªº¨¤«×¨Ó¬Ý¡A¬Û®e¼Ò¦¡¬Ý°_¨Ó¹³¬O¦³ªº x86 «OÅ@¼Ò¦¡Àô¹Ò¡CµM¦Ó¡A±q§@·~¨t²Îªº¨¤«×¨Ó¬Ý¡A¦ì§}Âà´«¡B¤¤Â_©M²§±`³B²z¥H¤Î¨t²Î¸ê®Æµ²ºc«h¨Ï¥Î 64 ¦ì¤¸ªø¼Ò¦¡¾÷¨î¡C

②¡B¶Ç²Î¼Ò¦¡¤S¤À¬°¤TºØ¤l¼Ò¦¡¡G

⑴¡B«OÅ@¼Ò¦¡¡]Protected Mode¡^¡G·í¨Ï¥ÎªÌ±N¹q¸£¶}Ãö¥´¶}¡A¦pªG±Ò°Êªº¬O 32 ¦ì¤¸ª©ªº Windows 7/8/10/11 ®É¡ACPU ´N©ó¦¹¼Ò¦¡¤U¤u§@¡C«OÅ@¼Ò¦¡¤ä´©°O¾ÐÅé¤À¬q¡B¥i¿ï¤À­¶©M¯SÅvÀˬd¡C¦b«OÅ@¼Ò¦¡¹B¦æªºµ{¦¡¥i¥H¦s¨ú°ª¹F 4GB ªº°O¾ÐÅéªÅ¶¡¡C
⑵¡BµêÀÀ 8086 ¼Ò¦¡¡]Virtual 8086 Mode¡^¡GµêÀÀ 8086 ¼Ò¦¡¦b«OÅ@¼Ò¦¡¤U°õ¦æ 16 ¦ì¤¸µ{¦¡¡C¥¦¨Ï¥Î²³æ§Î¦¡ªº°O¾ÐÅé¤À¬q¡B¥i¿ï¤À­¶©M¦³­­ªº«OÅ@Àˬd¡C¦bµêÀÀ8086¼Ò¦¡¹B¦æªºµ{¦¡¥i¥H¦s¨ú 1MB ªº°O¾ÐÅéªÅ¶¡¡C
⑶¡B¯u¹ê¼Ò¦¡¡]Real Mode¡^¡G·í¨Ï¥ÎªÌ±N¹q¸£¶}Ãö¥´¶}¡A³Ìªì´N¬O¦b¦¹¼Ò¦¡¤U¡A¦pªG§A±Ò°Ê MS¡ÐDOS¡A¨º»ò CPU ´N³B©ó¦¹¼Ò¦¡¤u§@¡C©ó¼Ò¦¡¤U¡A¨Ï¥Î Segment:Offset ªº©w§}¤è¦¡¡A³Ì¦h¥i¥H¦s¨ú 1MB ªº°O¾ÐÅéªÅ¶¡¡C¦¹¼Ò¦¡¤£¤ä´©¤À­¶©Î«OÅ@Àˬd¡A¥i±N x64 ¬Ý¦¨¬O³t²v«Ü§Öªº 8086/8088 CPU¡A¨ä¹w³]¦ì§}¤j¤p¤Î¹w³]¹Bºâ¤¸¤j¤p§¡¬° 16 ¦ì¤¸¡C

x86¡Ð64 ¯à°õ¦æªº¼Ò¦¡¦³ÂI¨à½ÆÂø¡A¤p¤ì°¸±N¤W­±ªº±Ô­z¾ã²z¦¨¤Uªí¡G

¾Þ§@¼Ò¦¡
¡]Operating Mode¡^
§@·~¨t²Î
¡]Operating System¡^
¦ì§}¹w³]
¤j¤p¡]bits¡^
¹Bºâ¤¸¹w³]
¤j¤p¡]bits¡^
ªø¼Ò¦¡
¡]Long Mode¡^
¤»¤Q¥|¦ì¤¸¼Ò¦¡
¡]64-Bit Mode¡^
64 ¦ì¤¸ªº§@·~¨t²Î¡A¦p 64
¦ì¤¸ª©ªº Windows XP/7/8/
10/11
6432
¬Û®e¼Ò¦¡
¡]Compatibility Mode¡^
32
1616
¶Ç²Î¼Ò¦¡
¡]Legacy Mode¡^
«OÅ@¼Ò¦¡
¡]Protected Mode¡^
32 ¦ì¤¸ªº§@·~¨t²Î¡A¦p
Windows 95/98/Me ©Î
32 ¦ì¤¸ª©ªº XP/7/8/10/11
3232
1616
µêÀÀ 8086 ¼Ò¦¡
¡]Virtual-8086 Mode¡^
1616
¯u¹ê¼Ò¦¡
¡]Real Mode¡^
16 ¦ì¤¸ªº§@·~¨t²Î
¡A¦p MS¡ÐDOS