Ch 02 DEBUGªº¨Ï¥Î


¤W¦¸§Ú­Ì¼g¤F¤@­Ó²³æªºµ{¦¡¡A¨Ã¸ÑÄÀ­ì©lÀɤ¤¨C¤@¦æªº·N¸q¡A¦ý¨Ã¤£¬O³o¼Ë´Nµ²§ô¤F¡A³Ì­«­nªº¬O­n¨Ó¬Ý¬Ý EXAM01.COM ¸ü¤J¨ì°O¾ÐÅ餤¬O«ç¼Ëªº±¡§Î¡A³o¤]¬O±N¨Ó¼g½ÆÂøµ{¦¡®É°£¿ù®É¥²­nªº¨BÆJ¡C³Ì²³æªº°£¿ù¤u¨ã´N¬O DOS/Windows 9x ©Òªþªº DEBUG.EXE ( DOS ¥´±q 1.0 ª©´Nªþ°e DEBUG¡F¦Ó Windows 9x ªº DEBUG.EXE ¦b C:\WINDOWS\COMMAND ¤l¥Ø¿ý¤º¡FXP ¤]ªþ¦³ DEBUG¡A¦b C:\WINDOWS\SYSTEM32 ¤l¥Ø¿ýùØ )¡C¨Ï¥Î DEBUG ¸ü¤J­n°£¿ùªºµ{¦¡®É¥Îªk¦p¤U¡G( ¶À¦âªº¦r¬O§A¥²¶·¿é¤Jªº¡A°O±o¨C¦¸¿é¤J§¹«á­n«ö Enter Áä )

E:\HomePage\SOURCE>..\masm50\debug exam01.com [Enter]
´N¬O DEBUG «á­±±µ¤W¡§­n°£¿ùªºµ{¦¡¦W¡¨§Y¥i¡A°²¦p¡§­n°£¿ùªºµ{¦¡¦W¡¨«á­±ÁÙ¦³°Ñ¼Æ¡A´Nª½±µ±µ¦b¡§­n°£¿ùªºµ{¦¡¦W¡¨«á­±§Y¥i¡C

DEBUG ªº¨C­Ó©R¥O³£¥Î¤@­Ó­^¤å¦r¥Àªí¥Ü¡A¶i¤J DEBUG «á§A·|¬Ý¨ì¿Ã¹õ³Ì¥ªÃ䦳¤@­Ó¡u-¡v¸¹¡Aªí¥Ü DEBUG ¤w¸g·Ç³Æ¦n¡Aµ¥§A¿é¤J©R¥O¡A¡u-¡v¥i»¡¬O DEBUG ªº´£¥Ü²Å¸¹¡C¦n¡A²{¦b¶}©l¸Õ¸Õ²Ä¤@­Ó©R¥O¡AD¡A¥¦¤]¬O«Ü±`¥Îªº©R¥O¡C


Dump «ü¥O

²Ä¤@­Ó¬O¬d¬Ý°O¾ÐÅ餺®e D ( dump ) «ü¥O¡A¸Õ¸Õ¬Ý°õ¦æµ²ªG¦p¦ó¡G

-d [Enter]
10F7:0100  EB 17 90 48 69 2C 20 49-20 6C 65 61 72 6E 20 61  k..Hi, I learn a
10F7:0110  73 73 65 6D 62 6C 79 2E-24 BA 03 01 B4 09 CD 21  ssembly.$:..4.M!
10F7:0120  B8 00 4C CD 21 46 EA 89-56 EC 80 7C 1E 01 74 12  8.LM!Fj.Vl.|..t.
10F7:0130  83 7E F0 02 74 0C 83 7E-F0 07 74 06 83 7E F0 0A  .~p.t..~p.t..~p.
10F7:0140  75 04 80 4C 10 20 F6 44-10 20 75 03 E9 6D 01 80  u..L. vD. u.im..
10F7:0150  7E F8 07 74 03 E9 64 01-83 7E F0 03 75 03 E9 5B  ~x.t.id..~p.u.i[
10F7:0160  01 F6 44 1D 0B 75 76 8B-04 0B F5 07 02 00 24 10  .vD..uv...u...$.
10F7:0170  3F 00 A0 FF 3B E1 06 62-78 00 F1 10 E5 07 00 00  ?. .;a.bx.q.e...
¿é¤J d «á¡A§A·|¬Ý¨ì¹q¸£¦C¥X¤@¤j°ï¤å¦r¡A¨Æ¹ê¤W³o¨Ç¤å¦r³£¬O¤Q¤»¶i¦ì¼Æ¦r¡ADEBUG ©ÒÅã¥Xªº¼Æ³£¥H¤Q¤»¶i¦ìªí¥Ü¡A¦pªG§A¤£À´¤Q¤»¶i¦ì¡A½Ð¬Ýªþ¿ý¤@¼Æ¦r¨t²Î¡C

¿Ã¹õ¤W¥i¤À¬°¤T³¡¥÷¡A³Ì¥ªÃä¬Oªí¥Ü¦ì§}¡A¤¤¶¡³¡¥÷ªí¥Ü°O¾ÐÅ餺®e¡A¦Ó³Ì¥kÃäªí¥Ü¸Ó°O¾ÐÅ餺®eªº ASCII ½X¡C

¦ì§}

¤°»ò¬O¡u¦ì§}¡v©O¡H§Ú­Ìª¾¹D¹q¸£­n°õ¦æµ{¦¡®É¡A»Ý­n§âµ{¦¡»P©Ò»Ý¸ê®Æ¸ü¤J°O¾ÐÅ餤¡A¤è¯à°õ¦æ¡C·í¹q¸£­nŪ¨ú¬Y¤@µ§¸ê®Æ®É¡A¥²¶·­nª¾¹D¨ºµ§¸ê®Æ¦ì©ó°O¾ÐÅé¦ó³B¡A²¦³º°O¾ÐÅé¬O¥H¤d¡B¦Ê¸U¬Æ¦Ü¤Q»õ ( §Y K¡BM ¬Æ¦Ü G ) ¨Ó­p¼Æªº¡C§Ú­Ì§â¨C­Ó°O¾ÐÅé¥H¤@­Ó¦ì¤¸²Õ¬°³æ¦ì¡A¥Ñ¹s¶}©l½s¸¹¡A¤@ª½¦V¤W©µ¦ù¨ì§Aªº¹q¸£¸Ë¦³ªº°O¾ÐÅé®e¶q¡C°²·Q§Aªº¹q¸£¸Ë¦³ 1MB ªº°O¾ÐÅé¡A¨º»ò¥i¥H§â¥¦·Q¦¨¨C­Ó°O¾ÐÅé¥u¯à¸Ë¤U¤@­Ó¦ì¤¸²Õ¡A¨Ã¥B¥Ñ¹s¶}©l¬°¨C­Ó°O¾ÐÅé½s¸¹¡A¤@ª½¨ì 1048575¡A¦@¦³ 1048576 ­Ó°O¾ÐÅé½s¸¹¡A¤]¥Nªí§Aªº¹q¸£¥i®e¯Ç 1048576 ­Ó¦ì¤¸²Õ ( ¦b°O¾ÐÅ餤 1K¡×1024¡A1M¡×1048576 )¡C³o¨Ç½s¸¹´N¦n¹³¦í¦vªº¦a§}¡A°²·Q¦³¤@±øµó¦³³\¦h¦í¦v¡A±q¹s¸¹¶}©l½sªùµP¸¹½X¡A¦ý¬O¨C­Ó¦í¦v¥u¯à¦í¤@¤H¡A¦]¦¹¶l®t­n»¼°e«H¥óµ¹¬Y¤H¡A¥u­nª¾¹DªùµP¸¹½X´N¥i§â«H¥ó°e¨ì¬Y¤H¤â¤¤¡C³oÀ³¸Ó¬O³Ì²z·Q¡B³Ì²³æªº¦ì§}ªí¥Ü¤è¦¡¤F¡A¹³³oºØªí¥Ü¤è¦¡ºÙ¡uµ´¹ï¦ì§}¡v©Î¡u¹êÅé¦ì§}¡v¡C

¦ý¤£©¯ªº¬O¡A·íªì 8086 ³]­p®É¡A¦³ 20 ®Ú¦ì§}½u¡A³Ì¦h¥i¥Hªí¥Ü 220 ­Ó½s¸¹ ( ¤@®Ú¦ì§}½u¥i¦³°ª¹qÀ£»P§C¹qÀ£¨âºØ¿ï¾Ü¡A¦]¦¹¥iªí¥Ü¨â­Ó¼Æ¡A0¡B1¡F¨â®Ú¦ì§}½u´N¦³¥|ºØ¿ï¾Ü¡A¥iªí¥Ü 4 ­Ó¼Æ¡K¡K¡A20 ®Ú¦ì§}½u¡A´N¥iªí¥Ü 220¡×1048576 )¡A´«¥y¸Ü»¡¡A8086 ¥i¥Hªí¥Ü 1048576 ­Ó°O¾ÐÅé½s¸¹¡A³N»y»¡ 8086 ¥i©w§} 1M ­Ó¦ì¤¸²Õ¡C¦ý¬O¡A8086 ¬O 16 ¦ì¤¸ªº CPU¡A¨ä¤º³¡¼È¦s¾¹¯àªí¥Üªº³Ì¤j¼Æ¬° 216 ( 216¡×65536 )¡A¥ç§Y 8086 ³Ì¦h¯àªí¥Üªº°O¾ÐÅé½s¸¹¥u¦³ 65536¡C¨º»ò­n¦p¦ó¥Î 16 ¦ì¤¸¥hªí¥Ü 20 ¦ì¤¸ªº¼Æ©O¡H

·íªì³]­pªÌ´N±Ä¥ÎÅܳ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 D ©R¥O«á¡A¥ªÃä©Ò¬Ý¨ìªº XXXX:YYYY ªº¼Ë¤l¡CXXXX ªí¥Ü°Ï¬q¡AYYYY ªí¥Ü°¾²¾¦ì§}¡A¥L¦b°O¾ÐÅ餤¯u¥¿ªº¦ì§}¬O XXXX*16+YYYY¡AÁ|¨Ò¨Ó»¡¡A10F7:0100 ³o­Ó¦ì§}À³¸Ó¬O 10F7¡]¦¹¬°16¶i¦ì¡^*16¡]¤Q¶i¦ì¡^¦A¥[¤W¤Q¤»¶i¦ìªº 100¡Aµ¥©ó 11070H¡C¥H¡u°Ï¬q¡G°¾²¾¦ì§}¡v³oºØ¤è¦¡ªí¥Ü¦ì§}ÁöµM¥i¥H±o¨ì¸û¤jªº¦ì§}¡A¦ý¬O¦P¦ì§}¡A¦³³\¦h¤£¦P¤è¦¡ªí¹F¡A¨Ò¦p 10F7:0100 ¥i¥H¬O 1107:0000¡A¤]¥i¥H¬O 10F0:0170¡A³o¨Ç³£¬O«ü¦P¤@¹êÅé¦ì§}¡C½Ð°Ñ¦Ò¤U¹Ï¡A¥ªÃ䪺¼Æ¦r¬O¹êÅé¦ì§}¡A¤¤¶¡ªº¬O¥Î°Ï¬q:°¾²¾ªí¥Üªº¦ì§}¡A¥kÃä«h¬O¸Ó¦ì§}°O¾ÐÅ骺¤º®e¡C

¨Ï¥Î³oºØ¡u°Ï¬q¡G°¾²¾¡vªº¤èªkªí¥Ü¦ì§}¡AÁÙ¦³¤@­Ó¯SÂI¡A¨º´N¬O­«Å|¡C¨C­Ó°Ï¬q³£¬O±q°¾²¾¦ì§} 0000 ¶}©l¡A¦ý¬O¦]¬°¦P¤@°O¾ÐÅé¦ì§}¥i¥H¦³³\¦hºØ¤£¦Pªº¡u°Ï¬q¡G°¾²¾¡vªí¥Üªk¡A¦]¦¹°Ï¬q»P°Ï¬q¦³®É·|¤¬¬Û­«Å|¡C¨Ò¦p¤W¹ÏùØ¡A¥Î DEBUG ¸ü¤J EXAM01.COM ®É¡AEXAM01.COM ¥Ñ 10F7:0000 ¶}©l¡A´«ºâ¦¨¹êÅé¦ì§}¬O 10F70¡A¦]¦¹¥Ñ 10F70¡ã20F6F ³£¬O³o­Ó°Ï¬qªº½d³ò¡F­Y¦³¤@­Ó°Ï¬q±q 1000:0000 ¶}©l¡A¨º»ò¨ä¹êÅé¦ì§}½d³ò¬O 10000¡ã1FFFF¡A©Ò¥H³o¨â­Ó°Ï¬q´N·|µo¥Í­«Å|¡C

Åý§Ú­Ì¦A¨Ó¬Ý¬Ý DEBUG ùØ¡A°õ¦æ¡uD¡v«ü¥Oªºµ²ªG¡G

10F7:0100  EB 17 90 48 69 2C 20 49-20 6C 65 61 72 6E 20 61  k..Hi, I learn a
10F7:0110  73 73 65 6D 62 6C 79 2E-24 BA 03 01 B4 09 CD 21  ssembly.$:..4.M!
10F7:0120  B8 00 4C CD 21 46 EA 89-56 EC 80 7C 1E 01 74 12  8.LM!Fj.Vl.|..t.

¥ª°¼¬O¡u°Ï¬q¡G°¾²¾¡v¦ì§}¡A¤¤¶¡©Òªí¥Üªº¬O°O¾ÐÅ餤ªº¤º®e¡A¹ï·Ó¤Wªí 10F7:0100 ªº¤º®e¬O EB¡A10F7:0101 ªº¤º®e¬O 17 µ¥µ¥¡A³o¨Ç³£¬O¤Q¤»¶i¦ì¼Æ¡C³Ì¥kÃä¬O°O¾ÐÅ餺®eªº ASCII ½X¡C§A¥i¥H¬dªí¹ï·Ó ASCII ½X 48h ¬Û·í©ó­^¤å¦rªº H¡B69h ¬Û·í­^¤å¦rªº i¡A­Y¶W¹L 7Fh ªº¼Æ¦r¡ADEBUG ¦Û°Ê±N³Ì°ª¦ì¤¸Åܦ¨ 0¡A¨Ò¦p 0EBh¡A´NÅܦ¨ 6Bh¡A´N¬O ASCII ªº k¡C¡]¦³Ãö ASCII ½Xªº»¡©ú½Ð°Ñ¦Ò²Ä¤T³¹¡A¦³Ãö ASCII ªº¦Cªí½Ð°Ñ¦Òªþ¿ý¥|¡^

D «ü¥O§¹¾ãªº¥Îªk¬O d [°_©l¦ì§}] [Lªø«×]¡C¨Ò¦p¦pªG§A¥u­nÆ[¹î 100h ¨ì 110h ªº°O¾ÐÅ餺®e¡A´N¥i¥H¿é¤J

d 100 L 10
¦¹³B¬°¤F¤è«K°Ï§O 1 »P L¡A¬G¥Î¤j¼gªº L¡A¹ê»Ú¨Ï¥Î®É¤j¤p¼g³£¬O¤@¼Ëªº¡C

D «ü¥O¤]¥i¥Hª½±µ«ü©w­nÅã¥Ü¥Ñ¨º¤@¦ì§}¨ì¨º¤@¦ì§}¡A¥Îªk¦p¤U¡G

d [°_©l¦ì§}] [µ²§ô¦ì§}]
°²¦p¹³²Ä¤@­Ó«ü¥O¨S¦³«ü©wªø«×¡A¤]¨S¦³µ²§ô¦ì§}¡A¶È¶È¿é¤J¤@­Ó d ¦Ó¤w¡ADEBUG ·|¦Û°ÊÅã¥Ü 80H ­Ó¦ì¤¸²Õªº¸ê®Æ´N°±¤î¤F¡C

Un-assembly «ü¥O

²{¦b½Ð§A¿é¤J u 119 ¸Õ¸Õ¬Ý¡G

-u 119 [Enter]
10F7:0119 BA0301         MOV    DX,0103
10F7:011C B409           MOV    AH,09
10F7:011E CD21           INT    21
10F7:0120 B8004C         MOV    AX,4C00
10F7:0123 CD21           INT    21
10F7:0125 1F             POP    DS
10F7:0126 BB0002         MOV    BX,0200
10F7:0129 81FB0002       CMP    BX,0200

§A·|µo²{³Ì¥kÃä¡A¦n¹³¸ò§Ú­Ì©Ò¼gªº­ì©lµ{¦¡Ãþ¦ü¡A¥u¬O¦³¨Ç¦a¤èÅܦ¨¤F¼Æ¦r¡C¨S¿ù¡Au ©R¥O´N¬O§â°O¾ÐÅ骺¤º®eÅܦ¨²Õ¦X»y¨¥¡A³o¨Ç°O¾ÐÅ餺®e¥i¯à¬O¸ê®Æ¡A¤]¥i¯à¬O¥i°õ¦æ½X¡C¹³³o¼Ë§â°O¾ÐÅ餺®e ( ´N¬OÃþ¦ü BA¡B03¡B01 µ¥¼Æ­È ) Åܦ¨²Õ¦X»y¨¥§U°O½Xªº¹Lµ{¡AºÙ¬°¡u¤Ï²ÕĶ¡v¡A¥¦¬O¯}¸Ñ©Ò¥²»Ýªº¹Lµ{¡C

¦Ó³Ì¥ªÃä¡A«Ü©úÅ㪺´N¬O¨C¤@­Ó«ü¥Oªº¦ì§}¡A¦Ó¤¤¶¡ªº´N¬O°O¾ÐÅ餺®e¡A¨ä¹ê³o´N¬O¾÷±ñ½X¡A©Î¤]¦³¤HºÙ¬°¾÷±ñ»y¨¥¡C¹q¸£¥u»{±o 0 »P 1 ²Õ¦¨ªº¼Æ¦r¡A¦b¹q¸£¤º³¡³£¬O³o¼Ëªº¼Æ¦r¡A¤£ºÞ¬O¸ê®Æ©Îµ{¦¡½X¡A¸g CPU °õ¦æ«á¤~¯à½T©w¨º¨Ç¬Oµ{¦¡½X¨º¨Ç¬O¸ê®Æ¡A³o¼Ëªº»y¨¥«ÜÃøÅý¤H¤@¥ØÁAµM¡A©ó¬O´Nµo©ú¤F²Õ¦X»y¨¥¨ÓÀ°§U°O¾Ð¡]§U°O½X¡^¡A³o¨Ç§U°O½X´N¬O³Ì¥kÃä¬Ý¨ìªºÃþ¦ü§Ú­Ì©Ò¼gªº²Õ¦X»y¨¥­ì©lµ{¦¡¡C

§A¥i¥H³o¼Ë·Q¡A²Õ¦X»y¨¥ªº¨C¤@±ø«ü¥O¡A³£¦³¤@­Ó©Î¼Æ­Ó¤Q¤»¶i¦ì¼Æ»P¤§°t¦X¡A¨Ò¦p BAh ´N¬Û·í©ó ¡umov dx,¡v¡BB4h ¬Û·í©ó¡umov ah,¡v¦ý¨C¤@­Ó«ü¥O©Ò¥Îªº¦ì¤¸²Õªø«×¤£¦P¡C

²{¦b½Ðª`·N¨ì¦ì§} 0119H¡B011AH¡B011BH ªº¤º®e¤À§O¬O BA¡B03¡B01¡A¡u½Ķ¡v¦¨²Õ¦X»y¨¥¬O MOV DX,0103¡Aª`·N¨ì¨S¦³¡A¦b§Ú­Ìªº²ßºD¤W 0103H¡A¼Æ¦r¤jªº 1 ¼g¦b¥ªÃä¡F¦ý¬O¦b DEBUG ¤º«o·Ó¦ì§}°ª§C±Æ¦C¡A01 ¼Æ¦r¤j©ó 03¡A©Ò¥H 01 ¦b°ª¦ì§}¡A¬G±Æ¦b¥kÃä¡C³oÂI­n½ÐŪªÌª`·N¡A¦b DEBUG ¤¤¡A¼Æ¦r¦ì¼Æ¤jªº¡A¦b°ª¦ì§}¡A±Æ¦b¥kÃä¡C¨ä¥L¹³¦ì§} 0120H¡B0126H¡B0129H ¤]³£Ãþ¦ü¡A¹³³oºØ±Æ¦C¤è¦¡ºÙ¤§¬° Little-Endian¡C¨Æ¹ê¤W¦b IBM PC ¤Î¨ä¬Û®e¹q¸£ªº CPU ³£¬O¥H Little-Endian ¤è¦¡Àx¦s¡A¤]´N¬O¸û¤£­«­nªº¦ì¤¸²Õ ( LSB ) ¦s©ñ©ó§C¦ì§}¡A³Ì­«­nªº¦ì¤¸²Õ ( MSB ) ¦s©ñ©ó°ª¦ì§} ( MSB ¬O Most Significant Bit/Byte ªºÁY¼g¡A³q±`Ķ¬°³Ì­«­nªº¦ì¤¸©ÎªÌ³Ì­«­nªº¦ì¤¸²Õ¡FLSB ¬O Least Significant Bit/Byte ªºÁY¼g¡A³q±`Ķ¬°³Ì¤£­«­nªº¦ì¤¸©Î³Ì¤£­«­nªº¦ì¤¸²Õ )¡C

