Ch 13¡@¦r¦ê¡]¤G¡^

³o¤@³¹±µ³o¤W¤@³¹³B²z¦r¦êªº«ü¥O¡A½Í¤@½Í³Ñ¤Uªº³B²z¦r¦êªº«ü¥O¡GSCASB¡BSTOSB¡BLODSB¡C


±½´y¦r¦ê

SCASB «ü¥O

SCASB ¬O scan string byte¡A½¦¨¤¤¤å´N¬O¥H¦ì¤¸²Õ¤è¦¡±½´y¦r¦ê¡A·N«ä´N¬O¦b¬Y­Ó¦r¦ê¤¤±½´y¡A¬Ý¬Ý¬O§_¦³«ü©wªº¦ì¤¸²Õ¡C«ü©wªº¦ì¤¸²Õ¥²¶·¬O©ñ¦b AL ¼È¦s¾¹ùØ¡A³Q±½´y¦r¦êªº¦ì§}©ñ¦b ES:DI¡C¦pªG¶È¶È¬O SCASB «ü¥O¡A¨ä¹ê´N¬O§â AL ©M¬Y­Ó°O¾ÐÅé¤ñ¸û¡A¦P®É¨Ï DI ¼W©Î´î¤@¡A¨S¤°»ò¯S§O¡C

¤£¹L¡ASCASB ³q±`·|·f°t REPE ©Î REPNE ¨Ï¥Î¡A¥ç§Y¡uREPE SCASB¡v©Î¡uREPNE SCASB¡v¡A³o¼Ë´N¯à­«½Æ±½´y¡C­«½Æªº¦¸¼Æ©ñ¦b CX ¼È¦s¾¹ùØ¡A¨C±½´y¤@¦¸¡ACX ·|´î¤@¡ADI ·|¦Û°Ê«ü¦V¤U¤@­Ó¦ì§}¡C¤U¤@­Ó¦ì§}¬O¨Ì¾Ú¤è¦VºX¼Ð¨M©wªº¡A¦pªG¤è¦VºX¼Ð¬° UP¡A¨º»ò DI ¼W¥[¤@¡F­Y¤è¦VºX¼Ð¬° DN¡ADI ´î¤Ö¤@¡C


REPE SCASB

REPE ¬O repeat while equal ªº·N«ä¡A¦]¦¹ REPE SCASB ªº·N«ä¬O·í¬Ûµ¥®É¡A­«½Æ±½´y¡C«e­±´£¹L¡ACPU ¤ñ¸û¨â¹Bºâ¤¸¬O¥Î´îªk¤ñ¸û¡A¦pªG¬Û¦P©Ò±oµ²ªG·|¬O¹s¡A©Ò¥H REPE ¤]¥i¥H¼g¦¨ REPZ¡A³oùتº Z ´N¬O¹sªº·N«ä¡C

REPE SCASB ¬O·í¬Ûµ¥¡A´N­«½Æ±½´y¡C¤Ï¹L¨Ó»¡¡A¦pªG AL »P ES:DI ©Ò«ü¦ì§}ªº¤º®e¤£¦P®É¡A´N°±¤î±½´y¡A³o®É­Ô¹s­ÈºX¼Ð·|³Q³]¬°¡uNZ¡v¡A³o·íµM¬O¦]¬°±½´yµ²ªG¤£¦P¡CÁÙ¦³¤@ºØ±¡§Î¤]·|°±¤î±½´y¡A´N¬O CX Åܬ°¹sªº®É­Ô¡A³o®É­Ô¹s­ÈºX¼Ð·|¬O¡uZR¡v¡A³o¬O¦]¬°¥u¦³±½´y«á¥þ³¡¤@¼Ë¡A¤~µ²§ô±½´yÅý CX Åܹs¡A¬JµM¬Û¦P¡A¹s­ÈºX¼Ð´N¬O¡uZR¡v¡C¥Î SYMDEB ¨Ó¸Õ¸Õ¬Ý REPE SCASB¡G

E:\>C:\TOOLS\SYMDEB [Enter]
Microsoft (R) Symbolic Debug Utility  Version 4.00
Copyright (C) Microsoft Corp 1984, 1985.  All rights reserved.

Processor is [80286]
-e 120 "11122223" [Enter] ¡÷­n±½´yªº¦r¦ê¦b ES:0120 ¶}©lªº¤K­Ó¦ì¤¸²Õ
-a [Enter]
20C5:0100 mov cx,8 [Enter]
20C5:0103 mov di,120 [Enter]
20C5:0106 mov al,31 [Enter]
20C5:0108 repe scasb [Enter]
20C5:010A [Enter]

°õ¦æ DEBUG/SYMDEB ®É¡A¦pªG¤£°£¿ù¡A¨º»ò¤@¶i¤J DEBUG/SYMDEB ®É¡A¥|­Ó°Ï¬q¼È¦s¾¹³£¬Û¦P¡A¦]¦¹¤W­±¨Ã¨S¦³³]©w ES¡C©³¤U¥ý¥Î¡ur¡v«ü¥O¡A¬Ý¬Ý¼È¦s¾¹¤Î±N°õ¦æªº«ü¥O¡Aª`·N¨ì­è­è´£¨ìªº¥|­Ó°Ï¬q¼È¦s¾¹·í¬Û¦P ( ¥Î¥Õ¦âªº¦rªí¥Ü)¡A¦P®É¤]ª`·N¨ì¤è¦VºX¼Ð¬O¡uUP¡v( ¬õ¦â¦r )¡C

-r [Enter]
AX=0000  BX=0000  CX=0000  DX=0000  SP=DE2A  BP=0000  SI=0000  DI=0000
DS=20C5  ES=20C5  SS=20C5  CS=20C5  IP=0100   NV UP EI PL NZ NA PO NC
20C5:0100 B90800         MOV    CX,0008
-t [Enter]
AX=0000  BX=0000  CX=0008  DX=0000  SP=DE2A  BP=0000  SI=0000  DI=0000
DS=20C5  ES=20C5  SS=20C5  CS=20C5  IP=0103   NV UP EI PL NZ NA PO NC
20C5:0103 BF2001         MOV    DI,0120
-t [Enter]
AX=0000  BX=0000  CX=0008  DX=0000  SP=DE2A  BP=0000  SI=0000  DI=0120
DS=20C5  ES=20C5  SS=20C5  CS=20C5  IP=0106   NV UP EI PL NZ NA PO NC
20C5:0106 B031           MOV    AL,31                         ;'1'
-t [Enter]
AX=0031  BX=0000  CX=0008  DX=0000  SP=DE2A  BP=0000  SI=0000  DI=0120
DS=20C5  ES=20C5  SS=20C5  CS=20C5  IP=0108   NV UP EI PL NZ NA PO NC
20C5:0108 F3             REPZ
20C5:0109 AE             SCASB

¤W­±¤w°õ¦æ¤T­Ó¡ut¡v«ü¥O¡A¦b¯u¥¿°õ¦æ¡uREPE SCASB¡v¤§«e¡A¥ý¨ÓÆ[¹î­n±½´yªº¦r¦ê¡A¦p¤U­±¡A·Ó±Àºâ¡AÀ³¸Ó·|±½´y¨ì ES:0123 ¦ì§}´N°±¤U¨Ó¡G

-d 120 l10 [Enter]
20C5:0120  31 31 31 32 32 32 32 33-00 00 00 00 00 00 00 00  11122223........

©³¤U°õ¦æ¡ut¡v«ü¥O¡A¨Ï CPU °õ¦æ¡uREPE SCASB¡v«á¡A¦AÆ[¹î³Q±½´yªº¦r¦ê¡G

-t [Enter]
AX=0031  BX=0000  CX=0004  DX=0000  SP=DE2A  BP=0000  SI=0000  DI=0124
DS=20C5  ES=20C5  SS=20C5  CS=20C5  IP=010A   NV UP EI NG NZ AC PE CY
20C5:010A 0000           ADD    [BX+SI],AL                         DS:0000=CD
-d 120 l10 [Enter]
20C5:0120  31 31 31 32 32 32 32 33-00 00 00 00 00 00 00 00  11122223........

ª`·N¨ì¡A¡uREPE SCASB¡v¬O·í CPU ¥Î AL ¥h±½´yªº¦r¦ê¤ºªº¦U¦ì¤¸²Õ¡A¦pªG¬Û¦P´N­«½Æ¡C·í²Ä¤@­Ó¤£¦P®É´N°±¤î±½´y¡A¦¹¨è DI ©Ò«üªº¦ì§}¡A¥H¥Õ¦â¼Ð¥Ü¥X¡A¨Ã¤£¬O²Ä¤@­Ó¤£¦Pªº¦ì§}¡A¦Ó¬O¤U¤@­Ó¡C³o·íµM¬O±½´y«á CPU ¤~ª¾¹D¤£¦P¡A¦ý¦¹¨è DI ¤w¸g«ü¦V¤U¤@­Ó¦ì§}¤F¡C¦ý¬O§Ú­Ì¦pªG­n¨ú±o²Ä¤@­Ó¤£¦Pªº¦ì§}¡A¥u­n±N DI ´î¥h¤@§Y¥i¡C¦P¼Ë CX ¬O©|¥¼±½´yªº¦ì¤¸²Õ­Ó¼Æ¡A¨Ã¤£¬O¤£¦Pªº¦ì¤¸²Õ­Ó¼Æ¡C


