Ch 06 ¦A½Í ASCII ½X


¦b²Ä¤T³¹®É´£¨ì±N ASCII ½X¦L¦b»È¹õ¤W¦ý¬O¶È¤î©ó¦L¥X¡Aµe­±¤£¦n¡C³o¤@³¹ùرN§ï¶i³o­Óµ{¦¡¡A§â ASCII ½X©Ò¥Nªíªº¦r¤Î¨ä¼Æ­È¦L¥X¦b»È¹õ¤W¡A¦P®É¬°¨¾¤î»È¹õ¤W±²³t«×¤Ó§Ö¡A©Ò¥H¨C¦¸¥uÅã¥Ü 20 ­Ó ASCII ½X¡C

­ì©lµ{¦¡

§Ú­Ì¥ý¨Ó¬Ý¬Ý³o­Óµ{¦¡ªº­ì©lµ{¦¡¡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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
;***************************************
code    segment
        assume  cs:code,ds:code
        org     100h
;---------------------------------------
start:  sub     bx,bx   ;¨Ï BX µ¥©ó¹s
 
next:   mov     dl,bl   ;¦¹¦æ¤Î¥H¤U 3 ¦æ¦L¥X BL ¤º®eªº
        mov     cl,4    ;¸û°ªªº¥|­Ó¦ì¤¸
        shr     dl,cl
        call    print
        mov     dl,bl   ;¦¹¦æ¤Î¥H¤U 2 ¦æ¦L¥X BL ¤º®eªº
        and     dl,0fh  ;¸û§Cªº¥|­Ó¦ì¤¸
        call    print
 
        mov     ah,2    ;¦¹¦æ¤Î¥H¤U¨â¦æ¦L¥XªÅ¥Õ
        mov     dl,' '
        int     21h
        mov     dl,bl   ;¦¹¦æ¤Î¥H¤U¨â¦æ¦L¥X BL ©Ò¥Nªíªº
        int     21h     ;ASCII ¦r¤¸
        call    cr_lf   ;¦L¥XÂk¦ì¤Î´«¦æ¦r¤¸
 
        inc     bl      ;¨Ï BL ¬°¤U¤@­Ó ASCII ¦r¤¸
        mov     ch,20   ;³]©w°£¼Æ
        mov     ax,bx   ;³]©w³Q°£¼Æ
        div     ch
        or      ah,ah   ;­Y¾l¼Æ¬°¹s,ªí¥Ü¤w¸gÅã¥Ü 20 ­Ó¦r¤F
        jnz     remain
        int     16h     ;©Ò¥HÀ³¸Óµ¥¨Ï¥ÎªÌ«ö¤U¥ô·NÁä¦AÄ~Äò
 
remain: cmp     bl,0    ;¦pªG BL=0,ªí¥Ü¤w¸g§¹¦¨ 256 ­Ó¦r¤F
        jne     next
 
        mov     ax,4c00h
        int     21h
;---------------------------------------
;print °Æµ{¦¡
;¿é¤J¡GDL-¥Ñ 0 ¨ì F ªº¤Q¤»¶i¦ì¼Æ
;¿é¥X¡G¦b¿Ã¹õ¤W¦L¥X DL ¤ºªº ASCII ½X
print   proc    near
        add     dl,30h  ;¥[¤W 30H
        cmp     dl,'9'  ;¤ñ¸û¬Ý¬Ý¬O§_¶W¹L 39H
        jbe     ok      ;¨S¶W¹Lª½±µ¦L¥X
        add     dl,7    ;­Y¶W¹L¦A¥[¤W 7
ok:     mov     ah,2
        int     21h     ;¦L¥X
        ret
print   endp
;---------------------------------------
cr_lf   proc    near
        mov     ah,2
        mov     dl,0dh
        int     21h
        mov     dl,0ah
        int     21h
        ret
cr_lf   endp
;---------------------------------------
code    ends
;***************************************
        end     start

§â³o­Óµ{¦¡²ÕĶ³sµ²«á¡A¦b MS-DOS ¼Ò¦¡¤U°õ¦æ¡A¦p¤U­±¹Ï¤ù¡G

¦¹µ{¦¡·|¥ý§â ASCII ½Xªº¼Æ­È¦L¦b¿Ã¹õ³Ì¥ªÃä¡AµM«á¦L¥XªÅ¥Õ¡A¦A¦L¥X¦r¤¸¡C¨C¦L¥X 20 ¦æ«á¡A´N·|°±¤î¡A¨Ï¥ÎªÌ¥²¶·«ö¥ô·N¤@Áä¡Aµ{¦¡¤S¦A¦L¥X¤U 20 ¦æ¡CASCII «e 20 ­Ó¦r¤¸¡A¦³³\¦h¬O±±¨î¦r¤¸¡A¤£¬O´¶³qªº¦r¤¸¡A¦]¦¹¬O¦L¤£¥X¨Óªº¡C¨Ò¦p 07H¡A¬O¨Ï¹q¸£µo¥X¡u¹Í¡v¤@Án¡F0AH ¬O line feed¡A·N«ä¬O´«¨ì¤U¤@¦æ¡F0DH ¬OÂk¦ì¦r¤¸¡A·N«ä¬O´å¼Ð²¾¨ì³Ì¥ªÃä¡C©³¤U¨Ó¤¶²Ð´X­Ó·s«ü¥O§a¡C

SUB «ü¥O

SUB´N¬O´îªk«ü¥O¡A¥¦ªº»yªk¬O¡G
sub     ¼È¦s¾¹,¼È¦s¾¹
sub     ¼È¦s¾¹,¼Æ¦r
sub     ¼È¦s¾¹,ÅܼƦW
sub     ÅܼƦW,¼È¦s¾¹
sub     ÅܼƦW,¼Æ¦r
SUB ªº§@¥Î¬O§â«e­±ªº¼È¦s¾¹©ÎÅܼƴî¥h«á­±ªº¼È¦s¾¹¡B¼Æ¦r©ÎÅܼơA¦A§âµ²ªG¦s¨ì«e­±ªº¼È¦s¾¹©ÎÅܼƤ¤¡A­nª`·Nªº¬O¡A«e­±ªº¼È¦s¾¹©ÎÅܼƤ¤ªº¼Æ­È·|§ïÅÜ¡C¨Ò¦p¦³¤@µ{¦¡¤ù¬q¡G
mov     ax,9
mov     bx,5
sub     ax,bx
°õ¦æ³Ì«á¤@¦æ®É¡A¬O±N AX ¤§­È´î¥h BX ¤§­È¡A¦A¦s¦^¨ì AX¡A©Ò¥H³Ì«á AX ¬° 4¡A¦Ó BX ¤´¬° 5¡C­nª`·Nªº¬O´î¼Æ»P³Q´î¼Æ³£¥²»Ý¦P®É¬° 16 ¦ì¤¸©Î¦P®É¬° 8 ¦ì¤¸¡A¤]´N¬O»¡ sub ax,bl ¬O¤£¦Xªkªº¡C

DIV «ü¥O

³o¬O­pºâ°£ªkªº«ü¥O¡Cdiv «ü¥Oªº«á­±¥i¥H±µ¼È¦s¾¹©ÎÅܼơA³o­Ó¼È¦s¾¹©ÎÅܼƥNªí°£¼Æ¡A¦Ó³Q°£¼Æ©T©w¬O AX ¼È¦s¾¹¾á¥ô¡A­pºâ¤§«áªº°Ó©ñ¦b AL ¼È¦s¾¹¤¤¡A¾l¼Æ©ñ¦b AH ¼È¦s¾¹¤¤¡C¨Ò¦p§A·Q­pºâ 21 °£¥H 5¡A¼g¦¨µ{¦¡¦p¤U¡G
mov     ax,21
mov     bl,5
div     bl
­pºâ§¹«á BL ¤´µ¥©ó 5¡AAX ·|Åܦ¨ 0104H¡A¨ä¤¤ AL ¬° 4 ¬O°Ó¡AAH ¬°¤@¬O¾l¼Æ¡C

¦pªG³Q°£¼Æ¶W¹L 65535¡A°£¼Æ¶W¹L 255 ªº¸Ü¡A´N¥Î DX:AX ¨Ó¥N´À³Q°£¼Æ¡A­pºâµ²ªG°Ó¼Æ·|¦s©ñ¦b AX¡A¾l¼Æ¦s©ñ¦b DX¡C¨Ò¦p­n­pºâ 80000d(§Y13880h) °£¥H 4000¡Aµ{¦¡¦p¤U¡G

mov     dx,1
mov     ax,3880h
mov     bx,4000
div     bx

­nª`·Nªº¬O¡A§â³Q°£¼Æ¶ñ¤J DX:AX ®É¡A­n¥Î 16 ¶i¦ì¡ADX ¬O¶ñ¤J¸û°ªªº 16 ¦ì¤¸¡AAX ¶ñ¤J¸û§Cªº 16 ¦ì¤¸¡Cµ²ªG¬O AX=14h¡ADX=0¡C¦³Ãö°£ªk«ü¥O¦b²Ä¤K³¹¤¤¦A¸Ô²Ó¤¶²Ð¡C

OR «ü¥O

³o­Ó«ü¥Oªº»yªk¬O
or      ¼È¦s¾¹,¼È¦s¾¹
or      ¼È¦s¾¹,¼Æ¦r
or      ¼È¦s¾¹,ÅܼÆ
or      ÅܼÆ,¼È¦s¾¹
or      ÅܼÆ,¼Æ¦r
³o­Ó«ü¥O¬O±N¼È¦s¾¹©ÎÅܼƪº¤º®e©M«á­±ªº¼Æ¦r§@¡y©Î¡z¹Bºâ¡A¦A±N¨äµ²ªG¦s¤J¸Ó¼È¦s¾¹©ÎÅܼƤ¤¡C©Ò¿×¡y©Î¡z¹Bºâ¬O«ü¦³¨â­Ó±ø¥ó¡A¥u­n¨ä¤¤¤§¤@¦¨¥ß´N¥i¥H¤F¡C¨Ò¦p¦Ñ®v»¡¡G¡y©ú¤Ñ¦Ò¸Õ¡AÃD¥Ø¥u¦³¨âÃD¡A²Ä¤@ÃDµª¹ï©Î²Ä¤GÃDµª¹ï´N¤Î®æ¡C¡z©Ò¥H¦pªG§A²Ä¤@ÃD¹ï²Ä¤GÃD¿ù¡A©Î²Ä¤@ÃD¿ù²Ä¤GÃD¹ï¡A©Î¨âÃD³£¹ï¡A³£ºâ¤Î®æ¡C¦b²Õ¦X»y¨¥¤¤¡A¡y1¡zªí¥Ü¦¨¥ß(¯u)¡A¡y0¡zªí¥Ü¤£¦¨¥ß(°°)¡ACPU ¦b°µ¡y©Î¡z¹Bºâ®É¡A¥ý§â­n§@¡y©Î¡z¹Bºâªº¨â¼Æ´«ºâ¦¨¤G¶i¦ì¡A¥u­n¬Û¹ïÀ³ªº¦ì¼Æ¦³¤@­Ó¬°¡y1¡z¡Aµ²ªG´N¬O¤@¡C¨Ò¦p¦³¤@­Óµ{¦¡¤ù¬q¦p¤U¡G
mov     ax,832h
or      ax,0ac3h
832h Åܦ¨¤G¶i¦ì¼Æ¬O 0000 1000 0011 0010¡A¦Ó 0ac3h ªº¤G¶i¦ì¼Æ¬O 0000 1010 1100 0011¡A¹Bºâ¦p¤U¹Ï¡G
¸Ñ»¡ OR ¹Bºâ
¦b³o­Ó¨Ò¤lùØ¡A°µ©Î¹Bºâªº¨â¼Æ¤¤ªº²Ä¤G¡B¤T¡B¤K¡B¤Q¡B¤Q¤G¡B¤Q¤T¡B¤Q¥|¡B¤Q¤­­Ó¦ì¤¸§¡¬°¹s¡A©Ò¥H¹Bºâµ²ªGªº³o¨Ç¦ì¤¸¤]¬O¹s¡C¦Ó¨ä¥L¤£¬O AX ¬°¤@¡A´N¬O 0ac3h ³o­Ó¼Æªº¤G¶i¦ì¬°¤@¡A©Ò¥Hµ²ªG¬°¤@¡C

AH=0/INT 16H BIOS ªA°È¤¤Â_

INT 16H ¬O BIOS ©Ò´£¨Ñªº¤@­ÓªA°Èµ{¦¡¡AÃþ¦ü INT 21H¡A©Ò¤£¦Pªº¬O«eªÌ¬O BIOS ©Ò´£¨Ñªº¡A«áªÌ¬O DOS ´£¨Ñªº¡CBIOS ©Ò´£¨ÑªºªA°Èµ{¦¡¦³Áä½L(INT 16H)¡B¿Ã¹õ(INT 10H)¡B§Ç¦C°ð(INT 14H)µ¥µ¥¡C¨ä¤¤ INT 16H ¬O´£¨Ñ¦³ÃöÁä½LªºªA°Èµ{¦¡¡A·í AH=0 ®É°õ¦æ¦¹¤¤Â_ªA°Èµ{¦¡¡A¹q¸£·|°±¤U¨Ó¡Aµ¥§A«ö¤@­ÓÁä¤~·|Ä~Äò¡A°õ¦æ§¹«á·|±N¨Ï¥ÎªÌ©Ò«öªºÁä¶Ç¦^ AX ¼È¦s¾¹¤¤¡A²Ä¤K³¹¦A¸Ô²Ó¸Ñ»¡¡C¦¹¨è¥u­nª¾¹D¡A¥¦¬O¥Î¨Ó¨Ï¹q¸£°±¤U¨Ó¡Aµ¥¨Ï¥ÎªÌ«ö¥ô¦ó¤@Á䪺ªA°Èµ{¦¡´N¥i¥H¤F¡C

µ{¦¡¸Ñ»¡

¦b³o­Óµ{¦¡ùØ¡A§Ú¥Î BL ¼È¦s¾¹·í§@°O¿ý ASCII ½Xªº¡yÅܼơz¡A©Ò¥H¤@¶}©l´N¨Ï±o BL ¼È¦s¾¹µ¥©ó¹s¡AµM«á¨C¦L¥X¤@­Ó ASCII ¦r¤¸¡ABL ¤§­È´N¼W¥[¤@¡A¨Ï±o BL «ü¨ì¤U¤@­Ó ASCII ¦r¤¸¨Ó¡C©Î³\§A·|°Ý¡A¬°¤°»ò¤£¼g¦¨ mov bl,0 ¦Ó¼g¦¨ sub bx,bx ©O¡H¦³¨â­Ó²z¥Ñ¡A ±q²Ä¤@¦æ¨ì²Ä¤G¤Q¤@¦æ¡AÀ³¸Ó³£¯à©ú¥Õ¡A²Ä¤G¤Q¤G¦æ¬O¬°¤F¦L¥X¡yÂk¦ì¡z©M¡y´«¦æ¡z¨â­Ó¦r¤¸¡CÂk¦ìªº·N«ä¬O«ü´å¼Ð¦^¨ì¿Ã¹õ³Ì¥ªÃä¡A´«¦æ¬O«ü±N´å¼Ð²¾¨ì¤U¤@¦æ¡CASCII ½X¤¤ªº 0dh¡B0ah ´N¤À§Oªí¥Ü³o¨â­Ó¯S®íªº¦r¡AÁöµM§Ú­Ì¬Ý¤£¨ì³o­Ó¡y¦r¡z¡A¦ý¬O«o¯à¬Ý¨ì¥¦©Ò®i²{ªº®ÄªG¡C³o¨â­Ó¦r¦X¥Îªºµ²ªG´N¬O¨Ï´å¼Ð²¾¨ì¤U¤@¦æªº³Ì¥ªÃä¡C

²Ä¤G¤Q¤T¦æ¨ì¤T¤Q¤T¦æ¬O¬°¤F¬üÆ[¡A¦ÓÀˬd¬O¤£¬O¤w¸g¦L¥X 20 ­Ó¦r¤F¡A¦pªG«ê¦n¦L¨ì²Ä 20¡B40¡B60 µ¥¦r¡A¦¹®É¤@¾ã­Ó¿Ã¹õ¤]®t¤£¦hº¡¤F¡A­nµ¥¨Ï¥ÎªÌ«ö¤@Áä¦AÄ~Äò¤U­± 20 ­Ó¦r¤¸¡C¦Ó³o¨Ç¼Æ­è¦n¬O 20 ªº­¿¼Æ¡A©Ò¥H°£¥H 20 «á±o¨ìªº¾l¼Æ¬°¹s¡A­Y¾l¼Æ(¾l¼Æ©ñ¦b AH ¤¤)¬°¹s¡A´N­nµ¥¨Ï¥ÎªÌ«ö¤@­Ó«öÁä¦AÄ~Äò¡C¹³³o¼ËÀˬd¬Y­Ó¼Æ¡A­Y²Å¦X±ø¥ó´N¨ì¬Y³B¥h°õ¦æªº·Qªk¡AºÙ¬°¡y±ø¥ó¸õÅD¡z¡A©³¤U»¡©ú¨ä¨Ï¥Î¤èªk¡A§A¤]¥i¥H°Ñ¦Ò µù¤G¡C

¦b³o­Óµ{¦¡ùØÀˬd AH ¬O§_¬°¹s¡A§Ú¥Î or ah,ah ¨Ó°µ¡A¦pªG AH ¬°¹s¡A°µ©Î¹Bºâ«áªºµ²ªGÁÙ¬O¹s¡Aor «ü¥O·|±NºX¼Ð¼È¦s¾¹ªº ¹sºX¼Ð³]¬°¤@¡Aªí¥Ü¹Bºâµ²ªG¬°¹s¡C­Y AH ¤£¬°¹s¡A«h°µ©Î¹Bºâ¤§«á¤]¤£¬°¹s¡Aor «ü¥O·|±N¹sºX¼Ð³]¬°¹s¡C§Ú·Q³oÃ䦳³\¦h¤H·|³Q·d½k¶î¤F¡A¦b³o¨à¾ã²z¤@¤U¡G ¹Bºâµ²ªG¬°¹s¡A¹sºX¼Ð³]¬°¤@¡F¹Bºâµ²ªG«D¹s¡A¹sºX¼Ð³]¬°¹s¡C §A¥i¥H¬Ý µù¤G¡A¦³§ó¦n°O±o¤èªk³á¡C

¨ì¦¹¡Aµ{¦¡¥u¬O¤ñ¸û¦Ó¤w¡A¨Ã¨S¦³¯u¥¿¸õÅD¡A¤U¤@¦æ¤~°õ¦æ¸õÅD°Ê§@¡C²Ä¤G¤Q¤E¦æªº jnz (µù¤T) «ü¥O«h¬O¬Ý¨ì¹sºX¼Ð¤£¬°¤@(¹Bºâµ²ªG¤£¬O¹s)¡A´N·|¸õ¨ì remain ¼Ð°O³BÄ~Äò°õ¦æ¡A³o¸Ìªº¹Bºâµ²ªG¬O«ü or ah,ah ¨º¤@¦æ¹Bºâ¡A¦Ó AH ¤¤¦s¦³°£¥H 20 «áªº¾l¼Æ¡C©Ò¥H³o¤@¦æªº·N«ä¬O»¡¡A¦pªG¤£¬O²Ä 20¡B40¡B60 µ¥¼Æ¦rªº¸Ü´N¸õ¨ì remain ¼Ð°O³B°õ¦æ¡F¦pªG¬Oªº¸Ü´NÄ~Äò¤U¤@¦æ«ü¥O¡A³o­Ó«ü¥O´N¬Oµ¥«Ý¨Ï¥ÎªÌ«ö¤@­ÓÁä¦AÄ~Äò°õ¦æ¡C

²Ä¤T¤Q¤G¡B²Ä¤T¤Q¤T¦æ«ü¥O¬OÀˬd¬O§_¤w¸g±N©Ò¦³ªº ASCII ½X³£¦L¥X¨Ó¤F¡H¦pªG¬Oªº¸Ü¨º BL ¼È¦s¾¹¤S·|Âk¹s¡A´N¥i¥Hµ²§ôµ{¦¡¤F¡C

¥»³¹¨ì¦¹µ²§ô¡A¤£ª¾§A¥i©úÁA¤F¡H³Ì«á¦^ÅU¥»³¹­«ÂI¡G


µù¤@¡Gµ²ªG¬°¹s¡A©Ò¥H±N¡y¹sºX¼Ð¡z³]¬°¤@¡A´«¥y¸Ü»¡¡A¹sºX¼Ð¬°¤@¡Aªí¥Ü¡y¦³¹s¡z¡AÁÙ°O±o¹q¸£¤¤¥Î¡y¤@¡z¥Nªí¡y¦³¡z©Î¡y¯u¡zªº·N«ä¡A¥Î¹s¥Nªí¡y¨S¦³¡z©Î¡y°°¡zªº·N«ä¡C

µù¤G¡G²Õ¦X»y¨¥¤¤ªº±ø¥ó¸õÅD«ü¥O(´N¬O¹³¡y­Y A ¤j©ó B ´N¸õ¨ì¬Y³B¡z)³q±`·|¦³¨â¦æµ{¦¡¡A¤@­Ó¬O¥Î¨Ó¤ñ¸û¨Ã³]¦nºX¼Ð¡A¥t¤@­Ó¬O¨Ì¾Ú¤W­±³]¦nªººX¼Ð°õ¦æ¸õÅD¡C¨Æ¹ê¤W¡Aªì¾ÇªÌ¼gµ{¦¡®É¨º¸ÌÁÙ°O±o¹sºX¼Ð¬°¤@ªí¥Ü¤°»òµ¥µ¥¡C©Ò¥H§Ú¾ã²z¥X¤@¨Ç²³æªº³W«h¡A¥u­n°O±o¤U­±´X­Ó²³æªº³W«h(§Ú¬O»¡¤£¥Îªá¦h¤Ö¤O®ð´N¯à°O±o¤£¬O»¡ÁÙ±o¬d¾\®ÑÄy¤~¯à²M·¡)¡A§A¤£¥Î¥hºÞ¹sºX¼Ð©Î¬O¨ä¥LºX¼Ð¡A¤@¼Ë¥i¥H³B²z¦n¸õÅD«ü¥Oªº¡C

©³¤U»¡©ú´X­Ó¨Ò¤l§a¡C

²Ä¤@­Ó¨Ò¤l¡G

cmp     ax,bx
jl      x1

³o¬Û·í©ó¡y­Y AX ¤p©ó BX¡A«h¸õ¨ì x1 ³B¡z¡A²Ä¤@¦æªº·N¸q´N¬O¡y¤ñ¸û AX¡BBX¡z¡A²Ä¤G¦æ¬O¡y­Y¤p©ó´N¸õ¨ì x1 ³B¡z¡C¬Ý¬Ý©³¤Uªº¹Ï¸Ñ§a¡C

¹Ï¸Ñ±ø¥ó¸õÅD«ü¥O
²Ä¤G­Ó¨Ò¤l¬O¡G
sub     ah,ah
jz      x1

³o¬Û·í©ó¡y­Y AH ´î AH µ¥©ó¹s¡A´N¸õÅD¡z¡A¦¹³B±o°O±o sub «ü¥O¦n¹³¤ñ¸û«ü¥O¡A¦pªG¡y¬Ûµ¥¡z¡A©Î¡y¬Û´î«á¬°¹s¡z´N¸õÅD¡C¦pªG¯uªº¼g¥X³o­Óµ{¦¡¤ù¬q¡A¨Æ¹ê¤W¹Bºâ«á¤@©w·|¸õÅDªº¡A¦]¬° AH ´î AH ¤@©wµ¥©ó¹s¡C

µù¤T¡Gjnz ªº·N«ä¬O¡yJump if Not Zero¡z


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