¦b¡u10F7:0119¡v¦ì§}ªº«ü¥O¬O¡uMOV DX,0103¡v¡A¦pªG±z¹ï·Ó²Ä¤@³¹ªº exam01.asm ­ì©lµ{¦¡¡A´N·|µo²{¥»¨Ó¬O¼g¡umov dx,offset mes¡v¡A¦ý³Q²ÕĶ¤§«á¡AÅܦ¨¡uMOV DX,0103¡v¡C³o´N¬O OFFSET °²«ü¥Oªº¥\¯à¡A¥¦­pºâ¥X mes ¦ì§}¡A¦Ó§â¦¹¦ì§}·í¦¨¼Æ­È¡A¶ñ¤J DX ùØ¡C±z¥i¦A¹ï·Ó¤W­±¡uD¡v«ü¥Oªºµ²ªG¡Ames ¦r¦ê´N¬O¥Ñ¦ì§}¡u10F7:0103¡v¶}©l¡C

²{¦b½Ð§A¸Õ¸Õ u 100 120 ¬Ý¬Ý¡AÀ³¸Ó¦p¤U©Ò¥Ü¡G

-u 100 120 [Enter]
10F7:0100 EB17           JMP    0119
10F7:0102 90             NOP
10F7:0103 48             DEC    AX
10F7:0104 692C2049       IMUL   BP,[SI],4920
10F7:0108 206C65         AND    [SI+65],CH
10F7:010B 61             POPA
10F7:010C 726E           JB     017C
10F7:010E 206173         AND    [BX+DI+73],AH
10F7:0111 7365           JNB    0178
10F7:0113 6D             INSW
10F7:0114 626C79         BOUND  BP,[SI+79]
10F7:0117 2E24BA         AND    AL,BA
10F7:011A 0301           ADD    AX,CS:[BX+DI]
10F7:011C B409           MOV    AH,09
10F7:011E CD21           INT    21
10F7:0120 B8004C         MOV    AX,4C00

§A·|µo²{±q 0102¡ã011B¡B0125 ¥H«á³£¤£¬O§Ú­Ì©Ò¿é¤Jªºµ{¦¡¡A¦Ó¬O­n¦L¥Xªº¤å¦r¡uHi, I learn assembly.$¡v¥H¤Î¶Ã½X¡A¦ý¬O¤@¼Ë¥i¥H½Ķ¦¨µ{¦¡½X¡A©Ò¥H¦pªG CPU °õ¦æªº¦ì§} (CS:IP) ¤£¹ï¡A«Ü¥i¯à´N·|·í¾÷¡C(°õ¦æ¦ì§}µy«á»¡©ú)

¦A¬Ý¬Ý¦ì§} 0100H ¬O¤@­Ó¸õÅD«ü¥O¡A¨ä¹ê´N¬O EXAM01.COM µ{¦¡ªº²Ä¤@­Ó«ü¥O¡A¦Ó¦ì§} 011C ¨ä¹ê´N¬O¥Nªí begin ¼Ð°O¡C´«¥y¸Ü»¡¡ACOM µ{¦¡ÀɳQ¸ü¤J°O¾ÐÅé®É¡A¬O±q¦ì§} 100H ¶}©l©ñ¤Jªº¡A³o¤]´N¬O¼¶¼g COM µ{¦¡®É¬°¤°»ò­n¥[¤W org 100h¡C


Registor «ü¥O

¦¹«ü¥O¦³¨â­Ó¥\¥Î¡A¤@¬OÅã¥Ü©Ò¦³¼È¦s¾¹¡]¸Ô²Ó»¡©ú½Ð«ö³o¸Ì¡^¤ÎºX¼Ð¤º®e¡A¤G¬O­×§ï¼È¦s¾¹¤º®e¡C½Ð¸Õ¸Õ¬Ý¥u¿é¤J¡ur¡v¨ÓÅã¥Ü¼È¦s¾¹ªº¤º®e¡G
-r [Enter]
AX=0000  BX=0000  CX=0025  DX=0000  SP=FFFE  BP=0000  SI=0000  DI=0000
DS=10F7  ES=10F7  SS=10F7  CS=10F7  IP=0100   NV UP EI PL NZ NA PO NC
10F7:0100 EB19           JMP    0119

DEBUG ¦@Åã¥Ü¤T¦æ¡A³Ì©³¤U¤@¦æ´N¬O DEBUG ²{¦b±N°õ¦æ¦ý©|¥¼°õ¦æªº CPU «ü¥O¡A¥Lªº¦ì§}´N¬O CS:IP ©Ò«üªº¦ì§}¡ACPU ·|§â¥¿­n°õ¦æ©R¥Oªº¦ì§}¦s¤J CS:IP ¤¤¡A¦Ó¤@¶}©l¸ü¤J COM ÀɮɡAIP ¥²©w¬° 100H¡A¦Ó CS «h¤£¤@©w¡Aµø§A¶}¾÷®É¸ü¤JªºÅX°Êµ{¦¡¦h¹è¦Ó©w¡C

½Ð¤£­n¬°³o»ò¦h¼È¦s¾¹¾á¤ß¡A§Ú­Ì¤@¦¸¥u¤¶²Ð¤@¨â­Ó¡A²{¦b§A¥u­nª¾¹D CS¡BIP¡BAX¡BBX¡BCX¡BDX ´N¥i¥H¤F¡C«á­±¥|­Ó¡A§A¥i¥H§â¦o­Ì·Q¦¨¦b CPU ¤¤¼È®É¦s©ñ 16 ¦ì¤¸¸ê®Æªº¦a¤è¡A¦Ó¨C¤@­Ó¤S¥i¥H¤À¦¨°ª¦ì¤¸ªº©M§C¦ì¤¸ªº¨â­Ó¼È¦s¾¹¡C¨Ò¦p AX ¥i¥H¤À¦¨¸û°ªªº 8 ¦ì¤¸ AH ©M¸û§Cªº 8 ¦ì¤¸ AL ¨â­Ó¼È¦s¾¹¡C¦p¤U¹Ï

¦pªG§A·Q­×§ï¼È¦s¾¹¤º®e¡A¥u­n¦b r «á­±¿é¤J¼È¦s¾¹¦WºÙ´N¥i¥H¤F¡Ar ©M¼È¦s¾¹¦W¤§¶¡¦³¨S¦³ªÅ¥Õ³£µLÃöºò­n¡C( ¦b DEBUG ùØ¡A­n­×§ï¼È¦s¾¹¤§¼Æ­È¡A¥u¯à­×§ï AX¡BBX¡BCX¡Kµ¥ 16 ¦ì¤¸¼È¦s¾¹ªº¼Æ­È¡AµLªk­×§ï AL¡BAH µ¥ 8 ¦ì¤¸ªº¼Æ­È¡A§Úªº·N«ä¬O¡A±zµLªk¿é¤J

rah

­×§ï AH ¼È¦s¾¹ªº¼Æ­È¡A¦ý¬O±z¥i¥H¥Î

rax

­×§ï AX ¼È¦s¾¹ªº¼Æ­È¡C)


Trace «ü¥O

³o¬O°lÂÜ«ü¥O¡A¨C¿é¤J¤@­Ó t «á¡ADEBUG ´N°õ¦æ¤@­Ó«ü¥O¡AµM«á°±¤U¨ÓÅã¥Ü©Ò¦³¼È¦s¾¹¤§¤º®e¡C²{¦b½Ð¥ý¿é¤J¡ur¡v«ü¥O¡AÆ[¹î¼È¦s¾¹«á¡A¦A¿é¤J¤@­Ó¡ut¡v«ü¥O¸Õ¸Õ¬Ý¡G

-r [Enter]
AX=0000  BX=0000  CX=0025  DX=0000  SP=FFFE  BP=0000  SI=0000  DI=0000
DS=10F7  ES=10F7  SS=10F7  CS=10F7  IP=0100   NV UP EI PL NZ NA PO NC
10F7:0100 EB17           JMP    0119
-t [Enter]
AX=0000  BX=0000  CX=0025  DX=0000  SP=FFFE  BP=0000  SI=0000  DI=0000
DS=10F7  ES=10F7  SS=10F7  CS=10F7  IP=0119   NV UP EI PL NZ NA PO NC
10F7:0119 BA0301         MOV    DX,0103

¬O¤£¬O¸õ¨ì 0119 ·Ç³Æ°õ¦æ¤U¤@«ü¥O¡HCS:IP ¤]«ü¦V 10F7:0119 ¤F¡C­ì¨Ó 80X86 CPU ¬O¥H CS:IP ( ÁÙ°O±o«e­±»¡¥H XXXX:YYYY ªí¥Ü¦ì§}§a¡H ) «ü¦V¥¿­n°õ¦æªº«ü¥O¡ACS ¼È¦s¾¹¬Oµ{¦¡½Xªº°Ï¬q¼È¦s¾¹ ( code segment register )¡A¦Ó IP ¼È¦s¾¹ºÙ¬°«ü¥O«ü¼Ð¼È¦s¾¹ ( instruction pointer )¡C­ì¨Ó·í CPU ­n°õ¦æµ{¦¡®É¡A¥²¶·¥ý¨ì°O¾ÐÅé¥h´£¨ú­n°õ¦æªº«ü¥O¡A¦ý¬O­n¨ì¨º¤@­Ó°O¾ÐÅé¦ì§}¥h´£¨ú«ü¥O©O¡H³o®É CPU ´N·|¹î¬Ý CS:IP «ü¨ì¨º¤@­Ó¦ì§}¡AµM«á¨ì¸Ó¦ì§}´£¨ú«ü¥O¡A·í¸Ó«ü¥O°õ¦æ§¹²¦«á¡ACS:IP ¤S·|§}¦V¤U¤@­Ó«ü¥Oªº¦ì§}¡A©ó¬O CPU ´N¦A«×­«½Æ¤W­z¹Lµ{¡A¦p¦¹¦£¸L¤£°±¦a¤u§@¡C²{¦b¡A¦A³sÄò¿é¤J¨â­Ó t ¬Ý¬Ý¡G

-t [Enter]
AX=0000  BX=0000  CX=0025  DX=0103  SP=FFFE  BP=0000  SI=0000  DI=0000
DS=10F7  ES=10F7  SS=10F7  CS=10F7  IP=011C   NV UP EI PL NZ NA PO NC
10F7:011C B409           MOV    AH,09
-t [Enter]
AX=0900  BX=0000  CX=0025  DX=0103  SP=FFFE  BP=0000  SI=0000  DI=0000
DS=10F7  ES=10F7  SS=10F7  CS=10F7  IP=011E   NV UP EI PL NZ NA PO NC
10F7:011E CD21           INT    21

±zÀ³·í¥i¥H¬Ý¨£¨C¦¸°õ¦æ§¹¤@±ø«ü¥O«á¡ACS:IP «K·|§ïÅÜ¡A¦P®É¤]·|§â°õ¦æµ²ªGÅã¥Ü¥X¨Ó¡A¥H¦¹¨Ò¨Ó»¡¡AAH¡BDX ¬O¤£¬O³£Åܦ¨§Ú­Ì¹w­pªº¼Æ­È¡H


Go «ü¥O

G ¬O°õ¦æµ{¦¡¨ìµ²§ô¡A·í§A½T©wµ{¦¡¦b¬Y¦ì§}«e³£¨S¦³¿ù»~¡A¨º§A¥i¥Hª½±µ¿é¤J
-g µ²§ô¦ì§}
²{¦b°õ¦æ¨ì 10F7:011E ¤F¡A±µ¤U¨Ó¬O¤@­Ó DOS ¤¤Â_ªA°Èµ{¦¡¡A§Ú·Q³o¸Ì­±À³¸Ó¤£·|¦³¿ù»~¡A¦]¬°³o¬O·L³n¼gªº¡A¸g¹L³\¦h¦¸ÀËÅç¡A¦]¦¹¨S¥²­n°lÂÜ¡Aª½±µ¿é¤J¡G(·íµM¥H«á¤]¥i¥H¥Î¨Ó¬ã¨s¤¤Â_µ{¦¡«ç»ò¼gªº)
-g 120 [Enter]
Hi, I learn assembly.
AX=0924  BX=0000  CX=0025  DX=0103  SP=FFFE  BP=0000  SI=0000  DI=0000
DS=10F7  ES=10F7  SS=10F7  CS=10F7  IP=0120   NV UP EI PL NZ NA PO NC
10F7:0120 B8004C        MOV     AX,4C00

¹q¸£¬O¤£¬O¨Ì AH/DX ªº¤º®e¦L¥X¡§Hi, I learn assembly.¡¨¦r¦ê¨Ó¤F¡A¦P®É¨Ï CS:IP «ü¦V¤U¤@­Ó«ü¥O¡C²{¦b¦A¿é¤J¶È¶È¤@­Ó g ¸Õ¸Õ¬Ý¡G

-g [Enter]
Program terminated normally
¦pªG¥u¿é¤J¤@­Ó g ªº¸Ü¡A´N·|¤@ª½°õ¦æ¨ìµ²§ô¡A¨Ã¦L¥X¥¿±`µ²§ôµ{¦¡ªº¦r¼Ë¡C

§A¤]¥i¥H¿é¤J¥Ñ¨º¤@­Ó¦ì§}¶}©l°õ¦æ¡A³o®É¿é¤J

-g=°_©l¦ì§}


Quit «ü¥O

³o¬Oµ²§ô DEBUG ªº«ü¥O¡A¿é¤J q¡ADEBUG ´N·|±N±±¨îÅv¥æ¦^µ¹ DOS¡C
-q [Enter]
E:\HomePage\SOURCE>

Edit «ü¥O

³o¬O­×§ï°O¾ÐÅ餺®eªº«ü¥O¡A¥ý¶i¤J DOS ¼Ò¦¡¡A¦A¸Õ¸Õ¬Ý¥H¤U¾Þ§@¡G

C:\WINDOWS\COMMAND>debug [Enter]
-d 100 L20 [Enter]
146F:0100  65 20 68 69 67 68 20 6D-41 6D 6F 72 79 20 61 72   e high mAmory ar
146F:0110  65 61 2E 0D 0A 22 4D 6F-64 75 6C 65 34 00 5E 14   ea..."Module4.^.
-e 107 [Enter]
146F:0107  6D.41 [Enter]
ª`·N¡I¿é¤J 41 «á¡A¦³¨âºØ¿ï¾Ü¡A¦pªG¤£­n­×§ï¤U¤@¦ì§}ªº¤º®e¡A­n«ö Enter Áäµ²§ô e «ü¥O¡F¦pªG­n­×§ïªº¸Ü¡A´N«öªÅ¥ÕÁä¡ADEBUG ·|¦Û°Ê¦L¥X­ì¨Ó¤º®e¡Aµ¥«Ý§A¼Æ·s­È¡C§Ú­Ì«öªÅ¥ÕÁä¡A¦A¿é¤J 42 ¸Õ¸Õ¡A
C:\WINDOWS\COMMAND>debug [Enter]
-d 100 L20 [Enter]
146F:0100  65 20 68 69 67 68 20 6D-41 6D 6F 72 79 20 61 72   e high mAmory ar
146F:0110  65 61 2E 0D 0A 22 4D 6F-64 75 6C 65 34 00 5E 14   ea..."Module4.^.
-e 107 [Enter]
146F:0107  6D.41 [Space]
146F:0108  41.42 [Space]   6D.43 [Enter]
¿é¤J 41 «á«öªÅ¥ÕÁä´N·|¥X²{¿é¤J¤U¤@¦ì§}ªº´£¥Ü¡A¦A¿é¤J42 ¡AµM«á¦A«öªÅ¥ÕÁä¨Ã¿é¤J 43¡C¿é¤J 43 «á¡A¦A«ö Enter Áäµ²§ô e «ü¥O¡CÅã¥Ü°O¾ÐÅ餺®e¬Ý¬Ý¡G
-d 100 L10 [Enter]
146F:0100  65 20 68 69 67 68 20 41-42 43 6F 72 79 20 61 72   e high ABCory ar
-q [Enter]

C:\WINDOWS\COMMAND>
¬õ¦âªº³¡¤À´N¬O§Ú­Ì­×§ïªº¦a¤è¡C

Assemble «ü¥O

³o­Ó«ü¥O¬O¥i¥HÅý DEBUG ¼g²³æªº²Õ¦X»y¨¥µ{¦¡¡A¦ý¬O©Ò¦³¼Æ¦r³£±o¥Î¤Q¤»¶i¦ìªí¥Ü¡A¥B©Ò¦³¼Ð°O¤]³£±o¥Î¦ì§}ªí¥Ü¡C¥Îªk¦p¤U¡G
a [¦ì§}]