REPNE SCASB

REPNE ¬O repeat while not equal ªº·N«ä¡A¤]¥i¥H¼g¦¨ REPNZ¡CPEPNE SCASB ªº·N«ä¬O·í¤£¬Ûµ¥®É¡A­«½Æ±½´y¡C¤Ï¹L¨Ó»¡¡A¦pªG AL »P ES:DI ©Ò«ü¦ì§}ªº¤º®e¤@¼Ë®É¡A´N°±¤î±½´y¡CÁÙ¦³¤@ºØ±¡§Î¤]·|°±¤î±½´y¡A´N¬O CX Åܬ°¹sªº®É­Ô¡C¬°¤FÆ[¹î REPNE SCASB °õ¦æ±¡§Î¡A§Ú­Ì§â¤W­±µ{¦¡½Xµy·L§ï¤@¤U¡A¤@¬O§ï IP Åܬ° 100¡A§â 20C5:0108 §ï¦¨¡urepne scasb¡v¡A¦p¤U¡G

-a 108 [Enter]
20C5:0108 repne scasb [Enter]
20C5:010A [Enter]
-r ip 100 [Enter]

µM«á°õ¦æ¤T¦¸¡ut¡v«ü¥O¡G

-t [Enter]
AX=0031  BX=0000  CX=0008  DX=0000  SP=DE2A  BP=0000  SI=0000  DI=0124
DS=20C5  ES=20C5  SS=20C5  CS=20C5  IP=0103   NV UP EI PL NZ AC PE CY
20C5:0103 BF2001         MOV    DI,0120
-t [Enter]
AX=0000  BX=0000  CX=0008  DX=0000  SP=DE2A  BP=0000  SI=0000  DI=0120
DS=20C5  ES=20C5  SS=20C5  CS=20C5  IP=0106   NV UP EI PL NZ AC PE CY
20C5:0106 B031           MOV    AL,31                         ;'1'
-t [Enter]
AX=0031  BX=0000  CX=0008  DX=0000  SP=DE2A  BP=0000  SI=0000  DI=0120
DS=20C5  ES=20C5  SS=20C5  CS=20C5  IP=0108   NV UP EI PL NZ AC PE CY
20C5:0108 F2             REPNZ
20C5:0109 AE             SCASB

±µ¤U¨Ó­n¯u¥¿°õ¦æ REPNE SCASB ¤F¡A¤U¹F¡ut¡v«ü¥O¡G

-t [Enter]
AX=0031  BX=0000  CX=0007  DX=0000  SP=DE2A  BP=0000  SI=0000  DI=0121
DS=20C5  ES=20C5  SS=20C5  CS=20C5  IP=010A   NV UP EI NG ZR AC PE CY
20C5:010A 0000           ADD    [BX+SI],AL                         DS:0000=CD
-

REPNE SCASB ¥u±½´y²Ä¤@­Ó¦ì¤¸²Õ´N°±¤î¤F¡A¦]¬°¦r¦êªº²Ä¤@­Ó¦ì¤¸²Õ´N©M AL ¬Û¦P¡A¤]¦]¬°¬Û¦P¡A¬G¹s­ÈºX¼Ð³Q³]¬°¡uZR¡v¡A¨£¤W­±¥Õ¦âªº¦r¡C

