¦b¼¶¼gµ{¦¡®É±`±`·|¹J¨ì¸ê®ÆÂಾ¡N¤ñ¸ûµ¥ª¬ªpµo¥Í¡A80X86 ®a±Úªº CPU ùئ³´XÓ«ü¥O¬O±Mªù³B²z¡y¦r¦ê¡zªº¡A¦b³o¸Ì©Ò¿×ªº¦r¦ê¡A¬O«ü¦b°O¾ÐÅ餺³sÄòªº¦ì¤¸²Õ©Î¦r²Õ¡A¨Ã¤£¤@©w¬O ASCII ¦r¤¸¡A¤]¦³¥i¯à¬O¤@¬q¤G¶i¦ì¼Æ¡C
80X86 «ü¥O¶°¤¤¦r¦ê³B²zªº«ü¥O¦³·h²¾¡N±½´y¡N¤ñ¸û¤TºØ¡A¥t¥~¦A¥[¤W¥Ñ°O¾ÐÅé¸ü¤J¦Ü¼È¦s¾¹»P¥Ñ¼È¦s¾¹¦s¤J°O¾ÐÅé¨âºØ¡C
¥ý»¡·h²¾¦r¦ê¡C·h²¾¦r¦ê«ü¥O¦³¨âºØ¡A¤À§O¬O MOVSB ©M MOVSW¡A¥ý»¡ MOVSB¡CMOVSB ªº^¤å¬O move string byte¡A·N«ä¬O·h²¾¤@Ӧ줸²Õ¡A¥¦¬O§â DS:SI ©Ò«ü¦ì§}ªº¤@Ӧ줸²Õ·h²¾¨ì ES:DI ©Ò«üªº¦ì§}¤W¡A·h²¾«áì¨Óªº¤º®e¤£ÅÜ¡A¦ý¬Oì¨Ó ES:DI ©Ò«üªº¤º®e·|³QÂл\¦Ó¥B¦b·h²¾¤§«á SI ©M DI ·|¦Û°Ê¦a§}¦V¤U¤@Ón·h²¾ªº¦ì§}¡C
¤@¯ë¦Ó¨¥¡A³q±`µ{¦¡³]p®v¤@¯ë¨Ã¤£·|¥u·h¤@Ӧ줸²Õ¡A³q±`³£·|«½Æ³\¦h¦¸¡A¦pªGn«½Æªº¸Ü¡A´N±o§â«½Æ¦¸¼Æ ( ¤]´N¬O¦r¦êªø«× ) ¥ý°O¿ý¦b CX ¼È¦s¾¹¡A¨Ã¥B¦b MOVSB ¤§«e¥[¤W REP «ü¥O¡AREP ¬O«½Æ (repeat) ªº·N«ä¡C³oºØ¼gªk«Ü¬O©_©Ç¡A¤@¯ë¦Ó¨¥²Õ¦X»y¨¥ì©lÀɪº¨C¤@¦æ³£¥u¦³¤@Ó«ü¥O¡A¦ý REP MOVSB «o¥i¥H¦b¦P¤@¦æ¼g¨âÓ«ü¥O¡A·íµM±z¤À¶}¼g¤]¬O¤@¼Ëªº¡C
Åý¤p¤ì°¸¥Î DEBUG ¨ÓÆ[¹î REP MOVSB °õ¦æ±¡§Î¡G
C:\WINDOWS>debug [Enter] -a [Enter] 1C6C:0100 mov cx,10 [Enter] 1C6C:0103 mov si,200 [Enter] 1C6C:0106 mov di,300 [Enter] 1C6C:0109 rep movsb [Enter] 1C6C:010B [Enter] -a 200 [Enter] 1C6C:0200 db "I learn assembly" [Enter] 1C6C:0210 [Enter]
¤W±ªºµ{¦¡¤ù¬q¬O§â¦ì©ó 1C6C:0200 ªº¡yI learn assembly¡z¦r¦ê²¾·h¨ì 1C6C:0300 ³B¡A¦¹¦r¦ê¦@ 16 Ó¦r¤¸¡A©Ò¥H CX ¦s¤J 10H¡C²{¦b¨Ó°lÂܬݬݡC
-t [Enter] AX=0000 BX=0000 CX=0010 DX=0000 SP=FFEE BP=0000 SI=0200 DI=0000 DS=1C6C ES=1C6C SS=1C6C CS=1C6C IP=0106 NV UP EI PL NZ NA PO NC 1C6C:0103 BE0002 MOV SI,0200 -t [Enter] AX=0000 BX=0000 CX=0010 DX=0000 SP=FFEE BP=0000 SI=0200 DI=0000 DS=1C6C ES=1C6C SS=1C6C CS=1C6C IP=0106 NV UP EI PL NZ NA PO NC 1C6C:0106 BF0003 MOV DI,0300 -t [Enter] AX=0000 BX=0000 CX=0010 DX=0000 SP=FFEE BP=0000 SI=0200 DI=0300 DS=1C6C ES=1C6C SS=1C6C CS=1C6C IP=0109 NV UP EI PL NZ NA PO NC 1C6C:0109 F3 REPZ 1C6C:010A A4 MOVSB -d 300 L10 [Enter]
¦bÁÙ¥¼·h²¾¤§«e¡A¥ý¬Ý¬Ý 1C6C:0300 ³Bªº¤º®e¡A¦A°lÂÜ¡C¦¹³B±z·|¬Ý¨ì§ÚÌ¿é¤J rep «ü¥O¡A¦ý¬O DEBUG «oÅã¥Ü REPZ¡A¨Æ¹ê¤W³o¨âÓ¬O¤@¼Ëªº¡C
1C6C:0300 E8 A3 F6 74 08 49 46 FE-06 D7 DC EB EF E8 C3 F9 ...t.IF......... -t [Enter] AX=0000 BX=0000 CX=000F DX=0000 SP=FFEE BP=0000 SI=0201 DI=0301 DS=1C6C ES=1C6C SS=1C6C CS=1C6C IP=0109 NV UP EI PL NZ NA PO NC 1C6C:0109 F3 REPZ 1C6C:010A A4 MOVSB -d 300 L10 [Enter] 1C6C:0300 49 A3 F6 74 08 49 46 FE-06 D7 DC EB EF E8 C3 F9 I..t.IF.........
¦b·h²¾¤@¦¸¤§«á¡A¦A¬Ý¬Ý 1C6C:0300 ³Bªº¤º®e¡Aµo²{¤W±¤w¸g©Mì¨Ó¤£¤@¼Ë¤F (¬õ¦â³¡¥÷)¡C³o¬O¦]¬° movsb ¤w¸g§â²Ä¹sӦ줸²Õ·h¨ì 1C6C:0300 ³B¡A¦ÓÂл\¤Fì¨Óªº¤º®e¡C¦Ó CX ¤]´î¤Ö¤@¡ASI¡NDI ¤]¦U¼W¥[¤@¦Ó«ü¦V¤U¤@Ó¦ì§}¡C¦n¡I¦A°lÂܬݬݡC
-t [Enter]
AX=0000 BX=0000 CX=000E DX=0000 SP=FFEE BP=0000 SI=0202 DI=0302
DS=1C6C ES=1C6C SS=1C6C CS=1C6C IP=0109 NV UP EI PL NZ NA PO NC
1C6C:0109 F3 REPZ
1C6C:010A A4 MOVSB
±z¦³¨S¦³µo²{¡A¦b·h²¾§¹¤§«e¡AIP ³£«ü¦V REP MOVSB «ü¥O ( §Y REP MOVSB ©Ò¦b¦ì§} )¡Cn°lÂܳo»ò¦h¦¸¡A¤Ó³Â·Ð¤F¡A°®¯Üª½±µ°õ¦æ¨ì·h²¾¦r¦ê¨ìµ²§ô¡C
-g 10b [Enter] AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0210 DI=0310 DS=1C6C ES=1C6C SS=1C6C CS=1C6C IP=010B NV UP EI PL NZ NA PO NC 1C6C:010B 06 PUSH ES -d 200 L10 [Enter] 1C6C:0200 49 20 6C 65 61 72 6E 20-61 73 73 65 6D 62 6C 79 I learn assembly -d 300 L 10 [Enter] 1C6C:0300 49 20 6C 65 61 72 6E 20-61 73 73 65 6D 62 6C 79 I learn assembly
·h²¾µ²§ô«á¡A1C6C:0200 ©M 1C6C:0300 ³Bªº¤º®e§¡¬Û¦P¡A©Ò¥H MOVSB ¨Æ¹ê¤W¬O§âì¨Ó¦r¦ê½Æ»s¨ìn·h²¾¤§³B¡A¦Óì¦r¦ê¬Oì«Ê¤£°Êªº¡C
MOVSW ªº§@¥Î¤è¦¡³£©M MOVSB ¬Û¦P¡A©Ò¤£¦Pªº¬O MOVSW ¨C¦¸·h²¾¤@Ó¦r²Õ¡A©Ò¥H¨C¦¸·h¹B§¹ SI¡NDI ·|¼W¥[ 2¡A¦Ó CX ¤´µM´î¤Ö¤@¡C
¦¹¥~¡AÁÙ¦³¤@ÂI¡A¤p¤ì°¸¦b¤W±¨S¦³´£¨ì¡C¨Æ¹ê¤W§Ṳ́]¥i¥H¨Ï¨C·h²¾¤@¦¸¤§«á¡A¨Ï SI¡NDI »¼´î¡A¤]´N¬O©¹§C¦ì§}·h²¾¡C¤èªk¬O¥Ñ¡y¤è¦VºX¼Ð¡z±±¨î( ¦³Ãö¤è¦VºX¼Ð½Ð°Ñ¦Òªþ¿ý¤GºX¼Ð¼È¦s¾¹ )¡C
·í¤è¦VºX¼Ð²M°£®É (§Y¤è¦VºX¼Ð¬°¹s)¡A·h²¾¤è¦V¬O¦V°ª¦ì§}³B¡ASI¡NDI ·|»¼¼W¡A¦P®É±z¥i¥H¬Ý¨ì¦b DEBUG Åã¥ÜºX¼Ð³B·|¦³¡yUP¡zªº¦r¼Ë¡Aªí¥Ü¦V°ª¦ì§}·h²¾¡C³o¬O¤j³¡¤Àªº±¡ªp¡C
·í¤è¦VºX¼Ð³]©w®É (§Y¤è¦VºX¼Ð¬°¤@)¡A·h²¾¤è¦V¬O¦V§C¦ì§}³B¡ASI¡NDI ·|»¼´î¡C¨ì¦b DEBUG Åã¥ÜºX¼Ð³B·|¦³¡yDN¡zªº¦r¼Ë¡C
³Ì«á¡A¤è¦VºX¼Ð²M°£ªº«ü¥O¬O CLD¡A·N«ä¬O clear direction flag¡F³]©wªº«ü¥O¬O STD¡A·N«ä¬O set direction flag¡C
³o¨âÓ«ü¥O¨Ï¥Î¤èªk©M MOVSB¡NMOVSW ¬Û¦P¡A¦Ó¥¦ªº§@¥Î¬O±N¤@Ó¦r¦ê©M¥t¤@³Bªº¦r¦ê¤ñ¸û¡C¦pªG¥u¦³³æ¿Wªº¤@Ó CMPSB ©Î CMPSW ®É¡ACPU ¥u¤ñ¸û¤@Ӧ줸²Õ©Î¤@Ó¦r²Õ¡F·í CMPSB ©Î CMPSW «e¥[¤W REP ®É¡A¥i¥H¤ñ¸û¤@Ó¦r¦ê¡C±z¤]¥i¥H¥Î REPE ( ªí¥Ü repeat while equal¡A¦pªG¨â¦r¬Ûµ¥«h«½Æ ) ¨Ó¥N´À REP¡A¤]¥i¥H¥Î REPZ ( ªí¥Ü repeat while zero¡A¦pªG¹sºX¼Ð¬° ZR¡A«h«½Æ ) ¨Ó¥N´À¡A´«¥y¸Ü»¡ REP¡NREPE ©M REPZ ¬O¬Û¦Pªº¡C
¨º±z¥i¯à·|°Ý¡A¦p¦ó¤~ª¾¹D¨âÓ¦r¦ê¬Ûµ¥¡H³o®É±z´N±oÀˬd¡y¹sºX¼Ð¡z¤F¡A¦pªG¹sºX¼Ð³Q³]¬°¤@ (DEBUG Åã¥Ü ZR)¡Aªí¥Ü¨â¦r¦ê¬Ûµ¥¡A¦¹®É¨â¦r¦ê·|¤ñ¸û§¹²¦©Ò¥H CX ¤]·|¤@ª½´î¤Ö¦Ü¹s¡C¦pªG¹sºX¼Ð³Q³]¬°¹s (DEBUG Åã¥Ü NZ)¡Aªí¥Ü¨â¦r¦ê¤£¬Ûµ¥¡Acmps «ü¥O¶È¶È¤ñ¸û¨ì²Ä¤@Ó¤£¬Ûµ¥ªº¦r¤¸´N°±¤î¤F¡A©Ò¥H CX ¤£·|¬°¹s¡ASI¡NDI ·|«ü¨ì²Ä¤@Ó¤£¬Ûµ¥ªº¦ì¤¸²Õ©Î¦r²Õ¤§«áªº¦ì§}¡C
»P MOVS «ü¥O¬Û¦Pªº¬O¡ACMPS «ü¥O¤]¥i¥H¥Î¤è¦VºX¼Ð¨Ó«ü©w¦V°ª¦ì§}¤ñ¸û©Î¦V§C¦ì§}¤ñ¸û¡C
³o¬O scan string ªº·N«ä¡A¤¤¤å¬O±½´y¦r¦ê¡A¥¦ªº§@¥Î¬O¦b¤@Ó¦r¦ê¤¤§ä¨ì¯S©wªº¦ì¤¸²Õ©Î¦r²Õ¡C¦Ó³o¯S©wªº¦ì¤¸²Õ©Î¦r²Õ©ñ¦b AL ©Î AX ¼È¦s¾¹¤¤¡A³Q±½´y¦r¦êªºªø«×¦ì©ó CX¡A¦r¦ê¦ì§}¦ì©ó ES:DI ©Ò«üªº¦ì§}¡C¦P¼Ë¤]¥i¥H¥Î¤è¦VºX¼Ð¨Ó«ü©w©¹°ª¦ì§}©Î§C¦ì§}±½´y¡C
¦P¼Ëªº SCASB ©Î SCASW ¤]¥i¥H¥Î REPE ¨Ó·f°t¨Ï¥Î¡C¦ý¬O³Ì±`¥ÎªºÁÙ¬O©M REPNE ·f°t¡A¥¦ªº·N«ä¬O repeat while not equal¡A·N«ä¬O¦pªG¤£¬Ûµ¥«h«½Æ¡A¸Õ·Q·í§A¦b¤@Ó^¤å¥y¤l¤¤¡A´M§ä^¤å¦r¥À¡ya¡z¦³¨S¦³¥X²{¡Aª½Ä±ªº¤èªk¬O¤£¬O¥ý¬Ý²Ä¤@Ó¦r¥À¡A¦pªG¤£¬O¦A¬Ý²Ä¤GÓ¦r¥À¡C¦¹³B³Ì±`»P SCASB ·f°tªº REPNE ¤]¬O¦p¦¹¡A¦pªG«e±ªº¦r¤£¬Ûµ¥¡A¤~§ä«á±ªº¦r¡A©Ò¥H¥Î REPNE ¡A¦Ó¤Ö¥Î REPE¡C±z¤]¥i¥H¥Î REPNZ ¨Ó¥N´À REPNE¡C
LODSB ³oÓ 80X86 «ü¥O¬O§â DS:SI ©Ò«ü¦ì§}ªº°O¾ÐÅ餺®e¸ü¤J¤@Ӧ줸²Õ¨ì AL ùØ¡A¦P¼Ëµø¤è¦VºX¼Ð¦Ó©w¡A·|¨Ï±o SI ¼È¦s¾¹¼W¥[¤@©Î»¼¤Ö¤@¡CLODSB ¤§·N«ä¬O load string byte¡A¦ý¬O¥¦«o«Ü¤Ö°t¦X REP «ü¥O¡A¦]¬°³q±`§Ú̥Υ¦¬O¦]¬°n³B²z¸Ó¦r¦êùتº¨C¤@Ӧ줸²Õ¡A«Ý³B²z§¹¤~¯à¦A¦¸¸ü¤J¡A©Ò¥H¨â¦¸¸ü¤J¤§¶¡±`ÁÙ¦³¨ä¥L«ü¥O¡A¨Ã¤£¹³ MOVS¡NCMPS¡NSCAS ³o¤TÓ«ü¥O¥i¥H¥Î¤@Ó«ü¥O´N¸Ñ¨M¤F¡C
LODSW ¬O¸ü¤J DS:SI ©Ò«ü¦ì§}ªº¤º®e¤@Ó¦r²Õ¨ì AX ¼È¦s¾¹¡A¦P¼Ëªº SI ·|µø¤è¦VºX¼Ð¼W¥[¤G©Î»¼¤Ö¤G¡A³o¬O¦]¬°¤@Ó¦r²Õ¦û¨âӦ줸²Õ¡C
³o¨âÓ«ü¥O©M LODSB¡NLODSW Ãþ¦ü¡A©Ò¤£¦Pªº¬O³o¨âÓ«ü¥O¬O AL ©Î AX ªº¤º®e²¾¨ì ES:DI ©Ò«üªº°O¾ÐÅé¦ì§}¡CDI ·|µø¤è¦VºX¼Ð¼W¥[©Î»¼¤Ö¡C
¦b BIOS ùئ³¤@¬q°O¾ÐÅéªÅ¶¡ ( F000:FA6E ¶}©l ) ¬O¦s©ñ ASCII ¦r¤¸¥Ñ 0 ¶}©l¨ì 127 ¦@ 128 Ó¦r¤¸ªº¹Ï®×¡A¨C¤@Ó¤å¦r³£¥i¥H¬Ý¦¨³\¦h¡yÂI¡z²Õ¦¨¡A³o¨ÇÂIºc¦¨¦r¤¸ªº¹Ï®×¡C¦p¤U¹Ï¬O¤@Ó^¤å¦r¡yA¡z
³Ì¤W±¤@¦æ¡A¥Ñ¥k¦Ó¥ª¦@¦³ 8 ÓÂI¡A³o 8 ÓÂIºc¦¨¤@Ӧ줸²Õ¡A¨ä¤¤¦³¨ÇÂI¬O¬õ¦âªº¡Aªí¥Ü³oÓÂI¥²¶·¦b¿Ã¥ú¹õ¤W¦L¥X¨Ó¡A¦Ó¬Û¹ïÀ³ªº¦ì¤¸¬°¤@¡G¦³¨ÇÂI¬O¶Â¦âªí¥Ü³o¬OI´º¡Aªí¥Ü³oÓÂI¤£¥Î¦L¥X¨Ó¡A¬Û¹ïÀ³ªº¦ì¤¸¬°¹s¡C¥H^¤å¦r¥À¡yA¡z¨Ó»¡¡A²Ä¹sӦ줸²ÕÀ³¸Ó´N¬O 00 11 00 00¡A´«ºâ¦¨¤Q¤»¶i¦ì´N¬O 30H¡A¦P²z¨ä¾l¦ì¤¸²Õ¤À§O¬O 78H¡N0CCH¡N0CCH¡N0FCH¡N0CCH¡N0CCH¡N0¡C³o¤KӦ줸²Õ´Nºc¦¨¡yA¡zªº¹Ï¼Ë¡A¨ä¥Lªº ASCII ¦r¤¸¤]³£¬OÃþ¦ü¡C©Ò¥H¦pªG DOS nÅã¥Ü^¤å¦r¥À¡A´N¨ì BIOS ³oӹϮתí¥h´M§ä¸Ó¦r¤¸ªº¹Ï®×¦ì¤¸²Õ¡AµM«á¥Îµ{¦¡±N¥¦¨Ì¼Ëµe¸¬Äª¦L¦b¿Ã¥ú¹õ¤W¡C
·íµM¦b¿Ã¥ú¹õ¤W¨C¤@ÓÂI³£«Ü¤p¡A©Ò¥H±z¬Ý¤£¨ì¿÷¾¦ª¬¡A¤]·Pı¤£¨ìÂIªº¼Ë¤l¡A¦b³oùؤp¤ì°¸·Q±N³o¨Ç¦r¤¸¹Ï®×©ñ¤jÅã¥Ü¦b¿Ã¥ú¹õ¤W¡A³oÓµ{¦¡ºÙ¬°¡yCHAR_GRA.ASM¡z¡A°õ¦æµ²ªG¦p¤U¡G
H:\HomePage\SOURCE>char_grp [Enter] «ö¥ô·NÁä(EscÁäÂ÷¶})¡G «ö¤U A AA AAAA AA AA AA AA AAAAAA AA AA AA AA «ö¥ô·NÁä(EscÁäÂ÷¶})¡G «ö¤U 1 11 111 11 11 11 11 111111 «ö¥ô·NÁä(EscÁäÂ÷¶})¡G «ö¤U Esc Áä H:\HomePage\SOURCE>
ì©lµ{¦¡¦p¤U¡G
total_len equ 8*128 ;01 ;*************************************** message segment ;03 ¸ê®Æ¬q¶}©l message0 db 0dh,0ah,'«ö¥ô·NÁä(EscÁäÂ÷¶})¡G$' char_graph db total_len dup (?) message ends ;06 ¸ê®Æ¬qµ²§ô ;*************************************** code segment ;08 µ{¦¡½X°Ï¬q¶}©l assume cs:code,ds:message ;--------------------------------------- main proc far ;11 «üµ{¦¡¶}©l start: push ds ;12 ±Nªð¦^DOS¸ê°T¦s¤J°ïÅ| sub ax,ax push ax mov bx,0f000h ;16 mov cx,total_len mov ds,bx ;18 ¨ÏDS«ü¦VBIOS¬q¦ì§} mov si,0fa6eh ;19 ¨ÏSI«ü¦VBIOS¤¤ASCII¦ì¤¸¹Ï¤§°¾²¾¦ì§} mov ax,message mov di,offset char_graph mov es,ax ;22 ¨ÏES«ü¦V¥»µ{¦¡ªº¸ê®Æ¬q rep movsb ;23 ·h²¾ mov ds,ax ;25 ¨ÏDS«ü¦V¥»µ{¦¡ªº¸ê®Æ¬q nxt_char: mov dx,offset message0 mov ah,9 int 21h ;29 call crlf input: mov ah,0 ;31 ¿é¤J«öÁä int 16h cmp al,1bh je exit cmp al,07fh ja input ;36 mov dh,al ;38 «O¦s¸ÓÁ䪺ASCII©óDH mov si,offset char_graph cbw ;40 pºâ¸ÓASCII¤§°¾²¾¦ì§} mov cl,3 shl ax,cl add si,ax ;43 ¨Ã¦s©óSI cld ;44 ¨ÏLODSB©¹°ª¦ì§}³B¨ú±o¸ê®Æ mov ch,8 ;45 ¨CÓASCII¦r¤¸¹Ï¥H8¦ì¤¸²Õªí¥Ü nxt_byte: lodsb ;47 ¨ú±o¸ÓASCII¦r¤¸ªº¨ä¤¤¤@Ӧ줸²Õ mov cl,8 ;48 ¨CӦ줸²Õ¦³8¦ì¤¸ nxt_bit: mov dl,dh ;50 ¨M©w¬On¦L¥XªÅ¥ÕÁÙ¬O¸Ó¦r¤¸ shl al,1 ;51 ¨M©w¤èªk¬O¸Ó¦ì¤¸¬°0«h¦LªÅ¥Õ jc print ;52 ¤Ï¤§¦L¥X¸ÓASCII¦r¤¸ mov dl,' ' ;53 print: mov ah,2 ;54 push ax ;55 ¬°ÁקKALȧïÅÜ¡A¬G¦s©ó°ïÅ| int 21h ;56 ¦L¥X pop ax ;57 ¨ú¦^ALÈ dec cl jnz nxt_bit ;59 ¬O§_¦L¤U¤@¦ì¤¸ call crlf ;61 §_¡A«h¦L¥X´«¦æ¤ÎÂk¦ì¦r¤¸ dec ch jnz nxt_byte;63 ¬O§_¦L¤U¤@¦ì¤¸²Õ jmp nxt_char;64 §_¡A«h¸õ¨ì¿é¤J«öÁä exit: ret ;66 ªð¦^DOS main endp ;67 ;--------------------------------------- crlf proc near ;69 push ax mov ah,2 mov dl,0dh int 21h mov dl,0ah int 21h pop ax ret crlf endp ;78 ;--------------------------------------- code ends ;80 ;*************************************** stack segment stack ;82 °ïÅ|¬q dw 80 dup (?) stack ends ;84 ;*************************************** end start ;86 «ü©wµ{¦¡¶i¤JÂI
³oÓµ{¦¡¤@¶}©l¡A´N¬O§ä¨ì BIOS ¦s©ñ¦r¤¸¹Ï®×ªº¦a¤è¡A§â³o¨Ç¹Ï®×¸ê®Æ²¾¨ì¥»µ{¦¡ªº¸ê®Æ¬q¡C¦¹®É¨Ó·½¦r¦ê¥Ñ DS:SI «ü©w¡AÀ³¸Ó«ü¨ì F000:FA6E ªº¦ì§}¡A¦Ó¥Øªº¦r¦êÀ³«ü¨ì¥»µ{¦¡ªº¸ê®Æ¬q¡A¤]´N¬O message:char_graph ªº¦ì§}¡C¦Ü©ó¦r¦êªø«×¥i¥H¥Ñ±q 0 ¨ì 127 ¦@ 128 Ó¦r¤¸¡A¨CÓ¦r¤¸¦û 8 Ӧ줸²Õ¡A¦]¦¹Á`¦@¦û¥Î 8*128 Ӧ줸²Õ¡C( µ{¦¡²Ä 16 ¦æ¨ì²Ä 23 ¦æ)
²Ä 25 ¦æ¦b°õ¦æ§¹¤F·h²¾«á¡A¤~±N DS «ü¦V§Ú̪º¸ê®Æ°Ï¡C±µ¤U¨Ó²Ä 26 ¦æ¨ì²Ä 36 ¦æ¬O¦L¥X´£¥Ü¦r¦ê¤Î¿é¤J«öÁä¡C²Ä 38 ¦æ¬O«O¦s«öÁ䪺 ASCII ¦r¤¸¡Aµ¥µ{¦¡pºâ¥X¨Ó¦p¦ó¦C¦L®É¡A¦b»È¹õ¤W¦C¦L®É»Ýn¥Î¨ì¡C
²Ä 39 ¦æ¨ì²Ä 43 ¦æ¬Opºâ¸Ó«öÁä©Ò¥Nªíªº ASCII ¦r¤¸ªº 8 Ӧ줸²Õ¦b¨ºùØ¡C¥i¥H·Q¹³¡A¨C¤@Ó¦r¤¸³£¥Ñ 8 Ӧ줸²Õªº¹Ï®×¨Óªí¥Ü¡A¦Ó³o¨Ç¹Ï®×¬O©ñ¦b char_graph ¶}©lªº¦ì§}¡A©Ò¥H ASCII ¬°¹sªº¦r¤¸´N¬O¦b char_graph ¦ì§}¤W¡AASCII ¬°¤@ªº¦r¤¸ ( ªÅ¤ßªº¯ºÁy¹Ï®×¡A°Ñ¦Òªþ¿ý¥| ) ´N¬O¦b char_graph ¤§«áªº²Ä 8 Ó¦ì§}¤W¡AASCII ¬° 2 ªº¦r¤¸ ( ¹ê¤ßªº¯ºÁy¹Ï®× ) ´N¬O¦b char_graph ¤§«áªº²Ä 16 Ó¦ì§}¤W¡K¡K¡A·í¨Ï¥ÎªÌ«ö¤U¤@ÓÁä®É¡A¸ÓÁ䪺 ASCII ¦r¤¸¦b AL ¼È¦s¾¹¡A±N¨ä§ï¦¨¦r²ÕÅܦ¨ AX ( µ{¦¡²Ä 40 ¦æ )¡A¨º¸Ó ASCII ©Ò¦b¦ì§}´NÀ³¸Ó¬O
8*AX + char_graph
µ{¦¡²Ä 41 ¦æ¨ì²Ä 43 ¦æ´N¬Opºâ³o¤@Ӻ⦡¡A¨Ã±Nµ²ªG¦s©ó SI ¼È¦s¾¹¡C
µ{¦¡²Ä 45 ¦æ¨ì²Ä 64 ¦æ¬O¦L¥X¸Ó¦r¤¸ªº¹Ï®×¨Ó¡C¦]¬°¤@Ó¦r¦³ 8 Ӧ줸²Õ¨Óªí¥Ü¨ä¹Ï®×¡A¦Ó¨CӦ줸²Õ¦³ 8 Ӧ줸¨Óªí¥Ü 8 ÓÂI¡A©Ò¥H¤p¤ì°¸¥Î¨âÓ°j°é¨Ó¸Ñ¨M¡C²Ä¤@Ó°j°é¤ñ¸û¤j¡A¥Ñ²Ä 46 ¦æ¨ì²Ä 63 ¦æ¡A³o 8 Ӧ줸²ÕªºÓ¼Æ¦s©ó CH ¤¤¡A¨C³B²z§¹¤@Ӧ줸²Õ¡ACH ´N´î¤@ (²Ä 62 ¦æ)¡A³oÓ°j°é¤@¶}©l´N¨ú±o¥Nªí¸Ó ASCII ¦r¤¸¹Ï®×ªº¤@Ӧ줸²Õ¡A¨ú±o¤è¦¡´N¬O¥Î LODSB «ü¥O ( ²Ä47¦æ )¡A¦¹«ü¥O·|¦Û°Ê¨Ï SI ¥[¤@¡AµM«á±N¨ú±oªº¸ê®Æ©ñ¦b AL ¤¤¡A¥æ¥Ñ²Ä¤GÓ°j°é³B²z¡C¦]¨C¤@Ӧ줸²Õ¦³ 8 Ӧ줸©Ò¥H¶i¤J²Ä¤GÓ°j°é¤§«e¡A¥ý§â 8 ¦s¤J CL ( ²Ä48¦æ )¡C
²Ä¤GÓ°j°é¤ñ¸û¤p¡A¥¦¥]§t¦b²Ä¤@Ó°j°éùØ¡A¹³³o¼Ëªº³B²z¤è¦¡¡AºÙ¤§¬°¡y±_ª¬¡z¡C¦b³oÓ°j°éùØ¡A¥ý§â DH ¤ºªº¼ÆÈ«þ¨©¨ì DL ¤¤¡ADH ªº¼ÆȬO¨Ï¥ÎªÌ©Ò«ö¤UÁ䪺 ASCII ¦r¤¸¡A«þ¨©¨ì DL ¤¤¬On¨Ï¦L¥X¦b¿Ã¹õ¤W¡C²Ä¤G¨B¬O¦V¥ªÃä²¾¤@Ӧ줸¨ì¡y¶i¦ìºX¼Ð¡z¡AX86 «ü¥O¶°¤¤¦³¤@Ó«ü¥O SHL «ê¦n¥i¥H°µ³o¥ó¨Æ ( ²Ä51¦æ )¡A±µ¤U¨Ó´N¬OÀˬd¶i¦ìºX¼Ð ( ²Ä52¦æ )¡A¦pªGè¤~ SHL «áªº¦ì¤¸¬°¤@¡A¨º¶i¦ìºX¼Ð·|³Q³]©w¡AÀ³¸Ó¦L¥X ASCII ¦r¤¸¡F¤Ï¤§¡AY¬°¹s¡A¶i¦ìºX¼Ð·|³Q²M°£¡AÀ³¸Ó¦L¥XªÅ¥Õ ( ²Ä53¦æ )¡C±µ¤U¨Ó²Ä 54 ¦æ¨ì²Ä 57 ¦æ¬O¦L¥XªÅ¥Õ©Î ASCII ¦r¤¸ªºµ{¦¡¡A²Ä 59 ¦æ¬OÀˬd¬O§_¤w±N 8 Ӧ줸³£³B²z§¹²¦¡C
Y³B²z§¹²¦«h¤Sªð¦^²Ä¤@Ó°j°é¡A¥ý¦L¥X´«¦æ¦r¤¸ ( ²Ä61¦æ )¡A¦AÀˬd¬O§_¤w³B²z§¹ 8 Ӧ줸²Õ¡C³o¨âÓ°j°éªºµ²ºc¦p¤U¹Ï¡G
³Ì«á²Ä 66 ¦æ¬O¤@Óªð¦^ DOS ªº«ü¥O¡A¦ý¦]¬° main °Æµ{¦¡¹ï DOS ¦Ó¨¥¬O»·µ{©I¥s¡A¦]¦¹³oÓ ret «ü¥O·|¨ú¥X¨âÓ¦r²Õ¡A¤]´N¬Oµ{¦¡²Ä 12¡N14 ¦æ©Ò±À¤Jªº°ïÅ|¸ê®Æ¡A¦Ó±N±±¨îÅv¥æÁÙµ¹ DOS¡A·íµM¡A¦pªG±z¥Î AH=4CH/INT 21H ¨Óµ²§ô¥»µ{¦¡¤]¥i¥H¡C