³o¼Ë±z´N¥i¥H¦b¿é¤Jªº¦ì§}ª½±µ¿é¤J X86 «ü¥O¡A¦ý¬OµLªk¨Ï¥Î¼Ð°O©ÎÅܼƦW¡A³£­n¥Î¦ì§}ªí¥Ü¡C©³¤U¬O¥Î¡ua¡v«ü¥O¼g¤@­Ó¦b¿Ã¹õ¤W¦L¥X¡uABCD¡vªº¤pµ{¦¡¡G

E:\HomePage\SOURCE>debug [Enter]
-a 100 [Enter]
128A:0100 mov   ah,9 [Enter]
128A:0102 mov   dx,200 [Enter]
128A:0105 int   21 [Enter]
128A:0107 mov   ah,4c [Enter]
128A:0109 int   21 [Enter]
128A:010B [Enter]
-e 200 [Enter]
128A:0200  00.41   00.42   00.43   00.44   24.24 [Enter]
¡÷¨C¿é§¹¤@­Ó ASCII ½X«á¡A«ö [SPACE] Áä¿é¤J¤U¤@­Ó
AX=0900  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=128A  ES=128A  SS=128A  CS=128A  IP=0102   NV UP EI PL NZ NA PO NC
128A:0102 BA0002        MOV     DX,0200
-g [Enter]
ABCD

Name «ü¥O

³o­Ó«ü¥O¬O«ü©wÀɦW¡A¦ý¬O¶È¤î©ó«ü©wÀɦW¦Ó¤w¨Ã¤£·|¸ü¤J©Î¦s¤JÀɮסC¨ä»yªk¬O

N [¸ô®|¦W]ÀɦW

¦pªGÀɦW¿ù»~ªº¸Ü¡A³o­Ó«ü¥O¤]¤£·|´£¥X¿ù»~°T®§¡A­n¨ì¹ê»Ú¸ü¤J®É¤~·|³qª¾±z¡C