SCASB ¤pµ²

SCASB ±`»P REPE ©Î REPNE ·f°t¨Ï¥Î¡CREPE SCASB ¬O±½´yµo²{¤£¦P´N°±¤î¡AREPNE SCASB ¬O±½´yµo²{¬Û¦P´N°±¤î¡C¦pªG­n¦b¤@¤jµ§¸ê®Æµo²{»P AL ¤£¦Pªº¡A­n¥Î REPE SCASB¡F¦b¤@¤jµ§¸ê®Æ§ä¨ì»P AL ¬Û¦Pªº¡A¥Î REPNE SCASB¡C«Ü©úÅã¡AREPNE SCASB ¤ñ¸û±`¥Î¡C

SCASW¡BSCASD¡BSCASQ

³o¤T­Ó«ü¥O©M SCASB Ãþ¦ü¡A¤]¯à·f°t REPE ©Î REPNE ¨Ï¥Î¡C®t§O¬O¦b¡ASCASW ¬O¦b¤@¦r¦ê¤¤±½´y¬O§_¦³¯S©wªº¦r²Õ¡A¦¹¯S©wªº¦r²Õ¦s©ó AX ùØ¡FSCASD «h¬O±½´y¬O§_¦³¯S©wªºÂù¦r²Õ¡A¦¹Âù¦r²Õ©ñ¦b EAX¡FSCASQ «h¬O±½´y¬O§_¦³¯S©wªºÂù¦r²Õ¡A¦¹Âù¦r²Õ©ñ¦b RAX¡CSCASQ ¥u¯à¥Î¦b x64 µ¥¯Åªº CPU¡C

¦b¤Q¤»¦ì¤¸ªº¨t²Î¤¤¡A³Q±½´yªº¦r¦ê©ñ¦b ES:DI ©Ò«ü¦ì§}¤¤¡A­«½Æ¦¸¼Æ©ñ¦b CX¡F¤T¤Q¤G¦ì¤¸ªº¨t²Î¤¤¡A«h©ñ¦b EDI ©Ò«ü¦ì§}¡A­«½Æ¦¸¼Æ©ñ¦b ECX¡F¤»¤Q¥|¦ì¤¸¤¤¡A«h©ñ¦b RDI ©Ò«üªº¦ì§}¡A­«½Æ¦¸¼Æ©ñ¦b RCX¡C


Àx¦s¦r¦ê

STOSB «ü¥O

STOSB ¬O store string byte¡A½¦¨¤¤¤å¬O§â AL ùتº¸ê®Æ¦s¤J ES:DI ©Ò«üªº°O¾ÐÅ餺¡A¦P®É¨Ì¾Ú¤è¦VºX¼Ð¨Ï DI ¼W´î¤@¡CSTOSB ¤]¥i¥H·f°t REP «ü¥O¡A³o¼Ëªº¸Ü´N·|­«½ÆÀx¦s AL ¤ºªº¸ê®Æ¡A¦Ó¨Ï¤@¶ô°O¾ÐÅ骺¤º®e³£Åܦ¨¸ò AL ¤ºªº¸ê®Æ¤@¼Ë¡A¦b²M°£°O¾ÐÅ餺ªº¸ê®Æ®É«Ü¦³¥Î¡C

·f°t REP ¨Ï¥Î®É¡A­«½Æ¦¸¼Æ¨Ìµ{¦¡¬O´X¦ì¤¸¦Ó¦³©Ò¤£¦P¡A¤Q¤»¦ì¤¸¡B¤T¤Q¤G¦ì¤¸¡B¤»¤Q¥|¦ì¤¸ªºµ{¦¡¡A­«½Æ¦¸¼Æ¤À§O©ñ¦b CX¡BECX¡BRCX ¼È¦s¾¹ùØ¡A¦Ó¥Øªº¦r¦êªº¦ì§}«h¤À§O©ñ¦b ES:DI¡BEDI¡BRDI ùØ¡C


STOSW/STOSD/STOSQ «ü¥O

³o¤T­Ó«ü¥O¡A¸ò STOSB «ÜÃþ¦ü¡A®t§O¦b©ó¥¦­Ì¤@¦¸¤À§OÀx¦s¤@­Ó¦r²Õ¡B¤@­ÓÂù¦r²Õ¡B¤@­Ó¥|¦r²Õ¡A¦P®É¤]¨Ï¥Øªº¯Á¤Þ¼È¦s¾¹¤À§O¼W´î¤G¡B¥|¡B¤K­Ó¦ì¤¸²Õ¡C¦P¼Ëªº¡A³o¤T­Ó«ü¥O¤]¯à·f°t REP ¨Ï¥Î¡A­«½Æ¦¸¼Æ´N©ñ¦b­p¼Æ¼È¦s¾¹ùØ¡C


