Ch 01¡@²Ä¤@­Óµ{¦¡

«e¤@³¹¤Îªþ¿ý¤@¤w¸g´y­z¹L¡A¦p¦ó¦b Windows §@·~¨t²Î¤U¡A³]©w½s¼g DOS ²Õ¦X»y¨¥ªºÀô¹Ò¡A¤]¤w¥´³y¦n¤@­Ó¦bµêÀÀ¾÷¾¹¤Wªº DOS §@·~¨t²Î¡C³o¤@³¹´NÅý§Ú­Ì¶}©l¼¶¼g²Ä¤@­Ó²Õ¦X»y¨¥µ{¦¡§a¡I

¦ý¬O­n»¡©úªº¬O¡A³o­Óµ{¦¡«Ü²³æ¡A¤£¬O¨Ì¶Ç²Îªº¤è¦¡¼¶¼g¡A¦Ó¬O¨Ï¥Î DEBUG ¨Ó¼¶¼g²Õ¦X»y¨¥¡C¦¹¥~¡A¾¨ºÞµ{¦¡Â²³æ¡A¦ý¬O¦³Ãö§@·~¨t²Î¤Î CPU ¦b­I«á¹B§@ªºª¾ÃÑ¡A«o¬O¤£¤Ö¡C¶Ç²Î¤è¦¡¥Î²Õ¦X»y¨¥¼¶¼gµ{¦¡¡A¬O¥Î¤å®Ñ³B²z³nÅ鼶¼g­ì©lµ{¦¡¡A¦A¥Î²ÕĶ¾¹²ÕĶ¡A³oºØ¤è¦¡©ó²Ä¥|³¹¸Ô­z¡C


¥Î DEBUG ¼gµ{¦¡

¦n¤F¡A¼o¸Ü¤Ö»¡¡A´N¦¹¶}©l¡C


DEBUG ªº¡uA¡v«ü¥O»P¡uU¡v«ü¥O

¦b Windows ªº¡u¶}©l¡v«ö¶s¡A¶}±Ò¡uMicrosoft Virtual PC¡v¡A·|¥X²{¡uVirtual PC Console¡vµøµ¡¡A¶}±Ò¨ä¤ºªº¡uMS-DOS 6.20¡v¡AµM«á¦b DOS ªº´£¥Ü²Å¸¹¤U¿é¤J¡uDEBUG¡v¡A¦p¤U ( DOS ªº´£¥Ü²Å¸¹´N¬O¡uC:\>¡v¡A·í¨Ï¥ÎªÌÅܧó¥Ø¿ý®É¡A´£¥Ü²Å¸¹¤]ÀH¤§Åܧó )¡G

C:\>debug [Enter]
-

¤W­±ªº¹Lµ{¹ê»Ú¤W¬O°õ¦æ¤F¡uC:\DOS\DEBUG.EXE¡v¥i°õ¦æÀÉ¡A°ÆÀɦW¬°¡uEXE¡v©Î¡uCOM¡vªºÀɮ׺٬°¥i°õ¦æÀÉ¡A¦b DOS ´£¥Ü²Å¸¹¤U¿é¤J¨ä¥DÀɦW¡A¸Óµ{¦¡´N·|°õ¦æ¡CDOS ªº«ü¥O¬O¤£°Ï¤À¤j¤p¼gªº¡C

¬Ý¨£¡u-¡v¥X²{¡A¥B¤@°{¤@°{ªº´å¼Ð¸ò¦bµu½u¥k¤è¡Aªí¥Ü DEBUG ¤w¸g°õ¦æ¤F¡A²{¦b¹q¸£¥D±±Åv¤w¥Ñ DEBUG ´x´¤¡C¡u-¡v¬O DEBUG ªº´£¥Ü²Å¸¹¡Aªí¥Ü²{¦b DEBUG µ¥«Ý¨Ï¥ÎªÌ¿é¤J«ü¥O¡C¦pªG¥X²{¡uBad command or file name¡v¡Aªí¥Ü DOS ¨S§ä¨ì DEBUG¡A­«·s¿é¤J¡uc:\dos\debug¡vÀ³¸Ó´N¥i¥H¤F¡C²{¦b¿é¤J¶i¤J DEBUG «áªº²Ä¤@­Ó DEBUG «ü¥O¡A¡uA¡v«ü¥O¡A¦p¤U¡G

-a [Enter]
1092:0100 

©Ò¦³ªº DEBUG ªº«ü¥O³£¥u¦³¤@­Ó­^¤å¦r¥À¡A¥B¤£°Ï¤À¤j¤p¼g¡C´«¥y¸Ü»¡¡A§A¿é¤J¡uA¡v¤]¬O¤@¼Ëªº·N«ä¡C¨C¦¸¿é¤J§¹¤@±ø«ü¥O«á¡A³£­n«ö¤U¡uEnter¡vÁä¡ADEBUG ¤~·|°õ¦æ¡C¡uA¡v«ü¥O°õ¦æ®É¡A¬Ý¨£´å¼Ð¦b¤@²Õ¼Æ¦r¡A¡u1092:0100¡v«áªº¤@­ÓªÅ¥Õ¥kÃä¡A¤@°{¤@°{¡A§A©Ò¨£ªº²Ä¤@²Õ¼Æ¦r¡A¥i¯à¤£¤@¼Ë¡A¦ý²{¦b¤£¥²²z·|¡F¦ý²Ä¤G²Õ¼Æ¦r¥²©w¬O¡u0100¡v¡A¤£·|¬O¨ä¥L¼Æ¦r¡C²{¦b¥u­nª¾¹D³o²Õ¼Æ­È¬O¡u¦ì§}¡v¡CDEBUG ©Ò¨Ï¥Îªº¼Æ¦r¡A³£¬O¤Q¤»¶i¦ì¼Æ­È¡A¦pªG¤£À´¤Q¤»¶i¦ì¼Æ­È¡A´N¤£¥i¯à¾Ç¦n²Õ¦X»y¨¥¡A¥i¥H°Ñ¾\ªþ¿ý¤G¡A»{ÃѤQ¤»¶i¦ì»P¤G¶i¦ì¡C²{¦b¦b´å¼Ð«á­±¿é¤J¤U­±µ{¦¡¡A¥ý¤£¥ÎºÞ¥¦³o¨Çµ{¦¡¥Nªí¤°»ò·N¸q¡G

1092:0100 mov ah,2 [Enter]
1092:0102 mov dl,41 [Enter]
1092:0104 int 21 [Enter]
1092:0106 int 20 [Enter]
1092:0108 [Enter] ¡÷¤°»ò³£¤£¿é¤J¡Aª½±µ«ö¤U¡uEnter¡vÁä¡AÂ÷¶}¡uA¡v«ü¥O
- ¡÷¦^¨ì DEBUG ´£¥Ü²Å¸¹

¡uA¡v«ü¥O¬O²ÕĶ ( assemble ) ªº·N«ä¡A·N«ä¬OÅý¨Ï¥ÎªÌ¿é¤J¤@¬q²Õ¦X»y¨¥µ{¦¡¡C¥Î¡uA¡v«ü¥O©Ò¿é¤Jªºµ{¦¡¡A¤£°Ï¤À¤j¤p¼g¡F¨C¿é¤J¤@±øµ{¦¡«á¡A³£­n«ö¤U¡uEnter¡vÁä¡ADEBUG ·|¦L¥X¤U¤@²Õ¼Æ­È ( §Y¦ì§} )¡A¤~¯àÅý¨Ï¥ÎªÌ¿é¤J¤U¤@±øµ{¦¡¡C·Ó¤W­±ªº¤è¦¡¿é¤J¡A¦pªG¿é¤J¿ù»~¡A¥i¥H«ö­Ë°hÁä ( Backspace ) ©¹«e®ø¥h¤@­Ó¦r¡C

µ¥¨ì¿é§¹¤F¡uint 20¡v¨Ã«ö¤U¡uEnter¡vÁä«á¡Aµ{¦¡´N¤w¥þ³¡¿é¤J§¹¦¨¡A¦A«ö¤U¤@¦¸¡uEnter¡vÁä¡Aµ²§ô¡uA¡v«ü¥O¡C²Ä¤@±øµ{¦¡¬O¡uMOV AH,2¡v¡AMOV ¬O x86 ªº¤@­Ó CPU «ü¥O¡A­^¤å¬O¡umove¡v¡A´N¬O·h²¾ªº·N«ä¡C¦Ó¡uMOV AH,2¡vªº·N«ä¬O§â 2 ·h²¾¨ìºÙ¬° AH ªº¼È¦s¾¹ùØ¡A¤]¥i¥H·Q¦¨¬O¨Ï AH ¤§¼Æ­ÈÅܬ° 2¡AAH ¬O CPU ¤ºªº¤@­Ó¼È¦s¾¹¡Cµy«á¦A¸Ô²Ó¸ÑÄÀ MOV «ü¥O¤Î¼È¦s¾¹¡A²{¦b¤j­PÁA¸Ñ MOV «ü¥O°µªº¨Æ§Y¥i¡C

²{¦b¨ÓÀ˵ø¿é¤Jªºµ{¦¡¡A³o¬O§Ú­Ì­n¾Ç²ßªº²Ä¤G­Ó DEBUG «ü¥O¡A¡uU¡v«ü¥O¡C¿é¤J¡uu 100 106¡v¦A«ö¤U¡uEnter¡vÁä¡ADEBUG ·|¦L¥X¤@¤j°ï¸ê®Æ¡AµM«á¤S¦L¥X´£¥Ü²Å¸¹¡A¦p¤U¡G

-u 100 106 [Enter]
1092:0100 B402          MOV     AH,02
1092:0102 B241          MOV     DL,41
1092:0104 CD21          INT     21
1092:0106 CD20          INT     20
-

¡uU¡v«ü¥O¬O¤Ï²ÕĶ ( unassemble ©Î disassemble ) ªº·N«ä¡A¨£¤W­±¡ADEBUG Åã¥Üªº¸ê®Æ¥i¤À¬°¤TÄæ¡G
¡@¡@①³Ì¥ªÃä¡A¦³¤@°ï¹³¡u1092:0100¡vµ¥©_©Çªº¼Æ¦r¡A³o¨Ç¬O¡u¦ì§}¡v( address¡A¤j³°Â½Ä¶¦¨¦a§} )¡C
¡@¡@②¤¤¶¡³¡¤À¡A¹³ B402 ³o¼Ëªº¤Q¤»¶i¦ì¼Æ­È¡A³o¬O¡u¾÷±ñ½X¡v( machine code )¡C
¡@¡@③³Ì¥kÃä¡A¹³¡uMOV AH,02¡vªº¼Ë¤lªº¬O x86 «ü¥O ( x86 instruction )¡C
¥ý»¡«á­±¨â¶µ¡A¦³Ãö¦ì§}ªº»¡©ú¡Aµy«á¦A»¡¡C

¡uB4¡v»P¡u02¡v¬O¨â­Ó¤Q¤»¶i¦ì¼Æ¡A´«¦¨¤G¶i¦ì¤À§O¬O¡u1011 0100¡v»P¡u0000 0010¡v¡A³o¼Ë´NÅܦ¨¹q¸£¬Ý±oÀ´¤@³s¦ê¡u0¡v»P¡u1¡v¡C·í CPU Ū¤J¡uB4¡v«á¡A¸g¹L¤º¹q¸ô§PÂ_¡Aª¾¹D³o­Ó«ü¥O¬O­n§â¸ê®Æ·h²¾¨ì AH ¼È¦s¾¹ùØ¡A¦Ü©ó­n·h²¾ªº¸ê®Æ«h¬O«á­±ªº¡u02¡v¡C

¦b¹q¸£¤@¶}©lµo®i®É¡A¨º®É¼gµ{¦¡´N­n¹³³o¼Ë¼g¤@¤j¦ê¡u0¡v»P¡u1¡v¡A¦A¨Ì¾Ú³o¨Ç¡u0¡v»P¡u1¡v¡A¦b¯È¤ù¤W¤£¦Pªº¦ì¸m¥´¬}¡AµM«á¿é¤J¹q¸£¡AÅý¹q¸£°õ¦æ¡A³o´N¬O³Ì§C¶¥ªº»y¨¥¡A¾÷¾¹»y¨¥¡C¤@¤j¦ê¡u0¡v»P¡u1¡v¡A«Ü¤£®e©ö¾\Ū¡A¤]«Ü®e©ö¥X¿ù¡A©ó¬O¥Î¤Q¤»¶i¦ì¼Æ­È¥N´À¤G¶i¦ì¡A³o´N¬O¾÷±ñ½X ( machine code )¡A¦ý¤´µM«Ü³Â·Ð¤]¤£ª½Ä±¡C¦pªG§â¥¦Åܦ¨Â²µuªº­^¤å³æ¦r¡A´N®e©ö¦h¤F¡A³o¨Ç²µuªº­^¤å³æ¦rºÙ¬°§U°O¾Ð½X ( mnemonic code )¡A¤]´N¬O x86 «ü¥O¡C±N³o¨Ç x86 «ü¥O ( ¨Ò¦p¤W­±ªº MOV¡BINT )¡A¦A¥[¤W¤@¨Ç»yªk¡B°²«ü¥Oµ¥µ¥¡A´NÅܦ¨²Õ¦X»y¨¥¤F¡C

¨¥Âk¥¿¶Ç¡CDEBUG ªº¡uA¡v«ü¥O¡A´N¬O§â¨Ï¥ÎªÌ¿é¤Jªº x86 «ü¥OÂà´«¦¨¾÷±ñ½X¡A¨Ã¦s©ó°O¾ÐÅ餺¡A³oºØ¹Lµ{ºÙ¬°¡u²ÕĶ¡v( assemble )¡C¡uU¡v«ü¥O©Ò°µªº¨Æ«h¬O¤Ï¹L¨Ó¡A§â¾÷±ñ½XÅܦ¨ x86 «ü¥O¡AºÙ¤§¬°¡u¤Ï²ÕĶ¡v( unassemble ©Î disassemble )¡C¨äÃö«Y¹Ï¦p¤U¡G

²ÕĶ»P¤Ï²ÕĶªºÃö«Y


¼È¦s¾¹ ( Register )

¦b»¡©ú¼È¦s¾¹¤§«e¡A¤p¤ì°¸·Q¥ý¨Ó»¡»¡¤°»ò¬O¦ì¤¸ ( bit )¡B¦ì¤¸²Õ ( byte )¡B¦r²Õ ( word )¡C¹q¸£ùتº°O¾ÐÅé¬O¥Ñ³\¦h¹q´¹Åéºc¦¨ªº½ÆÂø½u¸ô¡A·í¹q´¹Åé¬Y­Ó±µ¸}³B©ó°ª¹q¦ì®É¥iµø¬°¡u1¡v¡A§C¹q¦ì®É¥iµø¬°¡u0¡v¡A³o¼Ë¤@­Ó¹q´¹Åé¯à°÷Àx¦s¤@­Ó¡u0¡v©Î¡u1¡v¡AºÙ¤§¬°¤@­Ó¦ì¤¸ ( bit¡A¤j³°Â½¦¨¦ì )¡C

¤@­Ó¦ì¤¸¥u¯àªí¥Ü¨âºØ¼Æ­È¡A§Y¡u0¡v©Î¡u1¡v¡F¦pªG¦³¨â­Ó¹q´¹Åé¡A´N¯àÀx¦s¨â­Ó¦ì¤¸¡A¥i¥H­Ó§O¬O¡u0¡v©Î¡u1¡v¡A¦]¦¹¥i¥Hªí¥Ü¥|ºØ¼Æ­È¡A§Y¡u00¡v¡B¡u01¡v¡B¡u10¡v¡B¡u11¡v¡F¦pªG¦³¤T­Ó¦ì¤¸¡A´N¯àªí¥Ü¤KºØ¼Æ­È ( 23 )¡F¡K¡K¡C¤@­Ó¦ì¤¸³æ¦ì¤Ó¤p¡A©Ò¥H§Ú­Ì§â¤K­Ó¦ì¤¸¦X°_¨Ó¡AÅܦ¨¤@­Ó¦ì¤¸²Õ ( byte¡A¤j³°Â½¦¨¦r¸` )¡C¤@­Ó¦ì¤¸²Õ¥i¥Hªí¥Ü 28 ºØ¼Æ­È¡A28 µ¥©ó 256¡A¥ç§Y¯àªí¥Ü 0¡ã255 ½d³òªº¼Æ­È¡Cµ²¦X¨â­Ó¦ì¤¸²Õ¡A¥ç§Y 16 ­Ó¦ì¤¸¡A´N§Î¦¨¤@­Ó¦r²Õ ( word )¡A¤@­Ó¦r²Õ¯àªí¥Ü 216 ­Ó¤£¦Pªº¼Æ­È¡A±q 0¡ã65535¡C¦b¹q¸£­p¶qùØ¡A±`¥Î K ªí¥Ü 210¡A210 µ¥©ó 1024¡A¦Ó 65536 µ¥©ó 64K¡C

¦n¤F¡A²{¦bÆ[¹î¤W­±¤Ï²ÕĶªºµ²ªG¡A·|¬Ý¨£¡uDL¡v¡B¡uAH¡v³o¨Ç¦r²´¡A¥¦­Ì³£¬O¡u¼È¦s¾¹¡v¡C¼È¦s¾¹¬O¦b CPU ¤º³¡¤@¶ô«Ü¤pªº°O¾ÐÅé¡A¥i¥H¼È®ÉÀx¦s¸ê®Æ¡A©Î§â¨ä¤ºªº¸ê®Æ²¾¨ì°O¾ÐÅé¡A¤]¥i¥H¹ï¨ä¤ºªº¸ê®Æ¶i¦æ¹Bºâ¡C»P¤@¯ë°O¾ÐÅ骺®t§O¬O¡A¦b¼È¦s¾¹¤º¡A¸ê®Æªº¦s¤J¡BŪ¨ú¡B¹Bºâ³£¤ñ¤@¯ë°O¾ÐÅé§Ö±o«D±`¦h¡C

8086/8088 ¦³ 14 ­Ó¼È¦s¾¹¡A³£¬O 16 ¦ì¤¸¡A¥i¤À¬°³q¥Î¼È¦s¾¹¡B«ü¼Ð»P¯Á¤Þ¼È¦s¾¹¡B°Ï¬q¼È¦s¾¹»PºX¼Ð¼È¦s¾¹¥|ºØ¡C¨ä¤¤³q¥Î¼È¦s¾¹¬O³Ì±`¥Îªº¡A¦³¥|­Ó¡A¨ä¦WºÙ¤À§O¬O AX¡BBX¡BCX¡BDX¡A¦Ó¨C­Ó¤S¯à¦A©î¦¨¨â­Ó 8 ¦ì¤¸ªº¼È¦s¾¹¡C¨Ò¦p AX ¼È¦s¾¹ùØ¡A¥i¦A¤À¬° AH¡BAL ¨â­Ó¤K¦ì¤¸ªº¼È¦s¾¹¡A«eªÌ¬O°ª¦ì¤¸²Õ¡A«áªÌ¬O§C¦ì¤¸²Õ¡A¨âªÌ³£¥u¯à¦UÀx¦s¤@­Ó¦ì¤¸²Õªº¸ê®Æ¡C¨ä¾l¤T­Ó¼È¦s¾¹¡A¤]¬O¦p¦¹¡C©Ò¥H DX ¼È¦s¾¹¤]¤À¬° DH¡BDL ¨â­Ó¤K¦ì¤¸ªº¼È¦s¾¹¡A¤]³£¥u¯à¦UÀx¦s¤@­Ó¦ì¤¸²Õªº¸ê®Æ¡C

¤W­±¥H DEBUG ¤Ï²ÕĶªº¨Ò¤lùØ¡A¦³¤@±ø«ü¥O¡uMOV DL,41¡v¡A41 ¬O¤Q¤»¶i¦ì¼Æ¡A¬Û·í©ó¤Q¶i¦ìªº 65¡AMOV «ü¥O¬O§â«á­±ªº¼Æ­È·h²¾¨ì«e­±ªº¼È¦s¾¹ùØ¡A´«¥y¸Ü»¡¡A°õ¦æ§¹³o±ø«ü¥O«á¡ADL ¤§­È´NÅܬ°¤Q¤»¶i¦ìªº 41¡C

AX¡BBX¡BCX¡BDX ³o¥|­Ó³q¥Î¼È¦s¾¹¡A¥i¥H¤@¦¸¦s¨ú 16 ¦ì¤¸¡A¤]¥i¥H¥u¦s¨ú°ª¦ì¤¸²Õ©Î§C¦ì¤¸²Õ¡C¤]´N¬O»¡¡A¥i¥H¦X°_¨Ó¤@°_³B²z¡A¤]¥i¥H³æ¿W³B²z¡C¨Ò¦p¡A°õ¦æ¡uMOV AX,4C00¡v¡A¤]¥i¥H¤À¨â¦¸§â¼Æ­È¦s¤J AH¡BAL ¼È¦s¾¹¡A¦p¤U¡G

        MOV     AL,0
        MOV     AH,4C

°õ¦æ¤W­z¨â±ø«ü¥O«á¡AAX Åܦ¨¤Q¤»¶i¦ìªº 4C00¡C4C00 ¬O¤Q¤»¶i¦ì¼Æ­È¡A4C ºÙ¬°°ª¦ì¤¸²Õ¡A¦Ó 00 ºÙ¬°§C¦ì¤¸²Õ¡C´N¦n¹³¤Q¶i¦ìªº 123¡A3 ¬O­Ó¦ì¼Æ¡B2 ¬O¤Q¦ì¼Æ¡B1 ¬O¦Ê¦ì¼Æ¡A1 ¬O³Ì°ª¦ì¼Æ¡F¦b¤Q¤»¶i¦ìùØ¡A³q±`¨Ï¥Î°ª¦ì¤¸²Õ©M§C¦ì¤¸²Õ¡A©Î°ª¦r²Õ©M§C¦r²Õ¡C¦pªG°õ¦æ¤U­±ªºµ{¦¡¤ù¬q¡G

        MOV     AX,4C00
        MOV     AL,12

°õ¦æ§¹«á¡AAX Åܦ¨¤Q¤»¶i¦ìªº 4C12¡C( 4C00¡B4C12 ³£¬O¤Q¤»¶i¦ì¼Æ¡A¬Û·í©ó 19456¡B19474 )

¦pªG§AÁÙ·Qª¾¹D¨ä¥L¼È¦s¾¹¡A¥i¥H°Ñ¾\ªþ¿ý¤T¡C


¯u¹ê¼Ò¦¡ùتº¦ì§}

32 ¦ì¤¸©Î 64 ¦ì¤¸ªº x86 ©Î x64 CPU ³£¦³³\¦hºØ°O¾ÐÅé¦ì§}¼Ò¦¡¡A¦b DOS ùØ­±¡A¥u¥Î¯u¹ê¼Ò¦¡¡]real mode¡^¡A¦b¯u¹ê¼Ò¦¡ùØ¡A¦ì§}³£¥Î¡uXXXX:YYYY¡vªí¥Ü¡C¨º»ò¤°»ò¬O¦ì§}¡H¦³¦ó¥\¥Î©O¡H

¨C·í CPU ­nÀò¨ú«ü¥O©Î¸ê®Æ®É¡A³£¥²¶·±q¬Y­Ó°O¾ÐÅé´£¨ú¡A¦ý°ÝÃD¬O¡A­n¨ì­þ¤@­Ó°O¾ÐÅé¥h´£¨ú¸ê®Æ©O¡H§Ú­Ì¥i¥H°²·Q¡A¦pªG¦³¤@¥x¹q¸£¡A°t³Æªº°O¾ÐÅé¤j¤p¬O 65536 ­Ó¦ì¤¸²Õ¡]§Y°t³Æ 64KB ªº°O¾ÐÅé¡AB ¥Nªí¦ì¤¸²Õ¡^¡A¨º»ò³Ì²³æªº·Qªk´N¬O§â³o¨Ç 65536 ­Ó¦ì¤¸²Õ¡A±q 0 ¶}©l½s¸¹¡A¤@ª½¨ì 65535¡A³o­Ó¸¹½X´NºÙ¬°¡u¦ì§}¡v¡C¦Ó¨C­Ó¦ì§}©Ò¥NªíªºªÅ¶¡¡A³£¬O¤@­Ó¦ì¤¸²Õªº¤j¤p¡C³oºØ±¡§Î´N¹³¹ê»Ú¥Í¬¡¤¤¡A¤@¼l¤j¤½´JùØ­±¡A¨C­Ó®a®xªº¤j¤p®æ§½³£¤@¼Ë¡A¦ý¬Oªù¥~ªºªùµP¸¹½X¤£¦P¡A¶l®t©Î³X«È¨Ì·ÓªùµP¸¹½X´N¯à§ë»¼¶l¥ó©Î«ô³X¥D¤H¡C°O¾ÐÅ骺¦ì§}´NÃþ¦ü¤½´JªºªùµP¸¹½X¡A¨C­Ó¦ì§}¥NªíªºªÅ¶¡¤j¤p ( §Y¤@­Ó¦ì¤¸²Õ )¡A´N¹³¬O¤½´Jªº¨C­Ó®a®x¡C

¦]¬° 216¡×65536¡A©Ò¥H¦pªG¬Y­Ó CPU ¦³¤Q¤»®Ú¯à±µ¦¬¦ì§}°T¸¹ªº±µ¸}¡A¨º»ò¨C¤@®Ú±µ¸}¥i¯à³B©ó°ª¹q¦ì¡A¤]¥i¯à³B©ó§C¹q¦ì¡A´N¦³ 65536¡]65536 ¦ì¤¸²Õ¡×64KB¡^ºØ¥i¯à¡A¤]´N¯à­n¦s¨ú 64KB ªº°O¾ÐÅé¡C·íµM 64KB ªº°O¾ÐÅé¤Ó¤p¡AIBM PC ¤Î¬Û®e¾÷ºØ­èµo°â®É¡A´N¯à°t³Æ 1MB ªº°O¾ÐÅé¡C1MB ¬Û·í©ó 1024KB¡A¤]´N¬O 220 ­Ó¦ì¤¸²Õ¡A·í®Éºâ¬O¬Û·í¤jªº°O¾ÐÅé¤F¡C

¬°¤F¯à¦s¨ú 1MB ªº°O¾ÐÅé¡A¦]¦¹¦b³]­p 8086/8088 ¤§ªì¡A´N¦³ 20 ®Ú¦ì§}½u¡]¥k¹Ï¤¤ªº AD0¡ãAD7 ¤Î A8¡ãA19 ±µ¸}¡^¡A³Ì¦h¥i¥Hªí¥Ü 220 ­Ó½s¸¹¡]220¡×1048576¡A¦b¹q¸£­p¶qùØ¡A³o­Ó¼Æ¥Î¡uM¡vªí¥Ü¡^¡C´«¥y¸Ü»¡¡A8086/8088 ¥i¥Hªí¥Ü 1048576 ­Ó°O¾ÐÅé½s¸¹¡A¤]¥i¥H»¡ 8086/8088 ¥i©w§} 1M ­Ó¦ì¤¸²Õ¡C¦ý¬O³oùØ·|µo¥Í°ÝÃD¡A¦]¬° 8086/8088 ¬O¾aµÛ¼È¦s¾¹¦s¨ú°O¾ÐÅ餺®e¡A¦Ó 8086/8088 ªº¼È¦s¾¹¬O¤Q¤»¦ì¤¸¡A¥u¯àªí¥Üªº³Ì¤j¼Æ¬° 216¡]§Y 64K¡^¡A¨º»ò­n¦p¦ó¥Î 16 ¦ì¤¸¥hªí¥Ü 20 ¦ì¤¸ªº¼Æ©O¡H

·íªìªº³]­pªÌ±Ä¥ÎÅܳqªº¤èªk¡GÁöµM¤@­Ó 16 ¦ì¤¸ªº¼È¦s¾¹µLªkªí¥Ü 20 ¦ì¤¸ªº¼Æ¡A¦ý¬O¨â­Ó 16 ¦ì¤¸¼È¦s¾¹´N¥i¥H¤F¡C³]­pªÌ§â¦ì§}¥H¡u°Ï¬q¡v¤Î¡u°¾²¾¦ì§}¡v¨Óªí¥Ü¦ì§}¡A´N¬O¦b DEBUG ¤¤¿é¤J¡uU¡v«ü¥O«á¡A¥ªÃä©Ò¬Ý¨ìªº XXXX:YYYY ªº¼Ë¤l¡CXXXX ªí¥Ü°Ï¬q¡AYYYY ªí¥Ü°¾²¾¦ì§}¡C

°Ï¬qªº·§©À´N¦n¹³¤@¼l¤@¼lªº¤j¤½´J¡A¨C¤@¼l¤½´J¤]³£¦³¦Û¤vªº½s¸¹¡C³o¼Ë§Y¨Ï¨C¤@¼l¤½´J³£¤@¼Ë¡A¦ý¬O¶l®t¤]¯à¥Ñ½s¸¹°Ï§O¤£¦P¤½´J¡C¨Ò¦p²Ä¤@¼l¤½´Jªº¤@¸¹¡A»P²Ä¤G¼l¤½´Jªº¤@¸¹´N¤£·|¬O¦P¤@­Ó®a®x¡C

¥Ñ©ó¼È¦s¾¹ªø«×ªº­­¨î¡A­¢¤£±o¤w¦b DOS ¤¤¥u¥H XXXX:YYYY ªí¥Ü¬Y­Ó°O¾ÐÅ骺¦ì§}¡F¦ý¬O¦pªG¯uªº¥Ñ¹s¶}©l½s¦ì§}¡AµM«á¨C­Ó¦ì¤¸²Õ¤ñ«e­Ó¦ì¤¸²Õªº¦ì§}¦h¤@¡A¨º»ò¬Y­Ó¦ì¤¸²Õ¦b°O¾ÐÅ餤¯u¥¿ªº¦ì§}¬O XXXX*16+YYYY¡A¤]ºÙ¹êÅé¦ì§}¡CÁ|¨Ò¨Ó»¡¡A1092:0100 ³o­Ó¦ì§}ªº¹êÅé¦ì§}À³¸Ó¬O 1092¡]¦¹¬°16¶i¦ì¡^*16¡]¤Q¶i¦ì¡^¦A¥[¤W¤Q¤»¶i¦ìªº 100¡Aµ¥©ó 10A20H¡C¥H¡u°Ï¬q¡G°¾²¾¦ì§}¡v³oºØ¤è¦¡ªí¥Ü¦ì§}ÁöµM¥i¥H±o¨ì¸û¤jªº¦ì§}¡A¦ý¬O¦P¦ì§}¡A¦³³\¦h¤£¦P¤è¦¡ªí¹F¡A¨Ò¦p 1092:0100 ©M 10A2:0000¡B1082:0200 ³£¬O«ü¦P¤@¹êÅé¦ì§}¡C

¦AÁ|­Ó¨Ò¤l¡A¨Ò¦p 1MB °O¾ÐÅé¦ì§}³Ì¤j´N¬O½s¸¹ 1048575¡A¬Û·í©ó¤Q¤»¶i¦ìªº FFFFF¡A¥H¤W­z¡u°Ï¬q:°¾²¾¦ì§}¡vªí¥Ü¡A¥i¥H¼g¦¨ FFFF:000F¡A¤]¥i¥H¼g¦¨ F000:FFFF¡A¤]ÁÙ¦³¨ä¥L¼gªk¡C

Á`¤§¡A¦ì§}¥Nªí°O¾ÐÅ骺½s¸¹¡A¦b¯u¹ê¼Ò¦¡¤U¡A­n¥Î 16 ¦ì¤¸¥hªí¥Ü 20 ¦ì¤¸ªº½s¸¹¡A¤~·|¥Î¡uXXXX:YYYY¡v³oºØ§Î¦¡ªí¥Ü¡C¨C¤@­Ó¦ì§}ªº°O¾ÐÅé¡A¥i¥HÀx¦s¤@­Ó¦ì¤¸²Õªº¸ê®Æ¡A³o­Ó¸ê®Æ¤~¬O°O¾ÐÅ骺¤º®e¡C


DEBUG ªº¡uR¡v«ü¥O

DEBUG ¤]¯àÆ[¹î¼È¦s¾¹ªº¤º®e¡A¨Ï¥Î¡uR¡v«ü¥O´N¯àÅã¥Ü¼È¦s¾¹¡]register¡^ªº¤º®e¡C¦b¡u-¡v´£¥Ü²Å¸¹«á¡A¿é¤J¡ur¡v¡A±o¨ì¤U­±µ²ªG¡G

-r [Enter]
AX=0000  BX=0000  CX=0000  DX=0000  SP=FFFE  BP=0000  SI=0000  DI=0000 ¡÷¼È¦s¾¹¤§­È
DS=1092  ES=1092  SS=1092  CS=1092  IP=0100   NV UP EI PL NZ NA PO NC  ¡÷¼È¦s¾¹¤§­È
1092:0100 B402          MOV     AH,02  ¡÷¤U¤@±ø­n°õ¦æªº«ü¥O

¡uR¡v«ü¥O§â 8086/8088 CPU ùتº 14 ­Ó¼È¦s¾¹¤§­È³£¦C¤F¥X¨Ó¡A¨Ã¥B¤]§â¤U¤@±ø­n°õ¦æªº«ü¥OÅã¥Ü¥X¨Ó¡C¨Æ¹ê¤W¡A¡uR¡vªº»yªk¬O¡G

R [¼È¦s¾¹]

³Q [] ¬A°_¨Óªº°Ñ¼Æ¥i¥H¬Ù²¤¡C¦pªG¬Ù²¤¡A¨º»ò¡uR¡v«ü¥O´NÅã¥Ü©Ò¦³¼È¦s¾¹ªº¤º®e»P§Y±N°õ¦æªº«ü¥O¡A¹³¤W­±ªº¨Ò¤l¡F¦pªG¼È¦s¾¹¨S¦³¬Ù²¤¡A¨º»ò DEBUG ´N·|§ó§ï¸Ó¼È¦s¾¹ªº¤º®e¡C¨Ò¦p§Ú­Ì·Q­n§ó§ï CX ªº¤º®e¡A¾Þ§@¦p¤U¡G

-r cx [Enter]
CX 0000
:b [Enter]
-

¿é¤J¡ur cx¡v¨Ã«ö¤U Enter Áä«á¡ADEBUG ·|Åã¥Ü CX ­ì¨Óªº¤º®e¡A0000¡AµM«á¦b¤U¤@¦æÅã¥Ü¡u:¡v¡Aµ¥¨Ï¥ÎªÌ¿é¤J·sªº¼Æ­È¡A¦A«ö¤U Enter Áä§Y¥iÅܧ󦨷sªº¼Æ­È¡A¤W­±ªº¨Ò¤l¡ACX «á¨Ó·|Åܦ¨¤Q¤»¶i¦ìªº B¡A´N¬O¤Q¶i¦ìªº 11¡C¦pªG¤£¿é¤J·sªº¼Æ­È¦Óª½±µ«ö¤U Enter Áä¡ACX ´N«O¦³­ì¼Æ­È¡C


«ü¥O°õ¦æªº¦ì§}¡GCS »P IP

«e­±´£¨ì 8086/8088 °£¤F¥|­Ó­Ó³q¥Î¼È¦s¾¹¥~¡A³oùØ­n¤¶²Ð¤@­Ó°Ï¬q¼È¦s¾¹¡AºÙ¬°µ{¦¡½X°Ï¬q¼È¦s¾¹¡]code segment register¡^¡A¥H CS ªí¥Ü¡CÅU¦W«ä¸q¡ACS ¬O«ü¦V¬Y­Ó°Ï¬qªº¦ì§}¡A¦Ó¥B³o­Ó°Ï¬q¬O¦s©ñµ{¦¡½Xªº¡C

CS ¥²¶·©M IP ¼È¦s¾¹·f°t¨Ï¥Î¡CIP¡]instruction pointer¡AºÙ¬°«ü¥O«ü¼Ð¡^¬O¤@­Ó¤Q¤»¦ì¤¸ªº¼È¦s¾¹¡A¥¦»P AX¡BBX µ¥¼È¦s¾¹¤£¦P¡A¥¦¬O¥Î¨Ó«O¦s¥Ø«e«ü¥Oªº°¾²¾¦ì§}¡C

CS »P IP ·f°t°_¨Ó¡AÅܦ¨ CS:IP¡A«ü¦V±N­n°õ¦æªº x86 «ü¥O¦ì§}¡C·í CPU ­n°õ¦æµ{¦¡®É¡A¥²¶·¨ì°O¾ÐÅé¥h´£¨ú­n°õ¦æªº«ü¥O¡A¦ý¬O CPU ­n¨ì¨º¤@­Ó°O¾ÐÅé¦ì§}¥h´£¨ú«ü¥O©O¡H­ì¨Ó³o­Ó¦ì§}«O¦s¦b CS:IP ùØ¡A¦]¦¹ CPU ´N¯à¨ì¦¹¦ì§}¥h´£¨ú¡C§A¥i¥HÆ[¹î¤W­±¬õ¦âªº CS:IP ¬O§_»P±N­n°õ¦æªº«ü¥O¦ì§}¬Û¦P¡H¦bµ{¦¡¤¤¡A¤@¯ë¬O¨S¦³¿ìªk§ïÅÜ CS:IP ªº­È¡A°£«D¬O¸õÅD¡]JMP¡BJZ µ¥¡^«ü¥O©Î¬O©I¥s¡]CALL¡BRET µ¥¡^«ü¥O¡C