Load «ü¥O

³o­Ó«ü¥O¬O¨Ï DEBUG ¸ü¤JºÏ°Ï (sector) ªº¸ê®Æ©Î¸ü¤JÀɮסC¦pªG­n¸ü¤JºÏ°Ï¡A»yªk¬O

L  ¸ü¤J¦ì§}  ºÏºÐ¾÷¦W  °_©lºÏ°Ï  ¸ü¤JºÏ°Ï¼Æ

¸ü¤J¦ì§}¬O«ü±qºÏºÐ¤WŪ¨úªº¸ê®Æ·|³Q DEBUG ©ñ¦b³o­Ó¦ì§}¡A¥Î XXXX:YYYY ªí¥Ü¡A¦pªG°Ï¬q¦ì§}¬Ù²¤¡A«h¦Û°Ê¥Î DS ¥N´À¡CºÏºÐ¾÷¦Wªº¥Îªk¬O A: ºÏºÐ¾÷¥Î 0¡AB: ºÏºÐ¾÷¥Î 1¡AC: ºÏºÐ¾÷¥Î 2¡A¨Ì¦¹Ãþ±À¡C³o¸ÌªººÏ°Ï¬O«üÅÞ¿èºÏ°Ï¡A°Ñ¦Ò²Ä¤Q¤K³¹¡C¨Ò¦p­n¸ü¤JµwºÐ C: ªº±Ò°ÊºÏ°Ï¨ì DS:0100 ¦ì§}¡A¥i¥H¥Î