STOSW ªºÀ³¥Î

­è»¡¹L¡AREP ·f°t STOSB/STOSW/STOSD/STOSQ ¯à«Ü§Öªº¶ñº¡¤@¶ô°O¾ÐÅé¡A©³¤U¤p¤ì°¸´N¥Ü½d¦p¦ó§Ö³tªº²M°£¿Ã¹õ¡C


µø°T°O¾ÐÅé

IBM PC ¤@¶}©lµo°âªº­ì©l¾÷ºØ¡A¥i¥H¿ï¥Î¨âºØÅã¥Ü¥d¤¤ªº¨ä¤¤¤@ºØ¡A³æ¦âÅã¥Ü¥d ( Monochrome Display Adapter ©Î MDA ) »P±m¦â¹Ï§Î¥d (Color Graphics Adapter ©Î CGA )¡A«eªÌ¥u¯à¦b¤å¦r¼Ò¦¡¤UÅã¥Ü¡A«áªÌ¦³¤å¦r»P¹Ï§Î¨âºØ¼Ò¦¡¡C

¤£ºÞ­þ¤@ºØÅã¥Ü¥d¡A¤]¤£½×¤å¦r©Î¹Ï§Î¡A©ÒÅã¥Üªº¸ê®Æ³£¬OÀx¦s¦b°O¾ÐÅ餤¡A³oºØÀx¦sÅã¥Ü¸ê®Æªº°O¾ÐÅéºÙ¬°µø°T°O¾ÐÅé ( video memory )¡CMDA ªºµø°T°O¾ÐÅé°Ï¬q¦ì©ó B000H¡ACGA «h¦ì©ó B800H¡C¥Ñ©ó²{¦b´X¥G¨S¦³¥u¯àÅã¥Ü¤å¦r¼Ò¦¡ªºÅã¥Ü¥d¤F¡A©Ò¥H¤p¤ì°¸¥u½Í CGA¡CÁöµM¥H«á¤S¦³¤F EGA¡BVGA¡BAGP ¨ì²{¦bªº PCI Express¡A¦ý¦pªG¨t²Î¯à¥Î DOS ¶}¾÷¡A³£·|»P CGA ¬Û®e¡C

CGA ªº¤å¦r¼Ò¦¡¤S¦³¨âºØ¡A¤@¬O°ª¸ÑªR«×¤å¦r¼Ò¦¡¡A¥t¤@ºØ¬O§C¸ÑªR«×¤å¦r¼Ò¦¡¡C«eªÌ¬O¥Ñ¥ª¦Ü¥k³Ì¦h¥iÅã¥Ü 80 ­Ó¦r¡A¿Ã¹õ¥Ñ¤W¨ì¤U¦@ 25 ¦C¡A¥iºÙ¬° 80¡Ñ25 ¤å¦r¼Ò¦¡¡A³o¬O DOS ¤@¶}¾÷©Ò¹w³]ªº¼Ò¦¡¡C«áªÌ¬O 40 ¦r§Î¦¨¤@¦C¡A¤]¬O 25 ¦C¡A¦]¦¹ºÙ¬° 40¡Ñ25 ¤å¦r¼Ò¦¡¡C

¤£ºÞ­þ¤@ºØ¸ÑªR«×¡A¥ô¤@¦Cªº¥ô¤@¦æ¥u¯àÅã¥Ü¤@­Ó­^¤å¦r¥À¡A³o­Ó­^¤å¦r¥À¬O¥H ASCII ½Xªº¤è¦¡Àx¦s¦bµø°T°O¾ÐÅ餤¡C­^¤å¦r¥Àªº ASCII ½X¶È¦û¤@­Ó¦ì¤¸²Õ¡A¦Ó¬Û¾F¥B¤ñ¥¦°ª¤@­Ó¦ì¤¸²Õ¬O¦¹­^¤å¦r¥Àªº«e´º¦â»P­I´º¦â¡C¤]´N¬O»¡¡ACGA ¦bÅã¥Ü¤å¦r®É¡A¨C­Ó¤å¦r¶·¨â­Ó¦ì¤¸²ÕªºªÅ¶¡Àx¦s¡C

CGA ªºµø°T°O¾ÐÅé¦ì§}¥Ñ B800:0000 ³B¶}©l¡A¦]¦¹¿Ã¹õ³Ì¥ª¤W¨¤¡A¤]´N¬O²Ä¹s¦C¡B²Ä¹s¦æªº¦r¤¸¡AÀx¦s¦b°O¾ÐÅé¦ì§} B800:0000¡ãB800:0001 ³o¨â­Ó¦ì¤¸²Õ¡AB800:0000 ¬O¦r¤¸ªº ASCII ½X¡A¦Ó B800:0001 ¬O¨äÃC¦â¡F²Ä¹s¦C²Ä¤@¦æªº¤å¦rÀx¦s¦b B800:0002¡ãB800:0003¡AB800:0002 ¬O ASCII ½X¡AB800:0003 ¬OÃC¦â¡K¡K¡A¨ä¾l¨Ì¦¹Ãþ±À¡A°Ñ¦Ò¤U¹Ï¡A¤U¹Ï¤¤¨C­Ó¦r¤¸¥HÂŦâ®Ø®Ø¥Nªí¨ä½d³ò¡AùØ­±ªº¶À¦â¤Q¤»¶i¦ì¼Æ­È¬O¸ÓÂIªº¤å¦rÀx¦s¦ì§}¡G

