³o¤@³¹¦h½Í¤@¨Ç SSE «ü¥O¡A³Ì«á±N³o¨Ç«ü¥O¡AÀ³¥Î©ópºâª½¨¤§¤¼Ð¨t¤W¤wª¾¨âÂI¶¡ªº¶ZÂ÷¥H¤Îpºâ¤@¤¸¤G¦¸¤èµ{¦¡ªº¨âÓ®Ú¡C¤@¦p¬J©¹¡A¥ý¤¶²Ð·|¥Î¨ìªº«ü¥O¡C
ALIGN ¬O¥Î¨Ó«ü¥Ü²Õ;¹§âµ{¦¡½X©Î¸ê®Æ¹ï»ô¬YÓ¦ì§}¡A¥H´£°ª¦s¨ú®Ä²v¡A¨ä¥Îªk¬O¡G
ALIGN boundary
boundary ¬O¤Gªº¾¦¸¤è¼Æ¡A¨Ò¦p 2¡B4¡B8¡B16¡Aªí¥Ü¦b¨Ï¥Î¤F ALIGN ¤§«á¡A¤U¤@Ó«ü¥O©Î¸ê®Æªº¦s©ñ¦ì§}¥²¶·¬O¯à³Q 2¡B4¡B8¡B16 ¾ã°£¡CÁöµM boundary ¥i¥H¬O¶W¹L 16¡A¦ý¬O·|®ö¶O«Ü¦h°O¾ÐÅé©Ò¥H«Ü¤Ö¥Î¡C
¦pªG¦bµ{¦¡¤¤ªº¸ê®Æ°Ï¬q¤¤©w¸q¤U±¸ê®Æ¡G
.CONST
n1 DB 1
ALIGN 2
n2 DB 2
ALIGN 4
n3 DW 8086h
ALIGN 8
str1 DB "TEST ALIGN",0
ALIGN 16
str2 DB "¤Ö¦~Ä@¡A²³¥Í©À¡A·ÀÃSÃR§¯¨¸¡I"
szApp DB "²Ä¤@ÓWin64µ{¦¡",0
¨º»ò¸ü¤J°O¾ÐÅ餧«á¡Aµ²ªG¦p¤U¹Ï¡G
n2 ¤§«e¦³¡uALIGN 2¡v¡A©Ò¥H n2 ªº¦ì§}¥²¶·¬O¯à³Q 2 ¾ã°£¡C¦p¤W¹Ï¡An1 ¥u¦û¤@Ӧ줸²Õ¡A¦ì©ó¦ì§} 7F164000H¡A¥»¨Ó n2 À³©ñ¦b¦ì§} 7F164001H¡A¦ý¦]¬°¦³¡uALIGN 2¡v¡A²Õ;¹¦w´¡¤@Ӧ줸²Õªº 0¡]¥H¯»¬õ¦âªí¥Ü¡^¡A¨Ï 2 ©ñ¦b 7F164002H ³B¡Cn3 ¤§«e¦³¡uALIGN 4¡v¡A©Ò¥H n3 ªº¦ì§}¥²¶·¬O¯à³Q 4 ¾ã°£¡A¦]¦¹²Õ;¹¦w´¡¤@Ӧ줸²Õªº 0 ¡]¥H¾í¦âªí¥Ü¡^´N¥i¥HÅý n3 ©ñ¦b 7F164004H ³B¡C¦P²z¡A¬õ¦âªº¨âӦ줸²Õªº¹s»Pºñ¦âªº 13 Ӧ줸²Õªº¹s¡A¤À§O¬O AILGN 8¡BALIGN 16 ©Ò²K¥[ªº¡A¥H«K¨Ï str1¡Bstr2 ¦r¦ê¯à¦b¥|¦r²Õ¡B¸`ªºÃä¬É¤W¶}©l¡C
³oùؾã²z¤@¤U¡C
MOVAPD »P MOVAPS ªº»yªk¬O¡G
MOVAPD ¥Øªº¹Bºâ¤¸,¨Ó·½¹Bºâ¤¸ MOVAPS ¥Øªº¹Bºâ¤¸,¨Ó·½¹Bºâ¤¸
¥Øªº¹Bºâ¤¸»P¨Ó·½¹Bºâ¤¸¥²¶·¦³¤@Ó¬O XMM ¼È¦s¾¹¡A¥t¤@Ó¥i¥H¬O°O¾ÐÅé¡A¤]¥i¥H¬O XMM ¼È¦s¾¹¡C³o¨âÓ«ü¥O³£¬O·h²¾ 128 Ӧ줸¡u¥´¥]¡vªº¯BÂI¼Æ¡A¤]´N¬O§â¨Ó·½¹Bºâ¤¸ùرªº 128 Ӧ줸ªº¸ê®Æ·h²¾¨ì¥Øªº¹Bºâ¤¸¡A¦Ó¨Ó·½¹Bºâ¤¸ªº¤º®e¤£ÅÜ¡C
¨Ó¬Ý¬Ý¥¦Ìªºì¤å¡A´N¯à©ú¥Õ¥¦Ìªº·N«ä¡CMOVAPD ì¤å¬O move aligned packed double-precision¡AMOVAPS ¬O move aligned packed single-precision¡CÁÙ°O±o²Ä¤Q¤@³¹»¡¡A³æºë½T«×¯BÂI¼Æ»Ýn¨Ï¥Î 32 Ӧ줸ªí¥Ü¡AÂùºë½T«×¯BÂI¼Æ«h»Ý¨Ï¥Î 64 Ӧ줸ªí¥Ü¡C¦Ó³o¨âÓ«ü¥O³£¬On·h²¾ 128 Ӧ줸¡A©Ò¥H¹ï MOVAPD ¨Ó»¡¡A¬O·h²¾¨âÓÂùºë½T«×¯BÂI¼Æ¡F¹ï MOVAPS ¨Ó»¡¡A¬O·h²¾¥|Ó³æºë½T«×¯BÂI¼Æ¡C
packed ªº·N«ä¬O§â³o¨âÓ©Î¥|Ó¯BÂI¼Æ¥´¥]°_¨Ó¡A¤@¦¸·h²¾¨ì¥Øªº¹Bºâ¤¸¡C¤]´N¬O«e¤@³¹»¡ªº¡A¡u¦ê¬y³æ«ü¥O¦h¸ê®Æ©µ¦ù«ü¥O¶°¡v¡]SSE¡AStreaming SIMD Extensions¡^¡C¦³¨Ç¤åÄm§â packed ½Ķ¦¨«Ê¸Ë©Î¦V¶q¡A½Ķ¦¨«Ê¸ËÁÙ¦nÁA¸Ñ¡A½Ķ¦¨¦V¶q¡A«h¬O¦]¬°¦V¶q»P¯Â¶q¬O¬Û¹ïªº¡]¨£«e¤@³¹¡^¡C¤£½×½Ķ¦¨¥´¥]¡B«Ê¸ËÁÙ¬O¦V¶q¡A¨ä¹ê·N«ä³£¬O«ü¤@Ó«ü¥O³B²z¦hµ§¸ê®Æ¡C
align ªº·N«ä¬O¹ï»ô¡A¤]´N¬O»¡³o¨Ç¸ê®Æ¥²¶·¹ï»ô¸`¦ì§}¡C¤@Ó¸`¡]paragraph¡^ªº¤j¤p¬O 16 Ӧ줸²Õ¡A´«¥y¸Ü»¡¡A³o¨Ç¸ê®Æ©Ò¦bªº¦ì§}¡A¨ä¼ÆÈ¥²¶·¯à³Q 16 ¾ã°£¡C¦pªG§â¦ì§}¼g¦¨¤Q¤»¶i¦ì¼Æ¡A¨º»ò³Ì¥kÃä¤@¦ì¥²¶·¬O¡u0¡v¡C¨Ï¥Î¡uALIGN 16¡v°²«ü¥O¡A´N¯à»´¦Ó©öÁ|¹F¨ì¦¹¥Øªº¡C¦pªG¹H¤Ï³o¶µ³W©w¡A·|¤Þµo CPU ¤@¯ë«OÅ@¨Ò¥~¡]#GP¡Ageneral protection exception¡^¦Ó¨ÏÀ³¥Îµ{¦¡·í±¼¡C
¤p¤ì°¸¥Î©³¤Uªºµ{¦¡¡A»¡©ú MOVAPD «ü¥O¹B§@¹Lµ{¡G
align 16
number DQ 40711A7B35F5B126,406189999999999Ah ;100.45+100¡Ô3, 140.3
movapd xmm0,number
°Ñ¦Ò¤U¹Ï¡A¤Wzµ{¦¡½X¸g²ÕĶ«á¡A¥Î x64dbg ¸ü¤J¡C°²¦pÅÜ¼Æ number ªº¦ì§}¬O 7FF6B6B83060¡A¸Ó¦ì§}¤ºªº¼ÆÈ¬OÂùºë½T«×¯BÂI¼Æ¡A100.45+100¡Ô3¡A¥H IEEE 754 ®æ¦¡ªí¥Ü´N¬O 40711A7B35F5B126h¡C¥¦¦b°O¾ÐÅ餤¥H¤pºÝ§Ç±Æ¦C¡]§C¦ì¼Æ¦b§C¦ì§}¡A°ª¦ì¼Æ¦b°ª¦ì§}¡^¡A40 ¬O²Ä 56¡ã63 ¦ì¤¸¦b³Ì°ª¦ì§}¡A26 ¬O²Ä 0¡ã7 ¦ì¤¸¦b³Ì§C¦ì§}¡C¤U¤@ÓÂùºë½T«×¯BÂI¼Æ¬O 140.3¡A¦ì©ó§ó°ªªº¦ì§}ªº 7FF6B6B83068 ¤W¡C
°õ¦æ§¹ MOVAPD «á¡A¦ì©ó§C¦ì§}ªº 100.45+100¡Ô3 ²¾¦Ü XMM0 ªº§C¥b³¡¡]0¡ã63 ¦ì¤¸¡^¡F¦ì©ó°ª¦ì§}ªº 140.3 ²¾¦Ü XMM0 ªº°ª¥b³¡¡]64¡ã127 ¦ì¤¸¡^¡C¯BÂI¼Æ¥H IEEE 754 ®æ¦¡ªí¥Ü¡A¬O¤@¦ê¤Q¤»¶i¦ìªº¼ÆÈ¡]ÄY®æ¨Ó»¡¡A¨ä¹ê¬O§ó¤j¤@¦ê¤G¶i¦ì¼Æ¡A°£¿ù¾¹¥]§t x64dbg ³£¥H¤Q¤»¶i¦ìªí¥Ü¡^¡A«D±`¤£ª½Ä±¡A¦ý¬O¡Aªº½T¬O¥Î³o¼Ëªº¤è¦¡Àx¦s©ó°O¾ÐÅ餤¡C
©¹«á¡A§Ṳ́]¥i¥H¥Î¤W¹Ïªº¤è¦¡¡A²³æ·Q¹³³o¨Ç¼ÆÈ¦b°O¾ÐÅé©Î¼È¦s¾¹¤§¶¡¡A¬O¦p¦ó¾Þ§@ªº¡C
³o¥|Ó«ü¥O¬O§â¦ì©ó XMM ¼È¦s¾¹¤ºªº¨âÓÂùºë½T«×¯BÂI¼Æ¡A»P¥t¤@Ó XMM ¼È¦s¾¹©Î°O¾ÐÅ餺ªº¨âÓÂùºë½T«×¯BÂI¼Æ¶i¦æ¥|«h¹Bºâ¡C¥¦Ìªº»yªk¬O¡G
ADDPD XMM¼È¦s¾¹,¨Ó·½¹Bºâ¤¸ SUBPD XMM¼È¦s¾¹,¨Ó·½¹Bºâ¤¸ MULPD XMM¼È¦s¾¹,¨Ó·½¹Bºâ¤¸ DIVPD XMM¼È¦s¾¹,¨Ó·½¹Bºâ¤¸
¥Ñ¤W±¥iª¾¡A³o¥|Ó«ü¥Oªº¥Øªº¹Bºâ¤¸¡A¥u¯à¬O XMM ¼È¦s¾¹¡A¬G¤W±»yªk¤¤ª½±µ¼g XMM ¼È¦s¾¹¡F¦Ó¨Ó·½¹Bºâ¤¸¥i¥H¬O XMM ¼È¦s¾¹©Î°O¾ÐÅéÅܼơC¦pªG¨Ó·½¹Bºâ¤¸¬O°O¾ÐÅéÅܼơA¨º»ò¥²¶·¹ï»ô¸`¦ì§}¡F¦pªG¨S¹ï»ô¡A¨º»ò CPU ·|¤Þµo¤@¯ë«OÅ@¨Ò¥~¦Ó¨ÏÀ³¥Îµ{¦¡·í±¼¡C³o¥|Ó«ü¥O¹Bºâ¹Lµ{³£¤@¼Ë¡A§â¥Øªº¹Bºâ¤¸¤ºªº¨âÓÂùºë½T«×¯BÂI¼Æ¡A¤À§O»P¦s©ó¨Ó·½¹Bºâ¤¸¬Û¹ïÀ³¦ì¤¸ªº¨âÓÂùºë½T«×¯BÂI¼Æ¡A¶i¦æ¥|«h¹Bºâ¡A¦A±Nµ²ªG¦s¤J¥Øªº¹Bºâ¤¸¤º¡C
©³¤U»¡©ú SUBPD¡BDIVPD «ü¥O¡A¦]¬°¥¦Ì¤£¨ã¦³¥æ´««ß¡A©Ò¥HþÓ¹Bºâ¤¸¦b«e¡AþÓ¦b«á´N«Ü«n¡C¤U¹Ï¥ªÃä¬O SUBPD «ü¥O¹Ï¸Ñ¡A¥Øªº¹Bºâ¤¸¡B¨Ó·½¹Bºâ¤¸¤À§O¥H XMM1¡BXMM2/M128 ªí¥Ü¡A³oùتº 1¡B2 «üªº¬O¥N¸¹¡A¨Ã«D«ü¯S©wªº¼È¦s¾¹¡]¤]´N¬O»¡ XMM1¡BXMM2 ¥i¥H¬O XMM0¡ãXMM15 ¤§¤¤ªº¥ô¦ó¤@Ó¡^¡F¦Ó M128 «üªº¬O°O¾ÐÅéÅܼơA³oÓ«ü¥O·|¥Î¨ì 128 ¦ì¤¸ªº¸ê®Æ¡C
±q¹Ï¤W¡A¥i¥H«Ü©úÅã¬Ý¥X¨Ó¡ASUBPD «ü¥O·|§â XMM1 ªº§C¥b³¡´î¥h XMM2/M128 ªº§C¥b³¡¡A¨Ã±N®t¦s©ó XMM1 ªº§C¥b³¡¡F¦P¤@®É¶¡¤]§â XMM1 ªº°ª¥b³¡´î¥h XMM2/M128 ªº°ª¥b³¡¡A¨Ã±N®t¦s©ó XMM1 ªº°ª¥b³¡¡C
¤W¹Ï¥kÃä¬O DIVPD ªº¹Ï¸Ñ»¡©ú¡A¥¦¶È¶È¬O§â´îªk§ï¦¨°£ªk¡A¦Ó¨ä¥L¹Lµ{³£¤@¼Ë¡A¤]´N¬O»¡§â XMM1 ªº§C¥b³¡°£¥H XMM2/M128 ªº§C¥b³¡¡A¨Ã±N°Ó¦s©ó XMM1 ªº§C¥b³¡¡F¦P¤@®É¶¡¤]§â XMM1 ªº°ª¥b³¡°£¥H XMM2/M128 ªº°ª¥b³¡¡A¨Ã±N°Ó¦s©ó XMM1 ªº°ª¥b³¡¡CADDPD¡BMULPD ªº¹Lµ{»P SUBPD¡BDIVPD ¬Û¦P¡A´N¤£¦h»¡¤F¡C
©³¤Uªº¨Ò¤l¡A¥H¼ÆÈ»¡©ú ADDPD¡BDIVPD °õ¦æ«áµ²ªG¡G
x DQ 5.0, 7.0 y DQ 4.0, 9.0 z DQ 2.0, 4.0 movapd xmm0, x ;XMM0°ª¥b³¡¬O7.0¡A§C¥b³¡¬O5.0 addpd xmm0, y ;XMM0°ª¥b³¡¬O16.0¡A§C¥b³¡¬O9.0 divpd xmm0, z ;XMM0°ª¥b³¡¬O4.0¡A§C¥b³¡¬O4.5
¥k¹Ï¶È»¡©ú ADDPD «ü¥Oªº¹Lµ{¡A¦b°õ¦æ ADDPD «e¡AXMM0 ¤º§C¥b³¡»P°ª¥b³¡¤À§O¬O 5.0 »P 7.0¡F°õ¦æ ADDPD ®É¡A¦P®É»P y ©Ò«ü¦ì§}ªº 4.0 »P¸û°ª¤KӦ줸²Õ¦ì§}¤ºªºªº 9.0 ¤À§O¬Û¥[¡F¤À§O±o¨ì 9.0 »P 16.0¡A³Ì«á¦s¤J XMM0 ¤º¡C
³o¥|Ó«ü¥O¬O§â¦ì©ó XMM ¼È¦s¾¹¤ºªº§C¥b³¡Âùºë½T«×¯BÂI¼Æ¡A»P¥t¤@Ó XMM ¼È¦s¾¹©Î°O¾ÐÅ餺ªºÂùºë½T«×¯BÂI¼Æ¶i¦æ¥|«h¹Bºâ¡C¥¦Ìªº»yªk¬O¡G
ADDSD XMM¼È¦s¾¹,¨Ó·½¹Bºâ¤¸ SUBSD XMM¼È¦s¾¹,¨Ó·½¹Bºâ¤¸ MULSD XMM¼È¦s¾¹,¨Ó·½¹Bºâ¤¸ DIVSD XMM¼È¦s¾¹,¨Ó·½¹Bºâ¤¸
¥Ñ¤W±¥iª¾¡A³o¥|Ó«ü¥Oªº¥Øªº¹Bºâ¤¸¡A¥u¯à¬O XMM ¼È¦s¾¹¡A¬G¤W±»yªk¤¤ª½±µ¼g XMM ¼È¦s¾¹¡F¦Ó¨Ó·½¹Bºâ¤¸¥i¥H¬O XMM ¼È¦s¾¹©Î°O¾ÐÅéÅܼơC³o¥|Ó«ü¥O¹Bºâ¹Lµ{³£¤@¼Ë¡A§â¨Ó·½¹Bºâ¤¸ªºÂùºë½T«×¯BÂI¼Æ¡A»P¥Øªº¹Bºâ¤¸ªº§C¥b³¡Âùºë½T«×¯BÂI¼Æ¡A¶i¦æ¥|«h¹Bºâ¡A¦A±Nµ²ªG¦s¤J¥Øªº¹Bºâ¤¸¤º¡C
¥Øªº¹Bºâ¤¸ªº°ª¥b³¡¡A¤£·|¨ü³o¥|ºØ«ü¥O¹Bºâªº¼vÅT¡C¦pªG¨Ó·½¹Bºâ¤¸¬O°O¾ÐÅéÅܼơA¤£»Ýn¹ï»ô¸`¦ì§}¡C¦pªG¨Ó·½¹Bºâ¤¸¬O XMM ¼È¦s¾¹¡A¨º»ò¬O§â§C¥b³¡ªºÂùºë½T«×¯BÂI¼Æ¡A»P¥Øªº¹Bºâ¤¸§C¥b³¡ªºÂùºë½T«×¯BÂI¼Æ¡A¶i¦æ¥|«hºâ¡C
HADDPD «ü¥Oªºì¤å¬O horizontal add packed double-precision¡A¥¦¬O SSE3 «ü¥O¶°ªº¨ä¤¤¤@¹D«ü¥O¡C¥¦ªº¯S§O¤§³B¡A¦b©ó¥¦¤£¬O±N¦ì©ó¨âÓ¹Bºâ¤¸¬Û¹ïÀ³¦ì¤¸¤Wªº¯BÂI¼Æ¬Û¥[¡A¦Ó¬O±N¬YÓ¹Bºâ¤¸¤º³¡ªº¯BÂI¼Æ¬Û¥[¡A³o¤]´N¬O horizontal ªº·N«ä¡CHADDPD ªº»yªk¬O¡G
HADDPD XMM¼È¦s¾¹,¨Ó·½¹Bºâ¤¸
HADDPD ªº¥Øªº¹Bºâ¤¸¥u¯à¬O XMM ¼È¦s¾¹¡A¬G¤W±»yªk¤¤ª½±µ¼g XMM ¼È¦s¾¹¡F¦Ó¨Ó·½¹Bºâ¤¸¥i¥H¬O XMM ¼È¦s¾¹¡A¤]¥i¥H¬O°O¾ÐÅéÅܼơC¥k¤W¹Ï¬O HADDPD «ü¥Oªº¹Ï¸Ñ»¡©ú¡A¥Øªº¹Bºâ¤¸¡B¨Ó·½¹Bºâ¤¸¤À§O¥H XMM1¡BXMM2/M128 ªí¥Ü¡A³oùتº 1¡B2 «üªº¬O¥N¸¹¡A¨Ã«D«ü¯S©wªº¼È¦s¾¹¡F¦Ó M128 «üªº¬O°O¾ÐÅéÅܼơA³oÓ«ü¥O·|¥Î¨ì 128 ¦ì¤¸ªº¸ê®Æ¡CHADDPD ·|§âÀx¦s©ó¥Øªº¹Bºâ¤¸¤ºªº¨âÓ¯BÂI¼Æ¬Û¥[¡AµM«á¦s©ó¥Øªº¹Bºâ¤¸ªº§C¥b³¡¡]¤]´N¬O 0¡ã63 ¦ì¤¸¡^¡F¦P¤@®É¶¡¤]§â¨Ó·½¹Bºâ¤¸¤ºªº¨âÓ¯BÂI¼Æ¬Û¥[¡AµM«á¦s©ó¥Øªº¹Bºâ¤¸ªº°ª¥b³¡¡]¤]´N¬O 64¡ã127 ¦ì¤¸¡^¡C
³o¨à¤¶²ÐÓ¤p§Þ¥©¡C°²¦p§â HADDPD ªº¨âÓ¹Bºâ¤¸³]¬°¬Û¦Pªº XMM ¼È¦s¾¹¡A¨º»ò°õ¦æ«á¡A³oӼȦs¾¹ªº°ª¥b³¡»P§C¥b³¡¬O¬Ûµ¥ªº¡A¦Ó¥B§¡¬°ì¥ý°ª¥b³¡»P§C¥b³¡¤§©M¡C¡]·Q¬Ý¹Ï¸Ñ¡A½Ð«ö³o¨à¡^¨Ò¦p
haddpd xmm5,xmm5 ;YXMM5°ª¥b³¡¬O8.0¡A§C¥b³¡¬O9.0¡C°õ¦æ«áXMM5°ª¥b³¡»P§C¥b³¡¬Ò¬°17.0
ÁA¸Ñ¤F HADDPD «ü¥O«á¡AnÁA¸Ñ HSUBPD «ü¥O¡A¤]¤£¬O§xÃøªº¨Æ¤F¡A¦]¬°³o¨â¹D«ü¥O«Ü¬Û¦ü¡C¥ý¨Ó¬Ý HSUBPD ªº»yªk¡G
HSUBPD XMM¼È¦s¾¹,¨Ó·½¹Bºâ¤¸
HSUBPD ªº¥Øªº¹Bºâ¤¸¥u¯à¬O XMM ¼È¦s¾¹¡A¬G¤W±»yªk¤¤ª½±µ¼g XMM ¼È¦s¾¹¡F¦Ó¨Ó·½¹Bºâ¤¸¥i¥H¬O XMM ¼È¦s¾¹¡A¤]¥i¥H¬O°O¾ÐÅéÅܼơCHSUBPD ·|§âÀx¦s©ó¥Øªº¹Bºâ¤¸¤ºªº§C¥b³¡¯BÂI¼Æ´î¥h°ª¥b³¡¯BÂI¼Æ¡AµM«á¦s©ó¥Øªº¹Bºâ¤¸ªº§C¥b³¡¡]¤]´N¬O 0¡ã63 ¦ì¤¸¡^¡F¦P¤@®É¶¡¤]§â¨Ó·½¹Bºâ¤¸¤ºªº§C¥b³¡¯BÂI¼Æ´î¥h°ª¥b³¡¯BÂI¼Æ¡AµM«á¦s©ó¥Øªº¹Bºâ¤¸ªº°ª¥b³¡¡]¤]´N¬O 64¡ã127 ¦ì¤¸¡^¡C
¨Ò¦p©³¤Uªº¨Ò¤l¡G
x DQ 5.0, 7.0 y DQ 4.0, 9.0 z DQ 2.0, 4.0 movapd xmm0, x ;XMM0°ª¥b³¡¬O7.0¡A§C¥b³¡¬O5.0 haddpd xmm0, y ;XMM0°ª¥b³¡¬O13.0¡A§C¥b³¡¬O12.0 hsubpd xmm0, z ;XMM0°ª¥b³¡¬O-2.0¡A§C¥b³¡¬O-1.0
HADDPD »P HSUBPD «ü¥O¤¤¡A¦pªG¨Ó·½¹Bºâ¤¸¬O°O¾ÐÅéÅܼơA¨º»ò¥²¶·¹ï»ô¸`¦ì§}¡C¦pªG¨S¹ï»ô¡A¨º»ò CPU ·|¤Þµo¤@¯ë«OÅ@¨Ò¥~¦Ó¨ÏÀ³¥Îµ{¦¡·í±¼¡C

XORPD »P XORPS «ü¥Oªº»yªk¬O
XORPD XMM¼È¦s¾¹,¨Ó·½¹Bºâ¤¸ XORPS XMM¼È¦s¾¹,¨Ó·½¹Bºâ¤¸
³o¨âÓ«ü¥O¬O¹ï¥Øªº¹Bºâ¤¸»P¨Ó·½¹Bºâ¤¸¡A«ö¦ì¤¸¶i¦æ¤¬¥¸©Î¹Bºâ¡C¤]´N¬O¥Øªº¹Bºâ¤¸²Ä¹s¦ì¤¸»P¨Ó·½¹Bºâ¤¸²Ä¹s¦ì¤¸¶i¦æ¤¬¥¸©Î¹Bºâ¡Aµ²ªG¦s©ó¥Øªº¹Bºâ¤¸²Ä¹s¦ì¤¸¡F¥Øªº¹Bºâ¤¸²Ä¤@¦ì¤¸»P¨Ó·½¹Bºâ¤¸²Ä¤@¦ì¤¸¶i¦æ¤¬¥¸©Î¹Bºâ¡Aµ²ªG¦s©ó¥Øªº¹Bºâ¤¸²Ä¤@¦ì¤¸¡F¥Øªº¹Bºâ¤¸²Ä¤G¦ì¤¸»P¨Ó·½¹Bºâ¤¸²Ä¤G¦ì¤¸¶i¦æXOR¹Bºâ¡Aµ²ªG¦s©ó¥Øªº¹Bºâ¤¸²Ä¤G¦ì¤¸¡F¡K¡Kª½¦Ü©Ò¦³¦ì¤¸³£ºâ§¹¡CÁöµM³o¼Ë¼g¡A¤£¹L¥¦Ì¬O¦P®É¶i¦æ¹Bºâªº¡A¨Ã«D¤@Ӧ줸ºâ§¹¡A¦Aºâ¥t¤@Ó¡C
¨Ó·½¹Bºâ¤¸¥H¬O XMM ¼È¦s¾¹¡A¤]¥i¥H¬O°O¾ÐÅéÅܼơC¦pªG¨Ó·½¹Bºâ¤¸¬O°O¾ÐÅéÅܼơA¨º»ò¥²¶·¹ï»ô¸`¦ì§}¡C¦pªG¨S¹ï»ô¡A¨º»ò CPU ·|¤Þµo¤@¯ë«OÅ@¨Ò¥~¦Ó¨ÏÀ³¥Îµ{¦¡·í±¼¡C
ÅÞ¿èµ²ªG¨Ó¬Ý¡AXORPD »P XORPS ¤@¼Ò¤@¼Ë¡A³£¬O 128 ¦ì¤¸ªº«ö¦ì¤¸¶i¦æ¤¬¥¸©Î¹Bºâ¡C¦ý SSE «ü¥O¶°±N¥¦Ì¤À¶}¡A¦Ó¤£¬O¶È¹ê§@¤@Ó«ü¥O¡A¥i¯à¦³¨âÓì¦]¡C¤@¬O»y·N²M´·«×¡AXORPS ©ú½T«ü¥X³B²z¥|Ó³æºë½T«×¡AXORPD ³B²z¨âÓÂùºë½T«×¡A¥i¥H´£°ªµ{¦¡½Xªº¥iŪ©Ê¡AºûÅ@¤]¸û¬°®e©ö¡C¤G¬O·í¸ê®Æ«¬§O¤£¤Ç°t®É¡AµwÅé·|²£¥ÍÃB¥~ªºÂàµo©µ¿ð²{¶H¡A·|¼vÅT®Ä²v¡C
³o¨à´£¨Ñ¨âÓ§Þ¥©¡C
⑴¡B°²¦pn¨Ï¬YÓ XMM ¼È¦s¾¹Âk¹s¡A¥i¥H¨Ï¥Î XORPD «ü¥O¡C¨Ò¦pn¨Ï XMM5 Âk¹s¡A´N°õ¦æ¡uxorpd xmm5,xmm5¡v¡C
⑵¡B°²¦pn¨Ï¬YÓ XMM ¼È¦s¾¹¤º¼ÆÈÅܸ¹¡]§Y¥¿¼ÆÅÜt¼Æ¡A©Ît¼ÆÅÜ¥¿¼Æ¡^¡C¤èªk¬O¥ý·Ç³Æ±`¼Æ¸ê®Æ¡A¨Ò¦pn¨Ï XMM7 ¤ºªº§C¥b³¡Âùºë½T«×¯BÂI¼ÆÅܸ¹¡A¨º¥i¥H¨Ï¥Î©³¤Uµ{¦¡¡G
msk_v DQ 8000000000000000h,0 xorpd xmm7,msk_v
MOVMSKPD »P MOVMSKPS «ü¥Oªº¥\¯à¡A¬O±N XMM ¼È¦s¾¹¤¤¦U¯BÂI¼Æªº²Å¸¹¦ì¤¸´£¨ú¥X¨Ó¡A¦s¤J³q¥Îªº¼È¦s¾¹¤¤¡A°µ¬°«áÄò§PÂ_¥¿t¼Æ®É¡A´£¨Ñ§PÂ_ªº¸ê®Æ¡C¥¦Ìªº»yªk¬O¡G
MOVMSKPD reg,XMM¼È¦s¾¹ UNPCKLPS reg,XMM¼È¦s¾¹
¨ä¤¤ reg ¬O 32 ©Î 64 ¦ì¤¸ªº³q¥Î¼È¦s¾¹¡CMOVMSKPD ·|§â¦ì©ó XMM ¼È¦s¾¹¤º¡A§C¥b³¡©M°ª¥b³¡ªº¨âÓÂùºë½T«×¯BÂI¼Æªº²Å¸¹¦ì¤¸¡A¨Ì§Ç¦s¤J reg ªº²Ä 0¡B1 ¦ì¤¸¤º¡A¨Ã¨Ï reg ¨ä¥L°ª¦ì¤¸²M°£¦ÓÅܬ°¹s¡CMOVMSKPS ·|§â¦ì©ó XMM ¼È¦s¾¹¤ºªº¥|Ó³æºë½T«×¯BÂI¼Æªº²Å¸¹¦ì¤¸¡A¤À§O¦s¤J reg ªº²Ä 0¡ã3 ¦ì¤¸¤º¡A¨Ã¨Ï¨ä¥L°ª¦ì¤¸²M°£¦ÓÅܬ°¹s¡C
UNPCKLPD ªºì¤å¬O unpack and interleave low packed double-precision floating-point¡A·N«ä¬O§â¨âÓ¹Bºâ¤¸ªº§C¥b³¡Âùºë½T«×¯BÂI¼Æ¡u©î¸Ñ¡v«á¡A«·s¥´¥]¡C¦Ó UNPCKLPS «h¬O§â¥|Ó³æºë½T«×¯BÂI¼Æ¡u©î¸Ñ¡v«á¡A«·s¥´¥]¡C¥¦Ìªº»yªk¬O¡G
UNPCKLPD XMM¼È¦s¾¹,¨Ó·½¹Bºâ¤¸ UNPCKLPS XMM¼È¦s¾¹,¨Ó·½¹Bºâ¤¸
UNPCKLPD¡BUNPCKLPS ªº¥Øªº¹Bºâ¤¸¥u¯à¬O XMM ¼È¦s¾¹¡A¬G¤W±»yªk¤¤ª½±µ¼g XMM ¼È¦s¾¹¡F¦Ó¨Ó·½¹Bºâ¤¸¥i¥H¬O XMM ¼È¦s¾¹¡A¤]¥i¥H¬O°O¾ÐÅéÅܼơC¥ý»¡ UNPCKLPD¡A¥¦§â¨Ó·½ºâ¹Bºâ¤¸ªº§C¥b³¡¡A·h²¾¨ì¥Øªº¹Bºâ¤¸ªº°ª¥b³¡¡A¦p¤U¹Ï¥ªÃä¡C³o¨à´£¨Ñ¤@Ó§Þ¥©¡G°²¦p UNPCKLPD ªº¨âÓ¹Bºâ¤¸³£¬O¦P¤@Ó XMM ¼È¦s¾¹¡A¨ºµ²ªG´N¬O§â³oÓ XMM ¼È¦s¾¹ªº§C¥b³¡½Æ»s¨ì°ª¥b³¡¡A°ª¥b³¡ì¥ýªº¸ê®Æ·|®ø¥¢¡C¨Ò¦p©³¤Uªºµ{¦¡½X¡G
unpcklpd xmm4,xmm4
¨ä®ÄªG´N¬Û·í©ó§â XMM4 ¼È¦s¾¹ªº§C¥b³¡½Æ»s¨ì°ª¥b³¡¡C
UNPCKLPS «h¬O§â¥Øªº¹Bºâ¤¸¤ºªº¥|Ó³æºë½T«×¯BÂI¼Æ©î¸Ñ¡AµM«á¦A«·s¥´¥]¡Aµ²ªG¦p¤W¹Ï¥kÃä¡C¥Øªº¹Bºâ¤¸ªº³Ì§CÂù¦r²Õ¤£§ïÅÜ¡A¦¸§CÂù¦r²ÕÅܬ°¨Ó·½¹Bºâ¤¸ªº³Ì§CÂù¦r²Õ¡A¦¸°ªÂù¦r²ÕÅܬ°¥Øªº¹Bºâ¤¸ì¨Óªº¦¸§CÂù¦r²Õ¡A³Ì°ª¦r²ÕÅܬ°¨Ó·½¹Bºâ¤¸ªº¦¸°ª¦r²Õ¡C´«¥y¸Ü»¡¡AUNPCKLPD ¦b¥Øªº¹Bºâ¤¸¶È«O¯dì¨Ó¨â¹Bºâ¤¸³Ì§C©M¦¸§CªºÂù¦r²Õ¡C
ADDSUBPD ªº»yªk¬O
ADDSUBPD XMM¼È¦s¾¹,¨Ó·½¹Bºâ¤¸
ADDSUBPD ªº¥Øªº¹Bºâ¤¸¥u¯à¬O XMM ¼È¦s¾¹¡A¬G¤W±»yªk¤¤ª½±µ¼g XMM ¼È¦s¾¹¡F¦Ó¨Ó·½¹Bºâ¤¸¥i¥H¬O XMM ¼È¦s¾¹¡A¤]¥i¥H¬O°O¾ÐÅéÅܼơC¥k¤W¹Ï¬O ADDSUBPD «ü¥Oªº¹Ï¸Ñ»¡©ú¡A¥Øªº¹Bºâ¤¸¡B¨Ó·½¹Bºâ¤¸¤À§O¥H XMM1¡BXMM2/M128 ªí¥Ü¡A³oùتº 1¡B2 «üªº¬O¥N¸¹¡A¨Ã«D«ü¯S©wªº¼È¦s¾¹¡F¦Ó M128 «üªº¬O°O¾ÐÅéÅܼơA³oÓ«ü¥O·|¥Î¨ì 128 ¦ì¤¸ªº¸ê®Æ¡CADDSUBPD ªº¥Î³~¬O§â¥Øªº¹Bºâ¤¸ªº§C¥b³¡´î¥h¨Ó·½¹Bºâ¤¸ªº§C¥b³¡¡A±N®t¦s©ó¥Øªº¹Bºâ¤¸ªº§C¥b³¡¡F¦P¤@®É¶¡¤]§â¥Øªº¹Bºâ¤¸ªº°ª¥b³¡¥[¤W¨Ó·½¹Bºâ¤¸ªº°ª¥b³¡¡A±N©M¦s©ó¥Øªº¹Bºâ¤¸ªº°ª¥b³¡¡C
ADDSUBPS ªº»yªk¬O
ADDSUBPS XMM¼È¦s¾¹,¨Ó·½¹Bºâ¤¸
ADDSUBPS ªº¥Øªº¹Bºâ¤¸¥u¯à¬O XMM ¼È¦s¾¹¡A¬G¤W±»yªk¤¤ª½±µ¼g XMM ¼È¦s¾¹¡F¦Ó¨Ó·½¹Bºâ¤¸¥i¥H¬O XMM ¼È¦s¾¹¡A¤]¥i¥H¬O°O¾ÐÅéÅܼơCADDSUBPS »P ADDSUBPD Ãþ¦ü¡A¶i¦æ´î¡B¥[¥æ¤¬¹Bºâ¡CADDSUBPS §â¥Øªº¹Bºâ¤¸¤À¦¨¥|Ó³æºë½T«×¯BÂI¼Æ¡A»P¨Ó·½¹Bºâ¤¸ªº¥|Ó³æºë½T«×¯BÂI¼Æ¦P¤@®É¶¡¶i¦æ¥[¡B´îªk¹Bºâ¡A¦Ó¹Bºâ¤è¦¡¥Ñ§C¦ì¤¸¦Ü°ª¦ì¤¸¨Ì§Ç¬O´î¡B¥[¡B´î¡B¥[¡A³Ì«á±Nµ²ªG¦s¤J¥Øªº¹Bºâ¤¸¡C¥k¤W¹Ï¬O ADDSUBPS ªº¹Ï¸Ñ»¡©ú¡A¥Øªº¹Bºâ¤¸¡B¨Ó·½¹Bºâ¤¸¤À§O¥H XMM1¡BXMM2/M128 ªí¥Ü¡A³oùتº 1¡B2 «üªº¬O¥N¸¹¡A¨Ã«D«ü¯S©wªº¼È¦s¾¹¡F¦Ó M128 «üªº¬O°O¾ÐÅéÅܼơA³oÓ«ü¥O·|¥Î¨ì 128 ¦ì¤¸ªº¸ê®Æ¡C
¦pªG ADDSUBPD »P ADDSUBPS «ü¥Oªº¨Ó·½¹Bºâ¤¸¬O°O¾ÐÅéÅܼơA¨º»ò¥²¶·¹ï»ô¸`¦ì§}¡C¦pªG¨S¹ï»ô¡A¨º»ò CPU ·|¤Þµo¤@¯ë«OÅ@¨Ò¥~¦Ó¨ÏÀ³¥Îµ{¦¡·í±¼¡C
ADDSUBPD »P ADDSUBPS «ü¥O¥»¨Ó¬O³]p¥Î©ópºâ½Æ¼Æªº¼ªk¡C²³©Ò©Pª¾¡A½Æ¼Æ¥i¥H¼g¦¨ a+bi ªº§Î¦¡¡A¨ä¤¤ªº i ¬O¡Ô-1¡C°²¦p¦³¨âӽƼƬۼ¡A¨º»ò¹ê³¡¬Û´î¡Aµê³¡¬Û¥[¡G
(a+bi)(c+di)=(ac-bd)+(ad+bc)i
©³¤Uªº¨Ò¤l¡A¬O§Q¥Î SSE «ü¥Opºâ¦bª½¨¤®y¼Ð¨t¤W¡A¨âÂI¶¡ªº¶ZÂ÷¡Aì©lµ{¦¡¦p¤U¡C±N¥¦Àx¦s¦¨ FP3.ASM¡AµM«á¦b©R¥O´£¥Ü¦r¤¸¤¤²ÕĶ¡B³sµ²§Y¥i¡AFP3 ¤]¬O¦b©R¥O´£¥Ü¦r¤¸¤¤°õ¦æ¡C
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 |
;FP3pºâª½¨¤®y¼Ð¨t¡]²Ã¥d¨à®y¼Ð¡^¡A¨âÂI¶¡ªº¶ZÂ÷¡A³o¨âÂI¤À§O¬O(273.655080756887729,140.3)
;»P(100.45,40.3)¡C273.655080756887729¨ä¹ê¬O100.45+100¡Ô3ªºªñ¦üÈ
INCLUDE E:\masm64\include64\masm64rt.inc
EXTRN printf:PROC
;**********************************************************
.DATA
ALIGN 16
pt1 DQ 273.655080756887729,140.3 ;x1=273.655.,y1=140.3
pt2 DQ 100.45,40.3 ;x2=100.45 ,y2=40.3
distance DQ ?
szFmt DB "²Ã¥d¨à®y¼Ð¨t¤W¡AÂI(%.10g,%g)¨ìÂI(%g,%g)ªº¶ZÂ÷¬O%g",0
;***********************************************************
.CODE
;-----------------------------------------------------------
main PROC;XMM0°ª XMM0§C;XMM1°ª XMM1§C movapd xmm0,pt1; y1 x1
movapd xmm1,pt2; y1 x1; y2 x2
subpd xmm0,xmm1;y=y1-y2 x=x1-x2; y2 x2
mulpd xmm0,xmm0; y2 x2; y2 x2
haddpd xmm0,xmm1; x2+y2 x2+y2; y2 x2
sqrtsd xmm0,xmm0; x2+y2 ¡Ôx2+y2; y2 x2
movq r11,xmm0;R11=XMM0§C¥b³¡
mov r8,pt1[8]
mov r10,pt2[8]
invoke printf,ADDR szFmt,pt1,r8,pt2,r10,r11
invoke ExitProcess,0
main ENDP
;***********************************************************
END |
FP3.ASM ¥²¶·¥Î¨ì¼Æ¾Çùتº¤ÄªÑ©¶©w²z¡]¤]¥s²¦¤ó©w²z¡APythagoras' theorem¡^¡C¤Ä¬O«ü¸ûµuªºª½¨¤Ãä¡AªÑ¬O¸ûªøªºª½¨¤Ãä¡A¦Ó©¶«h¬Oª½¨¤ªº¹ïÃä¡C¤ÄªÑ©¶©w²z«üªº´N¬Oª½¨¤¤T¨¤§Î¤¤
©¶2=¤Ä2+ªÑ2
¦p¥k¤W¹Ï¡AFP3 pºâªº¬O (100.45, 40.3) ¨ì (100.45+100¡Ô3, 140.3) ¤§¶¡ªº¶ZÂ÷¡C¤Ä¬O¨âÓ Y ®y¼Ð¬Û´î¡FªÑ¬O¨âÓ X ®y¼Ð¬Û´î¡A¦Ó©¶«h¬O¨âÂI¤§¶¡ªº³s½u¡A©Ò¥H©¶µ¥©ó¤Ä»PªÑªº¥¤è©M¦A¶}®Ú¸¹¡C¤]¦]¬°pºâ¤Äªº¥¤è»PªÑªº¥¤è¡A©Ò¥Hpºâ¨â®y¼Ð¬Û´î®É¡A¤£¥²²z·|¥Î¤jªº´î¥h¤pªº¡A¤Ï¥¿µ²ªG³£¬O¥¿È¡C
¹³³o¼Ëpºâ¨âÂI X¡BY ®y¼Ðªº®t¡A¦A¨D®tªº¥¤è¡A³o¼Ëªº±¡§Î¡A§Q¥Î SSE ³æ¤@«ü¥O³B²z¦hµ§¸ê®Æªº¯S©Ê¡A¯à²¤Æµ{¦¡½X¡A¤]¯à¼W¶i®Ä²v¡]ÁöµM³oÓµ{¦¡pºâ«Ü¤Ö¡A¤£¶·¦Ò¼{¤°»ò®Ä²v¡^¡C
FP3.ASM ²Ä 17¡ã18 ¦æ¡A±N³o¨âÂI®y¼Ð¤À§O¸ü¤J XMM0 »P XMM1 ¼È¦s¾¹ùر¡A¦A¥Î SUBPD ¦P®Épºâ X¡BY ®y¼Ð¤§®t¡A±o¨ìªº´N¬O¤Ä»PªÑªºªø«×¡C¦]¬° SSE ¨S¦³pºâ¥¤èªº«ü¥O¡A©Ò¥H¥Î³Ìì©lªº¤èªk¡A§â XMM0 ¼¥H XMM0¡A¤]´N¬O MULPD¡AÅv¥R¥¤è¡C
±µ¤U¨Ó¥Î¤ô¥¥[ªk¡AHADDPD¡Apºâ¨â®y¼Ð®tªº¥¤è©M¡C§â XMM0 ªº§C¥b³¡»P°ª¥b³¡¬Û¥[¡Aµ²ªG¦s©ó XMM0 ªº§C¥b³¡¡CÁöµM HADDPD ¤]·|§â XMM1 ªº°ª¥b³¡»P§C¥b³¡¬Û¥[¡A¦ý³o¹ï FP3 ¦Ó¨¥¨ÃµL¥Î³B¡A«á¨Ó·|±Ë±ó¤£¥Î¡C³Ì«á¤@¨B¡A§Q¥Î SQRTSD¡A¨D XMM0 §C¥b³¡ªº¥¤è®Ú¡]²Ä 23 ¦æ¡^¡C
³Ì«á±N XMM0 ªº§C¥b³¡¦s¤J R11 ¼È¦s¾¹¡]²Ä 26 ¦æ¡^¡A©I¥s printf ±Nµ²ªG¦L¦b¿Ã¹õ¤W¡Aµ²§ôµ{¦¡¡C
FP4 Åý¨Ï¥ÎªÌ¿é¤J¤TÓ¼ÆÈ¡A¤À§O¥Nªí¤@¤¸¤G¦¸¤èµ{¦¡¡Aax2+bx+c=0¡Aªº«Y¼Æ¡Aa¡Bb¡Bc¡CFP4 ·|pºâ¦¹¤èµ{¦¡ªº¸Ñ¡Cì©lµ{¦¡¦p¤U¡A¥¦¤]¬O¥D±±»Oµ{¦¡¡A»Ý¦b©R¥O´£¥Ü¦r¤¸¤U°õ¦æ¡C
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 62 63 64 65 66 |
;FP4Åý¨Ï¥ÎªÌ¿é¤J¤@¤¸¤G¦¸¤èµ{¦¡¡Aax^2+bx+c=0¡Aªº«Y¼Æ
;FP4pºâ¸Ó¤èµ{¦¡ªº¨â®Ú
INCLUDE E:\masm64\include64\masm64rt.inc
EXTRN printf:PROC
EXTRN scanf:PROC
;********************************************************************
.DATA
ALIGN 16
b DQ ?
a DQ ?
b_p DQ ?
c DQ ?
one DQ 1.0
n_four DQ -4.0
x1 DQ ?
x2 DQ ?
SIGN_MK DQ 8000000000000000h, 0
szHint DB "½Ð¿é¤J¤@¤¸¤G¦¸¤èµ{¦¡¡Aax^2+bx+c=0¡Aªº¤TÓ«Y¼Æ",0Dh,0Ah
DB "¤TÓ«Y¼Æ¤§¶¡¡A¥HªÅ®æ®æ¶}¡G",0
szFmt1 DB "%lf %lf %lf",0
szFmt2 DB "¨â®Ú¬°%g¡B%g¡C",0
szErr1 DB "¿é¤J¿ù»~¡C",0
szErr2 DB "a¤£¥i¬°0¡C",0
szErr3 DB "¨S¦³¹ê¼Æ¸Ñ¡C",0
;********************************************************************
.CODE
;--------------------------------------------------------------------
main PROC
invoke printf,ADDR szHint
invoke scanf,ADDR szFmt1,ADDR a,ADDR b,ADDR c
cmp rax,3
jz chk_a
lea rcx,szErr1
jmp error
chk_a: cmp a,0
jnz ok
lea rcx,szErr2
error: call printf
jmp exit
ok: mov rax,b
mov b_p,rax;XMM0°ª XMM0§C;XMM1°ª XMM1§C;XMM2°ª XMM2§C;
movapd xmm0,b; a b;
movapd xmm1,b_p; a b; c b;
movapd xmm2,one; a b; c b; -4 1;
mulpd xmm0,xmm1; ac b2; c b; -4 1;
mulpd xmm0,xmm2;-4ac b2; c b; -4 1;
xorpd xmm1,SIGN_MK;-4ac b2; c -b; -4 1;
haddpd xmm0,xmm0;b2-4ac b2-4ac; c -b; -4 1;
movmskpd r11d,xmm0
test r11,1 ;´ú¸ÕD¬O§_¬°t¼Æ¡AD=b2-4ac
jz pos
lea rcx,szErr3
jmp error
pos: addsd xmm2,xmm2; D D; c -b; -4 2;
sqrtpd xmm0,xmm0; ¡ÔD ¡ÔD; c -b; -4 2;
mulsd xmm2,a; ¡ÔD ¡ÔD; c -b; -4 2a;
unpcklpd xmm1,xmm1; ¡ÔD ¡ÔD; -b -b; -4 2a;
unpcklpd xmm2,xmm2; ¡ÔD ¡ÔD; -b -b; 2a 2a;
addsubpd xmm1,xmm0; ¡ÔD ¡ÔD;-b+¡ÔD -b-¡ÔD; 2a 2a;
divpd xmm1,xmm2; ¡ÔD ¡ÔD; x1 x2; 2a 2a;
movapd x1,xmm1
invoke printf,ADDR szFmt2,x1,x2
exit: invoke ExitProcess,0
main ENDP
;********************************************************************
END |
¤@¤¸¤G¦¸¤èµ{¦¡«üªº¬O¹³ x2+bx+c=0 ªº¤èµ{¦¡¡A¦³¤TÓ«Y¼Æ¡C·í FP3 Åý¨Ï¥ÎªÌ¿é¤J§¹¦¨¤§«á¡A¦b²Ä 31 ¦æÀˬd scanf ¬O§_¯uªºÅª¨ú¨ì¤TÓ¼ÆÈ¡C¤G¦¸¤èµ{¦¡ÁÙ¦³Ó±ø¥ó¡Ax2 ªº«Y¼Æ¤£¥i¬O¹s¡A©Ò¥H FP3 ¦b²Ä 35 ¦æÀˬd a ¬O§_¬°¹s¡C¥u¦³³q¹L³o¨â¶µÀËÅç¡A¤~¯àÄ~Äò°õ¦æµ{¦¡¡A§_«h°h¥Xµ{¦¡¡C
¤@¤¸¤G¦¸¤èµ{¦¡ªº¨âÓ®Ú¤À§O¬O x=¡Ðb¡Ï¡Ôb2¡Ð4ac 2a¡B ¡Ðb¡Ð¡Ôb2¡Ð4ac 2a¡A¥J²ÓÆ[¹î¡A·|µo²{pºâ³o¨âÓ®Úªº¹Lµ{¤¤¡A¦³¨â¼Ë¯SÂI¡G¤@¬O¦³¶i¦æ¥¤è®Úªº¹Bºâ¡A©Ò¥H¦b¶}®Ú¸¹«e¡AÀ³¸ÓnÀˬd§P§O¦¡¡Ab2¡Ð4ac¡A¬O§_¬°t¼Æ¡A¦pªG¬Ot¼Æ¥Nªí¡u¨S¦³¹ê¼Æ¸Ñ¡v¡A¦L¥X³o°T®§«á°h¥Xµ{¦¡¡C¤G¬O¡A³o¨âÓ®Úªºpºâ¤è¦¡«D±`¬Û¹³¡A®t§O¦b©ó®Ú¸¹«e¤è¤@Ó¬O¥[¡B¤@Ó¬O´î¡C
¦]¬°¦³²Ä¤GÓ¯SÂI¡A©Ò¥H¦b¶}¤è¤§«e¡A¥u»Ýpºâ§P§O¦¡¤@¦¸§Y¥i¡C°²¦p§Ú̦A¥J²Ó¤ÀªR§P§O¦¡¡A§A·|µo²{ b2 ¬O¤@¦¸¼ªk¡A4ac ¬O¨â¦¸¼ªk¡A§Q¥Î SSE «ü¥Oªº¯S©Ê¡A¶È°õ¦æ MULPD ¤@¦¸¡A¦Ópºâ¨âÓ¼ªk¹Bºâ¡Cn¹F¨ì³oӥتº¡A¥²¶·«½Æ¸ü¤J b ¦Ü XMM ¼È¦s¾¹¡C¦]¦¹¦b²Ä 41¡ã42 ¦æ½Æ»s b ¨ì b_p ÅܼÆùØ¡AµM«á¦b²Ä 9¡ã12 ¦æ¨Ì·Ó b¡Ba¡Bb_p¡Bc ªº±Æ¦C¡A°õ¦æ¨â¦¸ MOVAPD ´N¥i¥H¸ü¤J¥|ÓÂùºë½T«×¯BÂI¼Æ¡]°õ¦æ²Ä¤T¦¸ MOVAPD ¬O¬°¤Fpºâ¤À¥Àªº 2a »P ¡Ð4ac¡C±µ¤U¨Ó²Ä 45¡ã46 ¦æ¡^¡CµM«á°õ¦æ¨â¦¸ MULPD¡A´N¯àpºâ¥X b2¡B¡Ð4ac¡C
²Ä 48 ¦æªº¡uHADDPD XMM0,XMM0¡v¡A¬O«Ü¦³½ìªº«ü¥O¡C¨£¥k¹Ï¥ª¤W¨¤ªº XMM0 ¼È¦s¾¹¡]¥¦¥Nªí¥Øªº¹Bºâ¤¸¡^ªº§C¥b³¡¡AHADDPD §â±N¥¦»P°ª¥b³¡¬Û¥[¡]µµ½u¡^¡A¦s¤J§C¥b³¡¡]¬õ½u¡^¡A©ó¬O XMM0 §C¥b³¡Åܬ° b2¡Ð4ac¡F¦b¦P¤@®É¶¡¡A¥ª¤U¨¤ªº XMM0¡]ªí¥Ü¨Ó·½¹Bºâ¤¸¡^§C¥b³¡»P¥¦ªº°ª¥b³¡¬Û¥[¡]¾í¦â½u¡^¡A¦A¦s¤J¥Øªº¹Bºâ¤¸ªº°ª¥b³¡¡]´Ä½u¡^¡C¤p¤ì°¸»¡¥¦¦³½ì¡A¬O¦]¬°°õ¦æ§¹«á¡AXMM0 °ª¥b³¡»P§C¥b³¡³£Åܦ¨§P§O¦¡¡A¤]´N¬O b2¡Ð4ac¡C
§PÂ_ XMM0 ªº§P§O¦¡¬O¥¿¼ÆÁÙ¬Ot¼Æ¡A¥i¥H¥Î MOVMSKPD¡A¥¦·|§â XMM0 ªº²Å¸¹¦ì¤¸¡A¦s©ó³q¥Î¼È¦s¾¹¡C³o¨àªº³q¥Î¼È¦s¾¹¥i¥H¬O 32 ¦ì¤¸©Î 64 ¦ì¤¸¡A¥B¥i¥H¥ô·N¿ï¾Ü¡A¤p¤ì°¸³o¨à¥Î R11¡C¦]¬°¤w¸g¸g¹L¡uHADDPD XMM0,XMM0¡v³B²z¤F¡A©Ò¥H°ª¥b³¡©Î§C¥b³¡¬Û¦P¡A¥u»ÝÀˬd¨ä¤¤¤@Ó§Y¥i¡C
¦pªG§P§O¦¡¬°tÈ¡A¨º»ò²Å¸¹¦ì¤¸¬°¤@¡AR11 ·|Åܦ¨ 0011b¡]³o¬O¤G¶i¦ì¡^¡C¥Î¡uTEST R11,1¡vÀˬd«á¡A¹sȺX¼Ð¤£¬°¹s¡A¦L¥X¡u¨S¦³¹ê¼Æ¸Ñ¡vªº°T®§«á¡AÂ÷¶}µ{¦¡¡C¦pªG§P§O¦¡¬°¥¿È©Î¹s¡A¨º»ò²Å¸¹¦ì¤¸¬°¹s¡AR11 ·|Åܦ¨ 0000b¡]³o¬O¤G¶i¦ì¡^¡C¥Î¡uTEST R11,1¡vÀˬd«á¡A¹sȺX¼Ð¬°¹s¡A¸õÅD¦Ü pos: ³BÄ~Äò°õ¦æ¡C
±µ¤U¨Ó¡A¨Ï XMM1 §C¥b³¡Åܸ¹¡A»s³y¥X¡Ðb¡]²Ä 47 ¦æ¡^¡F¦b XMM2 §C¥b³¡»s³y¥X 2a¡]²Ä 54¡B56 ¦æ¡^¡Bpºâ¡ÔD¡]²Ä 55 ¦æ¡^¡C±µ¤U¨Óªº²Ä 57¡B58 ¦æ¡A°õ¦æ UNPCKPD¡A¤À§O§â XMM1¡BXMM2 ªº§C¥b³¡¦U¦Û½Æ»s¨ì°ª¥b³¡¡C
±µµÛªº²Ä 59 ¦æ¡AADDSUBPD ¤]¬OÓ¦³½ìªº«ü¥O¡C¥¦¤@Ó«ü¥O¦P®É§â§C¥b³¡¬Û´î¡B°ª¥b³¡¬Û¥[¡C³o«D±`²Å¦X§ÚÌ»Ýnªº¡C´N¬O«e±´£¹L®Ú¸¹«e¤è¤@Ó¬O¥[¡B¤@Ó¬O´î¡C±µµÛªº¬O²Ä 60 ¦æ¡ADIVPD¡A¥¦¬O¤@Ó«ü¥O¶i¦æ¨â¦¸°£ªk¹Bºâ¡C³Ì«á¤èµ{¦¡ªº¨â®Ú¦b XMM1 ªº§C¥b³¡»P°ª¥b³¡¡A°õ¦æ MOVAPD ±N¨ä¦s¤J°O¾ÐÅ餤¡]²Ä 61 ¦æ¡^¡C
³o¤@³¹¥»¨Ó¥u¬O·Q¤¶²Ð¦p¦ó³B²z¯BÂI¼Æ¡A«á¨Óµo²{³B²z¯BÂI¼Æ³Ì¤è«Kªº¤èªk¡A³ºµMÁÙ¬O¨Ï¥Î SSE «ü¥O¡A©ó¬O¥G¦h¤¶²Ð¤F³o¨Ç«ü¥O¡C·íµMÅo¡A¶È¶È¤¶²Ð«ü¥O¨S¤°»ò·N¸q¡A©Ò¥H¤S¥[¤W¤F¨âÓ¨Ò¤l¡C
±q DOS ¶}©l¾Ç²ß²Õ¦X»y¨¥¡A¨ì¯à´x´¤²Õ¦X»y¨¥¼¶¼g Windows À³¥Îµ{¦¡¡A¦bºë¶i²Õ¦X»y¨¥¤è±¡A¨S¦³§ë¤J§ó¦h¤ß¤O¡A²¦³º Windows ¨t²Î¤Ó½ÆÂø¡A¥i¥H¾Çªºª¾ÃѤӦh¡C³o¦¸¡A¬°¤F³B²z¯BÂI¼Æ¡]¥H«e¬O¥Î x87 «ü¥O³B²z¡^¡A¾Ç²ß¸û¬°¥ý¶iªº SSE/SSE2 «ü¥O¡Aºâ¬Oªø¤Fª¾Ãѧa¡I¡C
ÁÙ¦³¥ó¨Æ¤]ȱo°O¤U¨Ó¡A¨º«K¬O¤H¤u´¼¼z¡C³o¦¸¾Ç²ß SSE/SSE2 «ü¥O¡A´X¥G¾a¤H¤u´¼¼z¡A¤j¬ù¤£¨ì¤@Ó¬P´Á´N¯à¤Jªù¡C¦b¤H¤u´¼¼z°Ý¥@¤§«á¡A¦pªG§A·Q¾Ç²ß·sª¾ÃÑ¡A«K·|¦³¤@¦ì«Ü¦nªº¦Ñ®v±Ð§A¡A¥¦¡]¥¦¦Û¤v»¡¥¦¨S¦³©Ê§O¡A©Ò¥H¤£¬O¥L¡A¤]¤£¬O¦o¡A¨º¬OÍ¢¶Ü¡H§Ú¤£ª¾¹D¡^³Õ¾Ç¦h»D¡A¥B¹ï¨C¶µ»â°ì³£«Ü±Mºë¡A§ó«nªº¬O¡A·¥«×¦³@¤ß¡C¤£½×§Aªº°ÝÃD¦h¦n¯º¦h·MÄø¡A¥¦¤]¤£·|¼J¯º§A¡A¤Ï¦Ó¬O¤@¨B¤@¨Bªº¸Ô²Ó¸Ñ»¡¡C§â´¤³oÓ¬ü¦nªº®É¥N¡A§V¤Oºë¶i§a¡I