²Ä¤»³¹¡@°ïÅ|®Ø¡]¤@¡^

¨C·íÀ³¥Îµ{¦¡©I¥s°Æµ{¦¡®É¡A¦p¦³¥²­n·|¦b°ïÅ|¤W«Ø¥ß¤@¶ô°O¾ÐÅéªÅ¶¡¡A¨Ñ¨ä°õ¦æ´Á¶¡¨Ï¥Î¡C³o¶ôªÅ¶¡³q±`¥]§tªð¦^¦ì§}¡B©I¥sªÌª¬ºA¡]¦p­ì¥ýªº RBP ©Î³Q«O¦sªº¼È¦s¾¹¡^¡B°Æµ{¦¡©Ò»Ýªº°Ï°ìÅܼƥH¤Î»P¬ÛÃöªº¸ê®Æ¡A³o¼Ëªº°O¾ÐÅéªÅ¶¡ºÙ¬°°ïÅ|®Ø¡]stack frame¡^¡C¦b«e´X³¹¤w¸g´£¨ì¹L°Ñ¼Æ¡Bªð¦^¦ì§}¡B­ì¥ýªº RBP ³o¤T­Ó°ïÅ|®Ø¡A¦Ó³o¨â³¹¤p¤ì°¸¥´ºâÁ|ªº¨Ò¤l»¡©ú§ó§¹¾ãªº°ïÅ|®Ø¡C

¦b¶}©l»¡©ú°ïÅ|®Ø¤§«e¡A¦³¨â¥ó¨Æ±o¥ýÁn©ú¡G①·Ó©¹¨Ò¥ý»¡©ú¥»³¹¥Î±o¨ìªº Win64 API¡Bx64 «ü¥O»P°²«ü¥O¡C③¥»³¹ªº¨Ò¤l¬O GCD.ASM¡A¤£¥Î MASM64 SDK ªº¥¨¶°¡A¦Ó¬O¯Â¤â¤u¥´³y»P­pºâ¦ì§}¡A³o¬O¬°¤F³æ¯Â¡A¤£Åý MASM64 SDK ¥[ªo²K¾L¦h¤F¤@¨Ç¤£»Ý­nªº«ü¥O©Î®ö¶O°ïÅ|ªÅ¶¡¡C


·sªº«ü¥O»P Win64 API

x64 «ü¥O¡GOR

¦b¤é±`¥Í¬¡¤¤¡A±`¨Ï¥Î¡©©Î¡ª³o­Ó´y­z¡C¨Ò¦p±ß¶º«á¡A¶ý¶ý»¡¡G¡u¬~§¹¸J¡©©Î¡ª­Ë§¹¼p¾l´N¯à¥´¹q°Ê¡C¡v·N«ä´N¬O¬~¸J¸ò­Ë¼p¾l¨â¥ó¨Æ¡A¥u­n§¹¦¨¥ô·N¤@¥ó´N¯à¥´¹q°Ê¡C§â°µ§¹¨Æ±¡·í§@¯u¡A¥H¡u1¡vªí¥Ü¡F¨Æ±¡¥¼°µ§¹¡A¬°°²¡A¥H¡u0¡vªí¥Ü¡C¯àª±¹q°Ê¬°¯u¡A¥H¡u1¡vªí¥Ü¡F¤£¯àª±¹q°Ê¬°°²¡A¥H¡u0¡vªí¥Ü¡Cµ²ªG¦p¤Uªí¡G¨Æ¥ó¥Ò¥Nªí¨S¬~¸J¤]¨S­Ë¼p¾l¡A©Ò¥H¤£¯àª±¹q°Ê¡F¨Æ¥ó¤Aªí¥Ü¬~¸J¦ý¨S­Ë¼p¾l¡A¥i¥H¥´¹q°Ê¡K¡K

¨Æ¥ó¬~§¹¸J­Ë§¹¼p¾l¬O§_¯àª±¹q°Ê
¥Ò000
¤A101
¤þ011
¤B111

¦b¹q¸£¤¤¡A¡©©Î¡ª¹Bºâ¤]¹³¤W­±¡u¯à§_¥´¹q°Ê¡vªº¨Ò¤l¤@¼Ë¡C¤]´N¬O»¡¡A¨â­Ó¤@¦ì¤¸ªº¹Bºâ¤¸°µ¡©OR¡ª¹Bºâ¡A¥u­n¦³¤@­Ó¹Bºâ¤¸¬°¤@¡Aµ²ªG´N¬O¤@¡F¥u¦³¨â­Ó¹Bºâ¤¸³£¬O¹s¡Aµ²ªG¤~¬O¹s¡COR ¹Bºâªº¯u­Èªí¦p¤U¡G

0 OR 0¡×0
1 OR 0¡×1
0 OR 1¡×1
1 OR 1¡×1

OR «ü¥Oªº»yªk¬O

OR      ¥Øªº¹Bºâ¤¸,¨Ó·½¹Bºâ¤¸

OR «ü¥O¬O±N¨Ó·½¹Bºâ¤¸ªº¨C­Ó¦ì¤¸»P¥Øªº¹Bºâ¤¸¬Û¹ïÀ³ªº¦ì¤¸§@ OR ¹Bºâ¡A¦A±N¨äµ²ªG¦s¤J¥Øªº¹Bºâ¤¸¤¤¡C¥Øªº¹Bºâ¤¸¥i¥H¬O¼È¦s¾¹¡BÅܼơA¨Ó·½¹Bºâ¤¸¥i¥H¬O¼È¦s¾¹¡BÅܼƻP¥ß§Y­È¡A¥Øªº¹Bºâ¤¸»P¨Ó·½¹Bºâ¤¸¤£¯à¦P®É¬OÅܼơA¥Bªø«×¥²¶·¬Û¦P¡A¨Ò¦p³£¬O¤K¦ì¤¸¡A¤£¥i¤@­Ó¬O¤K¦ì¤¸¥t¤@­Ó¬O¤Q¤»¦ì¤¸¡C

¦¹¥~¡AOR «ü¥O¤]·|¨Ì¾Úµ²ªG³]©wºX¼Ð¼È¦s¾¹¤¤ªº¹s­ÈºX¼Ð¡C°²¦pµ²ªG¬°¹s¡A·|¨Ï¹s­ÈºX¼ÐÅܬ°¡u1¡v¡A§_«h¹s­ÈºX¼Ð¬°¡u0¡v¡COR ¤£·|µo¥Í­É¦ì©Î¶i¦ì¡A¦]¦¹¶i¦ìºX¼Ð³£·|³]¬°¹s¡C

¨Ò¦p¡AAL¡×32H¡A°õ¦æ¡uOR AL,0C3H¡v«áªºµ²ªG¦p¥k¹Ï¡A³Ì«áµ²ªG¬° F3¡A¦]¦¹ AL ¤]·|Åܦ¨ F3¡C

OR «ü¥O¦³´X¶µ¯S©Ê¡G①¦pªG¬Y¼Æ¹ï¦Û¨­¶i¦æ OR ¹Bºâµ²ªG¤´¬°¦Û¨­¡C②¦pªG¦Û¤v¥»¨­¬O¹s¡Aµ²ªG¤]¬O¹s¡F¤Ï¹L¨Ó¡A¦pªG¨â¼Æ¶i¦æ OR ¹Bºâ¡Aµ²ªG¬O¹s¡A¨º»ò³o¨â¼Æ¥²¬Ò¬°¹s¡C¦b²Õ¦X»y¨¥ùØ¡A±`±`§Q¥Î³oºØ©Ê½è¥hÀˬd¬Y­Ó¼È¦s¾¹¬O§_¬°¹s¡C

x64 «ü¥O¡GAND »P TEST

­nÁA¸Ñ TEST «ü¥O¡AÀ³¥ý»¡©ú AND «ü¥O¡A¦]¬°¥¦­Ì´X¥G¤@¼Ò¤@¼Ë¡CAND «ü¥Oªº»yªk¬O

AND     ¥Øªº¹Bºâ¤¸,¨Ó·½¹Bºâ¤¸

³o­Ó«ü¥O¬O±N¥Øªº¹Bºâ¤¸»P¨Ó·½¹Bºâ¤¸°µ AND ¹Bºâ¡A¦A±Nµ²ªG¦s¤J¥Øªº¹Bºâ¤¸¡CAND ½Ķ¦¨¡u¥B¡vªº·N«ä¡A³oºØ¹Bºâ¬O¥u¦³·í¨â­Ó±ø¥ó³£¦¨¥ß®É¤~¬°¯u¡C

¨Ò¦p§A©ñ¾Ç¦^®a¡A¶ý¶ý»¡¡G¡u­n¼g§¹¤µ¤Ñªº§@·~¨Ã¥B¹w²ß§¹©ú¤éªº¥\½Ò¤~¯àª±¹q¸£¡C¡v·N«ä´N¬O¦pªG§A¡u¼g§¹¤µ¤Ñªº§@·~¡v©M¡u¹w²ß©ú¤é¥\½Ò¡v¥u­n¦³¤@¶µ¨S°µ§¹¡A´N¤£¯à¡uª±¹q¸£¡v¡A¥u¦³·í¨â¶µ³£§¹¦¨¤F¤~¥i¥Hª±¹q¸£¡C

¦b¹q¸£¤¤¡A¡u1¡vªí¥Ü¯u©Î¦¨¥ßªº·N«ä¡A¡u0¡vªí¥Ü°°©Î¤£¦¨¥ßªº·N«ä¡C©Ò¥H¡A¥u¦³·í¨â­Ó¼Æ³£¬°¤@¡A°µ AND ¹Bºâ®É¡A¨äµ²ªG¤~¬°¤@¡F¥u­n¹Bºâªº¨â¼Æ¦³¤@­Ó¬°¹s¡Aµ²ªG´N¬°¹s¡CAND ¹Bºâªº¯u­Èªí¦p¤U¡G

0 AND 0¡×0
0 AND 1¡×0
1 AND 0¡×0
1 AND 1¡×1

AND «ü¥O¤¤ªº¥Øªº¹Bºâ¤¸¥i¥H¬O¼È¦s¾¹©ÎÅܼơA¨Ó·½¹Bºâ¤¸¥i¥H¬O¥ß§Y­È¡B¼È¦s¾¹©ÎÅܼơA¦ý¬O¨Ó·½¹Bºâ¤¸»P¥Øªº¹Bºâ¤¸¤£¥i¦P¬°ÅܼơC¨Ó·½¹Bºâ¤¸»P¥Øªº¹Bºâ¤¸ªºªø«×¥²¶·¤@­P¡A°µ AND ¹Bºâ®É¡A¬Û¹ïÀ³ªº¦ì¤¸¶i¦æ AND ¹Bºâ¡A§âµ²ªG¼g¤J¥Øªº¹Bºâ¤¸¹ïÀ³ªº¦ì¤¸¡C

°µ§¹¡u¥B¡v¹Bºâ¤§«á¡ACPU ·|²M°£¶i¦ìºX¼Ð»P·¸¦ìºX¼Ð¡A¨Ã®Ú¾Ú¹Bºâµ²ªG§ïÅܲŸ¹ºX¼Ð»P¹s­ÈºX¼Ð¡A¦Ó»²§UºX¼Ð¤§­ÈµL·N¸q¡C

Á|­Ó¨Ò¤l»¡©ú¡C¦p¥k¹Ïªº AL ¼È¦s¾¹¤§­È¬° 92h¡A°õ¦æ¡uAND AL,0F0h¡v®É¡A§â¨C­Ó¦ì¤¸¹ï»ô«á¡A¨C­Ó¦ì¤¸°µ AND ¹Bºâ«á¡Aµ²ªG¬° 90h¡A§Y³Ì¤U­±¶À¦r©Ò¥Ü¡C¦]¬°³Ì«áµ²ªG¤£¬O¹s¡A¬G CPU ·|²M°£¹s­ÈºX¼Ð¡C

­È±o¤@´£ªº¬O¡A0F0h ³o­Ó¼Æ­È¡A²Ä 4¡ã7 ¦ì¤¸§¡¬° 1¡A¦]¦¹¤£ºÞ AL ªº²Ä 4¡ã7 ¦ì¤¸¬O¤°»ò¡A»P¨ä°µ AND ¹Bºâ«á§¡¬°­ì¨Ó AL ªº²Ä 4¡ã7 ¦ì¤¸¤§­È¡F0F0h ªº²Ä 0¡ã3 ¦ì¤¸§¡¬°¹s¡A¤£ºÞ AL ²Ä 0¡ã3 ¦ì¤¸¬O¤°»ò¡A»P¨ä°µ AND ¹Bºâ«áµ²ªG¬°¹s¡C¹³³o¼Ë¡A§â¤@­Ó¾ã¼Æªº¬Y¨Ç¦ì¤¸²M°£¡]²M°£ªº·N«ä¬OÅܬ° 0¡^¡A¦Ó«O¯d¨ä¥L¦ì¤¸ªº¹Lµ{ºÙ¬°¡u¾B¸n ( mask )¡v¡C¤èªk«Ü²³æ¡A¥ý³]©w¤@¼Æ¡AÅý­n¾B¸nªº¦ì¤¸³£³]¬°¹s¡AµM«á±N¸Ó¼Æ©M­ì¾ã¼Æ°µ AND ¹Bºâ´N¥i¥H¤F¡C

TEST «ü¥Oªº»yªk¬O¡G

TEST    ¥Øªº¹Bºâ¤¸,¨Ó·½¹Bºâ¤¸

TEST «ü¥O·|¨Ï¥Øªº¹Bºâ¤¸»P¨Ó·½¹Bºâ¤¸°µ¡u¥B¡v¹Bºâ¡C¨Æ¹ê¤W¡ATEST »P AND «ü¥O´X¥G¬Û¦P¡A®t§O¶È¦b©ó TEST ¨Ã¤£·|±N¹Bºâµ²ªG¼g¤J¥Øªº¹Bºâ¤¸ùØ­±¡C¥i¯à·|¦³¤H²£¥ÍºÃ°Ý¡A¦pªG¤£«O¦s¹Bºâµ²ªG¡A¨º»ò¡ATEST «ü¥O¦³¬Æ»ò¥Î©O¡H©³¤UÁ|¨â­Ó¨Ò¤l¡G①ÀËÅç¤@¼Æ¬O¥¿¼ÆÁÙ¬O­t¼Æ¡]¨£ DOS ²Õ¦X»y¨¥²Ä¤Q¥|³¹¡^¡B②ÀËÅç¤@¼Æ¬O©_¼ÆÁÙ¬O°¸¼Æ¡C

¦]¬°¤@¼Æªº²Ä¹s­Ó¦ì¤¸¨M©w¤F¦¹¼Æ¬O©_¼ÆÁÙ¬O°¸¼Æ¡A¤£½×¬O¥H¤G¶i¦ì¡B¤Q¶i¦ì©Î¤Q¤»¶i¦ìªí¥Ü¡A³£¬O¤@¼Ë¡C¤@¼Æªº²Ä¹s¦ì¤¸¬°¹s®É¡A¸Ó¼Æ¬°°¸¼Æ¡F¬°¤@®É¡A¸Ó¼Æ¬°©_¼Æ¡C¨Ò¦p­nÀËÅç AL ¼È¦s¾¹¤§­È¬O©_¼ÆÁÙ¬O°¸¼Æ¡A¥i¥H¥Î©³¤Uªºµ{¦¡¡G

        test    al,1
        jz      even
odd:    ⁝               ;AL¬°©_¼Æ
        ⁝
even:   ⁝               ;AL¬°°¸¼Æ

x64 «ü¥O¡GJB/JC »P JBE/JNA

¥ý»¡ JB/JC¡C³o¨â­Ó«ü¥O¬O¤@¼Ëªº«ü¥O¡A¥¦ªº»yªk¬O¡]¦]¬°¬O¬Û¦Pªº«ü¥O¡A¶È¥H JB ¥N´À¡^¡G

JB      ¼Ð°O

JB ©Î JC ·|Àˬd¶i¦ìºX¼Ð¡A¦pªG¶i¦ìºX¼Ð¤w³]©w¡A¨º»ò´N·|¸õÅD¦Ü¼Ð°O³B¡F¦pªG¶i¦ìºX¼Ð³Q²M°£¡A´N¤£¸õÅD°õ¦æ JB ©Î JC ©³¤Uªº«ü¥O¡C³o¨â­Ó«ü¥O³q±`·|·f°t CMP¡BADD¡BSUB¡K¡Kµ¥«ü¥O¡A¤×¨ä¬O CMP¡C

JB ªº­ì¤å¬O¡ujump if below¡v¡A¤¤¤å·N«ä¬O­Y§C©ó´N¸õÅD¡CJC ­ì¤å¬O¡ujump if carry¡v¡A¤¤¤å·N«ä¬O­Y¶i¦ì´N¸õÅD¡C¥H©³¤Uªºµ{¦¡»¡©ú¡G

        mov     al,10
        cmp     al,20
        jb      below

CMP «ü¥O·|¶i¦æ´îªk¹Bºâ¡A¦ý¤£±Nµ²ªG¼g¶i AL ùØ¡C¦]¬° AL ¤p©ó 20¡A©Ò¥H·|­É¦ì¡A¶i¦ìºX¼Ð·|³Q³]¬°¤@¡Cµ¥°õ¦æ¨ì JB below ®É¡A´N·|µo¥Í¸õÅD¦Ü below ¼Ð°O³B¡C¦]¬°³o¼Ëªº½t¬G¡A©Ò¥H·í¶i¦ìºX¼Ð³Q³]©w®É¡A¬Û·í©ó¥Øªº¹Bºâ¤¸¤ñ¨Ó·½¹Bºâ¤¸¤p¡Aµ²½×´N¬O JB »P JC ¬O¬Û¦Pªº«ü¥O¡C