¦pªG¬O°ª¸ÑªR«× 80¡Ñ25 ¤å¦r¼Ò¦¡¡A¨C¦C¦³ 80 ­Ó¦r¤¸¡A¦]¦¹¨C¦C»Ý­n 160 ­Ó¦ì¤¸²ÕªºªÅ¶¡¡A160 ´«¦¨¤Q¤»¶i¦ì¬O A0¡C¦Ó²Ä¹s¦C¤U­±±µµÛ²Ä¤@¦C¡A¨ä°O¾ÐÅé¦ì§}´NÀ³¸Ó¬O B800:00A0 ¶}©l¡F¦P²z¡A²Ä¤G¦C¥Ñ B800:0140 ¶}©l¡K¡K¡C

¦Ü©ó¦r¥ÀªºÃC¦â¤À¬°«e´º¦â»P­I´º¦â¡A«e´º¦â¬O¦rªºÃC¦â¡A­I´º¦â¥i·Q¦¨¬O¯ÈªºÃC¦â¡C¨Ò¦p¥ÎÂŦâ­ì¤lµ§¦b¶À¯È¤W¼g¦r¡A«e´º¦â¬OÂŦâ¡A­I´º¦â¬O¶À¦â¡C¤£½×«e´º¦â©Î­I´º¦â¡A³£¥H¥|­Ó¦ì¤¸ªí¥Ü¡A¦]¦¹¤À§O¥i¥HÅã¥Ü¤Q¤»ºØÃC¦â¡C¦Ó¨C­Ó¦ì¤¸²Õ¦³¤K­Ó¦ì¤¸¡A¦]¦¹¦ì¤¸²Õ¸û§Cªº¥|­Ó¦ì¤¸ªí¥Ü«e´º¦â¡A¸û°ªªº¥|­Ó¦ì¤¸«hªí¥Ü­I´º¦â¡C¤Q¤»ºØÃC¦âªº¥N½X¦p¤Uªí¡G

