¦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
«ö¶¶§Ç§@µª¡A¨Ì¦¸¬O¡G
³Ì«á¤@Ó°ÝÃ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¤@³¹±Nn½Í 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
Áöµ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
¤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«×¡CY¬° 0¡Aªí¥Ü¤K¦ì¤¸¡FY¬° 1¡Aªí¥Ü 16 ¦ì¤¸¡C
2.²Ä¤@¦ì¤¸¡GºÙ D ¦ì¤¸¡Aªí¥Ü¸ê®Æ¦VþÓ¤è¦V¦s¤J¡A§ó·Ç½Tªº»¡¡AD ¦ì¤¸¬O¥Î¨Óªí¥Ü BYTE2 ªº Reg ¬O¨Ó·½¹Bºâ¤¸ÁÙ¬O¥Øªº¹Bºâ¤¸¡CY 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
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
R/M | Mod¡×00 | Mod¡×01 | Mod¡×10 | Mod¡×11 | |
W¡×1 | W¡×0 | ||||
000 | [BX+SI] | [BX+SI+D8] | [BX+SI+D16] | AX | AL |
001 | [BX+DI] | [BX+DI+D8] | [BX+DI+D16] | CX | CL |
010 | [BP+SI] | [BP+SI+D8] | [BP+SI+D16] | DX | DL |
011 | [BP+DI] | [BP+DI+D8] | [BP+DI+D16] | BX | BL |
100 | [SI] | [SI+D8] | [SI+D16] | SP | AH |
101 | [DI] | [DI+D8] | [DI+D16] | BP | CH |
110 | °O¾ÐÅé¦ì§} | [BP+D8] | [BP+D16] | SI | DH |
111 | [BX] | [BX+D8] | [BX+D16] | DI | BH |
¤Ö¼Æ±¡§Î¤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 | 000 | 001 | 010 | 011 | 100 | 101 | 110 | 111 |
¤K¦ì¤¸¼È¦s¾¹ | AL | CL | DL | BL | AH | CH | DH | BH |
¤Q¤»¦ì¤¸¼È¦s¾¹ | AX | CX | DX | BX | SP | BP | SI | DI |
¤T¤Q¤G¦ì¤¸¼È¦s¾¹ | EAX | ECX | EDX | EBX | ESP | EBP | ESI | EDI |
ÁöµM©|¥¼´£¨ì¤T¤Q¤G¦ì¤¸ªº CPU¡A¦ý¬O¬°¤F¸`¬Ù½g´T¡A©Ò¥H¤Wªí¤]¦C¥X¤T¤Q¦ì¤¸ªº¼È¦s¾¹¡C
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¬Ot¼Æ¡C¦pªG¬O¥¿¼Æªí¥Ü©¹°ª¦ì§}¤è¦V©w§}¡F¦pªG¬Ot¼Æªí¥Ü©¹§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
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
Áöµ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¾¹ |
00 | 26H | ES |
01 | 2EH | CS | 10 | 36H | SS |
11 | 3EH | DS |
③¡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
¾÷±ñ½X»P 8086/8088 «ü¥OªºÃö«Y¡A¤w¸g¤¶²Ð§¹¤F¡A©³¤U¨Ó¬Ý¬Ý´XÓ¨Ò¤l¡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ªíÀɨӡCn»s§@¦CªíÀÉ¡A¶·ª`·N©³¤Uªº¨Æ¡G
ì©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.ASM | HELLOW1.LST |
|
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
¤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
Å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
²Ä¤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
²Ä¥|ºØ¬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´yz¾¹¡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
²Ä¤ºØ¬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¤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
â¶V°Ï¬q | 26H¡B2EH¡B36H¡B3EH 64H¡B65H | ES:¡BCS:¡BSS:¡BDS: FS:¡BGS: |
¹Bºâ¤¸«e¸m½X | 66H | ¤Á´«¹Bºâ¤¸ªø«× |
©w§}«e¸m½X | 67H | ¤Á´«©w§}¼Ò¦¡ |
Âê©w¶×¬y±Æ | 0F0H | LOCK |
«½Æ«ü¥O | 0F2H¡B0F3H | REP¡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ªº²Ä¤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Ӧ줸²Õ¡Cn¥Ñ¾Þ§@½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¤Wz¨â±iªí®æ¤¤·|¼Ð¥Ü¡uGRP??¡v¡AµM«á´Nn¨ìªþ¿ý¤Cªº¡u32-Bit OpCode Extensions¡v¬d¾\¡C
¾÷±ñ½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
R/M | Mod¡×00 | Mod¡×01 | Mod¡×10 | Mod¡×11 | |
W¡×0 | W¡×1 | ||||
000 | [EAX] | [EAX+D8] | [EAX+D32] | AL | AX/EAX |
001 | [ECX] | [ECX+D8] | [ECX+D32] | CL | CX/ECX |
010 | [EDX] | [EDX+D8] | [EDX+D32] | DL | DX/EDX |
011 | [EBX] | [EBX+D8] | [EBX+D32] | BL | BX/EBX |
100 | SIB ©w§} | SIB ©w§} | SIB ©w§} | AH | SP/ESP |
101 | [D32] | [EBP+D8] | [EBP+D32] | CH | BP/EBP |
110 | [ESI] | [ESI+D8] | [ESI+D32] | DH | SI/ESI |
111 | [EDI] | [EDI+D8] | [EDI+D32] | BH | DI/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®É´Nn¬Ý©Ò¦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 ¦ì¤¸²Õ¬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 | ¼È¦s¾¹ | Index | ¼È¦s¾¹ |
000 | EAX | 100 | ESP |
001 | ECX | 101 | EBP |
010 | EDX | 110 | ESI |
011 | EBX | 111 | EDI |
Scale | ¿²v |
00 | 1 |
01 | 2 |
10 | 4 |
11 | 8 |
¨Ì¾Ú 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
Base | Mod¡×00 | Mod¡×01 | Mod¡×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] |
·í¸Ñ½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
©³¤UÁ|Ó¨Ò¤l¨Ó¸Õ¸Õ¬Ý¤H¤u¤Ï²ÕĶ¡Cº¥ýn¥ý»¡©úªº¬O¡A©³¤Uªº¨Ò¤l³£¬O¦b¤T¤Q¤G¦ì¤¸ªº°Ï¬q¤º¡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¤»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
©³¤U¨Ó¬Ý¬Ý¦p¦ó¤Ï²ÕĶ¡u0FFH 0C1H¡v¡A¨BÆJ¦p¤U¡G
³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
³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ùØ¥Dn¤¶²Ð¤»¤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
¬°¤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
»P IA¡Ð32 ¬Û¦P¡A²Ó¸`¦b«e±¤w¤¶²Ð¹L¡A¤]¤w¾ã²z¥Xµ²½×¡A¥i¥H«ö³oùجd¾\¡A¦¹³B¤£ÂØz¡C
¦pªG¤w¸g¤jP¾é¸Ñ 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 «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
¹Bºâ¤¸ªº¹w³]ªø«×·|¨Ì¾Ú x64 ±o¾Þ§@¼Ò¦¡¨M©w¡A½Ð°Ñ¾\µù¤@¡C
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¾¹¡FY REX.R ¬°¤@¡AReg Äæ¦ì´N¥Nªí R8¡ãR15 µ¥·s²Kªº¼È¦s¾¹¡C
¨Ò¦p REX.R ¬° 0¡AReg ¬° 010 ®É¡A¥Nªí DL¡BDX¡BEDX ©Î RDX¡FY 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 /X/B | ¼È¦s¾¹ ªø«× | Reg¡BIndex ©Î Base Äæ¦ì | |||||||
000 | 001 | 010 | 011 | 100 | 101 | 110 | 111 | ||
0 | ¤K¦ì¤¸ | AL | CL | DL | BL | AH/SPL | CH/BPL | DH/SIL | BH/DIL |
¤Q¤»¦ì¤¸ | AX | CX | DX | BX | SP | BP | SI | DI | |
¤T¤Q¤G¦ì¤¸ | EAX | ECX | EDX | EBX | ESP | EBP | ESI | EDI | |
¤»¤Q¥|¦ì¤¸ | RAX | RCX | RDX | RBX | RSP | RBP | RSI | RDI | |
1 | ¤K¦ì¤¸ | R8B | R9B | R10B | R11B | R12B | R13B | R14B | R15B |
¤Q¤»¦ì¤¸ | R8W | R9W | R10W | R11W | R12W | R13W | R14W | R15W | |
¤T¤Q¤G¦ì¤¸ | R8D | R9D | R10D | R11D | R12D | R13D | R14D | R15D | |
¤»¤Q¥|¦ì¤¸ | R8 | R9 | R10 | R11 | R12 | R13 | R14 | R15 |
¦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.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
¤»¤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
¸ò 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
¾÷±ñ½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¬°¤Fnªí¥Ü¦b¤»¬O¥|¦ì¤¸¼Ò¦¡¤U¡A¯S¦³ªº R8¡ãR15 ¼È¦s¾¹¡A¦]¦¹n¦Ò¼{ REX «e¸m½Xªº B ¦ì¤¸¡C½Ð¬Ý¤Uªí¡G
R/M | Mod¡×00 | Mod¡×01 | Mod¡×10 | Mod¡×11 | |||||||
REX.B ¡×0 | REX.B ¡×1 | REX.B ¡×0 | REX.B ¡×1 |
REX.B ¡×0 | REX.B ¡×1 | µLREX | REX.B¡×0 | REX.B¡×1 | |||
W¡×0 | W¡×0 | W¡×1 | W¡×0 | W¡×1 | |||||||
000 | [RAX] | [R8] | [RAX+D8] | [R8+D8] | [RAX+D32] | [R8+D32] | AL | RAX/EAX/AX | R8B | R8/R8D/R8W | |
001 | [RCX] | [R9] | [RCX+D8] | [R9+D8] | [RCX+D32] | [R9+D32] | CL | RCX/ECX/CX | R9B | R9/R9D/R9W | |
010 | [RDX] | [R10] | [RDX+D8] | [R10+D8] | [RDX+D32] | [R10+D32] | DL | RDX/EDX/DX | R10B | R10/R10D/R10W | |
011 | [RBX] | [R11] | [RBX+D8] | [R11+D8] | [RBX+D32] | [R11+D32] | BL | RBX/EBX/BX | R11B | R11/R11D/R11W | |
100 | SIB ©w§} | SIB ©w§} | SIB ©w§} | AH | BPL | RSP/ESP/SP | R12B | R12R/R12D/R12W | |||
101 | [D32] | [D32] | [RBP+D8] | [R13+D8] | [RBP+D32] | [R13+D32] | CH | BPL | RBP/EBP/BP | R13B | R13R/R13D/R13W |
110 | [RSI] | [R14] | [RSI+D8] | [R14+D8] | [RSI+D32] | [R14+D32] | DH | SIL | RSI/ESI/SI | R14B | R14R/R14D/R14W |
111 | [RDI] | [R15] | [RDI+D8] | [R15+D8] | [RDI+D32] | [R15+D32] | BH | DIL | RDI/EDI/DI | R15B | R15R/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
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
Base | Mod¡×00 | Mod¡×01 | Mod¡×10 | |||
REX.B¡×0 | REX.B¡×1 | REX.B¡×0 | REX.B¡×1 | REX.B¡×0 | REX.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] |
©³¤Uªº¨Ò¤l³£¬O°²³]¦b x64 CPU ªº¤»¤Q¥|¦ì¤¸¼Ò¦¡¤U°õ¦æ¡C
³o¤T²Õ¾÷±ñ½X¥Î¨Ó»¡©ú W ¦ì¤¸ªº§@¥Î¡C¥ý¬Ý¡u0F7H 0D0H¡v¡C
¦A¨Ó¬Ý²Ä¤G²Õ¾÷±ñ½X¡A¡u66H 0F7H 0D0H¡v¤Ï²ÕĶªº¹Lµ{¡C
³Ì«á¨Ó¬Ý²Ä¤T²Õ¾÷±ñ½X¡u48H 0F7H 0D0H¡v¤Ï²ÕĶªº¹Lµ{¡C
³o¨â²Õ¾÷±ñ½X¨ä¹ê¬O¥Î¨Ó»¡©ú REX.B ¦ì¤¸ªº§@¥Î¡C¥ý¬Ý¡u0FEH 0C1H¡v¡G
¦A¨Ó¬Ý¬Ý¡u41H 0FEH 0C1H¡v¤Ï²ÕĶªº¹Lµ{¡C
³oÓ¾÷±ñ½X«Üªø¡A¦@ 11 Ӧ줸²Õ¡A¦ý¤£¥²¾á¤ß¡A¸Õ¸Õ¬Ý´N¹ï¤F¡C
ÁöµM³oÓ¨Ò¤ln»¡©ú¤²Õ¾÷±ñ½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
¦A¨Ó¬Ý²Ä¤G²Õ¾÷±ñ½X¡A¡u48H 96H¡v¡G
¨Ó¬Ý²Ä¤T²Õ¾÷±ñ½X¡A¡u41H 96H¡v¡G
¨Ó¬Ý²Ä¥|²Õ¾÷±ñ½X¡A¡u66H 41H 96H¡v¡G
³Ì«á¨Ó¬Ý²Ä¤²Õ¾÷±ñ½X¡A¡u66H 96H¡v¤Ï²ÕĶªº¨BÆJ¡G
²Ä¤²Õ¤]¯à³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
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¶Ç²Î¼Ò¦¡¤S¤À¬°¤TºØ¤l¼Ò¦¡¡G
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 | 64 | 32 |
¬Û®e¼Ò¦¡ ¡]Compatibility Mode¡^ | 32 | |||
16 | 16 | |||
¶Ç²Î¼Ò¦¡ ¡]Legacy Mode¡^ | «OÅ@¼Ò¦¡ ¡]Protected Mode¡^ | 32 ¦ì¤¸ªº§@·~¨t²Î¡A¦p Windows 95/98/Me ©Î 32 ¦ì¤¸ª©ªº XP/7/8/10/11 |
32 | 32 |
16 | 16 | |||
µêÀÀ 8086 ¼Ò¦¡ ¡]Virtual-8086 Mode¡^ | 16 | 16 | ||
¯u¹ê¼Ò¦¡ ¡]Real Mode¡^ | 16 ¦ì¤¸ªº§@·~¨t²Î ¡A¦p MS¡ÐDOS |