©Î³\²Ó¤ßªº¤Hª`·N¨ì¡A¦¹³B¬°¦ó¨Ï¥Î below¡]§C©ó¡^¡A¦Ó¤£¥Î less¡]¤p©ó¡^©O¡H¦b x64 ²Õ¦X»y¨¥»â°ìùØ¡A¤ñ¸ûµL¸¹¼Æ¥Î below¡]§C©ó¡^©Î above¡]°ª©ó¡^¡A¤ñ¸û¦³¸¹¼Æ¤~¥Î less¡]¤p©ó¡^©Î greater¡]¤j©ó¡^¡CµL¸¹¼Æ¬OµL²Å¸¹¼ÆªºÂ²ºÙ¡A©Ò¦³¦ì¤¸³£¥Î©óªí¥Ü¤j¤p¡A¤£ªí¥Ü²Å¸¹¡]³oùتº²Å¸¹«ü¥¿¡B­t¸¹¡^¡A©Ò¥H¥u¯àªí¥Ü¹s©Î¼Æ¾Ç¤Wªº¥¿¾ã¼Æ¡F¦³¸¹¼Æ¬O¦³²Å¸¹¼ÆªºÂ²ºÙ¡A¥Î³Ì°ª¦ì¤¸ªí¥Ü¥¿¡B­t¸¹¡A©Ò¥H¯àªí¥Ü­t¾ã¼Æ¡B¹s¡B¥¿¾ã¼Æ¡C

JBE »P JNA ¬O¬Û¦Pªº«ü¥O¡A¥¦­Ìªº»yªk¬O¡G

JBE     ¼Ð°O

«eªÌ­ì¤å¬O¡ujump if below or equal¡v¡A¤¤¤å·N«ä¬O­Y§C©ó©Îµ¥©ó´N¸õÅD¡F«áªÌ¬O¡ujump if not above¡v¡A·N«ä¬O­Y¤£°ª©ó´N¸õÅD¡F¬Ý¤¤¤å»P­ì¤åªº»y¸q¡A´Nª¾¹D¥¦­Ì¬O¬Û¦Pªº¡C¦b¹ê°È¤W¡ACPU ·|Àˬd¶i¦ìºX¼Ð»P¹s­ÈºX¼Ð¡A¨âºX¼Ð¥u­n¦³¤@­Ó³Q³]©w¡A´Nµo¥Í¸õÅD¡C

x64 «ü¥O¡GJA/JNBE »P JAE/JNB/JNC

JA «ü¥O»P JAE «ü¥Oªº»yªk¦p¤U¡G¡]JA¡BJNBE ¬O¬Û¦Pªº«ü¥O¡FJAE¡BJNB¡BJNC ¤T­Ó«ü¥O³£¬O¬Û¦Pªº¡^

JA      ¼Ð°O
JAE     ¼Ð°O

³o¨â­Ó«ü¥O¡A³£¬O¥Î¨Ó¤ñ¸ûµL¸¹¼Æªº°ª§C¡]¥i¥H·Q¹³¦¨µL¸¹¼Æªº¤j¤p¡^¡CJA ¬O«ü­Y°ª©ó´N¸õÅD¡C¤ñ¸û¨â¼Æ®É¡A­Y¥Øªº¹Bºâ¤¸°ª©ó¨Ó·½¹Bºâ¤¸¡A«eªÌ´î¥h«áªÌ¡A´N¤£·|µo¥Í­É¦ì¤]¤£µ¥©ó¹s¡A©Ò¥H¶i¦ìºX¼Ð³]¬°¹s¡]¦b²Õ¦X»y¨¥¤¤¡A­É¦ì»P¶i¦ì³£¥Î¶i¦ìºX¼Ðªí¥Ü¡^¡A¹s­ÈºX¼Ð¤]³Q³]¬°¹s¡Cµ²½×´N¬O¡AJA ­nµo¥Í¸õÅD¡A¥²¶·¶i¦ìºX¼Ð»P¹s­ÈºX¼Ð³£³Q²M°£¡A¨âªÌ¯Ê¤@¤£¥i¡C

JAE ¬O«ü­Y°ª©ó©Îµ¥©ó´N¸õÅD¡A´«¥y¸Ü»¡´N¬O¤£§C©ó¤~¸õÅD¡A»P JNB ¬O¦P¼Ëªº«ü¥O¡C¤ñ¸û¨â¼Æ®É¡A¥Øªº¹Bºâ¤¸´î¥h¨Ó·½¹Bºâ¤¸¡A¤£·|µo¥Í­É¦ì¡A©Ò¥H¶i¦ìºX¼Ð³Q²M°£¡Fµ²½×´N¬O JAE ­nµo¥Í¸õÅD¡A¥u¶·¬Ý¶i¦ìºX¼Ð¬O§_²M°£¡A²M°£¤~¸õÅD¡C

©³¤U¬O¦³ÃöµL¸¹¼Æ±ø¥ó¸õÅD«ü¥Oªº¾ã²z¡A¥]§t«e´X³¹´£¹Lªº¡Aªí¤¤¦b¦P¤@¦Cªº«ü¥O³£¬O¬Û¦Pªº¡G

¦P¸q«ü¥O¤¤¤å»y¸q­ì¤å»y¸qºX¼Ð
JA
JNBE
­Y°ª©ó´N¸õÅD
­Y¤£§C©ó©Îµ¥©ó´N¸õÅD
jump if above
jump if not below or equal
CF=0 ¥B ZF=0
JB
JC
JNAE
­Y§C©ó´N¸õÅD
­Y¶i¦ì´N¸õÅD
­Y¤£°ª©ó©Îµ¥©ó´N¸õÅD
jump if below
jump if carry
jump if not above or equal
CF=1
JAE
JNB
JNC
­Y°ª©ó©Îµ¥©ó´N¸õÅD
­Y¤£§C©ó´N¸õÅD
­Y¤£¶i¦ì´N¸õÅD
jump if above
jump if not below
jump if not carry
CF=0
JBE
JNA
­Y§C©ó©Îµ¥©ó´N¸õÅD
­Y¤£°ª©ó´N¸õÅD
jump if below or equal
jump if not above
CF=1 ©Î ZF=1
JE
JZ
­Yµ¥©ó´N¸õÅD
­Y¬°¹s´N¸õÅD
jump if equal
jump if zero
ZF=1
JNE
JNZ
­Y¤£µ¥©ó´N¸õÅD
­Y¬°¤£¹s´N¸õÅD
jump if not equal
jump if not zero
ZF=0

x64 «ü¥O¡GXCHG

XCHG ªº»yªk¬O

XCHG    ¥Øªº¹Bºâ¤¸,¨Ó·½¹Bºâ¤¸

XCHG ªº¥\¥Î¬O¬Û¤¬¥æ´«¥Øªº¹Bºâ¤¸»P¨Ó·½¹Bºâ¤¸¤§¼Æ­È¡A³o¨â­Ó¹Bºâ¤¸¥i¥H¬OÅܼƩμȦs¾¹¡A¦ý¤£¯à³£¬OÅܼơCXCHG ¤£¼vÅTºX¼Ð¡C¨Ò¦p©³¤Uªº¨Ò¤l¡G

        mov     rax,5
        mov     rcx,8
        xchg    rax,rcx

³Ì«á RAX¡×8¡ARCX¡×5¡C

x64 «ü¥O¡GDIV

DIV «ü¥O¬O¥\¥Î¬O­pºâµL¸¹¼Æªº°£ªk¡A¦Ü©ó¦³¸¹¼Æªº°£ªk¡A¬O¥Î IDIV «ü¥O¡A¨£²Ä 13 ³¹¡CDIV ªº»yªk¦p¤U¡G

DIV     ¹Bºâ¤¸

¹Bºâ¤¸¬O°£¼Æ¡A¥i¥HÅܼƩμȦs¾¹¡A¦ý¤£¥i¥H¬O¥ß§Y­È¡CDIV «ü¥Oªº³Q°£¼Æ¨Ã¨S¦³¼g¥X¨Ó¡AÁôÂ꺳Q°£¼Æ¬O AX¡BDX:AX¡BEDX:EAX ©Î RDX:RAX¡A¦Ü©ó¬O­þ¤@­Ó¡A­n¬Ý¹Bºâ¤¸¡]§Y°£¼Æ¡^¨M©w¡A¨ä³W«h¬O³Q°£¼Æªº¦ì¤¸­Ó¼Æ¬O°£¼Æªº¨â­¿ªø¡C¨Ì¾Ú°£¼Æªºªø«×¡A¥i¤À¬°¥|ºØ°£ªk¡G①¤K¦ì¤¸°£ªk¡B②¤Q¤»¦ì¤¸°£ªk¡B③¤T¤Q¤G¦ì¤¸°£ªk¡B④¤»¤Q¥|¦ì¤¸°£ªk¡C¹Bºâ«áªº°Ó©M¾l¼Æ¡A¤À§O¦s©ó¼È¦s¾¹¤¤¡A¾ã²z¦p¤Uªí¡G

°£ªk¤è¦¡°£¼Æ ³Q°£¼Æ°Ó¼Æ ¾l¼Æ½d¨Ò
¹Bºâ«e¹Bºâ«á
¤K¦ì¤¸°£ªk8 ¦ì¤¸ÅܼÆ
©Î¼È¦s¾¹
AXALAH ;­pºâ 7¡Ò2¡×3⋯⋯1
MOV  AX,7
MOV  CL,2
DIV  CL
AX=0103¡]AL¡×°Ó¡AAH¡×¾l¼Æ¡^
CL=2
¤Q¤»¦ì¤¸°£ªk16 ¦ì¤¸ÅܼÆ
©Î¼È¦s¾¹
DX:AXAXDX ;­pºâ 9¡Ò4¡×2⋯⋯1
MOV  DX,0
MOV  AX,9
MOV  CX,4
DIV  CX
AX=2¡]°Ó¡^
DX=1¡]¾l¼Æ¡^
¤T¤Q¤G¦ì¤¸°£ªk
¥u¯à¥Î©ó
386µ¥¯Å¥H¤W
32 ¦ì¤¸ÅܼÆ
©Î¼È¦s¾¹
EDX:EAXEAXEDX ;­pºâ¤T¦Ê»õ¡Ò¤K»õ¡×37⋯⋯400000000
MOV  EDX,6
MOV  EAX,0FC23AC00h
MOV  ECX,2FAF0800h
DIV  ECX
EAX=25h¡]°Ó¡^
EDX=17D78400h¡]¾l¼Æ¡^
¤»¤Q¥|¦ì¤¸°£ªk
¥u¯à¥Î©ó
x64µ¥¯Å¥H¤W
64 ¦ì¤¸ÅܼÆ
©Î¼È¦s¾¹
RDX:RAXRAXRDX ;10CDEFAB1234567890h¡Ò10000000h
;¡×1CDEFAB123h⋯⋯4567890h

MOV  RDX,1
MOV  RAX,0CDEFAB1234567890h
MOV  RCX,10000000h
DIV  RCX
RAX=1CDEFAB123h¡]°Ó¡^
RDX=4567890h¡]¾l¼Æ¡^

¥H¤Wªíªº¤T¤Q¤G¦ì¤¸°£ªk¬°¨Ò¡A¦pªG­n­pºâ¤T¦Ê»õ°£¥H¤K»õ¡A¤T¦Ê»õ´«ºâ¦¨¤Q¤»¶i¦ì¬O 6 FC23 AC00h¡A¥e¥Î¤»¤Q¥|¦ì¤¸¡F¤K»õ¬O 2FAF 0800h¡A¥e¤F¤T¤Q¤G¦ì¤¸¡C©Ò¥H§â EDX ³]¬° 6¡AEAX ³]¬° 0FC23 AC00h¡A³o¼Ë´N§¹¦¨³Q°£¼Æªº³]©w¡C°£¼Æ¥i¥H¬O¤T¤Q¤G¦ì¤¸ªºÅܼƩμȦs¾¹¡A¦¹¨Ò¬O ECX¡A©Ò¥H±N ECX ³]¬° 2FAF 0800h¡]¤Q¶i¦ì 800000000¡×¤K»õ¡^¡C¹Bºâ«áªº°Ó¬° 37¡]¤Q¤»¶i¦ì 25h¡^¡A¾l¼Æ¬°¥|»õ¡]¤Q¤»¶i¦ì 17D7 8400h¡^¡C

ÁÙ¦³­Ó°ÝÃD¡A¬JµM DIV ¦³¥|ºØ¤§¦h¡A¨º»ò¦b°µ¹Bºâ®É­n¿ï¥Î­þ¤@ºØ¦ì¤¸¼Æªº°£ªk©O¡H¨ä¹ê¤£Ãø¡A¨Ì¾Ú°£¼Æªº¤j¤p¨Ó§P©w§Y¥i¡CÁÙ¬O¥H¬O¤T¦Ê»õ°£¥H¤K»õ¬°¨Ò¡C°£¼Æ¬O¤K»õ¡A´«ºâ¦¨¤Q¤»¶i¦ì¬O 2FAF 0800h¡A¥e¤F¤T¤Q¤G¦ì¤¸¡A¦]¦¹´N¿ï¥Î¤T¤Q¤G¦ì¤¸ªº°£ªk¡C¤]¥i¥H°Ñ¦Ò²Ä¤@³¹ªºªí®æ±oª¾¡A¤T¤Q¤G¦ì¤¸ªº¼Æ³Ì¦h¯àªí¥Ü¥|¤Q¤G»õ¡A¦]¦¹¥Î¤T¤Q¤G¦ì¤¸ªí¥Ü¤K»õ¡Aºïºï¦³¾l¡]·íµM§A¤]¥i¥H°õ·N¥Î¤»¤Q¥|¦ì¤¸°£ªk¡A¦ý±þÂû²j¥Î¤û¤M¡^¡A¦]¦¹´N¿ï¥Î¤T¤Q¤G¦ì¤¸ªº°£ªk¡C

DIV ¹Bºâ§¹¤§«á¡AºX¼Ð¼È¦s¾¹¤¤ªº¶i¦ìºX¼Ð¡B·¸¦ìºX¼Ð¡B²Å¸¹ºX¼Ð¡B¹s­ÈºX¼Ð¡B»²§U¶i¦ìºX¼Ð¡B¦P¦ìºX¼Ð³£¥¼©w¸q¡C¥¼©w¸qªº·N«ä¬O»¡³o¨ÇºX¼Ð¥i¯à¬O¥ô¦ó­È¡A¤£¦Pªº CPU¡B¬[ºc¡A³£¥i¯à·|¤£¦P¡C¦]¦¹¦b DIV «ü¥O°õ¦æ§¹«á¡A¤£À³¸Ó¥ÑºX¼Ð§PÂ_°õ¦æµ²ªG¡C

°£ºX¼Ð¤§¥~¡A°õ¦æ DIV «eÁÙ­nª`·N°Ó·|¤£·|¶W¹L¼È¦s¾¹©Ò¯à¦s©ñªº¤j¤p¡C¨Ò¦p 0F000h¡Ò2¡×7800h¡]¤Q¶i¦ì¬O 61440¡Ò2¡×30720¡^¡A¦pªG¥Î¤K¦ì¤¸ªº°£ªk¡A©Ò±oªº°Ó¦pªG©ñ¦b AL ùØ­±¬O©ñ¤£¤Uªº¡A·|µo¥Í¿ù»~¡A³oºØ¿ù»~ºÙ°£ªk·¸¦ì¡C³q±`°£¼Æ¤Ó¤p¥B³Q°£¼Æ¤Ó¤j¡A´N·|µo¥Í³oºØ±¡§Î¡A¥i¥H°Ñ¦Ò¡uDOS ²Õ¦X»y¨¥²Ä¤C³¹µù¤@¡v§ï¶i¡C

x64 «ü¥O¡GCBW¡BCWDE¡BCDQE »P CWD¡BCDQ¡BCQO

³o¤»­Ó x64 «ü¥O³£¬O±N­ì¨Ó¦b¼È¦s¾¹¤¤¥e¥Î¸û¤Ö¦ì¤¸ªº¸ê®Æ¡AÂX¥R¦¨¸û¦h¦ì¤¸ªº¸ê®Æ¡A¤]¥i¥H§â¥¦­Ìµø¬°¯à§ïÅÜ¸ê®ÆÃþ«¬ªº«ü¥O¡C¦]¬°§@¥ÎÃþ¦ü¡A©Ò¥H¦b³o¸Ì¤@¨Ö¤¶²Ð¡A³o¤»­Ó«ü¥O¥i¤À¬°¨âÃþ¡G①CBW¡BCWDE¡BCDQE¡F②CWD¡BCDQ¡BCQO¡C

¥ý»¡ CBW «ü¥O¡CCBW «ü¥O¬O¡uconvert byte to word¡vªº·N«ä¡A·N§Y±N¦ì¤¸²Õªº¼Æ­ÈÅܦ¨¦r²Õ¡A¨ä»yªk¬O

CBW

ªí­±¤W CBW ¨S¦³¹Bºâ¤¸¡A¦ý¹ê»Ú¤W¬O¦³­ÓÁôÂ꺹Bºâ¤¸¡A¨º´N¬O AX ¼È¦s¾¹¡CCBW ·|§â¦s©ó AL ªº¼Æ­È¡AÅܦ¨¦s©ó AX¡C¤èªk¬O§â AL ªº²Å¸¹¦ì¤¸½Æ»s¨ì AX ªº²Ä 8¡ã15 ¦ì¤¸¤§¤¤¡C¦b¤G¶i¦ì¼Æ­È¤¤¡A³Ì°ª¦ì¤¸¬O²Å¸¹¦ì¤¸¡]sign bit¡^¡A­Y³Ì°ª¦ì¤¸¬° 1¡Aªí¥Ü­t¼Æ¡F­Y³Ì°ª¦ì¤¸¬° 0¡Aªí¥Ü¥¿¼Æ©Î¹s¡C¦³Ãö²Å¸¹¦ì¤¸»P¦³¸¹¼ÆªºÆ[©À¡A¥H«á¦A»¡¡C

­Y AL ªº²Ä¤C¦ì¤¸¬° 0¡A°õ¦æ§¹ CBW «á¡AAX ªº²Ä 8¡ã15 ¦ì¤¸³£Åܬ° 0¡F­Y AL ªº²Ä¤C¦ì¤¸¬° 1¡A°õ¦æ§¹«á¡AAX ªº²Ä 8¡ã15 ¦ì¤¸³£Åܬ° 1¡C¤]´N¬O»¡¡ACBW ·|§â AL ¤ºªº²Å¸¹¡A©µ¦ù¨ì AH ¤º¡C³o¼Ë´N¯à§â AL ¤¤ªº¦³¸¹¼Æ¡AÂX¥R¦Ü AX¡C

¥k¹Ï AX ¬° 0FF65H¡AAL ¬° 65H¡A²Ä¤C¦ì¤¸¬O¹s¡]¯»¬õ¦â¡^¡C°õ¦æ CBW «á¡AAL ¤Wªº²Ä¤C¦ì¤¸ÂX¥R¨ì AH ¼È¦s¾¹¡A¨Ï AH ¤Wªº¨C­Ó¦ì¤¸³£Åܦ¨ 0¡]ºñ¦â¡^¡C

CWDE «ü¥O¬O¡uconvert word to doubleword¡vªº·N«ä¡A§â AX ªº²Ä¤Q¤­¦ì¤¸½Æ»s¨ì EAX ªº²Ä 16¡ã31 ¦ì¤¸¡CCDQE «ü¥O¡uconvert doubleword to quadword¡vªº·N«ä¡A¥¦§â EAX ªº²Ä 31 ¦ì¤¸½Æ»s¨ì RAX ªº²Ä 32¡ã63 ¦ì¤¸¡C

CWD «ü¥OÁöµM¤]¬O¡uconvert word to doubleword¡v¡A¦ý«o¬O§â AX ªº²Ä 15 ¦ì¤¸½Æ»s¨ì DX ªº©Ò¦³¦ì¤¸¤º¡C¦P¼Ë¡ACDQ ¬O§â EAX ªº²Ä 31 ¦ì¤¸½Æ»s¨ì EDX ªº©Ò¦³¦ì¤¸¤º¡FCQO ¬O§â RAX ªº²Ä 63 ¦ì¤¸½Æ»s¨ì RDX ªº©Ò¦³¦ì¤¸¤º¡C³Ì«á¾ã²z¦¨¤Uªí¡G

¥Î³~«ü¥O »¡©ú«ü¥O»¡©ú
¦ì¤¸²ÕÅܦr²ÕCBWAL ªº²Å¸¹¦ì¤¸¡÷AX
¦r²ÕÅÜÂù¦r²ÕCWDEAX ªº²Å¸¹¦ì¤¸¡÷EAXCWDAX ªº²Å¸¹¦ì¤¸¡÷DX:AX
Âù¦r²ÕÅÜ¥|¦r²ÕCDQEEAX ªº²Å¸¹¦ì¤¸¡÷RAXCDQEAX ªº²Å¸¹¦ì¤¸¡÷EDX:EAX
¥|¦r²ÕÅܤK¦r²ÕCQORAX ªº²Å¸¹¦ì¤¸¡÷RDX:RAX

LOCAL °²«ü¥O

LOCAL °²«ü¥O¬O¥Î¨Ó©w¸q°Ï°ìÅܼơ]local variables¡A¤j³°Â½¦¨§½³¡Åܶq¡^¡C°Ï°ìÅܼƬ۹ï©ó¥þ°ìÅܼơ]global variables¡A¥þ§½Åܶq¡^¦Ó¨Óªº¡A¥¦­Ìªº®t§O¦b©ó°Ï°ìÅܼƥu¯à¦b¬Y­Ó°Æµ{¦¡¤¤©w¸q¡A¤]¥u¦³¦b³o­Ó°Æµ{¦¡¤¤¤~¯à¦s¨ú¡A¨ä¥L°Æµ{¦¡»P¥Dµ{¦¡³£µLªk¦s¨ú¡F¦Ó¥þ°ìÅܼƫh¬O¥ô·N°Æµ{¦¡©Î¥Dµ{¦¡³£¯à¦s¨ú¡C¤]¦]¬°¥þ°ìÅܼƦb¥ô¦ó¦a¤è³£¥i¥H­×§ï¨ä¼Æ­È¡A¥H­P©ó³y¦¨»P«Ü³\¦h°Æµ{¦¡¬ÛÃö¡A¹ï©óµ{¦¡ªººûÅ@·|¼W¥[³\¦h­t¾á¡A¤×¨ä¬Oµ{¦¡«Ü¤j®É§ó¥[§xÃø¡C²{¥NªºÆ[©À»{¬°¡A¤£¥²­nªº¥þ°ìÅܼƬO¼gµ{¦¡ªºÃa²ßºD¤§¤@¡A¦]¦¹¯à¤£¨Ï¥Î´N§O¥Î¡A¾¨¶q¨Ï¥Î°Ï°ìÅܼơC

¨º»ò¦p¦ó©w¸q°Ï°ìÅܼƩO¡H¦b²Õ¦X»y¨¥¸Ì¨Ï¥Î LOCAL °²«ü¥O¡A»yªk¬O¡G

LOCAL   ÅܼƦWºÙ[¤¸¯À­Ó¼Æ]:¸ê®ÆÃþ«¬,...

©w¸q°Ï°ìÅܼƦ³´X¶µ²Ó¸`­nª`·N¡G

  1. ¦pªG¦¹Åܼƥu¦³¤@­Ó¤¸¯À¡A¥ç§Y¤£¬O°}¦C¡]array¡^©Î¦r¦êªºªº¸Ü¡A¡u[¤¸¯À­Ó¼Æ]¡v¥i¥H¬Ù²¤¡C
  2. ¸ê®ÆÃþ«¬¥²¶·¬O BYTE¡BWORD¡BDWORD¡BQWORD ¨ä¤¤¤§¤@¡A¤£¯à¥Î DB¡BDW¡BDD¡BDQ¡C
  3. ¤@¦æ LOCAL ¥i¥H©w¸q¦h­Ó°Ï°ìÅܼơA¤¤¶¡¥H¡u,¡v¹j¶}¡C¦pªG¥u©w¸q¤@­Ó¡A´N¬Ù²¤«á­±ªº¡u,...¡v¡C
  4. LOCAL µLªk³]©w°Ï°ìÅܼƪºªì©l­È¡A¥²¶·¥Ñ°Æµ{¦¡¤¤¦Û¦æ³]©w¡C³\¦h¿ù»~ªº²£¥Í¡A´N¬O¨S¦³³]©wªì©l­È¡C
  5. LOCAL ¥²¶·ºò±µµÛ PROC «Å§i¤§«á¡C¤£¹L PROC »P LOCAL ¤§¶¡¥i¥H´¡¤J¤@¦æ©Î¼Æ¦æµù¸Ñ¡C
  6. ¦pªG¬Y­Ó°Æµ{¦¡ªº°Ï°ìÅܼƫܦh¡A¤@¦æ¼g¤£¤U¡A¥i¥H¥Î¦h¦æ³sÄòªº LOCAL ¨Ó©w¸q¡C

¨Ò¦p©³¤Uªº¨Ò¤l¡A¥Î¨â¦æ LOCAL ©w¸q¤F¨â­ÓÂù¦r²Õªº°Ï°ìÅܼơAnWritn¡BnRead¡A»P¤@­Ó 12 ¦ì¤¸²Õªøªº buffer ¦r¦ê¡G

Input   PROC    USES rbx rsi rdi hIn:QWORD,hOut:QWORD,pNumber:QWORD
;¿é¤J¡GhIn¡BhOut¡Ð¼Ð·Ç¿é¤J¡B¿é¥X¸Ë¸m±±¨î¥N½X
;¡@¡@¡@pNumber¡Ð¨Ï¥ÎªÌ¿é¤Jªº¼Æ­È¦s©ñ¦ì§}
;¿é¥X¡GRAX¡×0¡A¿é¤J¿ù»~
;¡@¡@¡@RAX¡×1¡A¿é¤J¥¿½T¡ApNumber©Ò«ü¦ì§}¦s¦³¨Ï¥ÎªÌ¿é¤Jªº¼Æ­È
LOCAL   nWritn:DWORD,nRead:DWORD
LOCAL   buffer[12]:BYTE

§Ú­Ìª¾¹D¥þ°ìÅܼƬO¦s©ñ¦b¡u.DATA¡v©Î¡u.DATA?¡v°Ï¬q¤º¡A¨º»ò°Ï°ìÅܼƦs©ñ¦b­þ¸Ì©O¡Hµª®×¬O¦b°ïÅ|¸Ì¡A¤]´N¬O³o­Ó­ì¦]¡A¥u¦³¦b°õ¦æ®É¤~¯à½T»{°Ï°ìÅܼƪº¦ì§}¡C¤]¦]¬°¦p¦¹¡A¦pªG­n¨ú±o°Ï°ìÅܼƪº¦ì§}¡A¥²¶·¨Ï¥Î¡uLEA ¥Øªº¹Bºâ¤¸,°Ï°ìÅܼơv¡AµLªk¨Ï¥Î¡uMOV ¹Bºâ¤¸,OFFSET °Ï°ìÅܼơv³o¼Ëªº«ü¥O¡C

¦Ü©ó¦p¦ó¦b°ïÅ|¤¤¦w±Æ°Ï°ìÅܼƻP¨ä¦s¨ú¡A³o¬O¤U¤@³¹­n½Íªº¥D­n½ÒÃD¤§¤@¡C

StrToIntA API

StrToIntA ¯à§â¥Hªü©Ô§B¼Æ¦r²Õ¦¨ªº¦r¦ê¡]©³¤UºÙ¬°¼Æ¦r¦r¦ê¡^Åܦ¨ 32 ¦ì¤¸¼Æ­È¦s©ó EXA ªð¦^¡C

StrTiIntA ªº­ì«¬¬O¡G

int StrToIntA(
  [in] PCSTR pszSrc
);

StrToIntA ¥u¦³¤@­Ó°Ñ¼Æ¡A¥H¹sµ²§Àªº¼Æ¦r¦r¦ê¦ì§}¡A¦¹¦r¦ê¥²¶·«ö¥H¤U¦C¶¶§Ç²Õ¦¨¡G①¡u-¡v¸¹¥Nªí­t¼Æ¡A¦pªG¥¿¼Æ¥u¯à¬Ù²¤¤£¥i¼g¥X¨Ó¡F②µM«á¬O¼Æ­Óªü©Ô§B¼Æ¦r¡A0¡ã9¡A²Õ¦¨ªº¤å¦r¡F③³Ì«á¬O¡u0¡vªí¥Ü¦r¦êµ²§ô¡C©I¥s StrToIntA «e¥²¶·¥[¤W

INCLUDE         SHLWAPI.INC     ;¤º§t StrToIntA ªº­ì«¬
INCLUDELIB      SHLWAPI.LIB

­YÂà´«¥¢±Ñ¡A¦^¶Ç­È¬°¹s¡F­Y¦¨¥\¡A¦^¶Ç­È¬°¦r¦êÂà´««áªº¼Æ­È¡C

©³¤Uªº¨Ò¤l¡G

szNumber    DB      "314",0
  ⁝
invoke      StrToIntA,ADDR szNumber

©I¥s§¹ StrToIntA ¤§«á¡AEAX ¬° 13AH¡A§Y¤Q¶i¦ìªº 314¡C­Y szNumber ¬°¡u"314pi159"¡v¡A¨º»ò StrToIntA ÁÙ¬O¯à°÷Âà´«¡A¦ý¥u¨ì 4 ¬°¤î¡A«á­±ªºµLªkÂà´«¡A©Ò¥H EAX ¬° 314¡C


ÁÓÂà¬Û°£ªk

ÁÓÂà¬Û°£ªk¤]¥s¼Ú´X¨½±oºâªk¡]Euclidean algorithm¡^¡A¬O­pºâ¨â¾ã¼Æªº³Ì¤j¤½¦]¼Æªº¤èªk¡C¹Lµ{¬O¨â¼Æ¬Û°£©Ò±oªº¾l¼Æ¬°¤U¦¸¬Û°£ªº°£¼Æ¡A¤U¦¸¬Û°£ªº³Q°£¼Æ¬°­ì¨Óªº°£¼Æ¡A³o¼Ë¤@ª½¬Û°£ª½¨ì¾ã°£¬°¤î¡A³Ì«á¤@¦¸ªº°£¼Æ§Y¬°³Ì¤j¤½¦]¼Æ¡C¨Ò¦p­n¨D 18¡B48 ªº³Ì¤j¤½¦]¼Æªº¹Lµ{¡A¥i¥H°Ñ¦Ò¤U¹Ï¡G ²Ä¤@¦¸¬Û°£ªº³Q°£¼Æ¡A·íµM¬O¿ï¾Ü¸û¤jªº¼Æ¡A¸û¤pªº¬O°£¼Æ¡A©Ò¥H¥Î¡u48¡Ò18¡×2¡K12¡v¡C²Ä¤G¦¸¬Û°£ªº³Q°£¼Æ¬O²Ä¤@¦¸ªº°£¼Æ¡A¦Ó°£¼Æ«h¬O²Ä¤@¦¸ªº¾l¼Æ¡A©Ò¥H¬O¡u18¡Ò12¡×1¡K6¡v( ¨Æ¹ê¤W¡A¾l¼Æ¤@©w¤ñ°£¼Æ¤p¡A©Ò¥HÁÙ¬O¿ï¾Ü¸û¤jªº¬°³Q°£¼Æ¡A¸û¤pªº¬°°£¼Æ )¡C²Ä¤T¦¸¬Û°£ªº³Q°£¼Æ¬O²Ä¤G¦¸ªº°£¼Æ¡A¦Ó°£¼Æ«h¬O²Ä¤G¦¸ªº¾l¼Æ¡A©Ò¥H¬O¡u12¡Ò6¡×3¡K0¡v¡Aµ²ªG¾ã°£¡A©Ò¥H³Ì¤j¤½¦]¼Æ´N¬O³Ì«á¤@¦¸ªº°£¼Æ¡A6¡C

¦pªG§â³o¹Lµ{µe¦¨¹q¸£µ{¦¡ªº¬yµ{¹Ï¡A´NÅܦ¨¤U­±ªº¼Ë¤l¡GÁÓÂà¬Û°£ªkªº­ì²z½Ð°Ñ¾\ HPM ³q°T²Ä¤Q¨÷²Ä¤Q¤@´Á¡A³o¸Ì¤£¤¶²Ð¡C³oùØ­n¬Ýªº¬O§Q¥Î¤W­±¬yµ{¦Ó¼¶¼gªº­ì©lµ{¦¡¡AFindGcd¡G

FindGcd PROC    num1:DWORD,num2:DWORD
;¿é¤J¡Gnum1¡Bnum2¨â­Ó¾ã¼Æ
;¿é¥X¡GEAX¡×³Ì¤j¤½¦]¼Æ
again:  xchg    ecx,edx ;¾l¼ÆÅܬ°¤U¦¸ªº°£¼Æ¡A­ì¨Óªº°£¼ÆÅܳQ°£¼Æ
        mov     eax,edx
        cdq
        div     ecx     ;¨ÏEDX:EAX¡]³Q°£¼Æ¡^°£¥HECX¡]°£¼Æ¡^
        or      edx,edx ;¾l¼Æ¬°EDX
        jnz     again   ;­YEDX¬°¹s¡A³Ì«á¤@¦¸ªº°£¼Æ§Y¬°GCD
        mov     eax,ecx ;§â³Ì¤j¤½¦]¼Æ¦s¤JRAX
        cdqe
        ret
FindGcd ENDP

¶i¤J FindGcd °Æµ{¦¡¡A¨Ã¤£»Ý­n§PÂ_ num1¡Bnum2 ¦óªÌ¸û¤j¡A­þ¤@­ÓÀ³¸Ó·í³Q°£¼Æ¡A­þ¤@­Ó·í°£¼Æ¡C¦]¬°§Y¨Ï¬O¸û¤pªº¼Æ·í³Q°£¼Æ¡B¤j¼Æ·í°£¼Æ¡A¨º»ò¸g¹L²Ä¤@¦¸°£ªk¤§«á¡A°Ó¬°¹s¡A¾l¼Æ¬O­ì¨Ó¸û¤pªº¼Æ¡A²Ä¤G¦¸°£ªk´N¦Û°ÊÅܦ¨°£¼Æ¡A­ì¨Óªº¤j¼Æ´NÅܦ¨³Q°£¼Æ¤F¡C

¨C¦¸¬Û°£®É¡A°£¼Æ¦s©ó ECX¡F¬Û°£«á¡A¾l¼Æ¦s©ó EDX¡A©Ò¥H¶i¦æ°£ªk¤§«á¡A¨âªÌ»Ý­n¤¬´«¡A¨Ï¥Î XCHG «ü¥O¡A«ê¦p¨ä¤À¡CµM¦Ó¡A³Q°£¼ÆÁÙ¶·½Õ¾ã¡A¶·§â­ì¨Óªº°£¼Æ¡]­ì¦s©ó ECX¡AXCHG ¤§«á¦s©ó EDX¡^¦s©ó EAX¡A¨Ã¨Ï EDX Åܬ°¹s¡A«D±`¾A¦X¨Ï¥Î CDQ «ü¥O¡C


«ÝÄò

³o¤@³¹¥u¤¶²Ð GCD.ASM ¥Î¨ìªº·s«ü¥O¥H¤Î Win64 API¡A¤U¤@³¹¦A¤¶²Ð°ïÅ|®Ø¡C