-L 100 2 0 1 [Enter]

¦pªG­n¸ü¤J¤@­ÓÀɮתº¸Ü¡A¥²¶·¥ý¥Î N «ü¥O¥ý«ü©wÀɦW¡A¦A¥Î L «ü¥O¸ü¤J¡A»yªk¬°

L  [¸ü¤J¦ì§}]

§Y¥i¡A¦pªG¸ü¤J¦ì§}¬Ù²¤¡A·|¦Û°Ê±NÀɮצs©ñ¦b DS:0100 ³B¡A¦P®É CX ¤§¼Æ­Èªí¥ÜÀɮתø«×¡C¦ý¬O¦pªG±z¸ü¤Jªº¬O¥i°õ¦æÀÉ EXE ªº¸Ü¡ADEBUG ·|±N EXE ªº¤º®e¦Û°Ê¤À°t¦n¡A¤]´N¬O¸ü¤J«á CS «ü¦V EXE ªºµ{¦¡½X°Ï¬q¡ADS «ü¦V¸ê®Æ¬q¡K¡K(¨£²Ä¤Q¤@³¹)¡C

¨ä¥L«ü¥O

ÁÙ¦³¤@¨Ç DEBUG «ü¥O¡A½Ð°Ñ¦Ò DOS ¨Ï¥Î¤â¥U¡C

µ²½×

³o¤@³¹¸Ì¤¶²Ð´X­Ó±`¥Îªº DEBUG «ü¥O¡A¦ý¨Æ¹ê¤WÁÙ¦³³\¦h«ü¥O§Ú¨S¦³¤¶²Ð¡A¤@¨Ó¬O¸û¤Ö¨Ï¥Î¡A¤G¨Ó¤£·Q¤@¤U¤l´NÁ¿¤F¤Ó¦h¥Î¤£µÛªº¦Ó¨Ï¤H·d¤£²M·¡¡C¦]¦¹³Ì¦n¯à¦³¤@¥»®Ñ(¥h¹Ï®ÑÀ]­É DOS ¨Ï¥Î¤â¥U¤§Ãþªº®Ñ§a¡C)¦b®Ç¤~¦n¡C±z¤]¥i¥H¦b DEBUG ªº¡u-¡v´£¥Ü²Å¸¹¤U¿é¤J¡u?¡v±o¨ì²­nªº»¡©ú¡C

¦¹¥~·L³nÁÙ¥X¤F¤@­Ó¸û¬°±j®«ªº°£¿ù¾¹¡ASYMDEB.EXE¡AºÙ¬°²Å¸¹°£¿ù¾¹¡A½Ð«ö³o¸Ì¬Ý¬Ý¡C


¦^¨ì­º­¶¡A ¨ì²Ä¤@³¹¡A ¨ì²Ä¤T³¹