DEBUG ªº¡uN¡v«ü¥O¡B¡uW¡v«ü¥O»P¡uG¡v«ü¥O

§Ú­Ì¤w¸g¼g¦n¤@­Óµ{¦¡¡A¦ý¬OÁÙ¨S°õ¦æ¡A³o¬O¤°»òµ{¦¡©O¡H¼½©ñ¼v¤ù¡HÁÙ¬O¹qª±¡Hµ{¦¡³o»òµu¡A¤j·§¨S³o»ò¦h¥\¯à§a¡H¦n½}¡A²{¦b¥i¥H°õ¦æ¬Ý¬Ý¡A¦ý¦b°õ¦æ«e¡A¥ý§âµ{¦¡Àx¦s°_¨Ó¡A¥H§K¤U¦¸ÁÙ­n­«·s¿é¤J¡C­nÀx¦sÀɮסA¥ý­nµ¹µ{¦¡¦W¦r¡A¥Î¡uN¡v«ü¥O ( name ªº·N«ä )¡A¦p¤U¡G

-ne:\dos\alpha_a.com [Enter]

³o¼Ë´N¤w¸g§âÀɮצW¦r¨ú¦n¤F¡AÀɦW´N¬O¡ue:\dos\alpha_a.com¡v¡A·íµMÀɦW¥i¥HÀH·N¨ú¡A¥u­n²Å¦X DOS ¨t²Îªº©R¦W³W«h§Y¥i¡C±µ¤U¨Ó­n§âÀÉ®×¼g¤JºÏºÐ¾÷ùØ¡A¦ý¬O­n¥ý¨M©wÀɮתø«×¡C¦b DEBUG ùØ¡AÀɮתø«×¥H BX:CX ªí¥Ü¡A¦]¦¹­×§ï BX »P CX ªº¼Æ­È¡A¦p¤U¡G

-r cx [Enter]
CX 000B
:b [Enter]
-r bx [Enter]
BX 0000
:[Enter] ¡÷ª½±µ«ö¤U Enter Áä¡AÅý BX ¤´¬° 0
-

±µ¤U¨Ó­nÅý DEBUG §âµ{¦¡¼g¤JºÏºÐÀÉ®×ùØ¡A¿é¤J¡uW¡v«ü¥O§Y¥i¡AW ¬O write ªº·N«ä¡A¼g¤J«á DEBUG ÁÙ·|¦^À³¼g¤J¤F´X­Ó¦ì¤¸²Õ¡A¦p¤U¡G

-w [Enter]
Wirting 0000B Bytes
-

²{¦b¤w¸g§âµ{¦¡¼g¤J alpha_a.com ¥i°õ¦æÀɤF¡C¦pªG²{¦bµ²§ô DEBUG¡A¦^¨ì DOS ©R¥O´£¥Ü¦r¤¸¡A¿é¤J¡ue:\dos\alpha_a.com¡v¤]¥i¥H¬Ý¨£¹q¸£¦b¿Ã¹õ¤W¦L¥X¡uA¡v­^¤å¦r¥À¡C°ÆÀɦW¬° COM ªº¬O¥i°õ¦æÀɮסA¥i¥H¦b DOS ¤U¿é¤J¥DÀɦW¡ADOS ´N·|°õ¦æ¥¦¡C¨¥Âk¥¿¶Ç¡A±µ¤U¨Ó¥i¥H¦b DEBUG ùØ°õ¦æ³o­Óµ{¦¡¤F¡C¦b DEBUG ´£¥Ü²Å¸¹«á¡A¿é¤J¡uG¡v«ü¥O¡AG ¬O go ªº·N«ä¡A¥ç§Y°õ¦æ¤§·N¡Aµ²ªG¦p¤U¡G

-g [Enter]
A
Program terminated normally
-

µ{¦¡°õ¦æ«á¡Aµo²{ DEBUG ¦L¥X¤F¤@­Ó­^¤å¦r¥À¡uA¡v¡Aµ{¦¡´N¥¿±`µ²§ô¤F¡A¨S¦³¥X²{¿ù»~¡C³o­Ó alpha_a.com µ{¦¡ùØ¡A¦ü¥G¤£§t¦³­^¤å¦r¥Àªº¡uA¡v¡A«ç»ò·|¦L¥X¡uA¡v¨Ó©O¡H©³¤U§Ú­Ì¨Ó¤@±ø«ü¥O¡B¤@±ø«ü¥OªºÀ˵ø³o­Óµ{¦¡¡C


x86 «ü¥O¡GMOV

²Ä¤@±ø«ü¥O¬O¡uMOV¡v¡A³o¬O²Õ¦X»y¨¥³Ì±`¥Îªº«ü¥O¡CMOV «ü¥Oªº®æ¦¡¬O¡G

MOV     ¥Øªº¹Bºâ¤¸,¨Ó·½¹Bºâ¤¸

²³æªº»¡¡AMOV «ü¥O¬O§â«á­±ªº¸ê®Æ¡A·h²¾¨ì«e­±¼È¦s¾¹©Î°O¾ÐÅ餺¡C«á­±ªº¸ê®ÆºÙ¨Ó·½¹Bºâ¤¸ ( µù¤@)¡A«e­±ªº¸ê®ÆºÙ¥Øªº¹Bºâ¤¸¡C³Ì«á¥Øªº¹Bºâ¤¸ªº¼Æ­È´Nµ¥©ó¨Ó·½¹Bºâ¤¸¡A¦Ó¨Ó·½¹Bºâ¤¸¤§­È¤£ÅÜ¡C³o¦³ÂI¹³ BASIC ©Î C »y¨¥ªº¡u=¡v¡C¤U­±ªº¨Ò¤l¡A´N¬O¨ÏÅÜ¼Æ x Åܦ¨ 6¡C

x=6

¤W­±ªº±Ô­z¡AÅý x Åܦ¨ 6¡A¤]¬O§â«á­±ªº¹Bºâ¤¸Åܦ¨«e­±ªº¹Bºâ¤¸¡C

MOV ÁÙ¦³´X¶µ³W«h¡G①¥Øªº¹Bºâ¤¸¤£¥i¥H¬O±`¼Æ¡C②¥Øªº¹Bºâ·½»P¨Ó·½¹Bºâ¤¸¤£¯à¦P®É³£¬O°O¾ÐÅé¡A¥ç§Y x86 µLªkª½±µ§â¤@µ§°O¾ÐÅ骺¤º®e·h²¾¨ì¥t¤@­Ó°O¾ÐÅ餺¡C③¥Øªº¹Bºâ¤¸»P¨Ó·½¹Bºâ¤¸ªº¼e«×¥²¶·¤@­P¡A¦pªG¨Ó·½¹Bºâ­ì¬O¤K¦ì¤¸¼e¡A¥Øªº¹Bºâ¤¸¤]¥²¶·¬O¤K¦ì¤¸¼e¡A¤£¯à¬O¤Q¤»¦ì¤¸¡C¹³¡uMOV AX,DL¡v´N¬O¿ù»~ªº»yªk¡C

§â±`¼Æ·h²¾¨ìAH¤º¤p¤ì°¸¨Ó½Í½Í¡uMOV AH,02¡v³o±ø«ü¥O¡A¥¦¦b¦ì§}¡u1092:0100¡v³B¡A³o¤@±ø«ü¥O§â±`¼Æ 02 ²¾¶i AH ¼È¦s¾¹ùØ¡C¥i¥H¥Î DEBUG Æ[¹î¨ä¾÷±ñ½X¡A¦p¤U¡C

-u 100 106 [Enter]
1092:0100 B402          MOV     AH,02
1092:0102 B241          MOV     DL,41
1092:0104 CD21          INT     21
1092:0106 CD20          INT     20
-

·íµ{¦¡°õ¦æ¨ì¦ì§} 1092:0100 ®É¡ACPU Ū¨ú¨ì¾÷±ñ½X¡uB4¡v«á¡A¥Ñ CPU ¤º³¡¹q¸ô±oª¾¡A­n§â¤@µ§¸ê®Æ·h¤J AH ùØ¡A·h²¾ªº¸ê®Æ´N¦b¡uB4¡vªº¤U¤@­Ó¦ì§}¡A©ó¬O¨ì¦ì§} 0101 ¥hŪ¨ú¡C¦]¬° AH ¬O¤K¦ì¤¸¼eªº¼È¦s¾¹¡A©Ò¥H­nŪ¨úªº¼Æ­È¤]¬O¤K¦ì¤¸¼e¡CŪ¨úªº¼Æ­È¬O 02¡A¦A²¾¨ì AH ¼È¦s¾¹¤º¡A¦Ó­ì¨Ó¦b AH ¤ºªº¼Æ­È´N®ø¥¢¤£¨£¡C¦p¥k¹Ï¡C

±µ¤U¨Óªº¡uMOV DL,41¡v«ü¥O¡A·N«ä¬O§â¤Q¤»¶i¦ìªº 41 ²¾¨ì DL ¼È¦s¾¹¡C­ì²z¦P¤W¡A¤£¦AÂØ­z¡C


x86 «ü¥O¡GINT

¡uINT¡v¤@¯ëºÙ¬°¤¤Â_«ü¥O ( interrupt instruction )¡C¦b²Õ¦X»y¨¥¤¤¡A¯u­n²²¤ªº½Í¤¤Â_¡A¥i¬O¯à¼g¥X¤@¥»®Ñ¨Ó¡A¦b¦¹³B§Ú­Ì¥i¥H²³æªº§â¤¤Â_·Q¦¨¬O¤@¬qµ{¦¡¡A³o¬qµ{¦¡¥i¥HÀ°§Ú­Ì°õ¦æ¤@¨Ç±`¥Îªº¤u§@¡C·í°õ¦æ¨ì¡uINT¡v«ü¥O®É¡ACPU ·|§â±±¨îÅv²¾¨ì¤¤Â_µ{¦¡°õ¦æ¡Aµ¥¤¤Â_µ{¦¡°õ¦æ§¹«á¡A¦A±N°õ¦æµ²ªG¶Ç¦^µ¹­ì¨Óµ{¦¡Ä~Äò°õ¦æ¡C

INT ªº»yªk¬O¡G

INT     ¸¹½X

¤W­±ªº¸¹½X¡A¨ä¹ê¬O¤@­Ó 0¡ãFF ªº¼Æ¦r¡A¥Nªí²Ä´X¸¹¤¤Â_¡C´«¥y¸Ü»¡¡ADOS ©Ò¯à³B²zªº¤¤Â_¡A³Ì¦h¥i¹F 256 ­Ó ( ¤Q¤»¶i¦ìªº FF¡A§Y¬°¤Q¶i¦ìªº 255¡A¦A¥[¤@­Ó 0 ¸¹¤¤Â_¡A¦@ 256 ­Ó )¡C

¡uINT 21¡v´Nªí¥Ü§Ú­Ì°õ¦æ¤Q¤»¶i¦ìªº²Ä 21 ¸¹¤¤Â_¡A¦¹¤¤Â_¬O DOS ´£¨Ñªº¡A©Ò¥H¤]¥s DOS ªA°Èµ{¦¡©Î DOS ¨ç¦¡ ( DOS function )¡C·í§Ú­Ì¶}¾÷±Ò°Ê DOS ®É¡ADOS ´N·|¦Û°Êªº±N DOS ªA°Èµ{¦¡¸ü¤J°O¾ÐÅ餤¡A¨Ï¥ÎªÌ©Ò¼¶¼gªº²Õ¦X»y¨¥µ{¦¡¡A±`±`§Q¥Î DOS ªA°Èµ{¦¡³B²z³\¦hÁcÂøªº¨Æ¡C¤¤Â_µ{¦¡¡A°£¤F DOS ªA°Èµ{¦¡¥~¡ABIOS ¤]´£¨Ñ¤@¨ÇªA°Èµ{¦¡¡FÁÙ¦³¬Y¨ÇµwÅé¤Wªº¤¤Â_¡A¦³¨ä¯S®í¥Î³~¡C¤£¹L¤£ºÞ­þ¤@ºØ¤¤Â_¡A¦b Windows ¨t²Î¤W¤@¯ëÀ³¥Îµ{¦¡¨Sªk¤l¨Ï¥Î¡A¥u¯à¦b DOS ¤W¨Ï¥Î¡C

INT 21 ©Ò°µªº¨Æ¡A³£¥Ñ AH ¤º®e¨M©w¡A·í AH¡×2 ®É¡A°õ¦æ INT 21 ®É¡Aªí¥Ü­n¦L¥X¤@­Ó¤å¦r¡A¦Ó¦¹¤å¦r¦s¦b DL ¼È¦s¾¹ùØ¡C¤£¦Pªº AH¡A¥i¥H°µ¤£¦Pªº¨Æ¡A¨Ò¦p­n¦L¥X¤@¬q¤å¦r®É¡AAH ´N­n³]¦¨ 9¡C¨ä¥LÁÙ¦³³\¦hªA°È¡A¨Ò¦p¶}±ÒÀɮסBŪ¼gÀÉ®×µ¥µ¥¡A³o¨Çµ{¦¡¦pªG­n¦Û¦æ¼¶¼g¡A¥i¯à­n¼Æ¦Ê¦æ¡A¥B³\¦hµ{¦¡³£·|¥Î¨ì¡A¦]¦¹¥Ñ§@·~¨t²Î¤¤´£¨Ñ¡A¤£¥¢¬°Â²«Kªº¤èªk¡C


ASCII ½X»P¤Q¤»¶i¦ì¼Æ

¦p¦P«e­±©Ò»¡ªº¡A¹q¸£¥u¯à¬ÝÀ´¤@³s¦êªº¡u0¡v»P¡u1¡v¡A¦]¬°§Ú­Ì¥i¥H§â¤K­Ó¦ì¤¸µ²¦X¦b¤@°_¡AÅý¡u0¡v»P¡u1¡vÅܦ¨¤Q¤»¶i¦ì¼Æ¡A©Ò¥H¤]¥i¥H»¡¹q¸£¥u¬Ý±oÀ´¼Æ­È¡C¬JµM¦p¦¹¡A¨º»ò¹q¸£¤S¬O¦p¦ó¯à¦b¿Ã¹õ¤W¦L¥X¤å¦r©O¡H

­ì¨Ó§Ú­Ì¥i¥H¥Î¤@­Ó¾ã¼Æ¥N´À¤@­Ó¦r¥À©Îªü©Ô§B¼Æ¦r¡C¨Ò¦p¤Q¤»¶i¦ìªº 41 ¥Nªí­^¤å¦r¥À¡uA¡v¡A·í¹q¸£¡u¬Ý¨ì¡v41 ®É¡A´N¥Î³o­Ó¼Æ­È¬dªí¡A¦Ó±o¨ì¡uA¡v³o­Ó¦rªº§Îª¬¡A¦AÅã¥Ü¨ì¿Ã¥ú¹õ¤W¡C·íµM¡A¥²¶·¨C¤@­Ó¤H³£¨Ï¥Î¦P¤@­Ó¼Æ­È¨Óªí¥Ü¦P¤@­Ó¦r¡A¦pªG¬Y¤H¥H¡u41¡vªí¥Ü¡uA¡v¡A¦ý¥t¤@¤H¥H¡u51¡vªí¥Ü¡uA¡v¡A°Z¤£¤Ñ¤U¤j¶Ã¡H

©Ò¥H¬ü°ê°ê®a¼Ð·Ç§½ ( ANSI ) ´NµÛ¤â¨î©w¤F¤@­Ó²Î¤@ªº¼Ð·Ç¡A±N 7 ­Ó¦ì¤¸ ( ¦@¦³ 27 ¤]´N¬O 128 ºØªí¥Ü¤èªk¡A±q 0 ¨ì 127 ) ¨Ó¥Nªí­^¤å¦r¥À¡Bªü©Ô§B¼Æ¦r¤Î¤@¨Ç²Å¸¹¡AºÙ¬° ASCII ½X¡C«á¨Ó IBM ¤S¨î©w¤FÂX¥Rªº ASCII¡A³o¬O¥Ñ 8 ¦ì¤¸²Õ¦¨ªº¡A¦@¥i¥Hªí¥Ü 256 ­Ó¤å¦r¡A«e­± 128 ­Ó»P«e­zªº ASCII ½X¬Û¦P¡A«á 128 ­Ó¥i¥Hªí¥Ü­µ¼Ð¡B®Ø½u¤Î§Æþ¦r¥À¡C°Ñ¦Òªþ¿ý¥|¡C

¤Ï¹L¨Ó»¡¡A§Ú­Ì¥i¥H±À½×¡A°²¦p­n¦b¿Ã¹õ¤W¦L¥Xªü©Ô§B¼Æ¦r¡u1¡v¡A¨º»ò´N¤£¯à§â¼Æ­È¡u1¡v©ñ¦b°O¾ÐÅ餤¡C¬°¤FÀËÅç³o­Ó±À½×¡A§Ú­Ì¥i¥H¦b 1092:0200 ³B¼g¤@¬qµ{¦¡¸Õ¸Õ¬Ý¡A¨Ì·Ó¤U­±¨BÆJ¡G

-a 200 [Enter]
1092:0200 mov ah,2 [Enter]
1092:0202 mov dl,1 [Enter] ¡÷¦L¥X ASCII ½X¬° 1 ªº¦r¤¸
1092:0204 int 21 [Enter]
1092:0206 int 20 [Enter]
1092:0208 [Enter]
-r ip [Enter] ¡÷­×§ï IP Åܬ°µ{¦¡¶}©l¦ì§} 0200
IP 0100
:200 [Enter]
-g [Enter] ¡÷°õ¦æµ{¦¡¡÷¦L¥X¯ºÁy¦Ó«Dªü©Ô§B¼Æ¦rªº 1
Program terminated normally
-

¤W­±ªºµ{¦¡¦LÃÒ¤F¡A¥Î AH¡×2/INT 21 ªA°È¤¤Â_¡A¦b¿Ã¹õ¤W¦L¥X¦r¤¸¡ADL ùØ­±ªº¼Æ­È¥²¶·¬O¦r¤¸©Ò¥Nªíªº ASCII ½X¡C¨Ò¦p¡A¡uA¡vªº ASCII ½X¬O 41¡B¡uB¡vªº ASCII ½X¬O 42¡K¡K¡u1¡vªº ASCII ½X¬O 31¡C¦]¦¹¦pªG­n¦L¥X¡u1¡v¡A¨Ã«D¦b DL ùØ©ñ¤J 1¡A¦Ó¬O­n©ñ 31¡C


x86 «ü¥O¡GINT 20

³Ì«á¤@­Ó«ü¥O¬O INT 20¡A³o¬O­nµ{¦¡°õ¦æ²Ä 20 ¸¹¤¤Â_ ( ³oùتº 20 ¤]¬O«ü¤Q¤»¶i¦ì )¡C³o­Ó¤¤Â_¤]¬O DOS ´£¨Ñªº¡A¬OÅýµ{¦¡µ²§ôªº¤¤Â_¡C¦pªG¦b DOS ¤¤¹J¨ì³o­Ó¤¤Â_¡Aµ{¦¡´N·|µ²§ô¡Aªð¦^ DOS¡F¦b DEBUG ¹J¨ì INT 20¡Aµ{¦¡µ²§ô¦^¨ì DEBUG¡CINT 20 ´N¥uµ²§ôµ{¦¡³o­Ó¥\¯à¡A¦]¦¹¤£¹³ INT 21 ­n¥Î AH ¿ï¾Ü°õ¦æ­þ¤@­Ó¥\¯à¡C


DEBUG ªº¡uQ¡v«ü¥O

¦pªG­n°h¥X DEBUG¡A¨º»ò´N¥Î¡uQ¡v«ü¥O¡A¥¦¬O¡uquit¡vªºÁY¼g¡A¥Nªíµ²§ô DEBUG ¦^¨ì DOS¡A¦p¤U¡G

-q [Enter]

C:\> ¡÷¦^¨ì DOS

¥Î DEBUG °£¿ù

DEBUG ¯u¥¿ªº¥\¯à¬O°£¿ù¡A±q¥¦ªºÀɦW´N¯à¬Ý±o¥X¨Ó¡C( bug ¬Oµ{¦¡µo¥Í¿ù»~¡Ade ¬O°£¥hªº·N«ä ) ­n¥Î DEBUG ¸ü¤Jµ{¦¡°£¿ù¡A¥Î¤U­±ªº¤èªk¡G

DEBUG ­n°£¿ùªº¥i°õ¦æÀɦW °Ñ¼Æ

­n°£¿ùªºµ{¦¡¦pªG¦³°Ñ¼Æªº¸Ü¡A°Ñ¼Æª½±µ±µ¦bÀɦW«á­±¡A¦ý¬O²{¦b¥Î¤£¨ì³oºØ¥Îªk¡C©³¤U¬O¥Î DEBUG ¸ü¤J ALPHA_A.COM ¥i°õ¦æÀÉ¡G

C:\>debug e:\dos\alpha_a.com [Enter]
-

¦pªG¨S¦³¥ô¦ó¿ù»~°T®§¡Aªí¥Ü¤w¦¨¥\¸ü¤J alpha_a.com¡A¥i¥H¦Û¦æ¥H¡uU¡v«ü¥OÀˬd¡A¦b°O¾ÐÅé¦ì§} 0100 ³B¡A¦³¡uMOV AH,02¡v¡B¡uMOV DL,41¡vµ¥µ{¦¡½X¡CALPHA_A.COM ¨S¦³°Ñ¼Æ¡A¦]¦¹¬Ù²¤¤F°Ñ¼Æ¡C


DEBUG ªº¡uD¡v«ü¥O

¦b°£¿ù«e¡A¤p¤ì°¸¤¶²Ð¤@­Ó«Ü¦³¥Îªº«ü¥O¡A¡uD¡v«ü¥O¡A³o­Ó«ü¥O¬O¶É¦L ( dump )¡A¯àÅã¥Ü¥X°O¾ÐÅé¦ì§}»P¨ä¤º®e¡C¦b¡u-¡v´£¥Ü²Å¸¹«á¡A¿é¤J¡ud¡v¡A±o¨ì¤U­±µ²ªG¡G

-d [Enter]
10B8:0100  B4 02 B2 41 CD 21 CD 20-41 2F 21 13 41 2F 21 6F   ...A.!. A/!.A/!o
10B8:0110  44 60 20 EA 40 7D 22 DE-42 D9 21 DE 42 D9 21 DE   D` .@}".B.!.B.!.
10B8:0120  42 D9 21 DE 42 D9 21 DE-42 D9 21 DE 42 D9 21 DE   B.!.B.!.B.!.B.!.
10B8:0130  42 D9 21 DE 42 D9 21 23-41 D9 21 23 41 D9 21 23   B.!.B.!#A.!#A.!#
10B8:0140  41 D9 21 23 41 D9 21 23-41 D9 21 23 41 D9 21 23   A.!#A.!#A.!#A.!#
10B8:0150  41 D9 21 23 41 D9 21 E2-43 D9 21 E2 43 D9 21 E2   A.!#A.!.C.!.C.!.
10B8:0160  43 D9 21 E2 43 D9 21 E2-43 D9 21 E2 43 D9 21 E2   C.!.C.!.C.!.C.!.
10B8:0170  43 D9 21 E2 43 D9 21 D8-43 D9 21 D8 43 D9 21 D8   C.!.C.!.C.!.C.!.

°O¾ÐÅ骺¦ì§}»P¨ä¤º®e¡uD¡v«ü¥O¿é¥Xªºµ²ªG¡A¤À¦¨¤T³¡¤À¡G
¡@¡@①³Ì¥ªÃä¬O¦ì§}¡C
¡@¡@②¤¤¶¡¬O°O¾ÐÅ餺®e¡C
¡@¡@③³Ì¥kÃä¬O¬Û¹ïÀ³ªº ASCII ½X¡C
§AÀ³·í¥i¥H¬Ý¨£³Ì¥ªÃ䪺¦ì§}¡A¥þ³£¬O¥Î¡u10B8:0100¡v¡B¡u10B8:0110¡v¡B¡u10B8:0120¡v¡K¡Kªí¥Ü¡A¤]´N¬O»¡µ{¦¡ªº°Ï¬q¦ì§}¬O 10B8¡C¨C¦¸¶i¤J DEBUG ®É¡A°Ï¬q¦ì§}¤j·§³£·|¤£¦P¡A³o¬O¦]¬°¦b°õ¦æ DEBUG «e¡ADOS ©Ò°õ¦æªºµ{¦¡³£·|¤£¦P¡A©Ò¥H¤w¨Ï¥Î¹Lªº°O¾ÐÅé¤j¤p¡A³£·|¤£¦P¡C

¥Ñ¡uD¡v«ü¥O¦C¥X¨Óªº¸ê®Æ¡A§A¥i¥H¬Ý¨£¡A¦b°¾²¾¦ì§} 0100 ªº¤º®e¬O¡uB4¡v¡B¦b°¾²¾¦ì§} 0101 ªº¤º®e¬O¡u02¡v¡B¦b°¾²¾¦ì§} 0102 ªº¤º®e¬O¡uB2¡v¡K¡K¡A©Î¬O§A¥i¥H·Q¹³¥kÃ䪺¹Ï§Î¡G

¦b«e­±´£¨ì¦ì§}®É¡A¤p¤ì°¸»¡¹L¥H¡u°Ï¬q:°¾²¾¦ì§}¡vªí¥Ü¹êÅé¦ì§}¡A¦³³\¦hºØªí¥Ü¤è¦¡¡A²{¦b¥i¥HÅçÃҬݬݡC10B8:0100 ªº¹êÅé¦ì§}¬O 10C80¡A©Ò¥H¤]¥i¥Hªí¥Ü¦¨ 10C8:0000¡C¤U¹F¡uD 10C8:0¡v¡A¬Ý¬Ý¬O§_¿é¥Xµ²ªG¤@¼Ë¡G

-D 10C8:0 [Enter]
10C8:0000  B4 02 B2 41 CD 21 CD 20-41 2F 21 13 41 2F 21 6F   ...A.!. A/!.A/!o
10C8:0010  44 60 20 EA 40 7D 22 DE-42 D9 21 DE 42 D9 21 DE   D` .@}".B.!.B.!.
10C8:0020  42 D9 21 DE 42 D9 21 DE-42 D9 21 DE 42 D9 21 DE   B.!.B.!.B.!.B.!.
10C8:0030  42 D9 21 DE 42 D9 21 23-41 D9 21 23 41 D9 21 23   B.!.B.!#A.!#A.!#
10C8:0040  41 D9 21 23 41 D9 21 23-41 D9 21 23 41 D9 21 23   A.!#A.!#A.!#A.!#
10C8:0050  41 D9 21 23 41 D9 21 E2-43 D9 21 E2 43 D9 21 E2   A.!#A.!.C.!.C.!.
10C8:0060  43 D9 21 E2 43 D9 21 E2-43 D9 21 E2 43 D9 21 E2   C.!.C.!.C.!.C.!.
10C8:0070  43 D9 21 E2 43 D9 21 D8-43 D9 21 D8 43 D9 21 D8   C.!.C.!.C.!.C.!.

ªGµM»P¤W­±¶É¦Lµ²ªG¤@¼Ë¡Aªí¥Ü³o¨âºØ¦ì§}ªí¥Ü¤è¦¡¡A«üªº¨ä¹ê¬O¦P¤@ºØ¦ì§}¡C


DEBUG ªº¡uT¡v«ü¥O

DEBUG ³Ì±j®«ªº«ü¥O¬O¤@¦¸°õ¦æ¤@±ø x86 «ü¥O¡AµM«á°±¤U¨Ó¡AÅã¥Ü©Ò¦³¼È¦s¾¹ªº¤º®e¥H¤Î¤U¤@±ø x86 «ü¥O¤Î¾÷±ñ½X¡C³o´N¬O¡uT¡v«ü¥O ( trace )¡C²{¦b¨Ó¸Õ¸Õ¬Ý³o­Ó±j®«ªº DEBUG «ü¥O¡C

¥ý¥Î DEBUG ¸ü¤J ALPHA_A.COM¡AµM«á¥Î¡uR¡v«ü¥OÆ[¹î¶i¤J DEBUG «á¼È¦s¾¹ªº±¡ªp¡G

C:\>debug e:\dos\alpha_a.com [Enter]
-r [Enter]
AX=0000  BX=0000  CX=0008  DX=0000  SP=FFFE  BP=0000  SI=0000  DI=0000  
DS=10B4  ES=10B4  SS=10B4  CS=10B4  IP=0100   NV UP EI PL NZ NA PO NC 
10B4:0100 B402          MOV     AH,02
-

§A·|µo²{¡A©Ò¦³ªº³q¥Î¼È¦s¾¹³£¬O 0¡A¥u¦³ CX ¬O 8¡A³o¬O ALPHA_A.COM ªºÀɮפj¤p¡CCS:IP «ü¦V¦ì§} 10B4:0100¡A³o­Ó¦ì§}¥¿¬O ALPHA_A.COM ªº²Ä¤@±ø«ü¥O¡A¤]´N¬Oµ{¦¡ªº¶i¤JÂI¡C¦n¤F¡A²{¦b¨Ó¸Õ¸Õ¡uT¡v«ü¥Oªº«Â¤O¡G

-t [Enter]

AX=0200  BX=0000  CX=0008  DX=0000  SP=FFFE  BP=0000  SI=0000  DI=0000
DS=10B4  ES=10B4  SS=10B4  CS=10B4  IP=0102   NV UP EI PL NZ NA PO NC
10B4:0102 B241          MOV     DL,41

²Ä¤@±ø«ü¥O°õ¦æ§¹«á¡AAX Åܦ¨ 0200¡A³o·íµM¬O¦]¬°²Ä¤@±ø«ü¥O§â AH Åܦ¨ 02¡C¦A¬Ý¬Ý CS:IP ©Ò«ü¦ì§}¡AÅܦ¨¤U¤@±ø«ü¥Oªº¦ì§}¡A¦Ó¥B¤U¤@±ø«ü¥O¤Î¨ä¾÷±ñ½X¡C¦A°õ¦æ¤@¦¸¡uT¡v«ü¥O¸Õ¸Õ¡G

-t [Enter]

AX=0200  BX=0000  CX=0008  DX=0041  SP=FFFE  BP=0000  SI=0000  DI=0000
DS=10B4  ES=10B4  SS=10B4  CS=10B4  IP=0104   NV UP EI PL NZ NA PO NC
10B4:0104 CD21          INT	21

ªGµM¦p¹w´Áµ²ªG¡ADX Åܦ¨ 0041¡A¥B CS:IP Åܦ¨¤U¤@±ø«ü¥Oªº¦ì§}¡C±µ¤U¨Óªº«ü¥O¬O¡uINT 21¡v¡A³o­Ó±ø«ü¥O·|Åý CPU Âಾ¨ì DOS ªA°Èµ{¦¡¡C¦Ó DOS ªA°Èµ{¦¡¬O·L³n©Ò¼gªº¡Aµo¥Í¿ù»~ªº¾÷²v²z·í·¥§C¡A¦]¦¹¤£»Ý­n¤@¨B¤@¨B°lÂÜ¡C¤£¹L¦pªG·Q­n¿i½mµ{¦¡§Þ¥©¡A°Ñ¾\¤j¤½¥q©Ò¼¶¼gªºµ{¦¡½X¡A·íµM¤]¥i¥H¥Î¡uT¡v«ü¥O¡A¶i¥h¤¤Â_µ{¦¡¬ã¨s¡A¦ý¬O³o¬O¤@¶µÁ}Ãøªº¤u§@¡C

²{¦b§Ú­Ì¤£°µ³o¨Æ¡Aª½±µ§â¡uINT 21¡v°õ¦æ§¹²¦¡A¦³¨âºØ°µªk¡G
¡@¡@①¥Î¡uG 106¡v¡C¡uG¡v«ü¥O«á­±±µ¤W¼Æ­È¡A¦¹¼Æ­Èªí¥Ü¦ì§}¡ADEBUG °õ¦æ¨ì¦¹¦ì§}´N°±¤î¡C
¡@¡@②¥Î¡uP¡v«ü¥O¡C


DEBUG ªº¡uP¡v«ü¥O

DEBUG ªº¡uP¡v«ü¥O¬O¡uproceed¡vªº·N«ä¬OÄ~Äò°õ¦æªº·N«ä¡A¹J¨ì¹³ INT¡BCALL¡BREP µ¥«ü¥O¡A¡uP¡v¥i¥Hª½±µ°õ¦æ§¹²¦¡A¤£¥²¸õ¨ì¤¤Â_ùØ­±©Î¬O­«½Æ«Ü¦h¦¸¡C

²{¦b¦b DEBUG ´£¥Ü²Å¸¹«á¿é¤J¡uP¡v«ü¥O¡G

-p [Enter]
A
AX=0241  BX=0000  CX=0008  DX=0041  SP=FFFE  BP=0000  SI=0000  DI=0000  
DS=10B4  ES=10B4  SS=10B4  CS=10B4  IP=0106   NV UP EI PL NZ NA PO NC 
10B4:0106 CD20          INT     20

³o¤@³¹¡A¤p¤ì°¸¥´ºâ¦b³oùص²§ô¡C©³¤U¬O³o¤@³¹´£¨ìªº DEBUG «ü¥O»P x86 «ü¥O¾ã²z¡C



µù¤@¡G¹Bºâ¤¸ ( operant ) ¡B¹Bºâ¤l ( operator ) »P¹Bºâ¦¡ ( expression )

¹Bºâ¤l¬O«ü¬Y¤@¯S©wªº¹Bºâ¤è¦¡¡A¹Bºâ¤¸´N¬O«ü°õ¦æ¬Y¤@¯S©w¹Bºâ¤è¦¡®É©Ò§@¥Îªº¼Æ­È©ÎÅܼơA¦Óªí¹F¾ã­Ó¹Bºâªº¦¡¤l´N¥s¹Bºâ¦¡¡C¨Ò¦p¡A¤p¾Ç¾Ç¹Lªº¡u2¡Ï5¡v¡A2¡B5 ¬O¹Bºâ¤¸¡A¡Ï ¬O¹Bºâ¤l¡A¡u2¡Ï5¡v¾ã­Ó¦¡¤l¥s¹Bºâ¦¡¡C

¤@­Ó¹Bºâ¦¡¤¤ªº¹Bºâ¤¸­Ó¼Æ¤£¤@©w¬O¨â­Ó¡A¨Ò¦p­t¸¹¡B¹ï¼Æ¡B¤T¨¤¨ç¼Æµ¥³o¨Ç¹Bºâ¤lªº¹Bºâ¹ï¶H¡A¥u¦³¤@­Ó¹Bºâ¤¸¡C


¦^ÅU


x86 «ü¥O¡GMOV

x86 «ü¥O¤j­P¥i¥H¤À¬°¤CÃþ¡G①¸ê®Æ·h²¾¡B②ºâ³N¹Bºâ¡B③ÅÞ¿è¹Bºâ¡B④¦r¦ê¾Þ§@¡B⑤¬yµ{±±¨î¡B⑥³B²z¾¹±±¨î¡B⑦«OÅ@¼Ò¦¡¡CMOV «ü¥O¬O¸ê®Æ·h²¾¨º¤@Ãþ¡A¨ä»yªk¬O¡G

MOV     ¥Øªº¹Bºâ¤¸,¨Ó·½¹Bºâ¤¸

MOV «ü¥O¬O§â«á­±ªº¸ê®Æ¡A·h²¾¨ì«e­±¼È¦s¾¹©Î°O¾ÐÅ餺¡C«á­±ªº¸ê®ÆºÙ¨Ó·½¹Bºâ¤¸¡A«e­±ªº¸ê®ÆºÙ¥Øªº¹Bºâ¤¸¡C³Ì«á¥Øªº¹Bºâ¤¸ªº¼Æ­È´Nµ¥©ó¨Ó·½¹Bºâ¤¸¡A¦Ó¨Ó·½¹Bºâ¤¸¤§­È¤£ÅÜ¡C¥Øªº¹Bºâ¤¸¡B¨Ó·½¹Bºâ¤¸ÁÙ¦³¤@¨Ç­­¨î¡G

  1. ¥Øªº¹Bºâ¤¸¤£¯à¬O±`¼Æ¡A¨Ó·½¹Bºâ¤¸¥i¥H¬O±`¼Æ¡C³o«Ü¦n²z¸Ñ¡A±`¼ÆµLªk§ïÅÜ¡A·íµM¤£¯à°µ¥Øªº¹Bºâ¤¸¡C
  2. MOV µLªk§â¤@­Ó°O¾ÐÅ骺¤º®e²¾¨ì¥t¤@­Ó°O¾ÐÅéùØ¡A©Ò¥H¥Øªº¹Bºâ¤¸»P¨Ó·½¹Bºâ¤¸¤£¯à¦P®É¬O°O¾ÐÅéÅܼơC
  3. ¥Øªº¹Bºâ¤¸»P¨Ó·½¹Bºâ¤¸¼e«×¥²¶·¬Û¦P¡C¨Ò¦p¡uMOV AX,BL¡v¬O¿ù»~ªº¡A¦]¬° AX ¬O 16 ¦ì¤¸¡ABL ¬O¤K¦ì¤¸¡C
  4. MOV «ü¥O¤£·|§ïÅܺX¼Ð¡C

x86 «ü¥O¡GINT 21

INT «ü¥OºÙ¬°¤¤Â_«ü¥O¡A·í°õ¦æ¨ì³o­Ó«ü¥O®É¡ACPU ·|¨Ì·Ó¼Ð¸¹ªº¤£¦P¡A§â±±¨îÅvÂಾ¨ì¤£¦P³B°õ¦æ¡Aµ¥°õ¦æ§¹²¦«á¦A§â±±¨îÅv¡AÂಾ¦^¤¤Â_ªº¤U¤@±ø«ü¥O³B¡AÄ~Äò°õ¦æ¡C

²Ä 21 ¸¹¤¤Â_µ{¦¡¬O¤@ºØ DOS ªA°Èµ{¦¡¡C°õ¦æ¦¹¤¤Â_µ{¦¡®É¡A¥²¶·¥ý³]©w¦n AH ªº¼Æ­È¡A¨Ì¾Ú AH ¤£¦P¡A¯à¶i¦æ¤£¦Pªº¥\¯à¡C

¥»³¹©Ò¨Ï¥Îªº¬O¦b¿Ã¥ú¹õ¤W¦L¥X¤@­Ó¦r¤¸ªº DOS ªA°Èµ{¦¡¡AAH¡×2¡A°õ¦æ INT 21 ®É¡A·|§â DL ¤ºªº ASCII ¦r¤¸Åã¥Ü¦b¿Ã¥ú¹õ¤W¡G

¦b¿Ã¹õ¤W¦L¥X¦r¤¸
¿é¤J¡GAH¡×2
¡@¡@¡@DL¡×­n¦L¥Xªº¦r¤¸¡A¥H ASCII ½s¸¹ªí¥Ü¦r¤¸
°õ¦æ¡GINT 21

¨Ò¦p©³¤Uªºµ{¦¡¡A·|¦b¿Ã¥ú¹õ¤WÅã¥Ü¡u1¡v¡G

        MOV     AH,2
        MOV     DL,31
        INT     21

·L³nÁÙ´£¨Ñ¤F³\¦hªA°Èµ{¦¡¡A¥i¥H¬d¾\ Ralf Brown's Interrupt List¡A³o¬O²{¤µ³Ì§¹¾ãªº»¡©ú¤F¡C


x86 «ü¥O¡GINT 20

²Ä 20 ¸¹¤¤Â_µ{¦¡¤]¬O¤@ºØ DOS ªA°Èµ{¦¡¡A¥¦ªº¥\¯à¥u¦³¤@­Ó¡A´N¬Oµ²§ôµ{¦¡¡Aªð¦^ DOS ©Î DEBUG¡C¦]¬° INT 20 ¥u¦³¤@­Ó¥\¯à¡A¤£»Ý­n«ü©w AH ©Î¨ä¥L¼È¦s¾¹¡C


DEBUG «ü¥O¡GA

A «ü¥Oªº®æ¦¡¬O¡G

A [address]

A «ü¥O¬OÅý¨Ï¥ÎªÌ¿é¤J x86 «ü¥O¡ADEBUG ·|±N¨ä²ÕĶ¦¨¾÷±ñ½X¡A¦s¤J«ü©w¦ì§}¡C¦pªG¨S¦³¼g¥X«ü©w¦ì§}¡A¨º´N¬O¥H¤W¦¸¡uA¡v«ü¥Oµ²§ô®Éªº¤U¤@­Ó¦ì§}¶}©l¡C°²¦p¬O¶i¤J DEBUG «á²Ä¤@¦¸°õ¦æ¡uA¡v«ü¥O¥B¨S¦³«ü©w¦ì§}¡A¨º»ò´N¬O¥H¤@¶i¤J DEBUG ®Éªº CS:0100 ¦ì§}¶}©l¡C«ü©wªº¦ì§}¡A³q±`¥H°Ï¬q:°¾²¾¦ì§}ªí¥Ü¡A¦ý¤]¥i¥H¬Ù²¤°Ï¬q¦ì§}¡C


DEBUG «ü¥O¡GD

D «ü¥O¬O§â°O¾ÐÅ餤ªº¤º®eÅã¥Ü¦b¿Ã¥ú¹õ¤W¡A¥Îªk¦³¨âºØ¡G

D [range]
D [address [L length]] ¡÷¦b length ¤§«eªº¬O¡uL¡v¦r¥À¡A¤]¥i¥H¥Î¤p¼gªº¡ul¡v

²Ä¤@ºØ¥Îªk¬OÅã¥Ü¨â°O¾ÐÅé¦ì§}¤§¶¡ªº¤º®e¡A¨Ò¦p¤U­±ªº¡ud 0:0 3f¡v¡A´N¬OÅã¥Ü°O¾ÐÅé¦ì§}¡u0000:0010¡v¨ì¡u0000:003F¡vªº¤º®e¡C¦pªG¬Ù²¤¦ì§}½d³ò¡A¨º´N¥H¤W¦¸¡uD¡v«ü¥Oµ²§ôªº¦ì§}¶}©l¶É¦L¡C¦pªG¬O²Ä¤@¦¸°õ¦æ¡uD¡v«ü¥O¤S¥¼«ü©w¦ì§}¡A´N±q CS:0100 ³B¶}©l¶É¦L¡C

-d 0:10 3f [Enter]
0000:0010  F4 06 70 00 54 FF 00 F0-BF 00 00 F0 67 00 00 F0   ..p.T.......g...
0000:0020  3C 00 23 03 45 00 23 03-57 00 23 03 6F 00 23 03   <.#.E.#.W.#.o.#.
0000:0030  87 00 23 03 9F 00 23 03-B7 00 23 03 F4 06 70 00   ..#...#...#...p.

²Ä¤GºØ¥Îªk¬O«ü©w­n¶É¦L´X­Ó¦ì¤¸²Õ¡A³o®É»Ý­n¥Î¡uL¡v¨Ó«ü©w­n¶É¦Lªº¦ì¤¸²Õ­Ó¼Æ¡C¦pªG¡uaddress¡v¬Ù²¤¡A¥H¤W¦¸¡uD¡v«ü¥Oµ²§ôªº¦ì§}¶}©l¶É¦L¡C¦pªG¬O²Ä¤@¦¸°õ¦æ¡uD¡v«ü¥O¤S¥¼«ü©w¦ì§}¡A´N±q CS:0100 ³B¶}©l¶É¦L¡C


DEBUG «ü¥O¡GE

E «ü¥O ( Enter ) ¬O¿é¤J¸ê®Æ¡A¥Îªk¬O¡G

E address [list]

E «ü¥O¥i¥HÅý¨Ï¥ÎªÌ¿é¤J¤@µ§¼Æ­Ó¦ì¤¸²Õ§Î¦¨ªº¸ê®Æ¡A¦s©ó address ©Ò«ü©wªº¦ì§}¡Faddress ¤£¯à¬Ù²¤¡A¦ý¨ä¤¤ªº°Ï¬q¦ì§}¥i¥H¬Ù²¤¡A¦pªG¬Ù²¤°Ï¬q¦ì§}¡A «h¥H DS ©Ò«üªº°Ï¬q¥N´À¡C©Ò¿é¤Jªº¸ê®Æ¤@¯ë¬O¤@¦ê¦ì¤¸²Õ©Ò²Õ¦¨ªº¤Q¤»¶i¦ì¼Æ­È¡A¨C­Ó¦ì¤¸²Õ¥HªÅ¥Õ¦r¤¸¬Û¹j¶}¡A¨Ò¦p¤U­±ªº½d¨Ò¡G