ÃC¦â¼Æ­ÈÅã¥ÜÃC¦â¼Æ­ÈÅã¥ÜÃC¦â¼Æ­ÈÅã¥ÜÃC¦â¼Æ­ÈÅã¥Ü
¶Â¦â0¬õ¦â4 ²`¦Ç¦â8²H¬õ¦âC
ÂŦâ1µµ¦â5 ²HÂŦâ9²Hµµ¦âD
ºñ¦â2´Ä¦â6 ²Hºñ¦âA¶À¦âE
«C¦â3¦Ç¦â7 ²H«C¦âB¥Õ¦âF

©³¤U¨ÓÅçÃҬݬݤW­±ªº­ì²z¡C¶i¤JµêÀÀ¾÷¾¹ªº¡uMS-DOS 6.20¡v«á¡A¥ý¦b DOS ©³¤U¿é¤J«ü¥O¡uCLS¡v¡A¥¦¥i¥H²M°£¿Ã¹õ¥BÅý´å¼Ð¦^¨ì²Ä¤@¦C¡A¥H¤è«K§Ú­Ì¤U¹F«ü¥O¤ÎÆ[¹î¡AµM«á°õ¦æ TOOLS\SYMDEB¡A¨£¤U¹Ï¡G ¶i¤J SYMDEB ¤§«á¡A¿é¤J¡uD B800:0 L10¡v¡A§A·|¨£¨ìÅã¥Ü¥X¨Óªº¬O¡uB800:000 20 07 20 07 20 07 20 07-20 07 20 07 20 07 20 07¡v¡A¬°¤°»ò·|¬O³oºØ¼Ë¤l©O¡H¨ä¹ê²z¥Ñ«Ü²³æ¡A¦]¬°²Ä¹s¦Cªº¤å¦r¥þ¬OªÅ¥Õ¡AªÅ¥Õ¦r¤¸ªº ASCII ½X¬O 20H¡A©Ò¥H¦b¦ì§} B800:0000 Àx¦sªº¬O 20H¡A¦Ó B800:0001 ³BÀx¦sªº¬O 07¡C®Ú¾Ú«e­z¡A0 ¬O­I´º¦â¡A¬d¤Wªí±oª¾¬O¶Â¦â¡A7 ¬O«e´º¦â¡A§Y¤å¦rªºÃC¦â¡A¬°¦Ç¦â¡C

¦b°ª¸ÑªR«×¤å¦r¼Ò¦¡¤U¡A¤@¦C¦³ 80 ­Ó¦r¡A¨C­Ó¦r¥Î¨â­Ó¦ì¤¸²Õªí¥Ü¡A¦]¦¹¤@¦C­n¥Î¥h 160 ­Ó¦ì¤¸²Õ ( ¤Q¤»¶i¦ì¬O 0A0H )¡A¦]¦¹²Ä¤@¦C¬O±q°O¾ÐÅé B800:00A0 ¶}©l¡A¿é¤J¡uD B800:A0 L30¡v¹î¬Ý³o¬qµø°T°O¾ÐÅ骺¤º®e¡A©M¿Ã¹õ¤Wªº¤å¦r¤ñ¸û¡A¬O¤£¬O¤@¼Ë©O¡H

§A¤]¥i¥H¸Õ¸Õ¬Ý¡A§â B800:00A1 ³Bªº 07 §ï¦¨ 4F¡A4 ¬O­I´º¦â¡A¬°¬õ¦â¡AF ¬O«e´º¦â¡A¬°¥Õ¦â¡C¦p¤U¹Ï¡A¬O¤£¬O¬Ý¨ì²Ä¤@¦Cªº¡uC¡vÅܦ¨¥Õ¦r¬õ©³ªºÃC¦â¤F¡H

§ïÅܿùõªº­I´º¦â

¬JµMª¾¹D¤F­ì²z¡A¨º»ò¦b°ª¸ÑªR«×¤å¦r¼Ò¦¡¤§¤U¡A´NÅܦ¨¥i¥HÅý§Ú­Ì¥ô·N¾Þ§Ë¤F¡C¨Ò¦p¡A­n§â¿Ã¹õ§ï¦¨¶À¦rÂÅ©³¡Aµ{¦¡½X¦p¤U¡G

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
;§â¿Ã¹õªº­I´ºÅܦ¨ÂŦâ¡A¤å¦rÅܦ¨¶À¦â
.MODEL  SMALL,C
.386
;*******************************************************************************
.STACK  256
;*******************************************************************************
.DATA
msg     DB      "Set text color to white and background color to blue.",0dh,0ah,
                "Press any key to continue.$"
exit_c  DB      1
;*******************************************************************************
video   SEGMENT PARA    AT 0b800h       ;µø°T°O¾ÐÅé°Ï¬q¦ì©ó0B800H³B
video   ENDS
;*******************************************************************************
.CODE
;-------------------------------------------------------------------------------
main    PROC
        .STARTUP
        mov     ax,video
        mov     es,ax           ;§âES«ü¦Vµø°T°O¾ÐÅé°Ï¬q¦ì§}
        mov     ah,9
        lea     dx,msg
        int     21h             ;¦L¥Xmsg¦r¦ê
        mov     ah,0            ;¼È°±¤@¤U¡AÅý¨Ï¥ÎªÌ«ö¥ô¤@Áä¤~Ä~Äò
        int     16h             ;BIOS ªA°Èµ{¦¡¡A½Ð°Ñ¾\µù¤@

        sub     di,di           ;¨ÏES:DI«ü¦VB800:0000³B¡A§Yµø°T°O¾ÐÅé°_©l¦ì§}
        mov     ah,1eh          ;AH¤¤¸û§Cªº¥|­Ó¦ì¤¸¬O¤å¦rÃC¦â¡A¸û°ªªº¥|­Ó¦ì¤¸¬O­I´º¦â
        mov     cx,80*25        ;VGA°ª¸ÑªR«×¤å¦r¼Ò¦¡¤¤¡A¦³25¦C¡A¨C¦C80¦r
next:   mov     al,es:[di]      ;¥Ñµø°T°O¾ÐÅ餤¨ú¥X¤å¦r
        stosw                   ;¦A§â¤å¦rÃC¦â¡B­I´ºÃC¦â¡B¤å¦r¦s¤J­ì¦ì§}
        loop    next
        .EXIT   exit_c
main    ENDP
;*******************************************************************************
END

³o­Óµ{¦¡«Ü²³æ¡A­º¥ý¥ý¬Ý¨ì³o­Óµ{¦¡¦³¥|­Ó°Ï¬q¡A¤ñ¸û¯S§Oªº¬O²Ä 12¡ã13 ¦æ«Å§iªº video °Ï¬q¡A¦¹°Ï¬q¥Î AT ¤è¦¡§â°Ï¬q³]¬°¦b B800H ³B¡A¥ç§Yµø°T°O¾ÐÅé©Ò¦b¦ì§}¡C¦ý³o¨â¦æ¥u¬O«Å§i¡AÅý²ÕĶ¾¹ª¾¹D video °Ï¬q¦b B800H ³B¡AÁÙ­n¦b²Ä 19¡ã20 ¦æ¥Î CPU «ü¥O¡A¤~¯àÅý ES ³]¬° 0B800H¡C

·íµM¡A²Õ¦X»y¨¥¬O«Ü¦Û¥Ñªº¡A§A¤]¥i¥H§â²Ä 12¡ã13 ¦æ§R±¼¡AµM«á§â²Ä 19 ¦æ§ï¦¨¡umov ax,0b800h¡v¤]¥i¥H¡C


­â¶V°Ï¬q ( Segment Override )

¤@¯ë¦Ó¨¥¡ACPU ¦bŪ¨ú°O¾ÐÅ餺ªº¸ê®Æ®É¡A¥²¶·­nª¾¹D°Ï¬q¦ì§}©M°¾²¾¦ì§}¡C¦b²Õ¦X»y¨¥ùØ¡A¦s¨ú°O¾ÐÅéÅܼƮɡA¬O¥H DS ¬°°Ï¬q¡A¦Ó°O¾ÐÅéÅܼƴN¬O°¾²¾¦ì§}¡F¦pªG¥H¼È¦s¾¹¬°°ò©³©Î¯Á¤Þ§@¬°¶¡±µ©w§}¡A¯à°÷¨Ï¥Îªº¼È¦s¾¹¥u¦³ BX¡BSI¡BDI¡BBP ¥|­Ó¡ABX¡BSI¡BDI ¬O¥H DS ¬°°Ï¬q¡ABP ¬O¥H SS ¬°°Ï¬q¡C¨Ò¦p©³¤Uªº¨Ò¤l´N¬O¥Î¨ÓÅçÃҨϥμȦs¾¹¶¡±µ©w§}®É¡A¬O¦s¨ú­þ¤@­Ó°Ï¬qªº¸ê®Æ¡G

Microsoft (R) Symbolic Debug Utility  Version 4.00
Copyright (C) Microsoft Corp 1984, 1985.  All rights reserved.

Processor is [80286]
-r [Enter]  ¡÷¥ýÀˬd­ì¨Ó¼È¦s¾¹¤§­È
AX=0000  BX=0000  CX=0000  DX=0000  SP=DE2A  BP=0000  SI=0000  DI=0000  
DS=20C5  ES=20C5  SS=20C5  CS=20C5  IP=010F   NV UP EI PL NZ NA PO NC 
20C5:0100 0000           ADD    [BX+SI],AL                         DS:0000=CD
-a [Enter]
20C5:0100 mov si,1 [Enter]
20C5:0103 mov di,2 [Enter]
20C5:0106 mov al,[bx] [Enter]
20C5:0108 mov ah,[si] [Enter]
20C5:010A mov dl,[di] [Enter]
20C5:010C mov dh,[bp] [Enter]
20C5:010F [Enter]
-r es f000 [Enter]  ¡÷­ì¥ýDS¡BES¡BSS§¡«ü¦V¬Û¦P°Ï¬q
-r ss 30c5 [Enter]    ²{¦b¨Ï¥¦­Ì«ü¦V¤£¦P°Ï¬q
-f ss:0 l40 32 [Enter]  ¡÷¦b30C5°Ï¬qªº­ÈÀ³¸Ó§¡¬°¹s¡A¥H¨¾«Ý·|¬Ý¤£¥X¨ÓDH¦³¨S¦³§ïÅÜ¡A¬G«e40H­Ó¦ì¤¸²Õ³£Åܬ°32H
-d ds:0 l10 [Enter]
20C5:0000  CD 20 C0 9F 00 9A 2A DD-39 F2 8E 09 CA 17 2B 0A  M @...*]9r..J.+.
-d es:0 l10 [Enter]
F000:0000  9A 0A 51 00 F0 9A A8 51-00 F0 9A AC 52 00 F0 CB  ..Q.p.(Q.p.,R.pK
-d ss:0 l10 [Enter]
30C5:0000  32 32 32 32 32 32 32 32-32 32 32 32 32 32 32 32  2222222222222222
-g 10f [Enter]
AX=20CD  BX=0000  CX=0000  DX=32C0  SP=DE2A  BP=0000  SI=0001  DI=0002  
DS=20C5  ES=F000  SS=30C5  CS=20C5  IP=010F   NV UP EI PL NZ NA PO NC 
20C5:010F 0000           ADD    [BX+SI],AL                         DS:0001=20
-

«Ü©úÅã¥i¥HÀËÅç¡AAL ¤§­È¬O CDH ( ¥Õ¦â¦r )¡A³o¬OŪ¤J DS:[BX] ªº¸ê®Æ ( µ{¦¡ 20C5:0106 ³B )¡A¦]¦¹¥H BX ¬°°ò©³Åª¨ú¸ê®Æ¬OŪ¨ú DS °Ï¬q¤§¸ê®Æ¡F¦P¼ËÀˬd AH ( ¬õ¦â¦r )¡A´Nª¾¹D³o¤]¬OŪ¨ú DS:[SI] ¤§¸ê®Æ¡F¤§«áªº´N¤£¦AÂØ­z¤F¡C

ÁÙ¦³¤T³B­È±o¤@´£¡G①¦pªG¬O¨Ï¥Î MOVSB¡BCMPSB¡BSTOSB µ¥«ü¥O®É¡A¦s¨úªº¬O ES:[DI] ³Bªº¸ê®Æ¡C②¨ä¹ê SP ¤]¯à·í«ü¼Ð¡A¦ý³q±`¬O·í°µ°ïÅ|§}¼Ð¡A¬G¦s¨úªº¬O SS °Ï¬q¡C③¦P¼Ëªº¡AIP ¤]¬O«ü¼Ð¡A¦ý³£¬O«ü¦Vµ{¦¡½X°õ¦æªº¦a¤è¡A¬G¥H CS ¬°°Ï¬q¡C

Á¿¤F³o»ò¦h¡A¨º¤°»ò¬O¡u­â¶V°Ï¬q¡v( segment override ) ©O¡H¨ä¹ê«Ü²³æ¡A§A¥i¥HÆ[¹î¨ì¡A°²¦p­n¦s¨ú ES °Ï¬qªº¸ê®Æ¡A°£¤F¥Î MOVSB¡BCMPSB µ¥³B²z¦r¦êªº«ü¥O¥~¡A§Ú­ÌÁÙ¥i¥H¥Î¹³¡u§ïÅܿùõªº­I´º¦â¡vªºµ{¦¡²Ä 30 ¦æªº¤è¦¡¡A

        mov     al,es:[di]

¦b°¾²¾¦ì§}«e¥[¤W¡u°Ï¬q¼È¦s¾¹:¡vªº¤è¦¡¡A±j­¢ CPU ¦s¨ú¸Ó°Ï¬q¼È¦s¾¹©Ò«ü°Ï¬qªº¸ê®Æ¡A³o¼Ë¦s¨ú¸ê®Æªº¤è¦¡´NºÙ¬°¡u­â¶V°Ï¬q¡v¡C´«¥y¸Ü»¡¡A­â¶V°Ï¬q¯à¥´¯}¤º©w¦s¨úªº°Ï¬q¡C


¸ü¤J¦r¦ê

LODSB «ü¥O

LODSB «ü¥O¬O§â ES:DI ©Ò«ü¦ì§}ªº¸ê®Æ¸ü¤J¨ì AL ùØ¡A¦P®É¨Ï DI ¼W©Î´î¤@¡C­n¼W¤@ÁÙ¬O´î¤@¡A¤]¬O¬Ý¤è¦VºX¼Ð¨M©w¡A­Y¤è¦VºX¼Ð¬°¹s¡A´N¼W¤@¡F¤Ï¤§«h´î¤@¡CLODSB «ü¥O«Ü¤Ö©M REP ·f°t¨Ï¥Î¡A­ì¦]´N¤£¥²»¡¤F¡C

