¦b²Ä¤»³¹¤w¸gµyµy´£¹LµL¸¹¼Æ ( unsigned number ) »P¦³¸¹¼Æ ( signed number )¡A«eªÌ¨S¦³¥¿t¸¹¡A¤@¯ë¥iµø¬°¥¿¼Æ¡F«áªÌ¦³¥¿t¸¹¡A¥H³Ì°ª¦ì¤¸ªí¥Ü¨ä²Å¸¹¡A³Ì°ª¦ì¤¸¬°¹s¡Aªí¥Ü¥¿¼Æ¡F¬°¤@ªí¥Üt¼Æ¡C³o¤@³¹¤p¤ì°¸±N±´°Q¦³¸¹¼Æ¡A¨Ã³]p¤@µ{¦¡¥i¥H¿é¤J¨âÓ¦³¸¹¼Æ¡AµM«á¥H³o¨â¼Æ°µ¥[´î¹Bºâ¡A¨Ã±Nµ²ªGÅã¥Ü¦b¿Ã¥ú¹õ¤W¡C
¦b¼Æ¾Ç¤Wªí¥Üt¼Æ«Ü²³æ¡A¥un¦b¼ÆÈ«e¥[¤W¡u¡Ð¡v¸¹§Y¥i¡A¨Ò¦p ¡Ð88¡C¦ý¦b¹q¸£¤Wnªí¥Üt¼Æ¸Ó«ç»ò¿ì©O¡H¨ä¹ê¦³³\¦hºØ¤è¦¡¡A¦³¸¹¶q¼Æ ( ì½X )¡B¤G¸É¼Æµ¥µ¥¤èªk¡A¤£½×þ¤@ºØ¤èªk³£¬O¥Î³Ì°ª¦ì¤¸ªí¥Ü¥¿¸¹©Ît¸¹¡A³o³Ì°ª¦ì¤¸¤]ºÙ¬°²Å¸¹¦ì¤¸¡C¦pªG¬O¤K¦ì¤¸ªº¼ÆÈ¡A²Ä¤C¦ì¤¸´N¬O²Å¸¹¦ì¤¸¡F¦pªG¬O¤Q¤»¦ì¤¸ªº¼ÆÈ¡A²Ä¤Q¤¦ì¤¸´N¬O²Å¸¹¦ì¤¸¡C¦b¹q¸£»â°ìùØ¡A³Ì§C¦ì¤¸¬O²Ä¹s¦ì¤¸¡C¦p¤U¹Ï¤¤ªº S ´N¥Nªí²Å¸¹¦ì¤¸¡G
¦³¤@ºØªí¥Ü¦³¸¹¼Æªº¤èªkºÙ¬°¡u¦³¸¹¶q¼Æ¡v¡A¥¦ªí¥Ü¥¿t¼Æªº¤è¦¡«Üª½Ä±¡A´N¬O§â¥¿¼Æªº²Å¸¹¦ì¤¸Åܦ¨¤@´N¦æ¤F¡A¨Ò¦p 5 ªº¤K¦ì¤¸¤G¶i¦ì¼Æ¬O¡u0000 1001¡v¡A¡Ð5 ´N¬O¡u1000 1001¡v¡C³o¼Ëªºªí¥Ü¤è¦¡Áö²³æ¡A¦ý¹Bºâ°_¨Ó´N«Ü½ÆÂø¤F¡C¨Ò¦p§Ú̪¾¹D 5¡Ï(¡Ð5¡~¡×0¡A¦ý¬O¦pªG¥H¦³¸¹¶q¼Æpºâ«oµLªk±o¨ì¹s¡A¥²¶·§â²§¸¹¼Æªº¥[ªk§ï¦¨´îªk¹Bºâ¤~¦æ¡C¦ý¦pªGnºâ¦P¸¹¼Æªº¥[ªk¹Bºâ¡A´N¯uªº¥un¥Î¥[ªk¡C©Ò¥H°²³]¥Î¦³¸¹¶q¼Æªí¥Ü¦³¸¹¼Æ¡A°µ¥[ªk¹Bºâ«eÁÙn¥ýÀˬd³o¨â¼Æ¬O§_¬°²§¸¹¼Æ¡CÅãµM¥Î³oºØ¤è¦¡ªí¥Ü¦³¸¹¼Æ¡An¶i¦æ¹Bºâ¬O«Ü³Â·Ðªº¡A¦h¼Æ¹q¸£¤£±Ä¥Î³oºØ¤èªk¡C
¥t¤@ºØªí¥Ü¦³¸¹¼Æªº¤èªk¬O¥Î¡u¤G¸É¼Æ¡v¡A³o¤]¬O²{¤µ¤j¦h¼Æ¹q¸£©Ò±Ä¥Îªº¤è¦¡¡A¤]¥]§t x86/x64 ¬Û®e¹q¸£¡C
¤j¦h¼Æ¹q¸£¥Î¤G¸É¼Æªkªí¥Ü¦³¸¹¼Æ¡A·N«ä´N¬O¬Y¼Æªº¤G¸É¼Æ¡A´N¬O¨ätÈ¡C¥ý¨Ó»¡»¡¡A«ç»ò¥hpºâ¬Y¼Æªº¤G¸É¼Æ©O¡H¨ä¹ê¨Ã¤£Ãø¡A§Q¥Î©³¤Uªº¨BÆJ¡A«Ü®e©ö´N¯àºâ¥X¨Ó¡G
Á|´XÓ¨Ò¤l¨Ó¸Õ¸Õ¬Ý¡G
²Ä¤@Ó¨Ò¤l¡A¨D¤K¦ì¤¸ 52h ªº¤G¸É¼Æ¡A¦p¤U¹Ï¡G ¬G 52h ªº¤G¸É¼Æ¬O AEh | ¦AÁ|¥t¤@Ó¨Ò¤l¡A¨D¤K¦ì¤¸ 9Bh ªº¤G¸É¼Æ¡A¦p¤U¹Ï¡G ¬G 9Bh ªº¤G¸É¼Æ¬O 65h |
¥t¥~ÁÙ¦³¤@ºØ¤è¦¡¤]¯àpºâ¬Y¼Æªº¤G¸É¼Æ¡G
¨Ò¦p¤U±n¨D 52h ªº¤G¸É¼Æ¡A¹Lµ{¦p¤U¡G
¡@①¥Ñ³Ì§C¦ì¤¸¶}©l¦V°ª¦ì¤¸¡A¦pªG¬O 0 ´N·Ó§Û¡Aª½¨ì¥X²{ 1¡A²Ä¤@¦¸¥X²{ªº 1 ¤]·Ó§Û¡C
¡@②¤ÏÂà³Ñ¤Uªº¦ì¤¸¡A³Ì«áªºµ²ªG´N¬O 52h ªº¤G¸É¼Æ¡C
¥Ñ¤W±¨âºØ¤èªk³£¯àpºâ¥X¨Ó¡A52h ªº¤G¸É¼Æ¬° AEh¡A9Bh ªº¤G¸É¼Æ¬O 65h¡C²{¦b¤w¸gª¾¹D¦p¦ópºâ¬Y¼Æªº¤G¸É¼Æ¡A¦ý¬O³o¦³¤°»ò¥Î³~©O¡H¡C
¥J²ÓÆ[¹î«á¡A¥i¥Hµo²{¤G¸É¼Æ¦³´Xөʽè¡G
¦^·Q°ê¤¤®É¾Ç¥¿t¼Æ¡A¦pªG¨â¼Æ¬Û¥[¬°¹s¡A³o¨âӼƥ²¬O¤@¥¿¤@t¡A¨Ò¦p ¡Ï58 ©M ¡Ð58¡A¥¦Ìµ¥È²§¸¹¡A¤¬¬°¬Û¤Ï¼Æ ( ¦b¼Æ¾Ç¤W¡A¨â¼Æ¤§©M¬°¹sªº¡A³o¨â¼Æ´N¤¬¬°¬Û¤Ï¼Æ )¡C¥t¥~¡A¦pªG§â ¡Ð58 ¦A¨út¸¹¡Aµ²ªG¤SÅܦ¨ ¡Ï58¡C
¬Y¼Æ»P¨ä¤G¸É¼Æ¡A«ê¦n³£²Å¦X¤W±ªº³W«ß¡A¦]¦¹§Ú̧â¬Y¼Æ»P¨ä¤G¸É¼Æ·í¦¨¨âӬۤϼơA¤]´N¬O»¡¡A52h ¨ú¨ätȬO AEh¡A9Bh ¨ú¨ätȬO 65h¡C¤j¦h¼Æªº²{¥N¹q¸£ùØ¡A¥Î¤G¸É¼Æ¥N´Àt¼Æ¡C
ÁA¸Ñ¤F¥H¤G¸É¼Æªí¥Üt¼Æ«á¡An¦p¦ó§â¤Q¤»¶i¦ìªº¦³¸¹¼ÆÂà´«¦¨¤Q¶i¦ì¼Æ©O¡H³o¥i¥H¤À¤T³¡¤À¨Ó»¡¡G
¦pªG³Ì°ª¦ì¤¸¬° 0¡Aªí¥Ü¬°¥¿¼Æ¡A¨º»ò´N·ÓµL¸¹¼Æªº¤è¦¡pºâ¡C¥i¥H°Ñ¦Òªþ¿ý¤Gªº»¡©ú¡A¥Î¦hÓ 16 ªº¾¦¸¤è¤§©M¨D±o¡C¨Ò¦p¤K¦ì¤¸ªº¦³¸¹¼Æ 63h Åܦ¨¤Q¶i¦ì¬°¦ó¡H¦p¥k¹Ï©Ò¥Ü¡A¥ý¬Ý³Ì°ª¦ì¤¸¬O 0¡A¦]¦¹¬O¥¿¼Æ¡C¦A§â¥¦Åܦ¨ 6¡Ñ161¡Ï3¡Ñ160¡×99¡A¦]¦¹ 63h¡×99d¡C¤]¥i¥H§â 63h Âà´«¦¨¤G¶i¦ì¡A0110 0011¡A©ó¬OÅܦ¨ 26¡Ï25¡Ï21¡Ï20¡A¥[°_¨Ó¤]¬O 99¡C
¤W±ªº¤èªk¬O§Ṳ́HÃþ¨Ï¥Î¯Èµ§¦b¸£³U¤¤pºâªº¹Lµ{¡A¦b¹q¸£¤¤¥²¶·¥Î²Ä¤C³¹ªº¤èªk¡A¥H³sÄò°£¥H¤Q©Ò±oªº¾l¼Æ²Õ¦X°_¨Ó¡A´N¬O¤Q¶i¦ì¼Æ¦r¦r¦ê¡C
¦pªG³Ì°ª¦ì¤¸¬° 1¡Aªí¥Ü¬°t¼Æ¡A¤£¥iª½±µpºâ¡F¥²¶·¥ý¨ú¨ä¤G¸É¼Æ¡AµM«á¦A¨ÌµL¸¹¼Æ¤è¦¡¹Bºâ¡A³Ì«á¦A¥[¤Wt¸¹¡C³oì²z¬O³o¼Ëªº¡A¦³¸¹¼ÆY¬°t¼Æ¡AÁöµM§Ṳ́£ª¾¹D³o¼Æ¬O¤°»ò¡A¦ý¬O±N¨äÅܬ°¤G¸É¼Æ¤§«á¡A´N¬Oì¼Æªº¬Û¤Ï¼Æ¡A´NÅܦ¨¥¿¼Æ¤F¡A¦A¨ÌµL¸¹¼Æ¤è¦¡±N³oÓ¥¿¼ÆÅܦ¨¤Q¶i¦ì¼Æ¡A³Ì«á¦A¥[¤Wt¸¹¡C
¨Ò¦pn§â¤K¦ì¤¸ªº¦³¸¹¼Æ 84h Åܦ¨¤Q¶i¦ì¡A¦p¥k¹Ï¡C²Ä¤@¨B¡A¥ý§â¥¦Åܦ¨¤G¶i¦ì¡A¡u1000 0100¡vÀˬd³Ì°ª¦ì¤¸¬° 1¡A±oª¾¬°t¼Æ¡C²Ä¤G¨B±N¨äÅܦ¨¤G¸É¼Æ¡A0111 1100¡A¦A§â³oÓ¤G¸É¼ÆÅܦ¨¤Q¶i¦ì¼Æ¡A26¡Ï25¡Ï24¡Ï23¡Ï22¡A¥[°_¨Ó¬O 124¡A³Ì«á¦A¥[¤Wt¸¹¡A¦]¦¹ 84h¡×¡Ð124¡C
¦P¼Ëªº¡A¦b¹q¸£ùØpºâ¹Lµ{¬O¥ý§â³oÓt¼Æ°µ¤G¸É¼Æ¹Bºâ¡A¨Ï¥¦Åܦ¨¥¿¼Æ¡AµM«á¥H³sÄò°£¥H¤Q©Ò±oªº¾l¼Æ²Õ¦X°_¨Ó¡A´N¬O¤Q¶i¦ì¼Æ¦r¦r¦ê¡A³Ì«á¦b¦¹¼Æ¦r¦r¦ê«e¥[¤Wt¸¹¡A´N¤j¥\§i¦¨¤F¡C
³o¤£¥²¸ÑÄÀ¡A¸Ó¼Æ´N¬O 0¡C¨Ò¦p¤K¦ì¤¸ªº¦³¸¹¼Æ¡A0000 0000¡A´N¥Nªí¹s¡C
«Å§i¦³¸¹¼Æªº¤èªk¬O¨Ï¥Î¤U±¥|Ó°²«ü¥O¡G
ÅܼƦW SBYTE ªì©lÈ ÅܼƦW SWORD ªì©lÈ ÅܼƦW SDWORD ªì©lÈ ÅܼƦW QWORD ªì©lÈ
SBYTE¡BSWORD¡BSDWORD ¤¤ªº¡uS¡v¬O sign ªº·N«ä¡A¤ñ¸û¯S§Oªº¬O¨S¦³¡uSQWORD¡v¨Ó«Å§i¥|¦r²Õªº¦³¸¹¼Æ¡C³]pµ{¦¡®É¨Ì¾Ú¦³¸¹¼Æªº½d³ò¨M©w¨Ï¥Îþ¤@ºØ°²«ü¥O¡A¥¦Ìªº½d³ò¦p¤Uªí¡G
ºØÃþ | °²«ü¥O | ¦WºÙ | ªø«× ( ¦ì¤¸²Õ ) | ©Ò¯àªí¥Üªº¾ã¼Æ½d³ò |
µL¸¹¼Æ | DB¡BBYTE | ¦ì¤¸²Õ | 1 | 0¡ã255 |
DW¡BWORD | ¦r²Õ | 2 | 0¡ã65,535 | |
DD¡BDWORD | Âù¦r²Õ | 4 | 0¡ã4,294,967,295 | |
DQ¡BQWORD | ¥|¦r²Õ | 8 | 0¡ã18,446,744,073,709,551,615 | |
¦³¸¹¼Æ | SBYTE | ¦ì¤¸²Õ | 1 | ¡Ð128¡ã127 |
SWORD | ¦r²Õ | 2 | ¡Ð32,768¡ã32,767 | |
SDWORD | Âù¦r²Õ | 4 | ¡Ð2,147,483,648¡ã2,147,483,647 |
Æ[¹î¤Wªí¡A±oª¾µL¸¹¼Æªº¦ì¤¸¼Æ¶V¦h¡A©Ò¯àªí¥Üªº½d³ò¤]¶V¤j¡F¦³¸¹¼Æ¤]¬O¤@¼Ë¡C¦ý¬O¦b¬Û¦P¦ì¤¸®É¡A¥¿¼Æ»Pt¼Æ¤j¬ù¦U¦û¤@¥b¡A¦]¦¹¦³¸¹¼Æ©Ò¯àªí¥Üªº¥¿¼Æ½d³ò¸ûµL¸¹¼Æ¤p¡C
ÁöµM¦b¤Wªí¤¤¡A¥Î¤£¦Pªº°²«ü¥O«Å§i¦³¸¹¼Æ©MµL¸¹¼Æ¡A¦ý¬O¹ê»Ú¤W²ÕĶ¾¹¨Ã¤£¤Ó¦b¥G³oºØ°Ï§O¡A¨Ò¦p§A¤]¥i¥H¥Î DB/DW/DD «Å§i¦³¸¹¼Æ¡A¤Ï¹L¨Ó¤]¥i¥H¥Î SBYTE/SWORD/SDWROD «Å§iµL¸¹¼Æ¡A¤U±ªº¨Ò¤l³£¬O¥¿½Tªº«Å§i¡G
x DB -1 y DW -100 z SWORD 65535
¦¹¥~nª¾¹Dªº¬O¡AµL¸¹¼Æ©Î¦³¸¹¼Æªº§P§O¤è¦¡¨ä¹ê§¹¥þ¥Ñµ{¦¡¨M©w¡A¨Ã«D¥Ñ«Å§i®É¨M©w¡A³o¤]´N¬O¬°¦ó²ÕĶ¾¹¤£¤Ó¦b¥G DB/BYTE »P SBYTE ªº°Ï§O¡C¨Ò¦p¬YӦ줸²Õ¬O 0FFh ¨ä¹ê¥i¥Hªí¥ÜµL¸¹¼Æªº 255¡A¤]¥i¥Hªí¥Ü¦³¸¹¼Æªº ¡Ð1¡A§¹¥þ¬Ýµ{¦¡¦p¦ó¸ÑÄÀ¡C¤U¹Ï¬O¤@Ӧ줸²Õªº¦³¸¹¼Æ»PµL¸¹¼Æ¥Ü·N¹Ï¡A¥i¥H¬Ý±o¥X¨Ó¡G
¤f»¡µL¾Ì¡A©³¤Uªºµ{¦¡½X¡A¥ªÃ䪺·|§â 0FFh ·í¦¨µL¸¹¼Æ¡A§Y 0FFh¡×255¡A°õ¦æ«á·|¦b¿Ã¥ú¹õ¤WÅã¥Ü 255¡F¦Ó¥kÃ䪺µ{¦¡·|§â 0FFh ·í¦¨¦³¸¹¼Æ¡A§Y 0FFh¡×¡Ð1¡A°õ¦æ«á·|¦b¿Ã¥ú¹õ¤WÅã¥Ü ¡Ð1¡G
.MODEL SMALL,C .386 ;************************************************* .DATA x DB 0FFh ten DB 10 string DB 6 DUP (?),"$" ;************************************************* .CODE .STARTUP mov al,x mov cx,3 mov bx,OFFSET string+SIZEOF string-2 .WHILE cx xor ah,ah div ten add ah,"0" mov [bx],ah .BREAK .IF al==0 dec bx dec cx .ENDW mov dx,bx mov ah,9 int 21h .EXIT ;************************************************* END |
.MODEL SMALL,C .386 ;************************************************* .DATA x DB 0FFh ten DB 10 string DB 6 DUP (?),"$" ;************************************************* .CODE .STARTUP mov al,x neg al mov cx,3 mov bx,OFFSET string+SIZEOF string-2 .WHILE cx xor ah,ah div ten add ah,"0" mov [bx],ah .BREAK .IF al==0 dec bx dec cx .ENDW dec bx mov BYTE PTR [bx],"-" mov dx,bx mov ah,9 int 21h .EXIT ;************************************************* END |
¥ªÃ䪺µ{¦¡¡A¨ä¹ê»P²Ä¤C³¹ªº DECIMAL.ASM Ãþ¦ü¡A¥u¬O§â¤Q¤»¶i¦ì¼ÆȥѦ줸²Õ§ï¦¨¦r²Õ¡A¨ä¾l§¡¬Û¦P¡C¦Ó¥kÃ䪺µ{¦¡«h¦h¤F NEG «ü¥O©M¦b¦r¦ê«e¥[¤W¡u¡Ð¡v¸¹¡C
¥H¤G¸É¼Æªí¥Ü¦³¸¹¼ÆªºÀuÂIÁöµM¦h¡A¦ý¬O¦³Ó¤p¯ÊÂI¡A§ÚÌ¥un¤p¤ß³B²z³oÓ¯ÊÂI¡A¨Ã¤£·|³y¦¨¤Ó¤jªº§xÂZ¡C³oÓ¯ÊÂI¬O¤°»ò©O¡H¥ý¨Ó¬Ý©³¤Uªº¨Ò¤l¡C
¦pªGnpºâ¤Q¶i¦ìªº¨â¼Æ 96¡Ï92¡A§Ú̳£ª¾¹D¡Aµª®×¬O 188¡A¨º»ò¦b¹q¸£ùجO¦p¦ópºâªº©O¡Hº¥ý§â³o¨â¼ÆÅܦ¨¤G¶i¦ì¡A¤À§O¬O 0110 0000 ( 96d¡×60h )¡B0101 1100 ( 92d¡×5Ch )¡A¥[°_¨ÓÅܦ¨ 1011 1100¡Aµ²ªGÅܦ¨t¼Æ¡A¦p¥k¹Ï¡C«Ü©úÅ㪺¥i¥H¬Ý¥X¨Ó¡A³o¬O¦]¬°¨âӼƪº²Ä¤»¦ì¤¸³£¬O¤@¡A¬Û¥[¤§«á¶i¦ì¨ì²Å¸¹¦ì¤¸¡A¥HP¨Ï¨â¼Æ¤§©MÅܦ¨t¼Æ¡C¹³³oºØ±¡§Î¡A¹Bºâªºµ²ªG¶W¹L©Ò¯àªí¥Üªº½d³ò¡A´NºÙ¬°·¸¦ì¡C¥H³oÓ¨Ò¤l¨Ó»¡¡A¤K¦ì¤¸©Ò¯àªí¥Üªº¦³¸¹¼Æ½d³ò¬O ¡Ð128¡ã127¡A¦Ó 96¡Ï92 ¬O 188¡A¶W¹L¤F 127¡A³o¼Ëªº±¡§Î´N¬O·¸¦ì¡C
ÁÙ¦³¤@ºØ±¡§Î¡A¨âÓt¼Æ¬Û¥[¡A¤]¦³¥i¯à³y¦¨·¸¦ì¡C¨Ò¦p ¡Ð80¡Ï(¡Ð90) ( ¡Ð80d¡×B0h¡B¡Ð90¡×A6h )¡Aµ²ªGÀ³¸Ó¬O ¡Ð170¡A¦pªG¥H¦³¸¹¼Æ¹Bºâµ²ªG¦p¥k¹Ï¡A¥i¥Hµo²{²Å¸¹¦ì¤¸Åܦ¨ 0¡Aµ²ªG¬°¥¿¼Æ¡C³o¬O¦]¬°µ²ªG¤p©ó ¡Ð128¡A¶W¹L¤F¦³¸¹¼Æªº½d³ò¡A¦]¦¹³y¦¨·¸¦ì¡C
´îªk¤]¦³¥i¯à·¸¦ì¡A¨Ò¦p 96¡Ð(¡Ð92)¡Aµ²ªGÀ³¸Ó¬O 188¡A¶W¹L ¡Ð128¡ã127 ªº½d³ò¡F¥t¤@ºØ±¡§Î¬O¹³ ¡Ð96¡Ð92¡Aµ²ªG¬O ¡Ð188¡A¤]¶W¹L ¡Ð128¡ã127 ªº½d³ò¡C
¾ã²z¤§«áµo²{¡A¦pªG¨Ï«Ü¤jªº¨â¥¿¼Æ¬Û¥[¡A©Î¬O«Ü¤pªº¨ât¼Æ¬Û¥[¡A´N¦³¥i¯àµo¥Í·¸¦ì¡F©Î¬O¨Ï«Ü¤jªº¥¿¼Æ´î«Ü¤pªºt¼Æ¡A©Î«Ü¤pªºt¼Æ´î«Ü¤jªº¥¿¼Æ¡A³£¦³¥i¯àµo¥Í·¸¦ì¡C¨º»ò¬O§_¦³¤èªk¯à°÷³B²z³oºØ·¸¦ì¿ù»~©O¡H¨Æ¹ê¤W¡ACPU ¦b³]p®É´N¤w¸g¦Ò¼{³oÓ°ÝÃD¤F¡C·í¹Bºâµo¥Í·¸¦ì®É¡ACPU ·|¦Û°Ê³]©w·¸¦ìºX¼Ð ( overflow flag )¡A¨Ï·¸¦ìºX¼ÐÅܦ¨¤@¡A¦b DEBUG/SYMDEB ùØÅã¥Ü OV¡F¦pªG¨Sµo¥Í·¸¦ì¡A´N·|²M°£·¸¦ìºX¼Ð¡A¨Ï·¸¦ìºX¼ÐÅܦ¨¹s¡ADEBUG/SYMDEB Åã¥Ü NV¡C¦b³]pµ{¦¡®É¡A´N¯à°÷¨Ì¾Ú·¸¦ìºX¼Ðªºª¬ºA¡A¦Ò¼{¦p¦ó³B²z·¸¦ìªº°ÝÃD¡C
NEG «ü¥O¬O¥Î¨Ópºâ¤G¸É¼Æªº«ü¥O¡A¥¦ªº»yªk¬O
NEG ¥Øªº¹Bºâ¤¸
NEG ·|pºâ¥Øªº¹Bºâ¤¸ªº¤G¸É¼Æ¡AµM«á¦A¦s¦^¥Øªº¹Bºâ¤¸¡A¥Øªº¹Bºâ¤¸·|³Q¯}Ãa¡C¥Øªº¹Bºâ¤¸¥i¥H¬O¤K©Î¤Q¤»¦ì¤¸ªº¼È¦s¾¹©ÎÅܼơAY¦b 80386 µ¥¯Å¥H¤Wªº CPU¡A¥Øªº¹Bºâ¤¸¥i¥H¨Ï¥Î¤T¤Q¤G¦ì¤¸ªº¼È¦s¾¹©ÎÅܼơC
NOT «ü¥O¬O¥Î¨Ópºâ¤@¸É¼Æªº«ü¥O¡C¤@¸É¼Æ¬O§â©Ò¦³¦ì¤¸¤ÏÂà¡A¥ç§Y¤@Åܹs¡A¹sÅܤ@¡CNOT ªº»yªk¬O
NOT ¥Øªº¹Bºâ¤¸
NOT ·|pºâ¥Øªº¹Bºâ¤¸ªº¤@¸É¼Æ¡AµM«á¦A¦s¦^¥Øªº¹Bºâ¤¸¡A¥Øªº¹Bºâ¤¸·|³Q¯}Ãa¡C¥Øªº¹Bºâ¤¸¥i¥H¬O¤K©Î¤Q¤»¦ì¤¸ªº¼È¦s¾¹©ÎÅܼơAY¦b 80386 µ¥¯Å¥H¤Wªº CPU¡A¥Øªº¹Bºâ¤¸¥i¥H¨Ï¥Î¤T¤Q¤G¦ì¤¸ªº¼È¦s¾¹©ÎÅܼơC
JO/JNO «ü¥O¬O±ø¥ó¸õ¶V¡AO ¬O«ü·¸¦ìªº·N«ä¡ANO ¬O¨S¦³·¸¦ì¡F·í¹Bºâµo¥Í·¸¦ì®É¡ACPU ·|³]©w·¸¦ìºX¼Ð¡A¨Ï¤§Åܬ°¤@¡F·í¹Bºâ¨Sµo¥Í·¸¦ì®É¡ACPU ´N²M°£·¸¦ìºX¼Ð¡A¨Ï¤§Åܬ°¹s¡C¥¦ªº»yªk¬O¡G
JO ¼Ð°O JNO ¼Ð°O
JO ¬O¦pªGµo¥Í·¸¦ì¡A´N¸õ¨ì¼Ð°O³B°õ¦æ¡FJNO «h¬O¨S¦³·¸¦ì¡A¤~¸õ¨ì¼Ð°O³B°õ¦æ¡C
TEST «ü¥Oªº»yªk¬O
TEST ¥Øªº¹Bºâ¤¸,¨Ó·½¹Bºâ¤¸
TEST «ü¥O©M AND «ü¥O´X¥G¤@¼Ë¡A®t§O¦b©ó TEST ¶È¶È°µ¹Bºâ¦Ó¤w¡A¤£·|§â¹Bºâµ²ªG¼g¤J¥Øªº¹Bºâ¤¸¡A´«¥y¸Ü»¡¡A¥Øªº¹Bºâ¤¸¤£ÅÜ¡CÁö¬O¦p¦¹¡A¦ý TEST ·|§ïÅܺX¼Ð¡CTEST ·|²M°£¶i¦ìºX¼Ð»P·¸¦ìºX¼Ð¡A·|¨Ì¾Ú¹Bºâµ²ªG§ïÅܲŸ¹ºX¼Ð¡B¹sȺX¼Ð¡B¦P¦ìºX¼Ð¡C
§ÚÌ¥i¥HÂÇ¥Ñ TEST ªº¯S©Ê¡AÀˬd¬YÓ¦³¸¹¼Æ¬O¥¿¼ÆÁÙ¬Ot¼Æ¡C¨Ò¦p©³¤Uªº¨Ò¤l¡G
mov ax,0ffffh test ax,8000h jnz negative positive: . . negative: .
¦pªG AX ¬Ot¼Æ¡A¨º»ò²Ä 15 ¦ì¤¸¬° 1¡A»P 8000h °µ TEST ¹Bºâ¡A¦Ó 8000h ªº²Ä 15 ¦ì¤¸¤]¬O 1¡A¬G¹Bºâ«áµ²ªG¤£¬°¹s¡A´N·|¸õÅD¨ì negative ³B¡C
COMPUTE Åý¨Ï¥ÎªÌ¿é¤J¨âÓ¦b ¡Ð32768¡ã32767 ½d³ò¤ºªº¦³¸¹¼Æ¡ACOMPUTE ·|°µ¥[ªk©M´îªk¹Bºâ¡A¦b§âµ²ªG¦L¦b¿Ã¹õ¤W¡C²ÕĶ COMPUTE.ASM ¤Î°õ¦æµ²ªG¦p¤U¹Ï¡G
COMPUTE.ASM §¹¾ãµ{¦¡½X¦p¤U¡G1 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 62 63 64
65 66 67 68
69 70 71 72
73 74 75 76
77 78 79 80
81 82 83 84
85 86 87 88
89 90 91 92
93 94 95 96
97 98 99 100
101 102 103 104
105 106 107 108
109 110 111 112
113 114 115 116
117 118 119 120
121 122 123 124
125 126 127 128
129 130 131 132
133 134 135 136
137 138 139 140
141 142 143 144
145 146 147 148
149 150 151 152
153 154 155 156
157 158 159 160
161 162 163 164
165 166 167 168
169 170 171 172
173 174 175 176
177 178 179 180
181 182 183 184
185 186 187 188
189 190 191 192
193 194 195 196
197 198 199 200
201 202 203 204
205 206 207 208
209 210 211 212
213 214 215 216
217 |
;¥ô¿é¤J¨â¼Æ¡An1»Pn2¡ACOMPUTE·|¹ï¦¹¤G¼Æ°µ¥[´îªk¹Bºâ¡AµM«á¦L¥Xµª®×¨Ó
.MODEL SMALL,C
.386
;*******************************************************************************
.STACK 256
;*******************************************************************************
.DATA
n1 SWORD ?
n2 SWORD ?
plus_or_minus DW 0
n_str DB 8 DUP (?),"$"
msg1 DB "Input a number (-32768~32767):$"
msg2 DB 0dh,0ah,"Error input.$"
crlf DB 0dh,0ah,"$"
buffer DB 9 DUP (?)
exit_code DB ?
;*******************************************************************************
.CODE
;-------------------------------------------------------------------------------
print_string PROC p_str:WORD
mov dx,p_str
mov ah,9
int 21h
ret
print_string ENDP
;-------------------------------------------------------------------------------
;get_number·|§âpoint©Ò«ü¦ì§}ªº¼Æ¦r¦r¦êÅܦ¨¦³¸¹¼Æ¦s¤JAX
;¿é¤J¡Gpoint¡G¼Æ¦r¦r¦ê¤§¦ì§}¡A¦¹¦r¦ê²Ä¤@Ӧ줸²Õ¥Nªí¼Æ¦r¦û¥Î¦h¤Ö¦ì¤¸²Õ¡C
;¡@¡@¡@¡@¡@¡@ ¨Ò¦p¡u03,2dh,33h,33h¡v¡A§Y¡u-33¡v¡A³Ì«áAX¡×FFDFh
;¿é¥X¡G¶i¦ìºX¼Ð¡GCX¡×0¡A¿ù»~
;¡@¡@¡@¡@¡@¡@¡@¡@CX¡×1¡A¥¿½T¡AAX¡×¦³¸¹¼Æ
get_number PROC point:WORD
LOCAL n:SWORD
LOCAL sign:WORD
mov si,point
mov n,0
movzx cx,BYTE PTR [si] ;CX¡×¨Ï¥ÎªÌ¿é¤Jªº¦ì¤¸²ÕÓ¼Æ
;Àˬd¨Ï¥ÎªÌ¿é¤Jªº²Ä¤@Ӧ줸²Õ¬O§_¬°"+"¡B"-"¡A¦pªG¬O«h¨Ïsign¶ñ¤J²Å¸¹¡A¨Ã
;½Õ¾ãCX»PSI¡A¨Ï¨ä«ü¦V¤U¤@Ӧ줸²Õ
inc si
cmp BYTE PTR [si],"-"
jne chk_positive
mov sign,2dh ;2dh="-"
jmp short adjust
chk_positive: mov sign,2bh ;2bh="+"¡AY¨Ï¥ÎªÌ¨S¿é¤J²Å¸¹¡A·í¦¨
cmp BYTE PTR [si],"+" ;¥¿¼Æ¡A¦]¦¹¡umov sign,2bh¡v¦b cmp
jne arabic_numeral ;¤§«e
adjust: inc si ;¦pªG¨Ï¥ÎªÌ¦³¿é¤J"+"¡B"-"¡AÅý
dec cx ;SI«ü¦V¤U¤@¦ì¤¸²Õ¡ACX´î¤@
cmp cx,5 ;¤@Ó¦r²Õªº¤Q¶i¦ì¼Æ³Ì¤j¬°5¦ì¼Æ
ja error ;Y¶W¹L¡Aªí¥Ü¿é¤J¿ù»~
arabic_numeral: cld
next: mov dx,n ;¦¹¦æ¨ì¤U±¤T¦æ¡A¨ä¹ê¬Opºâ10*n
shl n,3 ;10*n¡×2*n+8*n¡A¡ushl n,3¡v¥ç§Ypºâ8*n
shl dx,1 ;pºâ2*n
add n,dx ;¤£¨Ï¥ÎMUL«ü¥O¬O¦]¬°MUL¶O®É¸û¦h
jo ovflw
lodsb
sub al,"0"
;Àˬd¨Ï¥ÎªÌ¿é¤Jªº¦Û¬O§_¬°ªü©Ô§B¼Æ¦r¡A¥²¶·¦b0¡ã9¤§¶¡
cmp al,0
jb error
cmp al,9
ja error
cbw
add n,ax
jo ovflw ;¦pªG·¸¦ì¡Aªí¥Ü¤£¦b-32768~32767
loop next
jmp ok
ovflw: .IF sign==2dh
cmp n,8000h
je ok
.ENDIF
error: sub cx,cx
jmp exit
ok: mov ax,n
.IF sign==2dh
neg ax
.ENDIF
mov cx,1
exit: ret
get_number ENDP
;-------------------------------------------------------------------------------
;hex2dec_str§â¤Q¤»¶i¦ì¼ÆÈÅܦ¨¤Q¶i¦ìªº¦r¦ê
;¿é¤J¡Gn¡Ð¤Q¤»¶i¦ì¼ÆÈ
;¡@¡@¡@sign¡Ð«ü©w¥¿t¸¹¡C0¡G¥Hnªº³Ì°ª¦ì¤¸¨M©w¥¿©Ît¡F"+"¡Gn¬°¥¿¼Æ¡F"-"¡Gn¬°t¼Æ
;¡@¡@¡@address¡Ð¤Q¶i¦ì¦r¦êªºÓ¦ì¼Æ
;¿é¥X¡GAX¡Ð¤Q¶i¦ì¦r¦ê°_©l¦ì§}
hex2dec_str PROC n:WORD,sign:WORD,address:WORD
LOCAL ten:WORD
mov ax,n
.IF sign==0
mov sign,2bh ;2bh="+"
test ax,8000h
jz positive0
mov sign,2dh ;2dh="-"
neg ax
.ELSEIF sign==2dh
neg ax
.ENDIF
positive0: mov cx,5
mov bx,address
mov ten,10
.WHILE cx
xor dx,dx
div ten
add dl,"0"
mov [bx],dl
.BREAK .IF ax==0
dec bx
dec cx
.ENDW
.IF sign==2dh
dec bx
mov BYTE PTR [bx],"-"
.ENDIF
mov ax,bx
ret
hex2dec_str ENDP
;-------------------------------------------------------------------------------
print_char PROC char:BYTE
mov dl,char
mov ah,2
int 21h
ret
print_char ENDP
;-------------------------------------------------------------------------------
expression PROC char:BYTE
;¦L¥Xn1
INVOKE hex2dec_str,n1,0,OFFSET n_str+SIZEOF n_str-2
INVOKE print_string,ax
;¦L¥X¡u+¡v©Î¡u-¡v
INVOKE print_char,char
;¦pªGn2¬°t¼Æ¡A¨º»òn¦L¥X¡u(¡v¡A§_«h¤£¥²
test n2,8000h
jz positive1
INVOKE print_char,"("
;¦L¥Xn2
positive1: INVOKE hex2dec_str,n2,0,OFFSET n_str+SIZEOF n_str-2
INVOKE print_string,ax
;¦pªGn2¬Ot¼Æ¡A¨º»òn¦L¥X¡u)¡v¡A§_«h¤£¥²
test n2,8000h
jz positive2
INVOKE print_char,")"
;¦L¥X¡u=¡v
positive2: INVOKE print_char,"="
ret
expression ENDP
;-------------------------------------------------------------------------------
.STARTUP
;¦L¥X¡uInput a number (-32768~32767):¡v¡A¨ÃÅý¨Ï¥ÎªÌ¿é¤J¼Æ¦r¦r¦ê
INVOKE print_string,OFFSET msg1
mov ah,0ah
lea dx,buffer
mov buffer,7
int 21h
;§â¼Æ¦r¦r¦êÅܦ¨¦³¸¹¼Æ¡A¦s©ón1
INVOKE get_number,OFFSET buffer+1
jcxz err1
mov n1,ax
INVOKE print_string,OFFSET crlf ;´«¦æ
;¦L¥X¡uInput a number (-32768~32767):¡v¡A¨ÃÅý¨Ï¥ÎªÌ¿é¤J¼Æ¦r¦r¦ê
INVOKE print_string,OFFSET msg1
mov ah,0ah
lea dx,buffer
mov buffer,7
int 21h
;§â¼Æ¦r¦r¦êÅܦ¨¦³¸¹¼Æ¡A¦s©ón2
INVOKE get_number,OFFSET buffer+1
jcxz err1
mov n2,ax
INVOKE print_string,OFFSET crlf
jmp compute
err1: INVOKE print_string,OFFSET msg2
mov exit_code,1
jmp quit
;pºân1¡Bn2¤§©M¡A¨Ã¦L¥Xµ²ªG¨Ó
;¦L¥X¡un1+n2=¡vªº¹Bºâ¦¡
compute: INVOKE expression,"+"
;pºâAX=n1+n2¡A¤@¯ë±¡§Î¤U¡AAX¬°¦³¸¹¼Æ¡A¦ý¦pªG¦³·¸¦ì¡AnÂÇ¥Ñ
;plus_or_minusªí¥Ü¥¿t¸¹¡A¦¹³B¥ý°²³]¬°¤@¯ë±¡§Î
mov plus_or_minus,0
mov ax,n1
add ax,n2
jno not_overflow1
;¦pªGµo¥Í·¸¦ì¡AYn1¡Bn2¬Ò¬°t¡AAX¥ç¬°t¡FYn1¡Bn2¬Ò¬°¥¿¡AAX¥ç¬°¥¿
mov plus_or_minus,2bh ;2bh="+"
test n1,8000h
jz not_overflow1
mov plus_or_minus,2dh ;2dh="-"
;¦L¥XAX
not_overflow1: INVOKE hex2dec_str,ax,plus_or_minus,OFFSET n_str+SIZEOF n_str-2
INVOKE print_string,ax
;¦L¥X´«¦æ²Å¸¹
INVOKE print_string,OFFSET crlf
;pºân1¡Bn2¤§®t¡A¨Ã¦L¥Xµ²ªG¨Ó
;¦L¥X¡un1-n2=¡vªº¹Bºâ¦¡
INVOKE expression,"-"
;pºâAX=n1-n2¡A¤@¯ë±¡§Î¤U¡AAX¬°¦³¸¹¼Æ¡A¦ý¦pªG¦³·¸¦ì¡AnÂÇ¥Ñ
;plus_or_minusªí¥Ü¥¿t¸¹¡A¦¹³B¥ý°²³]¬°¤@¯ë±¡§Î
mov plus_or_minus,0
mov ax,n1
sub ax,n2
jno not_overflow2
;¦pªGµo¥Í·¸¦ì¡AYn1¡Bn2¬Ò¬°t¡AAX¥ç¬°t¡FYn1¡Bn2¬Ò¬°¥¿¡AAX¥ç¬°¥¿
mov plus_or_minus,2bh ;2bh="+"
test n1,8000h
jz not_overflow2
mov plus_or_minus,2dh ;2dh="-"
;¦L¥XAX
not_overflow2: INVOKE hex2dec_str,ax,plus_or_minus,OFFSET n_str+SIZEOF n_str-2
INVOKE print_string,ax
mov exit_code,0
jmp quit
quit: .EXIT exit_code
;*******************************************************************************
END |
COMPUTE.ASM ¦@¦³¨â¦Ê¦h¦æ¡A¬O¤p¤ì°¸¨ì¥Ø«e©Ò¤¶²Ð¹L³Ì¤jªºµ{¦¡¤F¡A¦ý¬O¦³³\¦hÆ[©À¦b«e±´X³¹³£¤¶²Ð¹L¤F¡A¨ä¤¤ÁÙ¦³³\¦h¬Oµù¸Ñ¡A¦]¦¹ÁöµMµ{¦¡¸ûªø¡A«o¤£·|¤ÓÃø¡C
¤p¤ì°¸¦b¼¶¼g COMPUTE.ASM ®É¡AºÉ¶q§â°Æµ{¦¡»P¨ä¥L°Æµ{¦¡©Î¥Dµ{¦¡¹jÂ÷¡C·N«ä¬O¥u¦³´XÓ»Ýnªº°Ñ¼Æ¶Çµ¹°Æµ{¦¡¡AµM«á°Æµ{¦¡°õ¦æ¹Lµ{¥u·|¥Î¨ì³o¨Ç°Ñ¼Æ¡A¦Ó¤£·|¦A¨Ï¥Î¨ì¨ä¥L¸ê®Æ¡F³Ì«á°Æµ{¦¡°õ¦æ§¹«á¡A¦A§â¶Ç¦^ȶǵ¹¥Dµ{¦¡¡C³o¼Ë°µªº¦n³B¬O①Åý°Æµ{¦¡³æ¿W¹B§@¨B²o¯A¨ä¥Lµ{¦¡®e©öקïºûÅ@¡A②¸û¨ã¦³¥iŪ©Ê¡A③°Æµ{¦¡¯à°µ¦¨µ{¦¡®w¨Ñµ¹¨ä¥Lµ{¦¡¨Ï¥Î¡C©³¤U¨Ó¬Ý¬Ý¨âÓ«nªº°Æµ{¦¡¡C
get_number ¬O¥Î¨Ó§â¨Ï¥ÎªÌÂÇ¥Ñ AH¡×0AH/INT21H ¿é¤Jªº¦r¦êÂà´«¦¨¤Q¤»¶i¦ì¦³¸¹¼Æ¡C©Ò¥Î°Ñ¼Æ¥u¦³¤@Ó¡A¨º´N¬O¦r¦ê¦ì§}¡C¦ý¨Ï¥Î AH¡×0AH/INT 21H ®É¡A¦r¦êªº²Ä¤@Ӧ줸²Õ¬O½w½Ä°Ï¤j¤p´î¤G¡A³oÓ¸ê®Æ¦b get_number ¨S¥ÎµÛ¡A©Ò¥H get_number ªº°Ñ¼Æ¡A¦r¦ê¦ì§}¬O¥Ñ½w½Ä°Ïªº²Ä¤GӦ줸²Õ¶}©l¡C¨£µ{¦¡²Ä 158¡B169 ¦æ¡A©I¥s get_number ®Éªº°Ñ¼Æ¬O¡uOFFSET buffer+1¡v¡A³oӰѼƦb get_number ùØ¥s°µ point¡A²Ä 35 ¦æ´N§â³oÓ¦ì§}²¾¨ì SI ùØ¡A¦Ó«á¥Î SI «ü¦V¦r¦êªº¨CӦ줸²Õ¡A¥H´£¨ú¸ê®Æ¡C
±µ¤U¨Ó get_number ¨ú±o¦r¦êªø«×¡A¦]¬°¦b½w½Ä°Ï¤¤ªº¦r¦êªø«×¬O¤@Ӧ줸²Õªí¥Ü¡A¦Ó«Ý·|n¥Î LOOP °j°é¡A¦]¦¹¥Î movzx «ü¥O§â³o¤@Ӧ줸²ÕÂX¥R¦¨ CX¡C
²Ä 40¡ã51 ¦æ¡AÀˬd¨Ï¥ÎªÌ¬O§_¿é¤J¥¿t¸¹¡AµM«á§â¥¿t¸¹¦s¤J sign ùØ¡C°²¦p¨Ï¥ÎªÌ¨S¿é¤J¥¿t¸¹¡A´Nªí¥Ü¦¹¼Æ¬°¥¿È¡F¦pªG¦³¿é¤J¥¿t¸¹¡A´N¨Ì¾Ú¨Ï¥ÎªÌ«ü©w¤è¦¡§â¥¿t¸¹¦s¤J sign¡A¦P®É¨Ï CX ´î¤@¨Ã¨Ï SI «ü¦V¤U¤@Ӧ줸²Õ¡C
²Ä 44 ¦æ¬O«ü¦pªG¨Ï¥ÎªÌ¦³¿é¤Jt¸¹¡A§â 2Dh ¦s¤J sign «á¸õÅD¨ì¨Ï CX ´î¤@¨Ã¨Ï SI «ü¦V¤U¤@Ӧ줸²Õªº¦a¤è¡A¨Ï¥Î¡ujmp short adjust¡v¡C¦¹³B§Ú̯à°÷«Ü©ú½Tª¾¹D¡Aadjust Â÷ jmp «ü¥O«Üªñ¡A¤£¶W¹L 127 Ӧ줸²Õ¡A¦]¦¹¬Oµuµ{¸õÅD¡A´N¥i¥H¥Î¡ushort¡v°²«ü¥O¥[¥H«ü©w¡C
±µµÛ·|¶i¤J°j°é¡A¦b³o°j°éùØ¡Aget_number ¨ä¹ê¬O§â¨Ï¥ÎªÌ¿é¤Jªº¦r¦ê³£·í¦¨¥¿¼Æªº¨C¤@¦ì¥hpºâ¡Cpºâµ²ªG¦A¨Ì¾Ú¨Ï¥ÎªÌ sign ¥h½Õ¾ã¥¿t¼Æ¡A¦pªG¬Ot¼Æ¡A´N¥Î neg ½Õ¾ã¡F¦pªG¬O¥¿¼Æ´N¤£¥²½Õ¾ã¡C
§â¤@Óªü©Ô§B¼Æ¦r²Õ¦¨ªº¦r¦êÅܦ¨¤Q¤»¶i¦ì¼Æ¨Ã¤£Ãø¡C¨Ò¦p¨Ï¥ÎªÌ¿é¤J¡u33¡v¡A¦b°O¾ÐÅ餤·|Åܦ¨¤@ ASCII ½X²Õ¦¨ªº¦r¦ê¡A¡u02¡B33h¡B33h¡v¡C2 ¬O¦¹¼Æ¥u¦³¨â¦ì¼Æ¡A³oÓ 2 ·|¦s¤J CX¡A·í¦¨°j°én°õ¦æªº¦¸¼Æ¡C¨C¦¸Åª¨ú³o¨Çªü©Ô§B¼Æ¦r®É¡A¥ý´î¥h 30h¡AÅܦ¨¯u¥¿ªº¼Æ¡A3¡C´î¥h«á¡A³o¨âÓ 3 ªí±¤@¼Ë¦ý·N¸q¤£¦P¡A«eªÌ¥Nªí 30¡A«áªÌ¤~¬O 3¡C©Ò¥H«e±ªº 3 n¼¥H 10¡A¤p¤ì°¸§â³oӼƦr¥ý¼È®É¦s¦b n ùر¡C
ÁA¸Ñ¤Fì²z¤§«á¡A±µ¤U¨Ó¶i¤J LOOP °j°é¡Cget_number ¥Î SI ³v¤@«ü¦V¦r¦êªº¨CӦ줸²Õ¡AµM«á§â¥¦¸ü¤J¨ì AL ùØ¡AÀˬd AL ¬O§_¦b 0¡ã9 ¤§¶¡ ( ²Ä 60¡ã64 ¦æ )¡A¦pªG¬Oªº¸Ü¡A§âì¥ý¤wŪªº¼ÆÈ¡A´N¬O n¡A¼¥H¤Q¥H«á ( ¨£²Ä 53¡ã56 ¦æ )¡A¦A¥[¤W AX ( ²Ä 66 ¦æ )¡C¦¹³B¤p¤ì°¸¤£ª½±µ¥Î mul «ü¥O¡A¦Ó¬O¥Î§â¦ì¤¸¦V¥ª²¾¤Î¥[ªk§¹¦¨¡C³o¼Ë°µªºì¦]¬O¬°¤F¼W¥[¹Bºâ³t«×¡C
ì¥ýªº¼ÆȬO«O¦s¦b°Ï°ìÅܼơAn¡Aùر¡C¦bµ{¦¡²Ä 36 ¦æ´N¥ý°²³] n ¬°¹s¡A³o¬O¦]¬°²Ä¤@¦¸¶i¤J°j°é¡A¤°»ò¼Æȳ£¥¼³B²z¡A¦]¦¹¬°¹s¡C¤§«á¨CŪ¤@Óªü©Ô§B¼Æ¦r¡A´NnÅý n ¥ý¼¥H¤Q¡C¼¥H¤Qªº¤è¦¡¥Î¼Æ¾Ç¦¡ 10n¡×2n¡Ï8n¡A¬Y¼Æ¼¥H¤G«ê¦n¥i¥Î¡ushl ¬Y¼Æ,1¡vpºâ¡A¬Y¼Æ¼¥H¤K¥i¥Î¡ushl ¬Y¼Æ,3¡vpºâ¡AµM«á¦A¬Û¥[¡C¦]¬° n ¬O¦r²Õ¡A¦Ó AL ¶È¦û¤@Ӧ줸²Õ¡A¦]¦¹²Ä 65 ¦æ¥Î CBW §â AL ÂX¥R¦Ü AX¡A¦A¬Û¥[¡C
³B²z§¹©Ò¦³ªü©Ô§B¼Æ¦r«á¡A´N¨ì²Ä 76 ¦æ¡A§â n ²¾¤J AX¡AÀˬd¨Ï¥ÎªÌ¬O§_¿é¤Jt¼Æ¡A¦pªG¬Ot¼Æ¡A´N¥Î neg «ü¥O§â AX ¨ú¤G¸É¼Æ¡A´NÅܦ¨t¼Æ¤F¡Cì¦]«Ü²³æ¡A¨Ò¦p¡A°²³]¨Ï¥ÎªÌ¿é¤J¡u¡Ð23¡v¡Aget_number ¥u¦b²Ä 40¡ã51 ¦æÅý sign Åܦ¨t¸¹¡AµM«á¨Ì¥¿¼Æ¤è¦¡¨D±o 23¡A¨ì¤F²Ä 76 ¦æ¨ú¤G¸É¼Æ®É¡AAX ´NÅÜt¼Æ¤F¡C
¦pªG¤@¤Á³£¨S°ÝÃD¡A¶Ç¦^ CX ¬°¤@¡A¦Ó AX ´N¬O¦³¸¹¼Æ¡F¦pªGµo¥Í¿ù»~¡A¨Ò¦p¨Ï¥ÎªÌ¿é¤J¤F¥¿t¸¹¤Îªü©Ô§B¼Æ¦r¥H¥~ªº¦r¡ACX ³]¬° 0¡AAX ¨S¦³·N¸q¡C¥Dµ{¦¡ÂÇ¥ÑÀˬd CX ±oª¾¨Ï¥ÎªÌ¬O§_¿é¤J¥¿½Tªº¸ê®Æ¡C
¦³´XºØ±¡§Î·|¿ù»~µo¥Í¡G①¨Ï¥ÎªÌ¿é¤J¤F¥¿t¸¹¤Îªü©Ô§B¼Æ¦r¥H¥~ªº¦r¡A②¨Ï¥ÎªÌ¿é¤Jªº¼ÆȶW¹L½d³ò¡C«eªÌ¦b²Ä 60¡ã64 ¦æ¥i¥HÀˬd¦Ó±oª¾¬O§_¥¿½T¡F«áªÌ«hn¾a¬O§_·¸¦ì¨ÓÀˬd¡A·¸¦ìªºµo¥Í¥i¯à¦b²Ä 53¡ã56 ¦æ¡An ¼¥H¤Qªº¦a¤è¡A©Î¬O¦b²Ä 66 ¦æ¡AAX n¥[¦b n ªº®ÉÔ¡C¤ñ¸û¯S§Oªº¬O¡A¦]¬°§Ú̬O¥H¥¿¼Æ¥hpºâ¡A¦Ó¦³¸¹¼Æªº½d³ò¬O ¡Ð32768¡ã32767 ¤§¶¡¡At¼ÆӼƤñ¥¿¼Æ¦h¤@¡A´N¬O¦h¤F ¡Ð32768¡C·í¨Ï¥ÎªÌ¿é¤J ¡Ð32768 ®É¡A·|³y¦¨·¸¦ì¡A¦ý¦¹¼Æ¬O¦b½d³ò¤º¡A¦bµ{¦¡²Ä 70¡ã73 ¦æ³B²z³o¥ó¨Æ¡C
hex2dec_str ¬O¥Î¨Ó§â¤Q¤»¶i¦ì¼ÆÂà´«¦¨¤Q¶i¦ì¼Æ¦r¦r¦ê¡Ahex2dec_str »Ýn¤TӰѼơA²Ä¤@ӰѼƬO¦¹¤Q¤»¶i¦ì¼Æ¡An¡C²Ä¤GÓ°Ñ¼Æ sign ¬O¥Î¨Ó«ü©w n ¬O¥¿¼Æ¡BÁÙ¬Ot¼Æ¡A©ÎªÌ¥Ñ hex2dec_str ¦Û¦æ§PÂ_¡C¦pn«ü©w n ¬O¥¿¼Æ¡A´N§â sign «ü©w¬° 2Bh (¡u¡Ï¡vªº ASCII ½X¬O 2Bh )¡F¦pªG«ü©w n ¬Ot¼Æ¡A´N§â sign ³]¬° 2Dh (¡u¡Ð¡vªº ASCII ½X¬O 2Dh )¡F¦pªGn¥Ñ hex2dec_str ¦Û°Ê§PÂ_¡Asign ´N³]¬° 0¡C¦Û¦æ§PÂ_ªº®ÉÔ¡A¬O§â n ·í¦¨¦³¸¹¼Æ¡Ahex2dec_str §PÂ_¤èªk¬O¦pªG³Ì°ª¦ì¤¸¬O¤@¡An ¬°t¼Æ¡A³Ì°ª¦ì¤¸¬O¹s¡An ¬°¥¿¼Æ¡C²Ä¤TӰѼƬO¦s©ñ¤Q¶i¦ì¼Æ¦r¦r¦êªºÓ¦ì¼Æ¦ì§}¡C
¨Ò¦p¡A¦pªG n ¬° FFFFh¡Asign ¬° 2Bh¡Aªí¥Ü n ¬°¥¿¼Æ¡A¬OµL¸¹¼Æ¡Ahex2dec_str °õ¦æ«á·|±o¨ì¤Q¶i¦ì¦r¦ê¬° 36h¡B35h¡B35h¡B33h¡B35h ( §Y 65535 )¡C¦pªG n ¬° FFFFh¡Asign ¬° 0 ©Î 2Dh¡A±o¨ìªº¤Q¶i¦ì¦r¦ê¬O 2Dh¡B31h ( §Y ¡Ð1 )¡C
hex2dec_str ªºì²z»P²Ä¤C³¹ªº DECIMAL.ASM ¬Û¦ü¡A®t§O¦b©ó«eªÌ·|Àˬd¿é¤J¼ÆȪº¥¿t¸¹¡C¦pªG¬O¥¿¼Æ¡A¬yµ{´N¸ò DECIMAL.ASM ¤@¼Ë¡C¦pªG¬Ot¼Æ¡A¤£½×¬O sign «ü©w 2Dh ©Î 0¡A³£¥ý¨ú n ªº¤G¸É¼Æ ( ²Ä 97 ¦æ»P²Ä 99 ¦æ )¡A¦A¨Ì¥¿¼Æªº¬yµ{³B²z¡Aµ¥pºâ¦n¤Q¶i¦ì¦r¦ê«á¡A©ó¦r¦ê³Ì«e±¥[¤W¡u¡Ð¡v§Y¥i ( ²Ä114¡ã115¦æ )¡C¥i¥H°Ñ¦Ò«e±¦³¸¹¼Æªºt¼ÆÅܤQ¶i¦ì¼Æ¡C
hex2dec_str ¦³¶Ç¦^È¡A¦¹¶Ç¦^ȬO¤Q¶i¦ì¦r¦êªº°_©l¦ì§}¡A¶Ç¦^³oÓ¦ì§}¡A¯à°÷Åý¥Dµ{¦¡«Ü»´©öªº¥Î AH¡×09H/INT 21H ¦L¥X¤Q¶i¦ì¼Æ¦r¦r¦ê¨Ó¡C
JCXZ «ü¥O¥Î¨ÓÀˬd CX ¬O§_¬°¹s¡A¦pªG CX µ¥©ó¹s¡A´Nµo¥Í¸õÅD¡A¸õ¨ì«á±±µªº¼Ð°O³BÄ~Äò°õ¦æ¡C¨ä»yªk¦p¤U¡G
JCXZ ¼Ð°O
Ãþ¦üªº«ü¥OÁÙ¦³ JECXZ »P JRCXZ¡A¤À§O¥NªíY ECX µ¥©ó¹s¡BY RCX µ¥©ó¹s®Éµo¥Í¸õÅD¡C
ÁöµM COMPUTE ¨î¨Ï¥ÎªÌ¿é¤Jªº¨âÓ¼ÆÈn¦b ¡Ð32768¡ã32767 ¤§¶¡¡A¦ý¬O¨â¼Æ¬Û¥[©Î¬Û´î¡A´N¦³¥i¯à¶W¹L³oÓ½d³ò¡A³o´Nµo¥Í¤F·¸¦ì¡C¦pªGµ{¦¡³]p³æ¯Â¡A§Ṳ́]¥i¥H¦bµo¥Í·¸¦ì®É¡A´NÅã¥Ü¿ù»~°T®§¦Óµ²§ôµ{¦¡¡A¦ý¤]¥i¥H³B²z·¸¦ì¨ÃÅã¥Ü¥¿½Tµ²ªG¡C
¨Ò¦pµ{¦¡²Ä 183¡ã184 ¦æ¡A§â¨â¼Æ¬Û¥[¡A§Y n1¡Ïn2¡A°²¦pµo¥Í·¸¦ì¡A¨Ã¤£¬Opºâµ²ªG¦³°ÝÃD¡A¦Ó¬Oµ²ªG¶W¹L¦³¸¹¼Æ¯àªí¥Üªº½d³ò¡A§ÚÌ¥i¥H¥Î«ü©w¥¿©Îtªº¤èªk©I¥s hex2dec_str¡Ahex2dec_str ´N¯à¥¿½Tpºâ¥Xµ²ªG¨Ó¡Cµo¥Í·¸¦ì®É¡A´NÀˬd¨Ï¥ÎªÌ¿é¤Jªº¨â¼Æ¬O¥¿¼Æ¡AÁÙ¬Ot¼Æ¡C¦pªG¬°¥¿¡Aªí¥Ü©M¤]¬O¥¿¼Æ¡A§Y¨Ï©Mªº³Ì°ª¦ì¤¸¬°¤@¡A¦b©I¥s hex2dec_str ªº sign °Ñ¼Æ¬°¡u2Bh¡v¡F¦pªG¨â¼Æ¬°t¡A¨â¼Æ¬Û¥[¤]¬°t¡Ahex2_dec_str ªº sign ´Nn«ü©w¬° 2Dh¡C¨£µ{¦¡²Ä 186¡ã192 ¦æ¡C
¨â¼Æªº´îªk¤]¬O¦p¦¹¡A¨£µ{¦¡²Ä 201¡ã211 ¦æ¡A¤p¤ì°¸´N¤£Åoö¤F¡C
³o¤@³¹¤p¤ì°¸¤¶²Ð¤F¦³¸¹¼Æ¥[´îªkªº¹Bºâ¡A³o¨ä¤¤²o¯A¨ì¤F¤G¸É¼Æ¡B·¸¦ìµ¥Æ[©À¡C³Ì«á°µÓ¦^ÅU¡A¤U¤@³¹¤¶²Ð¦³¸¹¼Æªº¼°£ªk¡C
¦b¹q¸£¤¤¡A¬Y¥¿¼Æªº¤G¸É¼Æ¥Nªí¨ät¼Æ¡F¤Ï¹L¨Ó¤]¦¨¥ß¡A¥ç§Y¬Yt¼Æªº¤G¸É¼Æ¥Nªí¨ä¥¿¼Æ¡Cpºâ¬Y¼Æªº¤G¸É¼Æ¡A¨BÆJ¦p¤U¡G
ÁÙ¦³¤@Ó¤èªk¤]¯àpºâ¤G¸É¼Æ¡A¨BÆJ¦p¤U¡G
·¸¦ì¬O«ü¹Bºâµ²ªG¶W¹L©Ò¯àªí¥Üªº½d³ò¡Aµo¥Íªºì¦]¦³¤U±¨â¶µ¡G
¹Bºâµ²ªGµo¥Í·¸¦ì®É¡ACPU ·|§â·¸¦ìºX¼Ð³]¬°¤@¡A¦¹°Ê§@ºÙ¬°³]©w·¸¦ìºX¼Ð¡ADEBUG/SYMDEB ùØÅã¥Ü OV¡F¹Bºâµ²ªG¨Sµo¥Í·¸¦ì®É¡ACPU ·|§â·¸¦ìºX¼Ð³]¬°¹s¡A¦¹°Ê§@ºÙ¬°²M°£·¸¦ìºX¼Ð¡ADEBUG/SYMDEB ùØÅã¥Ü NV¡Cµ{¦¡¥i¥HÂÇ¥Ñ JO «ü¥O¸õ¨ì¦pªG·¸¦ì®É¦p¦ó³B²z¡A©Î¬O JNO «ü¥O¸õ¨ì¦pªG¨S¦³·¸¦ì®É¦p¦ó³B²z¡C