e 100 49 20 6c 6f 76 65 20 61 73 73 65 6d 62 6c 79 2e 24

¤]¥i¥H¥Î¦r¦êªº¤è¦¡ªí¥Ü¡A¦r¦ê¬O¥H¤@¹ï¡u"¡v©Î¡u'¡v¬A°_¨Óªº¤å¦r¡A¦p¤U¡G

e 100 "I love assembly.$"
e ds:100 "I love 'ASSEMBLY'.$"

¦b¤@¹ï¡u"¡v¤ºªº¡u'¡vµø¬°¤@­Ó´¶³qªº¦r¤¸¡A¤Ï¤§¥çµM¡C¦]¦¹¦pªG·Q¿é¤J¡ua girl's book¡v¡A¨º´N­n¥Î "a girl's book"¡A¤£¥i¥Î 'a girl's book'¡C


DEBUG «ü¥O¡GG

G «ü¥O ( Go ) ¬O¥Î¨Ó°õ¦æµ{¦¡ªº¡A¨ä¥Îªk¬°¡G

G [=address] [address]

²Ä¤@­Ó address¡A¤]´N¬Oºò±µµÛµ¥¸¹ªº¦ì§}ªí¥Ü¡A­n±q¦¹¦ì§}¶}©l°õ¦æ¡F¦pªG¬Ù²¤ [=address]¡A¨º»ò´N·|±q CS:IP ©Ò«üªº¦ì§}¶}©l°õ¦æ¡C²Ä¤G­Ó address ªí¥Ü°õ¦æ¨ì¦¹¦ì§}°±¤î¡A¦pªG¬Ù²¤¡A´N·|°õ¦æ¨ìµ{¦¡µ²§ô¡C


DEBUG «ü¥O¡GN

N «ü¥O ( Name ) ¬O¥Î¨Ó©R¦WÀɮתº¡A¨ä»yªk¬O¡G

N [pathname] [arglist]

¡uN¡v«ü¥O¬Oµ¹Àɮרú¦W¦r¡A¦W¦r´N¬O«á­±ªº¡upathname¡v¡C³q±`­n¥Î DEBUG °£¿ù¬Y­Óµ{¦¡¡A¨Ò¦p¥H alpha_a.com ¬°¨Ò¡A·|¦b DOS ´£¥Ü²Å¸¹¤U¿é¤J¡udebug e:\dos\alpha_a.com¡v¸ü¤J¡F¦ý¬O¤]¥i¥H¦b DEBUG ùØ­±®É¡A¥ý¥Î¡uN¡v«ü¥O«ü©w­n°£¿ùªº¸ô®|¤ÎÀɦW¡A¦A¥Î¡uL¡v«ü¥O¸ü¤J¡C¨ä¹Lµ{¦p¤U¡G

-ne:\dos\alpha_a.com [Enter]
-l [Enter]
-

DEBUG ¤]¥i¥H¼g¤JÀɮ׫O¦s¦bºÏºÐ¾÷ùØ¡C¥ý¥Î¡uN¡v«ü¥O´ÀÀÉ®×°_­Ó¦W¦r¡A¦A­×§ï¡uBX:CX¡v«ü©wÀɮפj¤p¡A³Ì«á¥Î¡uW¡v«ü¥O¼g¤J¡C


DEBUG «ü¥O¡GP

P «ü¥O ( Proceed ) ´X¥G©M T «ü¥O¬Û¦P¡A¦ý¬O¹J¨ì CALL¡BINT¡BREP¡BLOOP µ¥«ü¥O¡Aª½±µ°õ¦æ§¹²¦¦Ó¨ì¤U¤@±ø«ü¥O¡A¨Ã¤£·|¶i¤J°Æµ{¦¡©Î¤¤Â_µ{¦¡ùØ­±¥h°õ¦æ¡FT «ü¥O«h·|¶i¤J°Æµ{¦¡©Î¤¤Â_¤º¡A©¾¹êªº¤@¨B¤@¨B°õ¦æ¡CP «ü¥Oªº»yªk¬O¡G

P [=address] [number]

²Ä¤@­Ó°Ñ¼Æ¡Aaddress¡Aªí¥Ü±q­þ¤@­Ó¦ì§}¶}©l°õ¦æ¡F¦pªG¬Ù²¤¡A«h±q CS:IP ©Ò§}ªº¦ì§}¶}©l¡C²Ä¤G­Ó°Ñ¼Æ¡A¥u¦³¦b REP¡BLOOP µ¥«ü¥O®É¤~¦³¥Î¡A·N«ä¬O­n DEBUG °õ¦æ´X¦¸­«½Æªº°j°é¡F¦pªG¬Ù²¤¡A´Nªí¥Ü§â°j°é°õ¦æ§¹²¦¡C


DEBUG «ü¥O¡GQ

Q «ü¥O ( Quit ) ¬Oµ²§ô DEBUG ¦^¨ì DOS¡C


DEBUG «ü¥O¡GR

R «ü¥O ( Register ) ¬OÅý DEBUG Åã¥Ü¼È¦s¾¹ªº¤º®e¡A¤]¥i¥H­×§ï¼È¦s¾¹ªº¤º®e¡A¨ä¥Îªk¬O¡G

R [register]

°Ñ¼Æ¡Aregister¡A¬O¼È¦s¾¹ªº·N«ä¡A¦pªG¬Ù²¤ªº¸Ü¡AR «ü¥O·|Åã¥Ü 8086/8088 ©Ò¦³¼È¦s¾¹ªº¤º®e¡A¤Î¤U¤@±ø­n°õ¦æªº«ü¥O»P¦ì§}¡A¦p¤U¡G

-r [Enter]
AX=0000  BX=0000  CX=0024  DX=0000  SP=FFFE  BP=0000  SI=0000  DI=0000
DS=10B8  ES=10B8  SS=10B8  CS=10B8  IP=0100   NV UP EI PL NZ NA PO NC
10B8:0100 EB16          JMP     0118

¦pªG register ¤£¬Ù²¤¡A¨º´Nªí¥Ü­n­×§ï register ªº¤º®e¡A¨Ò¦p­n­×§ï AX ªº¤º®e¡A§â 0000 Åܬ° ABCD¡A¦p¤U¡G

-r ax [Enter]
AX 0000
:abcd [Enter]
-

R «ü¥O·|¥ýÅã¥Ü­ì¨Ó AX ¤§¤º®e¡AµM«á¨Ï¥ÎªÌ¥i¥H¦b¡u:¡v¤§«á¡A¿é¤J·sªº¤º®e¡C


DEBUG «ü¥O¡GT

T «ü¥O ( Trace ) ¥i¥HÅý DEBUG ¤@¦¸¥u°õ¦æ¤@±ø CPU «ü¥O¡AµM«á°±¤U¨Ó¡AÅã¥Ü©Ò¦³¼È¦s¾¹ªº¤º®e¡A¥H¤Î¤U¤@±ø«ü¥Oªº¦ì§}¡B¾÷±ñ½X¡Bx86 «ü¥O¡AT «ü¥O´N¬O«UºÙªº³æ¨B°lÂÜ¡C¨ä¥Îªk¬O¡G

T [=address] [number]

²Ä¤@­Ó°Ñ¼Æ¬O«ü°õ¦æ­þ¤@­Ó¦ì§}¡A¦pªG¬Ù²¤¡A´N¬O±q¤W¤@¦¸°õ¦æ T «ü¥O©Î G¡BP «ü¥O°±¤U¨Óªº¦ì§}¶}©l°lÂÜ¡F¦pªG¬O²Ä¤@¦¸°õ¦æ¡uT¡v«ü¥O¡A¥B¥¼«ü©w¦ì§}¡A¨º»ò´N±q CS:IP ¶}©l°lÂÜ¡C²Ä¤G­Ó°Ñ¼Æ¡Anumber¡A¬O«ü¤@¦¸¥i¥H°õ¦æ´X±ø x86 «ü¥O¡C

T «ü¥Oªº¥\¯à«Ü±j¤j¡A¥i¥H°lÂܤ¤Â_µ{¦¡¡BDOS ¶}¾÷ºÏ°Ïªºµ{¦¡¡A¬Æ¦Ü¬O BIOS µ{¦¡¡CIBM PC ¤Î¨ä¬Û®e¾÷ºØ¤@¶}¾÷¡A°õ¦æªº²Ä¤@±ø«ü¥O¬O¦b BIOS ¦ì§} F000:FFF0¡A§A¥i¥H¸Õ¸Õ¬Ý¡C


DEBUG «ü¥O¡GU

U «ü¥O¬O¤Ï²ÕĶ ( unassemble ©Î disassemble )¡A¥i¥H§â°O¾ÐÅ餺ªº¾÷±ñ½XÅܦ¨ x86 «ü¥O¡AÅã¥Ü¦b¿Ã¹õ¤W¡C¨ä¥Îªk¬O¡G

U [range]

¦pªG¨S¦³«ü©w range¡A¨º»ò U «ü¥O·|±q¤W¦¸ P¡BT ©Î U «ü¥Oµ²§ôªº¦ì§}¶}©l¤Ï²ÕĶ¡F¦pªG¬O¶i¤J DEBUG «á©|¥¼°õ¦æ P¡BT ©Î U «ü¥O¡A¨º»ò´N·|±q CS:0100 ³B¶}©l¤Ï²ÕĶ¡F¦]¬°¨C¤@±ø«ü¬°ªº¾÷±ñ½Xªø«×¤£©T©w¡A©Ò¥H¤Ï²ÕĶªºªø«×¬O 32 ­Ó¦ì¤¸²Õ©Î¦h¤@¨Ç¡C


DEBUG «ü¥O¡GW

W «ü¥O ( Write ) ¬O§â¸ê®Æ¼g¤JºÏºÐ¾÷ùØ¡C¦³¨âºØ¥Îªk¡A¨ä»yªk¤À§O¬O¡G

W [address]
W [address] [drive] [firstsector] [number]

²Ä¤@ºØ¥Îªk¬O§â«ü©w¦ì§}ªº°O¾ÐÅ餺®e¡A¦s¨ì¬Y­ÓÀɮפº¡CÀɦW¥²¶·¨Æ¥ý¥Î¡uN¡v«ü¥O³]©w¦n¡A­n¼g¤J´X­Ó¦ì¤¸²Õ¤]¥²¶·¨Æ¥ý³]©w¦b BX:CX ¼È¦s¾¹¤º¡C³Ì«á¦A¤U¹F¡uW¡v«ü¥O¡A¼g¤JÀɮפº¡C¦pªG¥¼«ü©w¦ì§}¡A«h­n¼g¤Jªº¸ê®Æ±q CS:0100 ¶}©l¡C

²Ä¤GºØ¥Îªk¬O§â¸ê®Æ¼g¤J«ü©wªº³sÄòºÏ°Ï ( sector )¡C³o­Ó¥\¯à«D±`±j¤j¡A¦pªG¼g¤JªººÏ°Ï¥]§t­«­n¸ê®Æ¡A¹³¶}¾÷ºÏ°Ï¡B­«­nÀɮצû¾ÚªººÏ°Ï¡A¨º»ò­ì¨Óªº¸ê®Æ´N·|®ø¥¢¤£¨£¡A½Ð¤p¤ß¨Ï¥Î¡Caddress ¬O­n¼g¤Jªº¸ê®Æ¦ì§}¡A¦pªG¥¼«ü©w¡A¹w³]¦ì§}¬O CS:0100¡Cdrive ¬OºÏºÐ¾÷½s¸¹¡A0 ¥Nªí¡uA:¡vºÏºÐ¾÷¡B1 ¥Nªí¡uB:¡vºÏºÐ¾÷¡B2 ¥Nªí¡uC:¡vºÏºÐ¾÷¡K¡K¡Cfirstsector ªí¥Ü±q²Ä´X­ÓºÏ°Ï¶}©l¼g¤J¸ê®Æ¡Cnumber ¬O­n¼g¤JªººÏ°Ï¼Æ¥Ø¡A¤@­ÓºÏ°Ï¥i¥H¦s¤J 512 ­Ó¦ì¤¸²Õªº¸ê®Æ¡C