LODSW/LODSD/LODSQ «ü¥O

·íµM¤]¦³¤@¦¸¸ü¤J ES:DI ©Ò«ü¦ì§}¤@­Ó¦r²Õ¡B¤@­ÓÂù¦r²Õ¡B¤@­Ó¥|¦r²Õªº¸ê®Æ¡A¤À§O¨ì AX¡BEAX¡BRAX ùØ¡A¤]·|Åý DI ¦Û°Ê«ü¦V¤U¤@­Ó¦ì§}¡C³oºØ±¡§Î©M STOSW µ¥«ü¥O³£¤@¼Ë¡C¤p¤ì°¸·Q¡A¤£¥²¦AÅo­ö¤F§a¡C


µù¤@¡GBIOS ªA°Èµ{¦¡¡AAH¡×00/INT 16H

BIOS ªA°Èµ{¦¡¬O¥Ñ¥D¾÷ªO¤Wªº BIOS ´£¨Ñªº¡A¨Ã«D DOS §@·~¨t²Î´£¨Ñªº¡A¥¦¬O¿N¿ý¦b¤@­Ó°ßŪ°O¾ÐÅ餺¡A§Y¨ÏÃö¾÷¤]¤£·|®ø¥¢¤£¨£¡C¦ý¬O BIOS ªA°Èµ{¦¡´N¹³¬O DOS ªA°Èµ{¦¡¤@¼Ë ( INT 20H »P INT 21H )¡A¥i¥H´£¨Ñµ{¦¡©I¥s¨Ï¥Î¡A§¹¦¨³\¦h¤u§@¡C¨Ò¦p¡AINT 16H ¥D­nªºªA°È¹ï¶H¬OÁä½L¡AINT 13H ¬OºÏºÐ¾÷¡AINT 14H ¬O³q°T°ð ( ´N¬O COM1¡BCOM2 µ¥µ¥©Î¬O RS-232 )¡AINT 10H ¬OÅã¥Ü¥d¡AINT 17H ¬O¦Lªí¾÷¡C³q±` BIOS ´£¨ÑªºªA°È¬O¸û§C¶¥ªºªA°È¡C

³oùØ¡A¤p¤ì°¸¶È¶ÈÁ¿¤@Á¿ AH¡×00/INT 16H ªºÁä½L¿é¤JªA°Èµ{¦¡¡C¥¦ªº¨Ï¥Î¤è¦¡¦p¤U¡G

¨ú±oÁä½L¤W«ö¤UªºÁä
¿é¤J¡GAH¡×00
°õ¦æ¡GINT 16H
¿é¥X¡GAH¡×±½´y½X ( scan code )
¡@¡@¡@AL¡×ASCII½X
µù¡G°õ¦æ INT 16H/AH=0 «á¡A·|°±¤U¨Óµ¥¨Ï¥ÎªÌ«ö¤U¤@­ÓÁä¡Aµ¥¨Ï¥ÎªÌ«ö¤U«á¡A¤£·|¦b¿Ã¹õ¤WÅã¥Ü«ö¤UÁ䪺¤å¦r¡C

¨C·í¨Ï¥ÎªÌ«ö¤UÁä½L¤Wªº¥ô¦ó¤@­ÓÁä®É¡AÁä½Lªº¹q¸ô·|°e¹q¤l°T¸¹µ¹¥D¾÷ªO¡A¥D¾÷ªO·|¸ÑŪ¦¨¨â­Ó¼Æ¦r¡C¨ä¤¤¤@­ÓºÙ¬°¡u±½´y½X¡v¡A¨C¤@­ÓÁ䪺±½´y½X³£¤£¦P¡Aµ{¦¡¥i¥H¥Ñ±½´y½X§PÂ_¨º¤@­ÓÁä³Q«ö¤U¡C¥t¤@­Ó¼Æ¦r¬O«öÁä©Ò¥Nªíªº ASCII ½X¡A¦³¨Ç«öÁä¨Ò¦p F1¡BF2 ¨Ã¨S¦³ ASCII ½X¡C

¬°¦ó¤@­ÓÁä°£¤F ASCII ½X¥~¡AÁÙ­n¦³±½´y½X©O¡H³o¬O¦]¬°¦³¨Ç¤å¦r¥i¥H¥Î¨âºØ¤è¦¡«ö¥X¨Ó¡A¨Ò¦pªü©Ô§B¼Æ¦rªº¡u1¡v¡A§A¥i¥H¨Ï¡uNum Lock¡v¿O«G°_¦A«öÁä½L¥kÃ䪺¡u1¡vÁä¡A³o­ÓÁäÁÙ¥Nªí¡uEnd¡v¡F©ÎªÌª½±µ«öÁä½L¥ª¤W¤èªº¡u1¡vÁä¡A³o­ÓÁä¤]¥i¥H«ö¥X¡u!¡v¡C³o¨â­Ó«öÁ䪺±½´y½X¤£¦P¡Aµ{¦¡´N¥i¥H½T¹êª¾¹D¨Ï¥ÎªÌ¨ì©³«ö¤U­þ¤@­ÓÁä¡C

©³¤U¬OÁä½Lªº¹Ï¤ù¡A¨C¤@Á䩳¤Uªº¬õ¦â¦r´N¬O±½´y½X ( ¥H¤Q¤»¶i¦ìªí¥Ü )¡G