³Ìªñ¦³¤H°Ý§Ú³o»ò¤@¹D¼Æ¾ÇÃD¡G¡y100¡I¡×100¡Ñ99¡Ñ98¡Ñ97¡Ñ¡K¡K¡Ñ2¡Ñ1 ªº¼¿n¥½¦ì¼Æ¦³´XÓ¹s¡H¦Ó¥Ñ³Ì¥½¤@¦ì©¹«eºâ¡A²Ä¤@Ó«D¹sªº¼Æ¬O¤°»ò¡H¡z¡C¦b¼Æ¾Ç¤Wªº·Qªk«Ü²³æ¡A¥un 2¡Ñ5 ´N·|±o¨ì 10¡A´N·|¨Ï¥½¦ì¦h¤@Ó¹s¡A¦Ó¦b 100¡Iªº¼ªkùØ¡A2 ªº¦]¼Æ¤ñ 5 ¦h±o¦h¡A©Ò¥H¥unºâ¥X 100¡B99¡B98¡K¡K3¡B2¡B1 ³o¨Ç¼Æùئ³´XÓ 5 ªº¦]¼Æ§Y¥i¡C±q¤@¨ì¤Q¦³ 5¡B10 §t¦³¨âÓ 5 ªº¦]¼Æ¡A11 ¨ì 20 ¤]¦³¨âÓ 5 ªº¦]¼Æ¡K¡K¬G¨C¤QӼƦ³¨âÓ¤¡A©Ò¥H 1 ¨ì 100 ¦Ü¤Ö¦³ 20 Ó 5 ªº¦]¼Æ¡A°£¦¹¤§¥~¡A¹³ 25¡B50¡B75¡B100 ³o¥|ӼƧt¦³¨âÓ 5 ªº¦]¼Æ¡A¦©°£«e±¤w¸gºâ¹Lªº¡A¥u³Ñ 4 Ó 5 ªº¦]¼Æ¡A³Ì«áÁ`¥[°_¨Ó¡A100¡I¦³24 Ó¦]¼Æ 5¡A©Ò¥H¥½¦ì¼Æ¦³ 24 Ó 0¡C
¦Ü©ó 100¡I ªº¥½¦ì¼Æ²Ä¤@Ó«D¹sªº¼Æ¬O¤°»ò¡H·Qªk¤]¬O¥H¨C 10 ӼƬ°¤@²Õ¡A¨C²Õ¼°_¨Óªº¥½¦ì¼Æ³£¬Û¦P¡A³£¬O 1¡Ñ2¡Ñ3¡Ñ4¡Ñ¡K¡K9¡Ñ10¡A¥½¦ì²Ä¤@Ó«D¹sªº¼Æ¬O 8¡A810ªºÓ¦ì¼Æ¬O 4¡A¬G²Ä¤GÓµª®×¬O 4¡CÁöµM¦³¤Fµ²ªG¡A¦ý¬OÁ`·Q¥Hµ{¦¡¹ê»Úºâ¥X¨Óµª®×¬O§_¥¿½T¡A¾ú¸g¤@¬q«ä¯Á¡A³Ì«á²×©ó§â³oÓpºâ¶¥¼ªºµ{¦¡¡AFACTORIAL.ASM¡A¼g¦n¤F¡A©ó¬O¦³¤F³oÓªþ¿ý¡C³oÓµ{¦¡°õ¦æµe±¦p¤U¡A¤@¶}©l¨Ï¥ÎªÌ¥¼¿é¤J¼Æ¦r¡A¬G¨S¦³pºâµ²ªG¡A¡y«þ¨©µ²ªG¡z»P¡y¦s¦¨¡K¡z«ö¶s¬O¸T¥Îªº¡C·í¨Ï¥ÎªÌ¿é¤J¦n¼Æ¦r¡A¨Ò¦p 100¡A¦A«ö¤U¡ypºâ¡z«ö¶s¡AFACTORIAL ·|pºâ 100¡I¨Ã±Nµ²ªGÅã¥Ü¦b©³¤Uªº°ßŪ½s¿è®ØùØ¡C

¤p¤ì°¸¦b¼¶¼g³oÓµ{¦¡®É¡A°£¤F³oÓµ{¦¡¬O¡y¥H¹ï¸Ü²°¬°¬É±ªºµ{¦¡¡z¡A¦ý¬O¹ê»Ú¤WÁÙ²o¯A¨ì©³¤U´XÓ¥DÃD¡G¡y¤j¼Æªº¼ªk¡z¡B¡y§â½s¿è®Øªº¸ê®Æ«þ¨©¨ì°Å¶Kï¡z¡B¡y¨ú±o®à±¸ô®|¡z¥H¤Î¡y½s¿è®Øªº³qª¾½X¡zµ¥¡A©Ò¥H¤£ª¾¹D¦p¦óq¥X³o½g¥Ø¿ýªºÃD¥Ø¡G)
FACTORIAL ¬O¤@Ó¹ï¸Ü²°·í¦¨¬É±ªºµ{¦¡¡A³o¤@Ãþµ{¦¡¥»¨´N¬O¤@Ó¹ï¸Ü²°¡A¨ä¤º³¡¦³³\¦h±±¨î¤¸¥ó²Õ¦¨¡A¥¦¬OÂÇ¥Ñ DialogBoxParam ²£¥Íªº¡A§Ú̦b¼¶¼gµ{¦¡®É¡A¥u»Ýn¦b¸ê·½´yzÀɤ¤ªº¹ï¸Ü²°±ªO¬q¸¨ùØ»¡©ú³o¨Ç±±¨î¤¸¥ó¦p¦ó¦w±Æ¡A¥H¤Î¼¶¼g¹ï¸Ü²°¨ç¦¡ ( ¹ï¸Ü²°¨ç¦¡»Pµøµ¡¨ç¦¡³£¬OÄÝ©ó¡ycall back¡z¨ç¦¡¡AÃö©ó¤°»ò¬O call back ¨ç¦¡¡A½Ð°Ñ¦Ò²Ä¤G³¹³B²z°T®§ªºµøµ¡¨ç¦¡²Ä¤T¬q ) §Y¥i¡C¨t²Î´N·|¬°§Ú̫إߦn¦U±±¨î¤¸¥ó¡AµM«á¹ï¸Ü²°ºÞ²z¾¹·|©I¥s§Ú̦ۦ漶¼gªº¹ï¸Ü²°¨ç¦¡¡A¦¹¹ï¸Ü²°¨ç¦¡±N³B²z§ÚÌ·P¿³½ìªº°T®§¡C·íµM¡A³o¨Ç°T®§³B²z§¹¤§«á¡Aªð¦^Ȭ° TRUE¡Aªí¥Ü¤w³B²z¹L¤F¡F§Ṳ́£·P¿³½ì¦Ó¤£³B²zªº°T®§¡A«hªð¦^Ȭ° FALSE¡A¥Ñ¨t²Î¤º³¡ªº¹ï¸Ü²°ºÞ²z¾¹¥h³B²z¡C¦b²Ä¤Q³¹¤]´£¨ì¹L³oÃþªº¹ï¸Ü²°¡AºÙ¬°¼Ò¦¡¹ï¸Ü²°¡A©Ò¤£¦Pªº¬O¦b²Ä¤Q³¹ªº¼Ò¦¡¹ï¸Ü²°¬O¥Ñ¥t¤@Óµøµ¡©Ò«Ø¥ß¡A¦Ó¦¹³B¥H¹ï¸Ü²°¬°¬É±ªºµ{¦¡«h¬Oª½±µ©I¥s DialogBoxParam «Ø¥ß¡C¨ä¤jPªº°©¬[¹³©³¤U³o¼Ë¡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 |
OPTION CASEMAP:NONE
.586
.MODEL FLAT,STDCALL
INCLUDE WINDOWS.INC
INCLUDE COMCTL32.INC
INCLUDE KERNEL32.INC
INCLUDE USER32.INC
INCLUDELIB COMCTL32.LIB
INCLUDELIB KERNEL32.LIB
INCLUDELIB USER32.LIB
;*************************************************************************************************************
.DATA
hInstance HANDLE ?
szDlgName BYTE "DIALOG",0 ;¹ï¸Ü²°±ªO¦WºÙ
;¨ä¥L¸ê®Æ
;*************************************************************************************************************
.CODE
;-------------------------------------------------------------------------------------------------------------
;¹ï¸Ü²°¨ç¦¡
DlgProc PROC hDlg:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
.IF uMsg==WM_INITDIALOG
.ELSEIF uMsg==WM_COMMAND
.ELSEIF uMsg==WM_CLOSE
INVOKE EndDialog,hDlg,NULL
.ELSE ;¨ä¥L¥¼³B²zªº°T®§ªð¦^ FALSE
mov eax,FALSE
ret
.ENDIF ;¤w³B²zªº°T®§¡Aªð¦^ TRUE
mov eax,TRUE
ret
DlgProc ENDP
;-------------------------------------------------------------------------------------------------------------
start: INVOKE GetModuleHandle,NULL
mov hInstance,eax
INVOKE DialogBoxParam,hInstance,OFFSET szDlgName,NULL,OFFSET DlgProc,NULL
INVOKE ExitProcess,eax
INVOKE InitCommonControls
;*************************************************************************************************************
END start |
¤W±ªºµ{¦¡¡A´N¬O¥H¹ï¸Ü²°¬°¥Dªºµ{¦¡¡A¨ä¤¤¶È³B²z WM_INITDIALOG ¡BWM_COMMAND¡BWM_CLOSE ³o¤TÓ°T®§¡A³B²z¹L¦¹¤TÓ°T®§«áªð¦^ TRUE¡A§_«hªð¦^ FALSE¡C»P¤Wz²Õ¦X»y¨¥ì©lµ{¦¡¤§°t¦Xªº¸ê·½´yzÀÉ¡A¤@¯ë¦p¤U±¡G
1 2 3
4 5 6 7
8 9 10 11
12 13 14 |
#include "c:\masm32\include\resource.h"
#define RT_MANIFEST 24
//¨ä¥L±±¨î¤¸¥óªºÃѧO½X
¹ï¸Ü²°±ªO¦WºÙ DIALOG x, y, cx, cy
STYLE ᨾ
FONT ¤j¤p ,"¦r«¬"
CAPTION "¼ÐÃD¦W"
BEGIN
±±¨î¤¸¥ó
END
1 RT_MANIFEST MOVEABLE PURE "µ{¦¡¦W.exe.manifest"
|
«Ü©úÅã¡A¥H¹ï¸Ü²°¬°¬É±ªºµ{¦¡¬Ù²¤¤F¹³µù¥Uµøµ¡Ãþ§O¡B«Ø¥ß°T®§°j°éµ¥µ{¦¡½X¡A¦P®É¤]¤£»Ýn©I¥s DefWindowProc ³B²z§Ṳ́£«µøªº°T®§¡A¥i¥H»¡¬O¤è«K¤S²¼ä¡C
ÁöµM¦p¦¹¡A¦ý¬O¦pªGn¦bµøµ¡¤¤¨Ï¥Î¹Ï¥Ü¡A´N±o¦b³B²z WM_INITDIALOG °T®§®É¡A©I¥s LoadIcon ¦Û¸ê·½¸ü¤J¹Ï¥Ü¡C§Ú̱`¦b³B²z WM_INITDIALOG °T®§®É¡A°µ¤@¨Çªì©l¤Æªº°Ê§@¡A¨Ò¦p¨ú±o±±¨î¤¸¥ó¥N½Xµ¥µ¥¡A¨ú¥N¤@¯ëµøµ¡ªº WM_CREATE °T®§¡C¦bÃö³¬¹ï¸Ü²°®É¡A«h¬O³B²z WM_CLOSE °T®§¡A¨Ã¦b³B²z¦¹°T®§®É©I¥s EndDialog Ãö³¬¹ï¸Ü²°¡C¦¹¥~¡A¥H¹ï¸Ü²°¬°¬É±ªºµ{¦¡¬O¥Ñ¹ï¸Ü²°ºÞ²z¾¹³B²z«öÁä°T®§¡A¦]¦¹¹ï©ó§Ö±¶Á䪺¨Ï¥Î¡A´N±o¦h¶O¤u¤Ò¤F¡C
§Y¨Ï¬O¨Ï¥Î 128 ¦ì¤¸ªº¼ªk«ü¥O¡A¤]¥u¯àºâ¨ì 39 ¦ì¼Æ¡A¦ý¬O¹ï¶¥¼¨ÓÁ¿ 34¡I´N¤w¸g¬O 39 ¦ì¼Æ¤F¡A34 À³¸Ó»¡¬O«Ü¤pªº¼Æ§a¡H¦]¦¹¥H 128 ¦ì¤¸ªº¼ªk«ü¥O¡AµLªkº¡¨¬»Ý¨D¡C¦pªGnºâ¤ñ¸û¤jªº¼Æªº¶¥¼¡A¥i¥H¥Î´µ¯SªL¤½¦¡¨D±o¡A¦ý¬O¦pªGnºâ±o¤@²@¤£®t¡A´N±o¦Û¦æ¼¶¼g¤@Ó¼ªk°Æµ{¦¡¤F¡A¦Ó³oÓ¼ªk°Æµ{¦¡¯à°µ«Ü¤j¼Æ¦rªº¼ªk¡A¦A§Q¥Î°j°é´N¯à«Ü§Öªº ( ¤]¥i¯à¬O«ÜºCªº ) ¨D¥X¸û¤j¼Æªº¶¥¼¡C
¦¹¤@¤j¼Æ¼ªk°Æµ{¦¡ºÙ¬° ubcd_mul¡A¨äì²z«Ü²³æ¡A¨ä¹ê´N¬O¤p¾Ç¦Ñ®v©Ò±Ðªºª½¦¡¼ªk¡C¤p¤ì°¸¥H 987654¡Ñ912¡×900740448 ¬°¨ÒÆ[¹î¡G
³Q¼¼Æ 987654
¼¼Æ x 912
----------
001975308
¼È¦s°Ï 009876540
888888600
----------
900740448
³Q¼¼Æ¦@¦³ 6 ¦ì¼Æ¡A¼¼Æ¬° 3 ¦ì¼Æ¡A©Ò±oªº¼¿n¬O¥H¨C¤@¦ì¼¼Æ©M³Q¼¼Æ¬Û¼©Ò±o¤§µ²ªG¡A¥ý¼È®É¦s©ó¼È¦s°Ï¡A«Ý¤T¦ì¼¼Æ³£½ü¬y»P³Q¼¼Æ¬Û¼¤§«á¦A¬Û¥[¡C¦b¼È¦s°Ïùتº¨C¤@¦Cªº¦ì¼Æ¬Ý°_¨Ó¦n¹³³£¬O³Q¼¼Æªº¦ì¼Æ¦A¥[¤@¡A¦ý¹ê»Ú«o¤£¬O¦p¦¹¡A¦Ò¼{¤§«áÁÙn§â¼È¦s°Ï¤¤ªº¤T¦C¼Æ¬Û¥[¡A©Ò¥H²Ä¤@¦C¤§«eÀ³¸ÓÁÙ¦³¨âÓ¹s¡A¦P²z¨ä¥L¦C¤]³£¬O¤@¼Ë¡A¦]¦¹¼È¦s°Ïªº¤j¤pÀ³¸Ó¬O¡y¼¿n¦ì¼Æ¡Ñ¼¼Æ¦ì¼Æ¡z¡C¦Ó¼¿n¦ì¼ÆÀ³¸Ó¬O¡y³Q¼¼Æ¦ì¼Æ¡Ï¼¼Æ¦ì¼Æ¡z¡C´«¥y¸Ü»¡¡A¦pªGnºâ¤j¼Æªº¼ªk¡A¼È¦s°Ï¥i¯à»Ýn«Ü¤jªº°O¾ÐÅé¡An°t¸m¦h¤Ö°O¾ÐÅé©O¡H¥H 987654¡Ñ912¡×900740448 ¬°¨Ò»¡©ú¡A¼È¦s°Ïn¦û¥Î 3¡Ñ(3¡Ï6) ¦ì¡A¼¿nn¦A¦û¥Î (3¡Ï6) ¦ì¡A³Q¼¼Æ»P¼¼Æ¤Sn¦A¥[¤W (3¡Ï6) ¦ì¡A¬GÁ`¦@n¦û¥Î 5¡Ñ(3¡Ï6) ¦ì¡A¦pªG¨CӼƦû¥Î¤@Ӧ줸²Õ¡A¨º»ò´N±o°t¸m 90 Ӧ줸²Õ¡C
FACTORIAL ³Q³]p¦¨¥i¥Hpºâ³Ì¦h 65536 ¶¥¼¡A¥Ñ¡y¶}©l¡z¡B¡y©Ò¦³µ{¦¡¡z¡B¡yªþÄÝÀ³¥Îµ{¦¡¡z¡y¤pºâ½L¡z¥iºâ¥X 65536¡I¦³ 287194 ¦ì¼Æ¡A¥ç§Y 16 ¶i¦ìªº 461DAH¡A¦ý¬O¤p¤ì°¸¥´ºâÀx¦s¼¿nªº°O¾ÐÅé¤ñ 461DAH µy·L¤j¤@¨Ç¡A¬O 461E0H¡A´«¦¨¤Q¶i¦ì´N¬O 287200 Ӧ줸²Õ¡A¤p¤ì°¸¦b FACTORIAL ¤¤©w¸q¤F¤@Ó±`¼Æ¡ALARGEST¡A¨Óªí¥Ü¼¿nªº¦ì¼Æ¡G
LARGEST EQU 461E0h
FACTORIAL ¥i¥Hpºâ¤¦ì¼Æ ( 65536 ¬°¤¦ì¼Æ ) ¥H¤Uªº¶¥¼¡A¦]¦¹¼È¦s°Ï³Ì¦h¶È¤¦C¡A¦Ó¨C¤@¦C»Ýn®e¯Ç 461E0H ¦ì¼Æ¡A¬G¼È¦s°Ï»Ýn 461E0H¡Ñ5 Ӧ줸²Õ¡A¦A¥[¤W¼¿n±o¦û¥Î 461E0H ¥H¤Î¼¼Æ¦û¥Î 10H ¦ì¤¸²Õ ( ¦h¤@ÂIÂI¤]¬OµL§« )¡A©Ò¥H±z·|¦bpºâ¶¥¼ªº Factorial °Æµ{¦¡¬Ý¨ì©I¥s GlobalAlloc ¦V¨t²Î¥Ó½Ð°t¸m°O¾ÐÅé¡G
INVOKE GlobalAlloc,GPTR,LARGEST*6h+10H ;¦V¨t²În¨DLARGEST*6+10Hªº°O¾ÐÅé¤j¤p
FACTORIAL ³Ì«án§âµ²ªGÅã¥Ü¦b¤@Ó¦h¦æªº½s¿è®Ø±±¨î¤¸¥óùØ¡A¦Ó¦h¦æªº½s¿è®Ø±±¨î¤¸¥ó¤º©w¥i¥H®e¯Ç¬ù 32K ¦ì¤¸²Õ ( ³o¬O«ü Win XP ¨t²Î¦Ó¨¥¡Aºë½Tªº¼Æ¦r¬O 30000 Ӧ줸²Õ¡C¦³Ãö½s¿è®Ø±±¨î¤¸¥óªº°T®§¡A½Ð°Ñ¦Ò²Ä¤E³¹ªº»¡©ú )¡A¤£¹L³oÓ¨î¬O¥i¥H§ó§ïªº¡A¦Ó¥B§@·~¨t²Î·|¦Û°ÊÀ°À³¥Îµ{¦¡ÂX¤j®e¶q¡A©Ò¥H¨Ã¤£¶·¾á¤ß¦h¦æ½s¿è®Ø®e¶q¤£¨¬ªº°ÝÃD¡C
¥Ñ©ó¶¥¼¬O³sÄòªº¼ªk¡A¤p¤ì°¸¥´ºâ§â³Q¼¼Æ©ñ¦b©Ò¥Ó½Ð°O¾ÐÅ骺³Ì§C¦ì§}¡A¼¼Æ©ñ¦b³Q¼¼Æ¤§«áªº¸û°ª¦ì§}¡A¦Ó©Ò±o¼¿n´N©ñ¦bì¨Ó³Q¼¼Æªº¦a¤è¡C¦p¦¹¤@¨Ó¡A¥ý¨Ï¼¿n¬° 1¡A¨Ï¼¼Æ¬°¨Ï¥ÎªÌ¿é¤Jªº¼Æ¡A©I¥s ubcd_mul °Æµ{¦¡±o¨ì²Ä¤@¦¸¬Û¼ªºµ²ªG¡A±µµÛ¨Ï¼¼Æ´î¤@¡A¦A©I¥s ubcd_mul ´N¥i±o²Ä¤G¦¸¬Û¼¡A¦p¦¹¨C¤@¦¸¨Ï¼¼Æ´î¤@¡Aª½¨ì¹s¬°¤î¡A´N¥i±o¶¥¼¤F¡C
¤U¹Ï¬O¥Hpºâ 14350 ¶¥¼»¡©ú°O¾ÐÅé³W¹º¡A¤p¤ì°¸¦V§@·~¨t²Î¥Ó½Ð°t¸m¤F LARGEST*6h+10H ( 1A4B50H¡A¬Û·í©ó¤Q¶i¦ìªº 1723216 ) ¦ì¤¸²Õ¡A¦p¤Wz©Ò¨¥¤À¦¨¤TӰ϶ô¡G
¦b°t¸m°O¾ÐÅ餧«á¡A¥ý¨Ï¼¿n¬° 1¡A¦s©ó¦¹°t¸m°O¾ÐÅ骺³Ì§C¦ì§}¡AµM«á§â 14350 Åܦ¨¥¼»E¶°ªº BCD ¼Æ¡A¦s©ó©Ò°t¸m°O¾ÐÅé°¾²¾¦ì§}ªº 461E0H ³B¡A¦¹³B§Ú°²³]¼¼Æ¦³ 10 ¦ì¼Æ¡A±µµÛ¥Ñ¼¼Æ°ª¦ì§}¶}©l¡A´M§ä²Ä¤@Ó«D¹sªº¼Æ¡A´N¥i¥H§ä¨ì¼¼Æ¯u¥¿¦ì¼Æ¡CµM«á©I¥s ubcd_mul °Æµ{¦¡¡Apºâ¨ä¼¿n¡A¨Ã¦s©ó©Ò°t¸m°O¾ÐÅ骺³Ì§C¦ì§}¡C´«¥y¸Ü»¡¡A·í ubcd_mul ªð¦^«á¡A©Ò°t¸mªº°O¾ÐÅé³Ì§C¦ì§}·|Åܦ¨ 0¡B5¡B3¡B4¡B1¡A¨ä¹ê³o´N¬O¥Nªí 14350¡Ñ1 ¤§«áªºµ²ªG¡A¦¹¼Æ¦s©ó°O¾ÐÅé¦ì§}ªº 0H ®É¡A¬O¥H¦ì¼Æ¤pªº¼Æ¦w±Æ¦b§C¦ì§}³B ( ¹³³oºØ¦w±Æ¤è¦¡ºÙ¬° Little-Endian )¡C¦p¤U¹Ïªº¤W¥b³¡©Ò¥Ü¡A¬O ubcd_mul ªð¦^«áªºµ²ªG¡A¼È¦s°Ï¤¤ªº¼ÆÈ¤wÅܱo¤£«n¤F¡C

±µµÛ¨Ï¼¼Æ´î¤@Åܦ¨ 14349¡A¦s©ó°O¾ÐÅé¦ì§} 461E0H ³B¡A¦¹®É³Q¼¼Æ¤w¦s©ó©Ò°t¸m°O¾ÐÅé¦ì§} 0 ªº¦a¤è¤F¡A¦A©I¥s umbc_mul¡A·íªð¦^®É¡Aµ²ªG¦p¤W¹Ïªº¤U¥b³¡¥÷¡C¤S¬°¨ÏŪªÌ§ó²M·¡ ubcd_mul ¦b°O¾ÐÅ餤¹B§@¡A¤p¤ì°¸¦C¥X¨äª½¦¡¼ªk¦p¤U¡G
14350 x 14349 ------------- 0000129150 0000574000 0004305000 0057400000 0143500000 ------------- 0205908150
±z¥i¬Ý¨£¡A¼È¦s°Ïªº³Ì§C°¾²¾¦ì§}¡A461F0H¡A¦sµÛªº¬O 14350¡Ñ9 ¤§«áªºµ²ªG¡A¦] 14350¡Ñ14349 ¤§¼¿n¦³ 10 ¦ì¼Æ ( °²·Q¥]§t¨S¦³¶i¦ìªº¹s )¡A¬G 14350¡Ñ4 ¦s©ñ¦ì§}¤ñ 14350¡Ñ9 °ª 10 Ӧ줸²Õ¡C¸Ó¹Ïªº¤U¥b³¡ÂŦ⪺¹s¬O¤j¦ì¼Æ³¡¥÷¡A¾ï¦âªº¹s¬O¤p¦ì¼Æªº³¡¥÷¡A¨C¤@Ó¼¼Æ¼³Q¼¼Æ®É¡A¦³¤T³¡¥÷¡C¼g¦¨ª½¦¡«Ü¦n¤À¿ë¡A¦ý¦b°O¾ÐÅé«Ü¤£®e©ö¬Ý±o¥X¨Ó¡C¦p¦¹¨C·í ubcd_mul ªð¦^®É¡A¨Ï¼¼Æ´î¤@¡Aª½¨ì¬°¹s¬°¤î¡AY¼¼Æ¬°¹s¥ß§Y¸õ¥X°j°é¡C
ubcd_mul °Æµ{¦¡¬O°õ¦æ¨âÓ¥¼»E¶° BCD ¼Æ¬Û¼ªº°Æµ{¦¡¡A³oӰƵ{¦¡¥Dn¦³¨âÓ°j°é²Õ¦¨¡A²Ä¤@Ó°j°é¬O°õ¦æ¨C¤@¦ì¼¼Æ»P³Q¼¼Æ¬Û¼«áªºµ²ªG¡C¨C¤@¦ì¼¼Æ»P³Q¼¼Æ¬Û¼³£¤À¦¨¤TÓ³¡¥÷¡A½Ð¦^¨ì¤W± 987654¡Ñ912¡×900740448 ªº¨Ò¤l¡A¨C¤@¦ì¼¼Æ»P³Q¼¼Æ¬Û¼®É¡A¥²¶·¦b«e±©Î«á±¥[¤WY¤z¦ì¼Æ¹s¡C¦]¬°¬O¨Ï¥Î¥¼»E¶°ªº BCD ¼Æ¬Û¼¡A©Ò¥H AAM «ü¥O¡A¦A¥H AAA ¥[¤W¶i¦ì¡C
²Ä¤GÓ°j°é¬O¨Ï¼È¦s°Ï¤¤ªº¸ê®Æ¬Û¥[¡A¸Ô²Ó±¡§Î½Ð°Ñ¦Ò²Õ¦X»y¨¥ªº²Ä 13 ³¹¤Î²Ä 14 ³¹¡C
n§â¬Y¨Ç¸ê®Æ«þ¨©¨ì°Å¶KïùØ¡A¶·¶i¦æ¤U±¨BÆJ¡G
OpenClipboard ¬O¥Î¨Ó¶}±Ò°Å¶Kï¡A³oÓ·N«ä¨Ã«D§â°Å¶K諸¤º®eÅã¥Ü¦b¿Ã¹õ¤W¡A¦Ó¬Oªí¥Ü¨t²Î¤w·Ç³Æ¦n°Å¶Kï¤F¡C¨ä쫬¬°¡G
BOOL OpenClipboard( HWND hWndNewOwner // handle to window opening clipboard );
°Ñ¼Æ hWndNewOwner ¬O¬YÓµøµ¡¥N½X¡A³oÓµøµ¡¬O«ü¶}±Ò°Å¶K諸µøµ¡¡A¥ç§Y¦¹µøµ¡¥i¥H¦s¨ú°Å¶Kï¡A°²¦p hWndNewOwner ¬O NULL¡Aªí¥Ü¬O©I¥s OpenClipboard ªºµøµ¡©Ò¶}±Ò¡COpenClipboard ¦pªG¦¨¥\¶}±Ò¡Aªð¦^®É¡AEAX Ȥ£µ¥©ó¹s¡F¦pªG¥¢±Ñ¡AEAX ¬° NULL¡C·íÀ³¥Îµ{¦¡n¦s¨ú°Å¶K諸¸ê®Æ®É¡A¥²¶·¥Î OpenClipboard ¶}±Ò°Å¶Kï¡F·í¤£»Ýn¦s¨ú°Å¶K鷺ªº¸ê®Æ«á¡A´NÀ³¸Ón©I¥s CloseClipboard Ãö³¬°Å¶Kï¡C
²Ä¤GÓ¨BÆJ¬O°õ¦æ EmptyClipboard¡A²MªÅ°Å¶Kï¡A³oÓ¹Lµ{¬O§âì¨Ó¦b°Å¶K諸¤º®e²M°£¡CEmptyClipboard ¨S¦³°Ñ¼Æ¡CEmptyClipboard ¦pªG¦¨¥\²M°£¸ê®Æ¡Aªð¦^®É¡AEAX Ȥ£µ¥©ó¹s¡F¦pªG¥¢±Ñ¡AEAX ¬° NULL¡C¦ý¦pªG±z·Q¨Ï¥Î°Å¶KïùØÂ¦³ªº¸ê®Æ¡A¥i¥H¤£°µ³o¤@¨B¡A³o¼Ëªº¸Ü¡A¦pªG¦A§â¥t¤@¥÷¸ê®Æ²¾¶i°Å¶Kï¡A¨º»ò¦³ªº¸ê®Æ¨Ã¤£·|®ø¥¢¡C
SetClipboardData ¬O§â¸ê®Æ²¾¤J°Å¶KïùØ¡A¨ä쫬¬°¡G
HANDLE SetClipboardData(
UINT uFormat, // clipboard format
HANDLE hMem // data handle
);
°Ñ¼Æ hMem ¬O°O¾ÐÅé°Ï¶ô¥N½X¡A¥¦¬O¥Ñ GlobalAlloc API ©Ò°t¸mªº°O¾ÐÅé°Ï¶ô¡A½Ð°Ñ¦Ò²Ä 14 ³¹ªº¡y°t¸m°O¾ÐÅé¡z¡C°Ñ¼Æ uFormat ¬O«ü²¾¤J°Å¶Kï¸Ì±ªº¸ê®ÆÄݩ󨺤@ºØ¸ê®Æ¡A¥i¥H¬O¤å¦r¡B¹Ï¤ù¬Æ¦ÜÁnµ¡K¡K¡A±`¨£ªº´XºØ¦p¤U¡G
¦pªG¶¶§Qªº§â¸ê®Æ²¾¤J°Å¶Kï¡A«h SetClipboardData ·|¶Ç¦^«D¹sÈ¡F§_«h¶Ç¦^ NULL¡C
CloseClipboard ¤£»Ýn°Ñ¼Æ¡C¨C·íµ{¦¡§ïÅܰŶK鷺ªº¸ê®Æ¡A´NÀ³¸Ó©I¥s CloseClipboard Ãö³¬°Å¶Kï¡A¨Ï¨ä¥LÀ³¥Îµ{¦¡¯à¦s¨ú°Å¶Kï¡C¦pªG¦¨¥\ªºÃö³¬°Å¶Kï¡A«h CloseClipboard ·|¶Ç¦^«D¹sÈ¡F§_«h¶Ç¦^ NULL¡C
¦b Windows §@·~¨t²ÎùØ¡A¦³¤@¨Ç¯S®íªº¸ê®Æ§¨¡A¨Ò¦p¡y§Úªº¤å¥ó¡z¡B¡y±Ò°Ê¡z¡K¡Kµ¥µ¥¡An¨ú±o³o¨Ç¯S®íªº¸ê®Æ§¨¦bµwºÐ¤¤ªº¸ô®|¦WºÙ¡A±o¥ý¨ú±o¤@ÓºÙ¬° item identifier list ªºÃѧO½X¡AµM«á¦b¥H¦¹ÃѧO½X¨ú±o§¹¾ã¸ô®|¦r¦ê¡C¨ú±o item identifier list ÃѧO½X¥i¥Î SHGetSpecialFolderLocation API¡A³oÓ API ¬O¥]§t¦b SHELL32.DLL ùر¡A¦]¦¹±o¥]§t SHELL32.INC ¤Î SHELL32.DLL¡A¨ä쫬¦p¤U¡G
WINSHELLAPI HRESULT WINAPI SHGetSpecialFolderLocation(;
HWND hwndOwner,
int nFolder,
LPITEMIDLIST *ppidl
);
²Ä¤@ӰѼơAhwndOwner «ü©w¤F©Ò¦³ªÌµøµ¡¡A¥ç§Y©I¥s SHGetSpecialFolderLocation ªºµøµ¡©Î¹ï¸Ü²°¡C²Ä¤GӰѼƬO nFolder¡A¨M©wn¨ú±o¨º¤@Ó¤l¥Ø¿ýªº¸ô®|¡AnFolder »P¨ä©Ò¥Nªíªº·N¸q¦p¤Uªí¡G
| nFolder | ·N¡@¡@¸q | ¨Ò¡@¡@¤l |
| CSIDL_DESKTOP | ®à± | C:\Documents and Settings\wanker\®à± |
| CSIDL_DESKTOPDIRECTORY | ®à± | C:\Documents and Settings\wanker\®à± |
| CSIDL_FONTS | ¦r«¬ | C:\WINDOWS\Fonts |
| CSIDL_NETHOOD | ºô¸ô¤WªºªÚ¾F | C:\Documents and Settings\wanker\NetHood |
| CSIDL_PERSONAL | §Úªº¤å¥ó | C:\Documents and Settings\wanker\My Documents |
| CSIDL_PROGRAMS | ¡u¶}©l¡v¥\¯àªíªº ¡y©Ò¦³µ{¦¡¡z | C:\Documents and Settings\wanker\¡u¶}©l¡v¥\¯àªí\µ{¦¡¶° |
| CSIDL_RECENT | §Ú³Ìªñªº¤å¥ó | C:\Documents and Settings\wanker\Recent |
| CSIDL_SENDTO | ¡@ | C:\Documents and Settings\wanker\SendTo |
| CSIDL_STARTMENU | ¡u¶}©l¡v¥\¯àªí | C:\Documents and Settings\wanker\¡u¶}©l¡v¥\¯àªí |
| CSIDL_STARTUP | ±Ò°Ê | C:\Documents and Settings\wanker\¡u¶}©l¡v¥\¯àªí\µ{¦¡¶°\±Ò°Ê |
| CSIDL_SYSTEM | ¡@ | C:\WINDOWS\system32 |
| CSIDL_TEMPLATES | ¡@ | C:\Documents and Settings\wanker\Templates |
²Ä¤TӰѼƬO item identifier list ÃѧO½Xªº¦ì§}«ü¼Ð¡A¦b©I¥s SHGetSpecialFolderLocation ¤§«e¡A§â³oÓ¦ì§}¥H°Ñ¼Æ¤è¦¡¶Çµ¹ SHGetSpecialFolderLocation¡ASHGetSpecialFolderLocation ªð¦^®É¡A·|§â item identifier list ÃѧO½X¦s¤J¦¹¦ì§}¡A¦pªG SHGetSpecialFolderLocation ¦¨¥\ªº¨ú±oÃѧO½X¡A«h¶Ç¦^ S_OK¡Cµy«á¦A¥H³oÓÃѧO½X©I¥s SHGetPathFromIDList API ´N¥i¥H±o¨ì¯S®í¸ê®Æ§¨§¹¾ãªº¸ô®|¦WºÙ¡CSHGetPathFromIDList ªºì«¬¬O¡G
WINSHELLAPI BOOL WINAPI SHGetPathFromIDList(
LPCITEMIDLIST pidl,
LPSTR pszPath
);
°Ñ¼Æ pidl ¬O©I¥s SHGetSpecialFolderLocation «á¡A©Ò±oªº item identifier list ÃѧO½X¡ApszPath «h¬O«ü¦V¯S®í¸ê®Æ§¨§¹¾ãªº¸ô®|¦ì§}¡A¤@¯ë¦Ó¨¥¨ä¤j¤p¬° MAX_PATH ¦ì¤¸²Õ ( ¦pªG±z¶}±Ò WINDOWS.INC¡A¥i¥H§ä¨ì MAX_PATH µ¥©ó 260 )¡CY SHGetPathFromIDList °õ¦æ¦¨¥\¡A«hªð¦^ TRUE¡A¨Ã¥B·|§â§¹¾ã¸ô®|¦WºÙ¦s¨ì pszPath ©Ò«üªº¦ì§}ùØ¡C
·í½s¿è®Øªº¤º®e³Q§ïÅܮɡA¤]´N¬O¨Ï¥ÎªÌ§ïÅÜn¨Dªº¶¥¼®É¡A´NÀ³¸Ó¨Ï¡y«þ¨©µ²ªG¡z«ö¶s»P¡y¦s¦¨¡K¡z«ö¶s¸T¥Î¡A§_«h©Ò±oµ²ªG¬O¿ù»~ªº¡A¸T¥Î«ö¶s©Î±Ò¥Î«ö¶s¥i¥H¥Î EnableWindow ¨Ó¹F¨ì¥Øªº¡An¦b¨º¤@Ӯɾ÷¸T¥Î©Î±Ò¥Î¡A«h¥²¶·ºÊµø½s¿è®Øªº³qª¾½X¡C
·í¨Ï¥ÎªÌ§â·Æ¹«²¾¨ì½s¿è®Ø¨Ã«ö¤U·Æ¹«¥ªÁä®É¡A½s¿è®Ø·|µo¥X WM_COMMAND °T®§µ¹¤÷µøµ¡¡A¨Ã¦b lParam ¤¤¶ñ¤J½s¿è®Øªº¥N½X¡AwParam ªº§C¦r²Õ¶ñ¤J½s¿è®ØªºÃѧO½X ( identifier )¡AwParam ªº°ª¦r²Õ¶ñ¤J³qª¾½X ( notification )¡C³qª¾½X¬O§i¶D¤÷µøµ¡¨Ï¥ÎªÌ°µ¤F¨º¨Ç°Ê§@¡A¥H¨Ïµ{¦¡°µ¥X¬Û¹ïÀ³ªº°Ê§@¡C©³¤U¬O±`¨£ªº³qª¾½X¡G
¦P¼Ëªº¡A«ö¶s±±¨î¤¸¥ó¤]·|§â¤@¨Ç³qª¾½X¶Ç»¼µ¹¤÷µøµ¡¡A¥HÅý¤÷µøµ¡°µ³B²z¡A©³¤U¬O±`¥Î³qª¾½X¡G
·í§ÚÌ§â·Æ¹«´å¼Ð²¾¨ì«ö¶s¤W«á¡A«ö¤U·Æ¹«¥ªÁ䤣©ñ®É ( ©ÎªÌ«ö¶s±o¨ìÁä½L¿é¤JµJÂI¡A¨Ï¥ÎªÌ«ö¤UªÅ¥ÕÁ䤣©ñ®É )¡A³o®É«ö¶s·|Åã¥Ü³QÀ£¤Uªº¼Ë¤l¡A¦¹¨è«ö¶s·|µo¥X BN_PUSHED ³qª¾½X¡C·í©ñ¶}·Æ¹«¥ªÁä ( ©Î©ñ¶}ªÅ¥ÕÁä )¡A«ö¶s·|Åã¥Ü¼u°_¨Óªº¼Ë¤l¡A¦¹¨è«ö¶s·|µo¥X BN_UNPUSHED¡C§¹¦¨¤@¦¸À£¤U«á¦A¼u°_ªº¹Lµ{ ( §Y©Ò¿×ÂI«ö )¡A«ö¶sµo¥X BN_CLICKED ³qª¾½X¡C
¤£ºÞ¤°»ò·®æªº«ö¶s¡A³£·|µo¥X BN_CLICKED¡A¦ý¬O¥u¦³¨ã¦³ BS_NOTIFY ·®æªº«ö¶s¡A¤~·|µo¥X BN_DISABLE¡BBN_PUSHED¡BBN_KILLFOCUS¡BBN_PAINT¡BBN_SETFOCUS ©M BN_UNPUSHED ³qª¾½X¡C¨ã¦³ BS_USERBUTTON¡BBS_RADIOBUTTON ©Î BS_OWNERDRAW ·®æªº«ö¶s¡A·|¦Û°Êµo¥X BN_DBLCLK ³qª¾½X¡A¦Ó¨ä¥L·®æªº«ö¶s«h»Ýn¨ã¦³ BS_NOTIFY ·®æ¡A¤~·|µo¥X BN_DBLCLK ³qª¾½X¡C
¦b FACTORIAL µ{¦¡³B²z WM_COMMAND ¹Lµ{ùØ¡A¤p¤ì°¸¥u»Ý³B²z«ö¶sµo¥Xªº BN_CLICKED ©M½s¿è®Øµo¥Xªº EN_CHANGE ³qª¾½X¡A¨ä¾lªº³£¤£³B²z¡C¥ý¨Ï³qª¾½X¦s©ó EDX¡A¦Ó±±¨î¤¸¥óªºÃѧO½X¦s©ó EAX¡AµM«á¥ýÀˬd³qª¾½X¬O BN_CLICKED ÁÙ¬O EN_CHANGE¡C¦pªG¬O BN_CLICKED¡A¦AÀˬd¨º¤@Ó«ö¶sµo¥Xªº¡A¥H«K§@¥X¬Û¹ïÀ³ªº³B²z¡F¦pªG¬O EN_CHANGE¡Aªí¥Ü¬O½s¿è®Øµo¥Xªº¡A¨Ï¡y«þ¨©µ²ªG¡z»P¡y¦s¦¨¡K¡z¨â«ö¶s¸T¥Î¡C¨äµ²ºc¦p¤U¡G
.ELSEIF uMsg==WM_COMMAND
mov edx,wParam
mov eax,wParam
shr edx,10h ;EDX=³qª¾½X
and eax,0ffffh ;EAX=±±¨î¤¸¥óÃѧO½X
.IF dx==BN_CLICKED
.IF ax==IDC_CALC
;¨Ï¥ÎªÌ«ö¤U¡ypºâ¡z«ö¶s
.ELSEIF ax==IDC_COPY
;¨Ï¥ÎªÌ«ö¤U¡y«þ¨©µ²ªG¡z«ö¶s
.ELSEIF ax==IDC_SAVE
;¨Ï¥ÎªÌ«ö¤U¡y¦s¦¨¡K¡z«ö¶s
.ENDIF
.ELSEIF dx==EN_CHANGE
.IF ax==IDC_OPERAND
;¨Ï¥ÎªÌ§ïÅܽs¿è®Ø¤º®e
.ENDIF
.ENDIF
©³¤U´N¬O FACTORIAL.ASM ªºì©l½X¡G
;FACTORIAL.ASM¥i¥Hpºâ¤£¤j©ó65536ªº¶¥¼(65536!=5.1629485231E+287193)
.586
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
include kernel32.inc
include shell32.inc
includelib user32.lib
includelib kernel32.lib
includelib shell32.lib
IDC_COPY EQU 2001
IDC_CALC EQU 2002
IDC_SAVE EQU 2003
IDC_OPERAND EQU 2004
IDC_ANSWER EQU 2005
IDC_SCIENCE EQU 2006
IDC_SPEND EQU 2007
LARGEST EQU 461E0h ;461d9h=287193
BIGGEST_NUMBER EQU 65536
EFFECT EQU 40
;**********************************************************
.DATA
hInstance HANDLE ?
lpTemp LPSTR ?
nAnswer DWORD ? ;¼¿n¦r¦ê¦ì¤¸²Õ¼Æ
hCopy HANDLE ? ;¡y«þ¨©µ²ªG¡z«ö¶sªº¥N½X
hSave HANDLE ? ;¡y¦s¦¨¡K¡z«ö¶s¥N½X
hMemProduct HANDLE ?
nBytesWritten DWORD ?
dwDesktop DWORD ?
lpEndPath LPSTR ?
lpEndFileName LPSTR ?
szDlgName BYTE 'Factorial',0
szIcon BYTE 'Factorial',0
szFormat BYTE 'E%d',0
szSciNotation BYTE EFFECT DUP (0) ;¬ì¾Ç°O¸¹(Scientific notation)
szSaveAs BYTE '¦s¦¨',0dh,0ah
szFileName BYTE 11 DUP (0)
szOverMsg BYTE '¤Ó¤j¤F¡AµLªkÅã¥Ü',0
szPathName BYTE MAX_PATH dup (0)
szErrorFile BYTE 'ÀÉ®×'
szFileExisted BYTE '¤w¦s¦b¡I',0
szFmtSpend BYTE '¦@ªá¶O%d²@¬í',0
szSpendTime BYTE 30 DUP (0)
;***********************************************************
.CODE
;-----------------------------------------------------------
ubcd_add PROC USES ebx edx esi edi lpLow1,lpLow2,lpSum,n1,n2
;pºâ¨â«D»E¶°BCD¼Æ¤§©M
;¿é¤J¡GlpLow1¡G³Q¥[¼Æ³Ì§C¦ì§}¡A¥H¥¼»E¶°BCD¤è¦¡Àx¦s¡A¤j¦ì¼Æ¦b°ª¦ì§}
; lpLow2¡G¥[¼Æ³Ì§C¦ì§}¡A¥H¥¼»E¶°BCD¤è¦¡Àx¦s¡A¤j¦ì¼Æ¦b°ª¦ì§}
; lpSum¡G©M³Ì§C¦ì§}
; n1¡G³Q¥[¼Æ¦ì¼Æ
; n2¡G¥[¼Æ¦ì¼Æ
;¿é¥X¡GEAX¡G¬°©M©ÒÀx¦sªº¦ì§}¡A¥H¥¼»E¶°BCD¤è¦¡Àx¦s¡A¤j¦ì¼Æ¦b°ª¦ì§}
; ECX¡G©Mªºªø«×¡A§Y¦ì¼Æ
; EBX¡BEDX¡BESI¡BEDI§¡³Q«O¦s°_¨Ó
mov esi,lpLow1 ;ESI=³Q¥[¼Æ³Ì§C¦ì§}
mov ebx,lpLow2 ;EBX=¥[¼Æ³Ì§C¦ì§}
mov eax,n1
cmp eax,n2 ;¤ñ¸û³Q¥[¼Æ»P¥[¼Æ¨º¤@Ó¦ì¼Æ¤j
jae u_a0
xchg eax,n2 ;Y¥[¼Æ¦ì¼Æ¤j¡A«h¨Ï³Q¥[¼Æ»P¥[¼Æ¥æ´«³Ì§C¦ì§}
xchg esi,ebx ;(ESI»PEBX)¡A¦P®É¤]¥æ´«¦ì¼Æ(n1¡Nn2)
mov n1,eax
mov lpLow2,esi
mov lpLow1,ebx
;¶}©l¬Û¥[®É¡AESI«ü¦V¨â¼Æ¦ì¼Æ¸û¤jªÌªº¦ì§}¡An1¬°¨ä¦ì¼Æ
u_a0: sub eax,n2
mov n1,eax ;n1¡×«Å|³¡¥÷ªº¦ì¼Æ
mov edi,lpSum
;pºâ«Å|³¡¥÷¡A¨Ò¦p
; 987654
;+ 912
;---------
; 988566
;³Q¥[¼Æ¡B¥[¼Æ³£¦³Ó¦ì¡B¤Q¦ì¡B¦Ê¦ì¼Æ¡A©Ò¥H¬O«Å|ªº³¡¥÷¡C
clc
sub eax,eax
u_a1: lodsb ;¨ú±o¥[¼Æ¤¤ªº¤@¦ì
add al,ah ;¥[¤W¶i¦ìªº¼Æ
cbw
add al,[ebx]
aaa ;¥[ªk½Õ¾ã¡AY¦³¶i¦ì¡A·|¦s¦bAHùØ
stosb ;¦s¤J©M¤º
inc ebx
dec n2
jnz u_a1
cmp n1,0
jz u_a3 ;°²¦p³Q¥[¼Æ»P¥[¼Æ¦ì¼Æ¬Û¦P®É¡An1·|µ¥©ó¹s
;pºâ¥u¦³¸û¤j¦ì¼Æ³¡¥÷¡A¥H¤W±¬°¨Ò¡A§Ypºâ
; 987654
;+ 000912
;---------
; 988566
;987+000ªº³¡¥÷
u_a2: lodsb
add al,ah ;AH¡×pºâ«Å|³¡¥÷«áªº¶i¦ì
cbw
aaa
stosb
dec n1
jnz u_a2
;³B²z³Ì¤j¦ì¼Æ¶i¦ì
u_a3: sub al,al ;¨ÏALµ¥©ó¹s
add al,ah ;AH¡×¶i¦ì¡A¥[¤W¶i¦ì
or al,al
jz u_a4
stosb
u_a4: mov ecx,edi
mov eax,lpSum
sub ecx,eax
ret
ubcd_add ENDP
;-----------------------------------------------------------
ubcd_mul PROC USES ebx esi edi,lpLow1,lpLow2,Product,n1,n2
;pºâ¨â«D»E¶°BCD¾ã¼Æ¤§¼¿n
;¿é¤J¡GlpLow1¡G³Q¼¼Æ³Ì§C¦ì§}¡A¥H¥¼»E¶°BCD¤è¦¡Àx¦s¡A¤j¦ì¼Æ¦b°ª¦ì§}
; lpLow2¡G¼¼Æ(multiplier)³Ì§C¦ì§}¡A¥H¥¼»E¶°BCD¤è¦¡Àx¦s¡A¤j¦ì¼Æ¦b°ª¦ì§}
; Product¡G¼¿n³Ì§C¦ì§}
; n1¡G³Q¼¼Æ¦ì¼Æ
; n2¡G¼¼Æ¦ì¼Æ
;¿é¥X¡GEAX¡G¬°¼¿n©ÒÀx¦s¦ì§}¡A¥H¥¼»E¶°BCD¤è¦¡Àx¦s¡A¤j¦ì¼Æ¦b°ª¦ì§}
; ECX¡G¼¿nªº¦ì¼Æ
; EDX³Q¯}Ãa
;ì²z¡G¥H987654*912=900740448¬°¨Ò¡G
; 987654 ³Q¼¼Æ¡A¦s©ó©Ò°t¸m°O¾ÐÅé¦ì§}ªº0¡ã(LARGEST-1)³B¡A¤]¬O¼¿n©Ò¦s©ñ³B¡A¦@¦³n1¦ì¼Æ
; x 912 ¼¼Æ¡A¦s©ó©Ò°t¸m°O¾ÐÅé¦ì§}ªºLARGEST¡ã(LARGEST+3FH)³B¡A¦@¦³n2¦ì¼Æ¡A¦¹¨Òn2=3
; ----------
; zz1975308 ¼È¦s°Ï¡A¥Ñ©Ò°t¸m°O¾ÐÅé¦ì§}ªº(LARFEST+40H)³B¶}©l¡A¹ï¨C¤@¦ì¼¼Æ¦Ó¨¥
; z0987654z ¡A§¡¦û¾Ún1+n2¦ì¼Æ¡A¦¹¨Òn1+n2¦@9¦ì¼Æ¡A¼¿n¤]¬O9¦ì¼Æ
; 8888886zz
; ----------
; 900740448
;³Q¼¼Æ·|³Q¤T¦ì¼¼Æ¼¤T¦¸¡A¨C¤@¦¸³£¥i¤À¦¨¤T³¡¥÷¡G³Ì¥kÃän¶ñ¤J0¡A¬Û¼¡A°µ¥ªÃä¤]n¶ñ¤J0
;©³¤Uªº°Ï°ìÅܼơAlpHi1,lpHi2,nProduct¤À§Oªí¥Ü³Q¼¼Æ³Ì°ª¦ì§}¡B¼¼Æ³Ì°ª¦ì§}¡B¼¿n¦ì¼Æ
LOCAL lpHi1,lpHi2,nProduct:DWORD
mov eax,lpLow1 ;pºâ³Q¼¼Æ¡B¼¼Æ³Ì¤j¦ì¼Æ©Ò¦b¦ì§}¡A
mov ebx,lpLow2 ;¨Ã¦s©ólpHi1¡BlpHi2
add eax,n1
add ebx,n2
mov lpHi1,eax
mov lpHi2,ebx
mov ecx,n1 ;pºâ¼¿n¦ì¼Æ¡A¨Ã¦s©ó nProduct
add ecx,n2
mov nProduct,ecx
;²Ä¤@Ó¤j°j°é¡A³B²z¨C¤@¦ì¼¼Æ¥h¼³Q¼¼Æ
mov edi,lpTemp ;EDI«ü¦V¼È¦s°Ï(¦s©ñ¨C¤@¦ì¼¼Æ¬Û¼«áªºµ²ªG)
mov esi,lpLow2 ;¨C¦¸pºâ¼¼Æ¤@¦ì¼Æ¼³Q¼¼Æµ²ªG¤§°j°é¶}©l
m1: sub eax,eax ;²M°£EAX¡NEDX¨Ï©¹«áªºAAM¡NAAA«ü¥O¯à¥¿½T¹Bºâ
mov edx,eax
mov ecx,esi ;¤p¦ì¼Æªº¶ñ¹s³¡¤À¡AECX¬°¶ñ¹sªºÓ¼Æ
sub ecx,lpLow2
mov ebx,lpLow1 ;pºâ¼¼Æ¨C¦ì¼Æ¼³Q¼¼Æ³¡¤À
push ecx
jcxz m3
m2: mov [edi],al
inc edi
loop m2
m3: mov al,[ebx] ;BX«ü¦V³Q¼¼Æ
mul BYTE PTR [esi]
aam
add al,dh ;¥[¤W«e¤@¦¸ªº¶i¦ì
aaa
mov dh,ah ;¶i¦ì¦s©óDH
mov [edi],al
inc ebx
inc edi
cmp ebx,lpHi1
jne m3
mov [edi],dh ;³B²z¶i¦ì³¡¤À
inc edi
pop eax ;³B²z¤j¦ì¼Æ¶ñ¹s³¡¤À
mov ecx,nProduct
sub ebx,lpLow1
sub ecx,eax
sub ecx,ebx
dec ecx ;ECX¬°¶ñ¹sªºÓ¼Æ
jcxz m5
m4: mov BYTE PTR [edi],0
inc edi
loop m4
m5: inc esi ;«ü¦V¼¼Æªº¤U¤@¦ì
cmp esi,lpHi2 ;Àˬd¼¼Æ¬O§_³£¤wºâ§¹
jne m1
;²Ä¤GÓ¤j°j°é¡A³B²z¦b¼È¦s°Ï¤¤¨C¤@¦ì¼¼Æ¼¿n¤§©M
mov edi,Product
mov ecx,nProduct
xor eax,eax
inc ecx
rep stosb ;²M°£¼¿nªº©U§£¸ê®Æ
mov ecx,lpLow2
mov esi,Product ;ESI=¼¿n¦ì§}
sub lpHi2,ecx ;lpHi2=¼¼Æ¦ì¼Æ¡A§Yn¬Û¥[¦¸¼Æ
mov ebx,lpTemp ;EBX¬°¼È¦s°Ï¦ì§}
mov edx,nProduct
m6: INVOKE ubcd_add,esi,ebx,esi,edx,edx ;ESI=ESI+EBX
add ebx,edx
dec lpHi2
jnz m6
mov eax,Product
mov ecx,nProduct
cmp BYTE PTR [eax+ecx-1],0 ;Àˬd³Ì°ª¦ì¼Æ¬O§_¬°¹s
jnz m7
dec ecx ;Y¨S¦³¶i¦ì¡A«h¼¿n¦ì¼Æ´î¤@
m7: ret
ubcd_mul ENDP
;-----------------------------------------------------------
;¦¹°Æµ{¦¡¬Opºâeaxªº¶¥¼
;¿é¤J¡GEAX¡Ðnpºâ¶¥¼ªº¹Bºâ¤¸
; EDX¡Ð«ü©w©Ò±oµ²ªG¦ì§}
;¿é¥X¡GEAX¡Ð©Ò±oµ²ªG¦ì§}¡A¦¹µ²ªG¥HASCII¦r¦êÀx¦s¡A¥H0µ²§À
; ECX¡Ð¼¿n¦³´X¦ì¼Æ¡A22!¡×¡y1124000727 7776076800 00¡z¦³22¦ì¼Æ
; EDX¡Ð¼¿n¦r¦ê¦ì¤¸²Õ¼Æ¡A22!¡×¡y1124000727 7776076800 00¡z§tªÅ¥Õ¡B´«¦æ¦r¤¸¦û¦³24Ӧ줸²Õ
;ì²z¡GY¨Ï¥ÎªÌ¿é¤J¤£¬O0!¡A¥ýn¨D°t¸mªº°O¾ÐÅé¡A°O¾ÐÅé¤À°t¦p¤U¡G
;°¾²¾¦ì§}¡@¡@¡@¡@¡@¡@¡@¡@¡@¡@·N¸q
;0¡ãLARGEEST¡Ð1¡@¡@¡@¡@¡@¡@ ³Q¼¼Æ¡B¼¿n¦s©ñ¦ì§}
;LARGEST¡ãLARGEST¡Ï10H¡@¡@¡@¼¼Æ¦s©ñ¦ì§}
;LARGEST¡Ï0FH¡ãLARGEST*8H¡@ ¼È¦s°Ï
Factorial PROC USES esi edi
LOCAL factorial:DWORD
LOCAL hMemory:HANDLE ;¦V¨t²În¨D°t¸mªº°O¾ÐÅé¦ì§}
LOCAL lpMul2:LPSTR ;¼¼Æ¥H¥¼»E¶°BCD¼Æ¦s©ólpMul2©Ò«ü¦ì§}¡A°ª¦ì¼Æ¦s©ó°ª¦ì§}
LOCAL lpProduct:LPSTR ;¼¿n¦ì§}
LOCAL dwDigMul1,dwDigMul2:DWORD ;³Q¼¼Æ¡B¼¼Æ¦ì¼Æ
LOCAL dwTick:DWORD
mov factorial,eax ;npºâ¶¥¼ªº¼Æ¦s©ófactorial
mov lpProduct,edx ;¼¿n¦ì§}¦s©ólpProduct
INVOKE GetTickCount ;¨ú±o®É¶¡¡A¦Û¶}¾÷¨ì²{¦b¸g¹L´XÓ²@¬í
mov dwTick,eax
mov edx,lpProduct
mov ecx,1
mov [edx],cx
cmp factorial,0 ;Y¤£¬O¨D0!¡A«h¸õ¦Ünot_0:³B
jnz not_0
;Y¬Opºâ0!¡A«hµ²ªG¬°0!=1
add BYTE PTR [edx],'0'
mov DWORD PTR [szSciNotation],45302e31h
push edx
mov WORD PTR [szSciNotation+4],30h
INVOKE GetTickCount
sub eax,dwTick
INVOKE wsprintf,OFFSET szSpendTime,OFFSET szFmtSpend,eax
sub ecx,ecx
pop eax
inc ecx
mov edx,ecx
inc edx
jmp finish
;Y¤£¬Opºâ0!
not_0: mov dwDigMul1,ecx ;¼¿n¦ì¼Æ¤@¶}©l¥u¦³¤@¦ì¡A¨ä¹ê¼¿n´N¬O1
INVOKE GlobalAlloc,GPTR,LARGEST*6h+10H ;¦V¨t²În¨DLARGEST*6+10Hªº°O¾ÐÅé¤j¤p
mov hMemory,eax
mov BYTE PTR [eax],1;¥ý¨Ï¼¿n¬°1
add eax,LARGEST ;©Ò°t¸mªº°O¾ÐÅ餤¡A³Ì§CªºLARGEST¦ì¤¸²Õ¬°³Q¼¼Æ¦s©ñ³B
mov lpMul2,eax
add eax,10h ;¤ñ³Q¼¼Æ°ª¦ì§}ªº10H¦ì¤¸²Õ¬°¼¼Æªº¦s©ñ³B
mov lpTemp,eax ;¼È¦s°Ï¦ì§}
;§â¼¼Æ¥H¥¼»E¶°BCD¼Æ¦s¤JlpMul2©Ò«ü¦ì§}¡A°ª¦ì§}¦s©ñ°ª¦ì¼Æ
next: mov eax,factorial
mov edi,lpMul2
mov ebx,10 ;³Ì¦h¥u¯à¨D10¦ì¼Æªº¶¥¼
mov ecx,ebx
@@: sub edx,edx
div ebx
mov [edi],dl
inc edi
loop @b
dec edi
std
mov ecx,ebx ;¥Ñ¼¼Æ°ª¦ì§}¶}©l¡A´M§ä²Ä¤@Ó«D¹sªº¼Æ
repe scasb
inc ecx
cld
mov dwDigMul2,ecx ;ECX=¼¼Æ¦ì¼Æ
;¤j¼Æ¼ªk¡AhMemory=hMomory*lpMul2
INVOKE ubcd_mul,hMemory,lpMul2,hMemory,dwDigMul1,ecx
mov dwDigMul1,ecx ;¤U¦¸ªº³Q¼¼Æ¦ì¼Æ´N¬O³o¦¸ªº¼¿n¦ì¼Æ
dec factorial
jnz next
;§â¦ì§}hMemory©Ò¦sªº¼¿n¡A¥HBig-Endian¡BASCII¦r¦ê¦s¤JlpProduct©Ò«ü¦ì§}
;¦ì§}hMemoryªº¼¿n¬O¥HLittle-Endian¡B¥¼»E¶°BCD¤è¦¡Àx¦s
mov esi,hMemory
mov edi,lpProduct
add esi,ecx
xor edx,edx
push esi
@@: dec esi
mov al,[esi]
or al,'0'
inc edx
stosb
.IF (dl==10)||(dl==20)||(dl==30)||(dl==40)
mov al,20h ;¨C10¦ì¼Æ¦r¥HªÅ¥Õ¹j¶}
stosb
.ELSEIF dl==50
xor edx,edx
mov ax,0a0dh ;¨C50¦ì¼Æ¦r´«¦æ
stosw
.ENDIF
loop @b
mov al,cl ;AL=NULL¦r¤¸
stosb
sub edi,lpProduct
mov dwDigMul2,edi ;EDI¡×¼¿n¦r¦ê¦ì¤¸²Õ¼Æ¡A¼È¦s©ódwDigMul2
;§â¦ì§}hMemory©Ò¦sªº¼¿n¡A¥H¬ì¾Ç°O¸¹¤è¦¡(ASCII¦r¦ê)¦s©ószSciNotation©Ò«ü¦ì§}
pop esi
mov ecx,dwDigMul1
mov edi,OFFSET szSciNotation
dec esi
mov al,[esi]
dec ecx
add al,'0'
dec esi
mov ah,'.'
stosw
mov edx,ecx
.IF ecx>=EFFECT-10 ;Y¼¿n¦ì¼Æ¤j©ó(EFFECT-10)¦ì¡A
mov ecx,EFFECT-10 ;¶È¦L¥X«e(EFFECT-10)¦ì(¥]§t¤@¦ì¾ã¼Æ)
.ELSEIF ecx==0
mov al,'0'
stosb
jmp ok
.ENDIF
@@: mov al,[esi]
add al,'0'
stosb
dec esi
loop @b
ok: INVOKE wsprintf,edi,OFFSET szFormat,edx
INVOKE GetTickCount
sub eax,dwTick
INVOKE wsprintf,OFFSET szSpendTime,OFFSET szFmtSpend,eax
INVOKE GlobalFree,hMemory
mov eax,lpProduct
mov ecx,dwDigMul1 ;ECX¡×¼¿n¦ì¼Æ
mov edx,dwDigMul2 ;EDX¡×¼¿n¦r¦ê¦ì¤¸²Õ¼Æ
finish: ret
Factorial ENDP
;-----------------------------------------------------------
DlgProc PROC hDlg:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
LOCAL hMem:HANDLE,hFile:HANDLE
.IF uMsg==WM_INITDIALOG
;¸ü¤J¹Ï¥Ü
INVOKE LoadIcon,hInstance,OFFSET szIcon
INVOKE SendMessage,hDlg,WM_SETICON,ICON_SMALL,eax
;¨ú±o¡y«þ¨©µ²ªG¡z¡B¡y¦s¦¨¡K¡z«ö¶s¥N½X¡A¨Ã¨Ï¨ä¸T¥Î
INVOKE GetDlgItem,hDlg,IDC_COPY
mov hCopy,eax
INVOKE EnableWindow,eax,FALSE
INVOKE GetDlgItem,hDlg,IDC_SAVE
mov hSave,eax
INVOKE EnableWindow,eax,FALSE
;°t¸m321658Ӧ줸²Õªº°O¾ÐÅéªÅ¶¡¡A¥H¦s©ñ¼¿n¡A¼¿n³Ì¦h¬°287194¦ì¼Æ¡A¦Ó¨C10¦ì¼Æ
;¦h¶ñ¤@ӪŮæ¡A¨C50¦ì¼Æ¦h¤@Ó´«¦æ¦r¤¸(¨âӦ줸²Õ)¡A¬G¨C50¦ì¼Æ¦h6Ӧ줸²Õ
;287194¡Ò50¡×5743¡K¡K44¡@¡@¡@50¦ì¼Æ¤@¦æ¡A¦@¦³5744¦æ
;287194¡Ï5744¡Ñ6¡×321658 ¨C¦æ¦h6Ӧ줸²Õ¡A¬G¦h¤F5744¡Ñ6Ӧ줸²Õ
INVOKE GlobalAlloc,GMEM_SHARE or GPTR,321658
mov hMemProduct,eax
;¨ú±o¨Ï¥ÎªÌ®à±¸ô®|
INVOKE SHGetSpecialFolderLocation,hDlg,CSIDL_DESKTOP,OFFSET dwDesktop
INVOKE SHGetPathFromIDList,dwDesktop,OFFSET szPathName
mov edx,OFFSET szPathName
@@: cmp BYTE PTR [edx],0
je found_zero
inc edx
jmp @b
found_zero: mov BYTE PTR [edx],'\'
inc edx
mov lpEndPath,edx
.ELSEIF uMsg==WM_COMMAND
mov edx,wParam
mov eax,wParam
shr edx,10h ;EDX=³qª¾½X
and eax,0ffffh ;EAX=±±¨î¤¸¥óÃѧO½X
.IF dx==BN_CLICKED
.IF ax==IDC_CALC
INVOKE GetDlgItemInt,hDlg,IDC_OPERAND,NULL,FALSE
.IF eax<=BIGGEST_NUMBER
mov edx,hMemProduct
call Factorial
mov nAnswer,edx ;nAnswer¡×¼¿n¦r¦ê¦ì¤¸²Õ¼Æ
push eax
INVOKE EnableWindow,hCopy,TRUE
INVOKE EnableWindow,hSave,TRUE
pop eax
mov edx,OFFSET szSciNotation
.ELSE
mov eax,OFFSET szOverMsg
mov nAnswer,0 ;nAnswer¡×0
mov edx,eax ;EDX¡×¬ì¾Ç°O¸¹¦r¦ê¦ì§}
.ENDIF
push edx
INVOKE SetDlgItemText,hDlg,IDC_ANSWER,eax
push IDC_SCIENCE
push hDlg
call SetDlgItemText
INVOKE GetDlgItemText,hDlg,IDC_OPERAND,OFFSET szFileName,8
mov edx,OFFSET szFileName
mov ecx,lpEndPath
@@: mov ah,[edx]
mov [ecx],ah
inc edx
inc ecx
dec al
jnz @b
mov DWORD PTR[edx],58542e21h ;¶ñ¤JÀɦWªº¨ä¾l³¡¥÷
mov WORD PTR [edx+4],54h ;¡A¡y!.TXT¡z,0
mov DWORD PTR[ecx],58542e21h
add ecx,4
mov WORD PTR [ecx],54h
inc ecx
mov lpEndFileName,ecx
INVOKE SetDlgItemText,hDlg,IDC_SAVE,OFFSET szSaveAs
INVOKE SetDlgItemText,hDlg,IDC_SPEND,OFFSET szSpendTime
.ELSEIF ax==IDC_COPY
INVOKE OpenClipboard,NULL ;¶}±Ò°Å¶Kï
call EmptyClipboard ;²MªÅ°Å¶Kï
INVOKE GlobalAlloc,GMEM_SHARE or GPTR,nAnswer
mov esi,hMemProduct
mov edi,eax
mov hMem,eax
mov ecx,nAnswer
rep movsb
INVOKE SetClipboardData,CF_TEXT,eax
INVOKE GlobalFree,hMem
call CloseClipboard
.ELSEIF ax==IDC_SAVE
INVOKE CreateFile,OFFSET szPathName,GENERIC_WRITE,0,0,CREATE_NEW,\
FILE_ATTRIBUTE_NORMAL or FILE_FLAG_WRITE_THROUGH,NULL
.IF eax==INVALID_HANDLE_VALUE
mov ah,LENGTHOF szFileExisted
mov ecx,OFFSET szFileExisted
mov edx,lpEndFileName
@@: mov al,[ecx]
mov [edx],al
inc ecx
inc edx
dec ah
jnz @b
INVOKE MessageBox,hDlg,OFFSET szPathName,OFFSET szErrorFile,MB_OK
.ELSE
mov hFile,eax
INVOKE WriteFile,eax,hMemProduct,nAnswer,OFFSET nBytesWritten,NULL
INVOKE CloseHandle,hFile
.ENDIF
INVOKE EnableWindow,hSave,FALSE
.ENDIF
.ELSEIF dx==EN_CHANGE
.IF ax==IDC_OPERAND
INVOKE EnableWindow,hCopy,FALSE
INVOKE EnableWindow,hSave,FALSE
.ENDIF
.ENDIF
.ELSEIF uMsg==WM_CLOSE
INVOKE GlobalFree,hMemProduct
INVOKE EndDialog,hDlg,NULL
.ELSE
mov eax,FALSE
ret
.ENDIF
mov eax,TRUE
ret
DlgProc ENDP
;-----------------------------------------------------------
start: INVOKE GetModuleHandle,NULL
mov hInstance,eax
INVOKE DialogBoxParam,hInstance,OFFSET szDlgName,NULL,\
OFFSET DlgProc,NULL
INVOKE ExitProcess,eax
;***********************************************************
END start
©³¤U¬O FACTORIAL.RC Àɪº¤º®e¡G
#include "c:\masm32\include\resource.h"
#define IDC_COPY 2001
#define IDC_CALC 2002
#define IDC_SAVE 2003
#define IDC_OPERAND 2004
#define IDC_ANSWER 2005
#define IDC_SCIENCE 2006
#define IDC_SPEND 2007
Factorial ICON exclamation01.ico
Factorial DIALOG 6, 15, 280, 132
STYLE DS_MODALFRAME|WS_POPUP|WS_VISIBLE|WS_CAPTION|WS_SYSMENU
CAPTION "pºâ¬Y¾ã¼Æ¶¥¼"
FONT 8,"MS Sans Serif"
{
CONTROL "! =", -1,"static",SS_LEFT|WS_CHILD|WS_VISIBLE|WS_GROUP, 63, 12, 30, 14
CONTROL "" ,IDC_SCIENCE,"static",SS_LEFT|WS_CHILD|WS_VISIBLE|WS_GROUP, 77, 12,160, 14
RTEXT "=", -1, 6, 27, 15, 12
EDITTEXT IDC_OPERAND,23, 10, 38, 12, WS_TABSTOP|ES_NUMBER|ES_RIGHT
EDITTEXT IDC_ANSWER, 23, 27,238, 55, WS_BORDER|WS_TABSTOP|ES_MULTILINE|ES_AUTOVSCROLL|
ES_READONLY|WS_VSCROLL
CONTROL "",IDC_SPEND,"static",SS_LEFT|WS_CHILD|WS_VISIBLE|WS_GROUP,23,87,100,14
DEFPUSHBUTTON "pºâ" ,IDC_CALC, 10,103, 80, 22
PUSHBUTTON "«þ¨©µ²ªG" ,IDC_COPY,100,103, 80, 22
PUSHBUTTON "¦s¦¨\n!.TXT",IDC_SAVE,190,103, 80, 22,BS_MULTILINE
}
¹Ï¥ÜÀÉ¡Aexclamation01.ico¡A¥i¥H«ö¤U³oùؤU¸ü¡A¦³¤F FACTORIAL.ASM¡BFACTORIAL.RC¡B¥H¤Î exclamation01.ico ¤TÓÀɮסA§â¥¦Ì³£©ñ¦b¦P¤@Ó¤l¥Ø¿ý¡A¨Ò¦p³£©ñ¦b¡yE:\Homepage\SOURCE\FACTORIAL\¡zùØ¡A´N¥i¥H¨Ì©³¤U¨BÆJ²Õͦӱo¨ì FACTORIAL.EXE ¥i°õ¦æÀÉ¡G
E:\>cd homepage\source\factorial [Enter] E:\HomePage\SOURCE\FACTORIAL>rc factorial.rc [Enter] E:\HomePage\SOURCE\FACTORIAL>ml factorial.asm /link factorial.res [Enter] Microsoft (R) Macro Assembler Version 6.14.8444 Copyright (C) Microsoft Corp 1981-1997. All rights reserved. Assembling: FACTORIAL.ASM Microsoft (R) Incremental Linker Version 5.12.8078 Copyright (C) Microsoft Corp 1992-1998. All rights reserved. /SUBSYSTEM:WINDOWS "FACTORIAL.obj" "/OUT:FACTORIAL.exe" "FACTORIAL.res" E:\HomePage\SOURCE\FACTORIAL>
³oÓ API ¬O¥Î¨Ópºâ¹q¸£±q¨t²Î¶}©l¹B§@¨ì¥Ø«e¬°¤î¸g¹L¤F¦h¤Ö²@¬í¡A¨Ã§â³oӮɶ¡¦s¦b EAX ùضǦ^¨Ó¡C¦]¬°µ²ªG¬O¥H 32 ¦ì¤¸¤j¤p°O¿ý¡A©Ò¥H³Ì¦h¥i¥H°O¿ý¨ì 49.7 ¤Ñ¡A¦pªG¶W¹L«hÂk¹s¶}©lp®É¡C¦¹¥~³oÓ API ¨S¦³°Ñ¼Æ¡C
¤p¤ì°¸§Q¥Î³oÓ API ´ú¶qpºâ¬Y¼Æªº¶¥¼ªá¤F¦h¤Ö®É¶¡¡C¤p¤ì°¸©Ò¨Ï¥Îªº CPU ¬O AMD Athlon 64X2 3600¡Ï¡Apºâ 100¡I¦ü¥G¤£¶·ªá¤°»ò®É¶¡¡A¦U¦ìŪªÌ¥i¬Ý¥»³¹¤@¶}©lªº¹Ï´Nª¾¹D¡Fpºâ 1000¡I¥uªá¤F 0.14 ¬í¡Fpºâ 10000¡Iªá¤F 11.9 ¬í¡F¦ý¬Opºâ 65536¡I³ºªá¤F 13 ¤À 4 ¬í (¥Î¥t¤@¥x CPU ¬O Core(TM) Due T7250 2.00GHz ªºµ§°O«¬¹q¸£¶O®É 6 ¤À 57 ¬í )¡C¥i¨£©Òªáªº®É¶¡¨Ã«D¦¨½u©Êµ¥¤ñÃö«Y¡A¦Ó¬Oªá§ó¦h¿ªº®É¶¡¡C