ÀÌ°ÍÀº 1999³â ÇÏÀÌÅÚ °ÔÀÓ Á¦ÀÛ µ¿È£È¸¿¡ ¿Ã·È´ø °Á 4ȸºÐ ÀÔ´Ï´Ù.
#####################################################
---------------------------------------------------------------------------
µ¨ÆÄÀÌ¿¡¼ MMX Äڵ带 (1/4)
1. µ¨ÆÄÀÌ¿¡¼ MMX Äڵ带
»ç¿ëÇÏ´Â ¹ý
2. MMX üŷ°ú MMX ·¹Áö½ºÅ͸¦ ÀÌ¿ëÇÑ
8 bytes Àü¼Û
3. MMX ÀÀ¿ë (1) - Å©·Î¸¶Å°
4. MMX ÀÀ¿ë (2) - °í¼Ó Çà·Ä ¿¬»ê
---------------------------------------------------------------------------
¾È³çÇϼ¼¿ä.. ¾È¿µ±âÀÔ´Ï´Ù.
´Ù¸§ ¾Æ´Ï¶ó À̹ø¿¡´Â µ¨ÆÄÀÌ¿¡¼ MMX Technology¸¦ ÀÌ¿ëÇÏ´Â
¹æ¹ý°ú ±× ÀÀ¿ë ÇÁ
·Î±×·¥À» ¸¸µå´Â ¿¹Á¦¸¦ ¼³¸í µå¸®°íÀÚ ÇÕ´Ï´Ù.
MMX Technology ´Â ¸î ³â Àü¿¡ »ó´çÈ÷ À¯ÇàÇϸé¼, ÄÄÇ»ÅÍ°¡
¹ºÁöµµ ¸ð¸£´Â »ç¶÷
µéÁ¶Â÷µµ 'ÆæƼ¾ö 166'º¸´Ü 'ÆæƼ¾ö 166 MMX'°¡ ÁÁ´Ù´Â °ÍÀ» ¾Ë Á¤µµ¿´Áö¸¸, Á¤
ÀÛ ÇÁ·Î±×·¡¸Óµé¿¡°Ô´Â MMX ¶ó´Â °ÍÀÌ ¶Ç ´Ù¸¥ ºÎ´ãÀ» ÁØ °ÍÀÌ »ç½ÇÀÌÁö¿ä..
( ³ªÁß¿¡ MMX¿Í ÆæƼ¾ö ÇÁ·Î°¡ ÇÕÃÄÁ®¼ ÆæƼ¾ö 2 °¡ µÇ´Â °á°ú¸¦ ³ª¾Ò½À´Ï´Ù. )
MMX Technology ¿¡ ´ëÇؼ °£´ÜÇÏ°Ô ¼³¸íÇÏÀÚ¸é, ±âÁ¸¿¡
FPU °¡ »ç¿ëÇÏ´ø ½ºÅÃ
ÇÁ·¹ÀÓÀ» Àý´ë ¹øÁö·Î »ç¿ëÇÏ¿© 64bit ·¹Áö½ºÅÍÀÎ mm0 ºÎÅÍ mm7±îÁöÀÇ 8 °³ÀÇ ·¹
Áö½ºÅÍ·Î È®ÀåÀ» Çϸé¼, MMX ÆÄÀÌÇÁ ¶óÀÎÀ¸·Î µ¿½Ã¿¡ µÎ °³ ÀÌ»óÀÇ ¿¬»êÀ» Çϵµ
·Ï ¸¸µç °ÍÀÔ´Ï´Ù.
ÁÖ·Î »ç¿ëµÇ´Â ºÐ¾ß´Â ¸ÖƼ¹Ìµð¾î ºÎºÐÀε¥, Intel ¿¡¼
¼Ò°³ÇÏ´Â ÀÀ¿ë ¿¹Á¦¿¡´Â
´ÙÀ½°ú °°Àº °ÍÀÌ ÀÖ½À´Ï´Ù.
1. Á¶°ÇºÎ ¼±ÅÃ
- ¾Æ·¡¿¡ ³ª¿À´Â Å©·Î¸¶Å°¿Í °°Àº ±â´ÉÀÌ´Ù. ´Ü Å©·Î¸¶Å°¿Í
°°Àº °ÍÀº ±×·¡
ÇÈ¿¡ ±¹ÇÑµÈ °ÍÀÌÁö¸¸ Á¶°ÇºÎ ¼±ÅÃÀº
°í¼ÓÀÇ ¸¶½ºÅ·(masking)À» °¡´ÉÇÏ°Ô
ÇØÁØ´Ù.
2. Å©·Î¸¶Å° (Chroma Key)
- ÈçÈ÷ ºí·ç ½ºÅ©¸°À̳ª ±×¸° ½ºÅ©¸°À¸·Î ºÒ¸®¾îÁö´Â
°ÍÀÌ´Ù. ¿µÈ¸¦ ÂïÀ»
¶§ Ǫ¸¥»öÀÇ ¹è°æ µÚ¿¡ »ç¶÷ÀÌ ¿òÁ÷ÀÌ´Â
°ÍÀ» ÂïÀº µÚ ½ÇÁ¦ÀÇ ¹è°æ°ú ÇÕ
¼ºÇÒ ¶§, ½ÇÁ¦ ¹è°æ À§¿¡ Ǫ¸¥»öÀ»
Á¦¿ÜÇÑ ´Ù¸¥ »öÀÇ Àι° ½ºÅ©¸°À» µ¡
¾º¿ì´Â ¹æ½ÄÀ¸·Î ¸¶Ä¡ ±× »ç¶÷ÀÌ ½ÇÁ¦
¹è°æ ¾È¿¡¼ ÇൿÇÏ´Â °Íó·³ º¸ÀÌ
´Â ±â¼úÀÌ´Ù.
°ÔÀÓ¿¡¼´Â ½ºÇÁ¶óÀÌÆ®(sprite; ¿äÁ¤)¶ó°í
ºÒ¸®´Â ±â¹ýÀÌ´Ù.
3. °í¼Ó Çà·Ä ¿¬»ê
- MMX ¸í·É¾îÀÇ Æ¯Â¡ÀÎ DSP ÀûÀÎ ¿ä¼Ò¸¦ ±Ø´ëȽÃŲ
ÀÀ¿ë¹ýÀÌ´Ù. Çà·ÄÀÇ ÁÖ
µÈ ¿¬»êÀº °öÇÑ µÚ ´õÇÏ´Â ¿¬»êÀÌ´Ù.
MMX ´Â ÀÌ·± ¿¬»ê¹ýÀ» Áö¿øÇÏ´Â ¸í
·É¾î°¡ ÀÖ´Ù.
4. 24bit Ä÷¯ Á¦¾î
- À§ÀÇ °í¼Ó Çà·Ä°ú ¾Æ·¡ÀÇ ¾ËÆÄºí·»µùÀ» °áÇÕÇÑ
°ÍÀ̶ó°í »ý°¢ÇÏ¸é µÈ´Ù.
24bit Æ®·çÄ÷¯¿¡ ´ëÇÑ À̹ÌÁö Á¶ÇÕ°ú
¾ËÆÄºí·»µùÀÌ °¡´ÉÇÏ´Ù.
5. ¾ËÆÄºí·»µùÀ» ÀÌ¿ëÇÑ À̹ÌÁö ºÐÇØ
- °í¼Ó Çà·Ä ¿¬»êÀ» ±×·¡ÇÈ ÂÊÀ¸·Î ÀÀ¿ëÇÑ °ÍÀÌ´Ù.
¾ËÆÄ ºí·»µùÀº ÁÖ·Î ¹Ý
Åõ¸í°ú ¿À¹ö·¦À¸·Î ´ëÇ¥µÇ´Âµ¥, ÀÌ°Í
¿ª½Ã °¢ RGB º°·Î °öÇÏ°í ´õÇÏ´Â ¿¬
»êÀÌ ÁÖ¸¦ ÀÌ·ç±â ¶§¹®¿¡ MMX ÀÇ ´É·ÂÀ»
½ÊºÐ ¹ßÈÖÇÒ ¼ö ÀÖ´Â ¿ä¼Ò´Ù.
ÀÌ·¸µí ¸ÖƼ¹Ìµð¾îÀÇ °í¼Ó Ãâ·Â¿¡ ÁÖ·Î ÀÌ¿ëµÇ¸ç MMX °¡
žÀçµÈ ÄÄÇ»Åͳª ÆæƼ¾ö
2 ÀÌ»óÀÇ ÄÄÇ»ÅÍ¿¡¼´Â ´ç¿¬È÷ »ç¿ëÇÒ ¼ö ÀÖ´Â ±â´ÉµéÀÔ´Ï´Ù.
±×·¸´Ù¸é ÀÌ·± MMX Äڵ带 µ¨ÆÄÀÌ¿¡¼ »ç¿ëÇÏ·Á¸é ¾î¶»°Ô
µÉ±î¿ä ? ÇÏÁö¸¸ ºÒÇà
ÇÏ°Ôµµ µ¨ÆÄÀÌ´Â MMX ¸í·É¾î ÀÚü¸¦ Áö¿øÇÏÁö ¾Ê½À´Ï´Ù.
±×·¸´Ù¸é ¿ì¸®ÀÇ »ç¸íÀº ¹«¾ùÀϱî¿ä ? ³×.. ±×·¸½À´Ï´Ù.
µ¨ÆÄÀÌ¿¡¼ MMX Äڵ带
»ç¿ëÇÒ ¼ö ÀÖ°Ô ¸¸µå´Â °ÍÀÔ´Ï´Ù.
µ¨ÆÄÀÌ°¡ Borland Pascal 6.0 À̾úÀ» ¶§ºÎÅÍ Áö¿øÇÏ´Â ¿¹¾à¾î°¡
ÀÖ½À´Ï´Ù. ¹Ù·Î
'asm' °ú 'assembler' ÀÔ´Ï´Ù.
º¸ÅëÀº begin .. end ¸¦ »ç¿ëÇÏÁö¸¸ °æ¿ì¿¡ µû¶ó¼´Â asm
... end ¸¦ »ç¿ë ÇÒ ¼ö
°¡ ÀÖ½À´Ï´Ù. ±×¸®°í,
procedure A;
begin
end;
´ë½Å¿¡
procedure A; Assembler;
asm
end;
¸¦ »ç¿ëÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ( µ¨ÆÄÀÌ¿¡¼´Â Assembler ¿¹¾à¾î¸¦
¾²Áö ¾Ê¾Æµµ µÇ´Â
°¡ º¾´Ï´Ù. )
¶ÇÇÑ,
procedure A;
begin
.......
asm
.......
end;
.......
end;
ó·³µµ »ç¿ëÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.
begin ... end ¿Í asm ... end ÀÇ Â÷ÀÌÁ¡À̶ó¸é, ´Ù
¾Æ½Ã°ÚÁö¸¸ ±× ¾È¿¡ ÆĽºÄ®
Äڵ尡 µé¾î°¡´ÂÁö ¾î¼Àºí·¯ Äڵ尡 µé¾î°¡´ÂÁöÀÇ Â÷ÀÌÀÔ´Ï´Ù.
MMX ÄÚµå´Â ÀÏ´Ü ¸ðµÎ ¾î¼Àºí¸®¾î ¸í·ÉÀÔ´Ï´Ù. ±×·¯´Ï
ÄÄÆÄÀÏ·¯ ÀÚü°¡ ±¸ÇöÇØ
ÁÖ´Â ÄÚµå ÀÌ¿Ü¿¡ ÇÁ·Î±×·¡¸Ó°¡ Á÷Á¢ MMX Äڵ带 ¸¸µé·Á¸é ¾î¼Àºí¸®¾î¸¦ »ç¿ë ÇÒ
¼ö ¹Û¿¡´Â ¾ø´Â °ÍÀÔ´Ï´Ù. ÇÏÁö¸¸ À§¿¡ ¸»¾¸ µå·ÈµíÀÌ µ¨ÆÄÀÌ´Â MMX ¾î¼Àºí¸®¾î
¸í·É¾î¸¦ Áö¿øÇÏÁö ¾Ê½À´Ï´Ù. ( µ¨ÆÄÀÌ 5 ´Â Áö¿øÇÏÁö ¾ÊÁö¸¸ C++ ºô´õ 4 ´Â
Áö
¿øÇÕ´Ï´Ù... )
¿¹Àü¿¡ Borland Pascal ÀÌ 32bit ·¹Áö½ºÅÍ¿Í 386 ÀÌ»óÀÇ
¸í·É¾î¸¦ Áö¿øÇÏÁö ¾Ê¾Ò
Áö¸¸ ±×¶§µµ ÈǸ¢ÇÏ°Ô ÆÄ¿ö À¯ÀúµéÀº ±× ±æÀ» ã¾Æ³Â´Âµ¥... ±×°ÍÀÌ ¹Ù·Î ±â°è¾î
Äڵ带 ¹Ù·Î ¾²´Â °ÍÀ̾ú½À´Ï´Ù.
( 32bit ·¹Áö½ºÅÍ´Â Ç×»ó 16bit ·¹Áö½ºÅÍÀÇ ¸í·É¾î ¾Õ¿¡ $66 À̳ª $67 À̶ó´Â Á¢
µÎ¾î ¹ÙÀÌÆ®°¡ Ç×»ó ºÙ¾ú±â ¶§¹®¿¡ ½ÇÁ¦ ÄÚµåÀÇ ¸í·É¾î ¾Õ¿¡ ÀÏÀÏÀÌ
Á¢µÎ¾î¸¦
ºÙ¿´½À´Ï´Ù. )
¾î¼Àºí¸®¾î ¸í·É¾î·Î 32bit ·¹Áö½ºÅ͸¦ Á¢±ÙÇϱâ À§Çؼ´Â
'mov' ¶ó´Â ¸í·É¾î¸¦
»ç¿ëÇß¾ú½À´Ï´Ù. ¿ª½Ã ¾Æ·¡¿Í °°ÀÌ ÇÏ¸é µ¨ÆÄÀÌ´Â ÈǸ¢ÇÏ°Ô ÄÄÆÄÀÏ ÇØ ³À´Ï´Ù.
asm
mov eax, [esi]
mov ecx, eax
end;
¾Æ±îµµ ¸»¾¸ µå·È´Ù½ÃÇÇ MMX ·¹Áö½ºÅÍ´Â 64bit ÀÔ´Ï´Ù. ±×¸®°í
64bit MMX ·¹Áö½º
ÅÍ¿¡ ´ëÇÑ ´ëÀÔ¿¬»êÀº ¾Æ·¡¿Í °°Àº ¾î¼Àºí¸®¾î·Î °¡´ÉÇÕ´Ï´Ù.
asm
movq mm1, [esi]
movq mm2, mm1
end;
ÇÏÁö¸¸ ºÒÇàÇÏ°Ôµµ µ¨ÆÄÀÌ´Â À§¿Í °°Àº ¸í·É¿¡´Â ¿¡·¯¸¦
³À´Ï´Ù. ( ±×·¸Áö¸¸ C++
ºô´õ4 ¿¡¼´Â Á¦´ë·Î ÄÄÆÄÀÏÀÌ µË´Ï´Ù. °°Àº º¼·£µå»ç ÄÄÆÄÀÏ·¯Àε¥.... -_-; )
±×·¸´Ù¸é ÀÌ ¾î¼Àºí¸®¾î¸¦ ±â°è¾î·Î ¹Ù²Ù¸é ¾î¶³±î¿ä ?
asm
db $0F,$6F,$0E // movq
mm1, [esi]
db $0F,$6F,$D1 // movq
mm2, mm1
end;
½ÇÁ¦ ¸¸µé¾îÁö´Â ÄÚµå´Â °°Áö¸¸ ÀÏ´Ü ÄÄÆÄÀÏ·¯¿¡¼
¿¡·¯¸¦ ¸¸µéÁö ¾Ê±â ¶§¹®¿¡
¿øÇÏ´Â ´ë·Î °á°ú¸¦ ³»°Ô µË´Ï´Ù. Á÷Á¢ ±â°è¾î ¹ÙÀÌÆ® ÄÚµå·Î ¾´ °ÍµéÀ» Ç®ÀÌ ÇÏ
ÀÚ¸é....
$0F,$6F,$0E
| | +----
mm1, [esi]
| +-------- movq
+------------ MMX ÄÚµå¶ó´Â Á¢µÎ¾î
$0F,$6F,$D1
| | +----
mm2, mm1
| +-------- movq
+------------ MMX ÄÚµå¶ó´Â Á¢µÎ¾î
ÀÌ·± ½ÄÀ¸·Î Ç®¾îÁö±â ¶§¹®¿¡ ¾à°£ÀÇ ¼öÀÛ¾÷À» °ÅÄ¡¸é ´©±¸³ª
MMX Äڵ带 µ¨ÆÄÀÌ
¿¡ »ðÀÔÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.
( À§ÀÇ ±â°è¾î´Â Intel »çÀÌÆ®¿¡¼ ÀڷḦ ±¸ÇÒ ¼ö ÀÖ½À´Ï´Ù. )
±×·±µ¥... Á¦°¡ ÀÌ·¯ÇÑ ±â°è¾î Ç®¾î¾²±â °Á¸¦ Çϱ⵵ Àü¿¡
ÀÌ·± ¼öÀÛ¾÷À» µµ¿Í
ÁÖ´Â µ¨ÆÄÀÌ ÀͽºÆÛÆ®°¡ ÀÌ¹Ì ³ª¿Í ÀÖ¾ú½À´Ï´Ù. MMXasm À̶ó´Â °ÍÀ¸·Î.. DelphiX
¸¦ ¸¸µç »ç¶÷ÀÇ È¨ÆäÀÌÁö¿¡¼ ±×°ÍÀ» ±¸ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.
http://www.ingjapan.ne.jp/hori/program.html
±×·¡¼ ±â°è¾î ÄÚµå Ç®¾î¾²±â º¸´Ù´Â MMX Äڵ带
Á÷Á¢ ¾²´Â ÂÊÀ¸·Î ÁßÁ¡À» µÑ
°èȹÀÔ´Ï´Ù. ( ÀϺ»ÀÎÀÌ ÀÌ·± °É ¸¸µå´Ï ºÐÇÑ ´À³¦ÀÔ´Ï´Ù¸¸... )
(*
Âü°í·Î °Å±â¿¡´Â Á¤¸» À¯¿ëÇÑ µ¨ÆÄÀÌ ÀÚ·á°¡ ¸¹½À´Ï´Ù.
1999/10/24 DelphiX
- Delphi 3,
4, 5éÄ DirectX «³«ó«Ý-«Í«ó«È
( µ¨ÆÄÀÌ
3,4,5 ¿ë DirectX ÄÞÆ÷³ÍÆ® )
1999/09/09 DirectX 6 Header
- Delphi 3,
4éÄ DirectX 6 «Ø«Ã«À-
( µ¨ÆÄÀÌ
3,4 ¿ë DirectX 6 Çì´õ )
1997/11/11 WPColorDIalog
- WordPad
«é«¤«¯ªÊ«««é-«À«¤«¢«í«°
( ¿öµåÆеå
°°Àº Ä÷¯ ´ÙÀ̾ó·Î±× )
1998/05/07 MemCheck
- «á«â«ê«ê-«¯üÞ-«Á«§«Ã««-
( ¸Þ¸ð¸®
´©¼ö üĿ )
1999/08/29 MMXasm
- Delphi 3,
4 ªÇ MMX Ù¤ÖµªÊªÉªòÞŪ¨ªëªèª¦ªËª¹ªë«¢«É«¤«ó
( µ¨ÆÄÀÌ
3,4 ¿¡¼ MMX ¸í·É µîÀ» »ç¿ëÇÏ°Ô ÇØÁÖ´Â ¾ÖµåÀÎ )
1998/08/17 «×«í«Ñ«Æ«£ï³öñ ( ÇÁ·ÎÆÛƼ °è»ê±â )
- «ª«Ö«¸«§«¯«È«¤«ó«¹«Ú«¯«¿ªÇøúãƪµªìªë
Integer úþªÎ«×«í«Ñ«Æ«£ªÇ
ãÒª¬ÞŪ¨ªëªèª¦ªËª¹ªë«×«í«Ñ«Æ«£«¨«Ç«£«¿
( ¿ÀºêÁ§Æ®
ÀνºÆåÅÍ¿¡¼ Ç¥½ÃµÇ´Â integer ÇüÀÇ ÇÁ·ÎÆÛƼ·Î,
½ÄÀÌ
»ç¿ëµÇµµ·Ï ÇÑ ÇÁ·ÎÆÛƼ ¿¡µðÅÍ )
*)
±×¸®°í MMX ¸í·É¾î ÀÚü¿¡ ´ëÇÑ °ÍÀº ÀÌ¹Ì ÇÏÀÌÅÚ¿¡ °Á°¡
ÀÖÀ¸¹Ç·Î ( ¼ÒÇÁÆ®¿þ
¾î µ¿È£È¸ °Á¶õ < go soft 21 > ) Áߺ¹ °Á´ ÇÇÇÏ°Ú½À´Ï´Ù.
---------------------------------------------------------------------------
copyright
SMgal 1999/11/04
#####################################################
---------------------------------------------------------------------------
µ¨ÆÄÀÌ¿¡¼
MMX Äڵ带 (2/4)
1. µ¨ÆÄÀÌ¿¡¼ MMX Äڵ带 »ç¿ëÇÏ´Â ¹ý
2. MMX üŷ°ú MMX ·¹Áö½ºÅ͸¦ ÀÌ¿ëÇÑ 8 bytes Àü¼Û
3.
MMX ÀÀ¿ë (1) - Å©·Î¸¶Å°
4. MMX ÀÀ¿ë (2) - °í¼Ó Çà·Ä
¿¬»ê
---------------------------------------------------------------------------
¾È³çÇϼ¼¿ä.. ¾È¿µ±âÀÔ´Ï´Ù.
À̹ø Àå¿¡¼´Â MMX ÀÇ ±âº» ¸í·É¾î ¼³¸íÀ» ½ÃÀÛÀ¸·Î MMX üŷ°ú MMX ·¹Áö½ºÅÍ »ç
¿ëÀ»
´Ù·ç°Ú½À´Ï´Ù.
MMX ¸í·É¾î´Â ¸ðµÎ 57 °³ÀÔ´Ï´Ù. ÇÏÁö¸¸ È®ÀåµÈ °ÍÀ» ´Ù ÇÕÃļ 57°³À̸ç, ½ÇÁ¦
·Î´Â ¸í·É¾î
¼¼Æ® °³³äÀ̹ǷΠ¾Æ·¡ÀÇ ¸í·É¾î°¡ ÀüºÎÀÔ´Ï´Ù.
1. ´ë¼ö ¿¬»ê
1) µ¡¼À - padd
2) »¬¼À - psub
3)
°ö¼À - pmul ( pmull / pmulh )
4) °ö¼À + µ¡¼À - pmadd
5) »ê¼ú ½¬ÇÁÆ®
- psra
6) ºñ±³ - pcmp??
2. º¯È¯
1) Æ÷È Ãà¼Ò - pack ( packss / packus )
2) È®Àå
- punpck ( punpckl / punpckh )
3. ³í¸® ¿¬»ê
1) AND - pand
2) AND NOT -
pandn
3) OR - por
4) Exclusive OR - pxor
5) ¿ÞÂÊ ½¬ÇÁÆ®
- psll
6) ¿À¸¥ÂÊ ½¬ÇÁÆ® - psrl
4. µ¥ÀÌÅÍ À̵¿
1) ·¹Áö½ºÅͳ¢¸® - mov ( movd / movq )
2) ¸Þ¸ð¸®·ÎºÎÅÍ - mov (
movd / movq )
3) ¸Þ¸ð¸®¿¡ - mov ( movd / movq )
5. ±âŸ
1) EMMS - emms
MMX ¸í·É¾î´Â ³ª¸§´ë·Î Á¶¾î±ÔÄ¢ÀÌ ÀÖ½À´Ï´Ù. À§ÀÇ ¸í·É¾îµéÀ» º¸½Ã¸é ¾Æ½Ã°ÚÁö
¸¸ mov ¿Í emms ¸¦
Á¦¿ÜÇÏ°í´Â ¸ðµÎ p ·Î ½ÃÀÛÇÕ´Ï´Ù.
¾Õ¿¡ ºÙÀº 'p' ´Â Á¢µÎ¾î·Î 'packed' ÀÇ ¾àÀÚÀÔ´Ï´Ù. ±× ´ÙÀ½¿¡´Â ¿ø·¡ÀÇ ¸í·É¾î
¸¦ ÀǹÌÇÏ´Â
´Ü¾î°¡ ¿À°í ¸¶Áö¸·¿¡´Â Á¢¹Ì¾î°¡ ºÙ´Âµ¥ 'us' ( ºÎÈ£¾ø´Â Æ÷ȸðµå
) ¿Í 's' ( ºÎÈ£ ÀÖ´Â Æ÷ȸðµå ) °¡ ºÙ½À´Ï´Ù. ±×¸®°í
¸¶Áö¸·¿¡´Â °ü·ÃµÇ´Â µ¥
ÀÌÅÍÇü¿¡ µû¶ó 'b', 'w', 'd', 'q' °¡ ºÙ½À´Ï´Ù.
< MMX Á¶¾î ±ÔÄ¢ ¿¹ >
1. paddsb - Æ÷ȸðµåÀÇ ºÎÈ£ÀÖ´Â byte ´ÜÀ§ÀÇ µ¡¼À
p add s b
| | | +------- byte
´ÜÀ§
| | +--------- signed ( ºÎÈ£ÀÖÀ½ )
| +------------ ´õÇϱâ
¸í·É
+--------------- packed
2. movq - 8 ¹ÙÀÌÆ® Àü¼Û
mov q
| +----------- 64 bit
´ÜÀ§
+-------------- Àü¼Û¸í·É
3. pcmpeqw - word ´ÜÀ§·Î °°ÀºÁö ºñ±³
p cmp eq w
| | | +------ word
´ÜÀ§
| | +--------- °°À» Á¶°Ç ( gt °¡ ºÙÀ¸¸é Ŭ ¶§°¡ µÈ´Ù. )
|
+------------ ºñ±³ ¸í·É
+--------------- packed
ÀÌ·± ½ÄÀ¸·Î Á¶ÇյǸç, Á¶ÇÕÀÌ °¡´ÉÇÑ°¡´Â ¸Å´º¾óÀÇ ¸í·É¾î ¸ñ·ÏÀ» º¸½Ã¸é µË´Ï
´Ù. ±×¸®°í ¸í·É¾î ÀÚü¿¡
´ëÇÑ °Á´ '¼ÒÇÁÆ®¿þ¾î µ¿È£È¸' ( go soft )ÀÇ °ÁÂ
¸¦ Âü°í ÇÏ½Ã¸é µË´Ï´Ù.
---------------------------------------------------------------------------
<< MMX üũ¹ý >>
ÀÏ´Ü MMX ¸¦ »ç¿ëÇϱâ À§Çؼ´Â MMX ¸¦ Áö¿øÇÏ´Â CPU °¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù. ±× ¿©ºÎ
¸¦ ¾Ë±â À§Çؼ
¾Æ·¡¿Í °°Àº ¹æ¹ýÀ¸·Î ÇÔ¼ö¸¦ ¸¸µé¾î üũÇÏ½Ã¸é µË´Ï´Ù.
( ¼Ò½ºÀÇ ÁÖ¼®¿¡ ¼³¸íÀ» ÇØ ³õ¾ÒÀ¸´Ï ±×°É Âü°í Çϼ¼¿ä... )
| function CheckMMX : Boolean;
| var
|
_EDX : DWORD;
| begin
| CheckMMX := FALSE;
|
try
| asm
| mov eax,
1 // eax¿¡ 1À» ³ÖÀ¸¸é CPUID ¿¡¼ '¹öÀüÁ¤º¸'¸¦ µ¹
| //
·ÁÁØ´Ù.
| db $0F,$A2 /// CPUID
| //
CPU ÀÇ Á¤º¸¸¦ ¾Ë¾Æ¿À´Â ¸í·É
| mov _EDX, edx // edx°¡ ¸®ÅÏ°ª
|
end;
| except
| Exit;
// ÇÁ·Î¼¼¼°¡ CPUID ¸í·ÉÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù.
| // Áï
CPUID ¸í·É¾î°¡ ³ª¿À±â ÀÌÀüÀÇ CPU ´Ù.
| end;
| // MMX ¸¦
Áö¿øÇϸé 23¹ø ºñÆ®°¡ set µÈ´Ù
| if (_EDX and $800000) > 0 then begin
|
try
| asm
| db
$0F,$77 /// emms
| // MMX ¸í·É¾î¸¦ Çϳª ½á º»´Ù
|
end;
| CheckMMX :=
TRUE;
| except
| Exit; // ÇÁ·Î¼¼¼°¡ MMX ¸í·ÉÀ» Áö¿øÇÏÁö
¾Ê´Â´Ù.
| end;
| end;
| end;
¹æ½ÄÀ» ¼³¸íÇϸé,
1. 'CPUID' ¸í·ÉÀ» »ç¿ëÇؼ CPU ¹öÀü Á¤º¸¸¦ ¾Ë¾Æ ¿Â´Ù.
¸¸¾à ½ÇÆÐÇßÀ¸¸é ÀÌ
CPU ´Â 'CPUID' ¸í·ÉÀ» Áö¿øÇÏÁö ¾Ê´Â ÀÌÀü CPU ÀÌ´Ù.
2. 'CPUID' ¸í·É ÈÄ¿¡ edx ·¹Áö½ºÅÍ¿¡ ¸®ÅÏ °ªÀÌ µ¹¾Æ¿Â´Ù. ±×Áß 23¹ø
ºñÆ®°¡
¼¼Æ®µÇ¸é MMX ¸¦ Áö¿øÇÏ´Â CPU ÀÌ´Ù.
3. ½ÇÁ¦·Î MMX ¸í·ÉÀÎ 'emms' ¸¦ ³Ö¾î º»´Ù. ÀÌ ¸í·ÉÀÌ ½ÇÆÐÇÏ¸é ±× CPU
´Â
MMX ¸í·É¾î¸¦ Áö¿øÇÏÁö¾Ê´Â °ÍÀÌ´Ù.
< Âü°í >
1 Àå¿¡¼ ¸»¾¸ µå·ÈµíÀÌ MMX ´Â FPU ÀÇ ½ºÅà ÇÁ·¹ÀÓÀ» Àý´ë ¹øÁö·Î »ç¿ëÇÑ ·¹
Áö½ºÅ͸¦
»ç¿ëÇÑ´Ù°í Çß½À´Ï´Ù. Áï ±×°ÍÀº FPU ¿Í MMX ´Â µ¿½Ã¿¡ »ç¿ëÇÒ ¼ö
¾ø´Ù´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù.
±×·¡¼ MMX ·¹Áö½ºÅ͸¦ »ç¿ëÇÏ°í ³ª¸é Ç×»ó FPU ½ºÅà ÇÁ·¹ÀÓÀ» ºñ¿öÁÖ´Â ¸í·É
¾î¸¦ Áà¾ß
Çϴµ¥ ±× ¸í·É¾î°¡ 'emms' ( Empty MultiMedia State ) ÀÔ´Ï´Ù.
( ¹°·Ð FPU ÀÇ ½Ç¼ö ¿¬»êÀ» »ç¿ëÇÏ´Â °÷ÀÌ
ÀÖ±â Àü¿¡ »ç¿ëÇϱ⸸ ÇÏ¸é µÇ´Âµ¥,
¸¸¾à FPU ¸¦ ÀÌ¿ëÇÑ ½Ç¼ö¿¬»êÀ» ÇÏÁö¾Ê°í MMX Äڵ忡 ÀçÁøÀÔÇÑ´Ù¸é »ç¿ëÇÒ ÇÊ
¿ä°¡
¾ø½À´Ï´Ù. 'emms' ¸í·É¾îÀÇ Å¬·°¼ö°¡ ¸¹±â ¶§¹®ÀÔ´Ï´Ù. )
---------------------------------------------------------------------------
<< MMX ·¹Áö½ºÅ͸¦ ÀÌ¿ëÇÑ 8 bytes Àü¼Û >>
µ¨ÆÄÀÌ¿¡´Â Move() ¶ó´Â ¸í·É¾î°¡ Àִµ¥ 4 Bytes °í¼Ó Àü¼ÛÀ» ÇØÁÖ´Â ¸í·É¾î·Î
»ó´çÇÑ ÆÛÆ÷¸Õ½º¸¦
°¡Áö°í ÀÖ½À´Ï´Ù. 4 bytes Àü¼ÛÀÎ ÀÌÀ¯´Â 386 À̻󿡼 Áö¿ø
ÇÏ´Â 32 ºñÆ® ·¹Áö½ºÅ͸¦ »ç¿ëÇϱ⠶§¹®ÀÔ´Ï´Ù.
( movsd
¸í·É¾î·Î ÃÖ´ë 32 bit Àü¼Û±îÁö °¡´É. )
ÇÏÁö¸¸ ¾Õ¿¡µµ ¸»¾¸ µå·ÈµíÀÌ MMX ·¹Áö½ºÅÍ´Â ¸ðµÎ 64 bit ·¹Áö½ºÅÍÀÔ´Ï´Ù. Çѹø
¿¡ 8 bytes ¾¿
µ¥ÀÌÅ͸¦ Àü¼ÛÇÒ ¼ö ÀÖ´Ù´Â ¸»Àε¥..... À̹ø¿¡´Â MMX ·¹Áö½ºÅ͸¦
ÀÌ¿ëÇؼ 8 bytes Àü¼Û ÇÔ¼ö¸¦ ¸¸µé¾î
º¸°Ú½À´Ï´Ù.
( ¿ª½Ã À̹ø¿¡µµ ¼Ò½ºÀÇ ÁÖ¼®¿¡ ¼³¸íÀ» ÇØ ³õ¾ÒÀ¸´Ï ±×°É Âü°íÇϼ¼¿ä... )
| procedure MMXMove(const Sour; var Dest; Count :
integer); Assembler
| asm
|
| push esi // esi¸¦ ½ºÅÿ¡
³Ö´Â´Ù
| push edi // edi¸¦ ½ºÅÿ¡ ³Ö´Â´Ù
|
| mov esi, eax
// SourÀÇ Æ÷ÀÎÅÍ
| mov edi, edx // DestÀÇ Æ÷ÀÎÅÍ
|
// Count´Â óÀ½ºÎÅÍ ecx¿¡ µé¾î°¡ ÀÖ´Ù.
| shr ecx, 3
// Count div 8
|
| @@LOOP: // ALIGN 16 ÇÊ¿ä....
|
db $0F,$6F,$06 /// movq mm0, [esi]
| //
esi°¡ °¡¸®Å°´Â ¹øÁö·ÎºÎÅÍ 8¹ÙÀÌÆ® ²¨³½´Ù
| db $0F,$7F,$07 /// movq [edi], mm0
|
// edi°¡ °¡¸®Å°´Â ¹øÁö¿¡ 8¹ÙÀÌÆ® ¾´´Ù
| add esi, 8 //
esi ÁÖ¼Ò 8¹ÙÀÌÆ® Áõ°¡
| add edi, 8 // edi ÁÖ¼Ò 8¹ÙÀÌÆ® Áõ°¡
| loop
@@LOOP // ecx ¸¸Å ¹Ýº¹
|
| pop edi // edi¸¦ ½ºÅÿ¡¼
²¨³½´Ù
| pop esi // esi¸¦ ½ºÅÿ¡¼ ²¨³½´Ù
|
| end;
±×Àú ÆòÀÌÇÑ Àü¼Û ÇÔ¼ö¶û °°½À´Ï´Ù. ´Ü Count´Â 8 ÀÇ ¹è¼ö°¡ µÇ¾î¾ß Á¦´ë·Î µ¿ÀÛ
ÇÒ °Ì´Ï´Ù. ±×
ºÎºÐÀº ÃæºÐÈ÷ °³·®ÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù.
( shr ¿¡¼ ij¸®°¡ ¹ß»ýÇÒ ¶§¸¶´Ù movsb, movsw, movsd ¸¦ ÇÏ¸é µË´Ï´Ù.
)
±×·±µ¥, 8 bytes ¾¿ Àü¼ÛÇϱ⠶§¹®¿¡ 4 bytes ¾¿ Àü¼ÛÇÏ´Â Move ¸í·É¾î º¸´Ù 2¹è
ºü¸¦±î¿ä
? ¾Æ½±°Ôµµ... ´äÀº '°ÅÀÇ ºñ½ÁÇÏ´Ù' ÀÔ´Ï´Ù.
80386 ÀÌ»óÀÇ CPU ÃÖÀûÈ°¡ Ç×»ó ±×·¸µí MMX ¿¡¼µµ 8 bytes Àü¼ÛÀ» ÇÒ ¶§ ±× IP
(
Instruction Pointer )°¡ ¸Þ¸ð¸®»óÀÇ Àý´ë¹øÁö°¡ 8ÀÇ ¹è¼ö°¡ µÇ´Â °÷¿¡ À§Ä¡ÇØ
¾ß Çϴµ¥, µ¨ÆÄÀÌÀÇ ÀζóÀÎ ¾î¼Àºí·¯¿¡¼´Â ±×
±â´ÉÀ» Á¦´ë·Î Áö¿øÇÏÁö ¾Ê±â ¶§
¹®ÀÔ´Ï´Ù.
¿ø·¡´ë·Î¶ó¸é 'movq' ¸í·É ¾Õ¿¡´Ù°¡ 16 ¹ÙÀÌÆ® ´ÜÀ§·Î ÁÖ¼Ò¸¦ Á¤·ÄÇØÁÖ´Â Áö½ÃÀÚ
ÀÎ 'ALIGN 16'
À» ½áÁà¾ß ÇÕ´Ï´Ù. ( C++ Builder´Â µÇ´Âµ¥ ¿Ö µ¨ÆÄÀÌ´Â Áö¿øÇÏÁö
¾ÊÀ»±î¿ä.. T_T; )
movq ¸í·É¿¡¼ ÁÖÀÇÇÒ Á¡ÀÌÀִµ¥, ¾Æ·¡¿Í °°Àº °ÍµéÀº ¸ðµÎ ¿¡·¯¸¦ ³À´Ï´Ù.
1. movq mm0, eax
- ÀÌ °æ¿ì¿¡´Â »çÀÌÁî°¡ ´Ù¸£±â ¶§¹®Àε¥ MMX ·¹Áö½ºÅ͸¦ Á¦¿ÜÇÏ°í´Â
64
bit ·¹Áö½ºÅÍ°¡ ¾ø±â ¶§¹®¿¡ Ç×»ó 'movq mm0, [esi]' ó·³ °£Á¢ ÁÖ¼Ò ¹æ
½ÄÀ¸·Î
»çÀÌÁ ¸ÂÃçÁà¾ß ÇÕ´Ï´Ù.
2. movq mm0, 1
- ÀÌ °æ¿ì¿¡´Â »ó¼ö °ªÀ» ¹Ù·Î »ç¿ëÇߴµ¥.. ÀÌ°Í ¿ª½Ã Çã¿ëÇÏÁö ¾Ê½À´Ï´Ù.
ÀÌ·²
¶§´Â ¾Æ·¡Ã³·³ ÇØ¾ß ÇÕ´Ï´Ù.
pxor mm0, mm0
mov eax, 1
movd
mm0, eax
±×¸®°í ¿ª½Ã MMX µµ ÆæƼ¾öÀÇ ÃÖÀûÈ ±ÔÄ¢À» µû¸£´Âµ¥...
movd mm0, [esi] // mm0 ·¹Áö½ºÅÍÀÇ ÇÏÀ§ 4 ¹ÙÀÌÆ® ¾²±â
movq
mm1, mm0 // mm0 ·¹Áö½ºÅÍ Àüü Àбâ
ó·³ ·¹Áö½ºÅÍÀÇ ÀϺκÐÀ» '¾²±â' ÇÑ ÈÄ¿¡ ·¹Áö½ºÅÍ Àüü¸¦ 'ÀаÔ' µÇ¸é stallÀÌ
¹ß»ýÇÏ¿© Á¦ ¼Óµµ¸¦
³»Áö ¸øÇÕ´Ï´Ù. ÀÌ·² ¶§´Â ÀÌ·¸°Ô ÇØÁÖ¸é µË´Ï´Ù.
pxor mm0, mm0 // psubb mm0, mm0 µµ °°Àº È¿°ú
movd
mm0, [esi]
movq mm1, mm0
---------------------------------------------------------------------------
<< MMX ·¹Áö½ºÅ͸¦ »ç¿ëÇÑ ÆÁµé >
1. mm0 ·¹Áö½ºÅ͸¦ 0·Î ¸¸µé±â
pxor mm0, mm0
2. mm0 ÀÇ ¸ðµç bit¸¦ 1 ·Î ¸¸µé±â
pcmpeq mm0, mm0
3. mm0 ÀÇ 8 °³ÀÇ ¹ÙÀÌÆ®¸¦ 1 ·Î ÃʱâÈ Çϱâ
pxor mm0, mm0
pcmpeq mm1, mm1
psubb mm0,
mm1
4. mm0 ÀÇ °¢ word ´ÜÀ§·Î º¸È£ÀÖ´Â 2^(n-1) À» ±¸Çϱâ
pcmpeq mm0, mm0
psrlw mm0, (16 - n)
5. mm0 ÀÇ °¢ word ´ÜÀ§·Î º¸È£ÀÖ´Â -2^(n-1) À» ±¸Çϱâ
pcmpeg mm0, mm0
psrlw mm0, n
6. mm0 ÀÇ Àý´ë °ªÀ» mm1 ¿¡ ³Ö±â
movq mm1, mm0
psraw mm0, 15
pxor mm0,
mm1
psubs mm1, mm0
7. ºÎÈ£¾ø´Â °ª mm0 °ú mm1 ÀÇ Àý´ë Â÷¸¦ ±¸Çϱâ
movq mm2, mm0
psubusb mm0, mm1
psubusb mm1,
mm2
por mm0, mm1
8. ºÎÈ£ÀÖ´Â °ª mm0 °ú mm1 ÀÇ Àý´ë Â÷¸¦ ±¸Çϱâ
movq mm2, mm0
pcmpgtw mm0, mm1
movq mm4,
mm2
pxor mm2, mm1
pand mm2, mm0
movq mm3,
mm2
pxor mm4, mm2
pxor mm1, mm3
psubw mm1,
mm4
9. º¹¼Ò¼öÀÇ °öÀ» ±¸Çϱâ
( mm0 : ÇÏÀ§ 4 ¹ÙÀÌÆ®Áß, º¹¼Ò¼öÀÇ ½Ç¼öºÎ°¡ »óÀ§ 2 ¹ÙÀÌÆ®¿¡,
Çã¼öºÎ°¡ ÇÏ
À§ 2 ¹ÙÀÌÆ®¿¡ µé¾î ÀÖ´Ù.
mm1 : º¹¼Ò °è¼ö°¡ 2 ¹ÙÀÌÆ®¾¿ [ Re -Im Im Re
] Çü½ÄÀ¸·Î µé¾î°£´Ù. )
punpckldq mm0, mm0 // ÇÏÀ§ 4 ¹ÙÀÌÆ®¸¦ »óÀ§ 4 ¹ÙÀÌÆ®·Î È®Àå
º¹»çÇÑ´Ù.
pmaddwd mm0, mm1 // (m0.r*m1.r - m0.i*m1.i)(m0.r*m1.i -
m0.i*m1.r)
( °á°ú´Â mm0 ¿¡ »óÀ§ 4 ¹ÙÀÌÆ®°¡ ½Ç¼öºÎ, ÇÏÀ§ 4 ¹ÙÀÌÆ®°¡ Çã¼öºÎ·Î µÈ´Ù. )
---------------------------------------------------------------------------
copyright
SMgal 1999/11/04
#####################################################
---------------------------------------------------------------------------
µ¨ÆÄÀÌ¿¡¼
MMX Äڵ带 (3/4)
1. µ¨ÆÄÀÌ¿¡¼ MMX Äڵ带 »ç¿ëÇÏ´Â ¹ý
2. MMX üŷ°ú MMX ·¹Áö½ºÅ͸¦ ÀÌ¿ëÇÑ 8
bytes Àü¼Û
3. MMX ÀÀ¿ë (1) -
Å©·Î¸¶Å°
4. MMX ÀÀ¿ë (2) - °í¼Ó Çà·Ä
¿¬»ê
---------------------------------------------------------------------------
¾È³çÇϼ¼¿ä.. ¾È¿µ±âÀÔ´Ï´Ù.
À̹ø ÀåºÎÅÍ´Â MMX ÀÀ¿ëÀ¸·Î µé¾î°¡¼ µ¨ÆÄÀÌ¿¡¼ Á÷Á¢ ±¸ÇöÀ» Çغ¸´Â Â÷·ÊÀÔ´Ï
´Ù. À̹ø¿¡ ÇÏ°íÀÚ ÇÏ´Â
°ÍÀº Å©·Î¸¶Å°Àε¥, 1 Àå¿¡¼µµ ¸»¾¸ µå·ÈµíÀÌ ¿µÈ¿¡¼
ºí·ç ½ºÅ©¸°°ú °°Àº °³³äÀÌ¸ç °ÔÀÓÀ¸·Î Àû¿ëµÇ¸é ½ºÇÁ¶óÀÌÆ®°¡ µÈ´Ù°í
Çß½À´Ï´Ù.
¿¹Àü¿¡´Â DX (Direct X) »ó¿¡¼ ½ºÇÁ¶óÀÌÆ®¸¦ Âï±â À§¾È ¾Ë°í¸®ÁòÀº ÀÌ·¸½À´Ï´Ù.
ÈçÈ÷ DX 256 Ä÷¯ ¸ðµå¿¡¼ Ç¥¸éÀ» LockÇÏ¿© ±×°÷¿¡ ½ºÇÁ¶óÀÌÆ®¸¦ ¾²°íÀÚ ÇÑ´Ù¸é
¾ÐÃà ½ºÇÁ¶óÀÌÆ®¸¦
¾²´øÁö ¾Æ´Ï¸é Á÷Á¢ 1 byte ¾¿ Åõ¸í»öÀÎÁö ¾Æ´ÑÁö¸¦ üũÇØ°¡
¸ç Á¡ ´ÜÀ§ ¿¬»êÀ» ÇÏ´Â °ÍÀÌ º¸ÅëÀ̾ú½À´Ï´Ù. ( Åõ¸í»öÀ̶ó´Â °ÍÀº ºí·ç
½ºÅ©¸°
À϶§´Â Ǫ¸¥»ö (0,0,255)ÀÔ´Ï´Ù. )
¿¹Àü °°À¸¸é ½ºÇÁ¶óÀÌÆ®¸¦ Âï±â À§ÇØ ¾Æ·¡¿Í °°ÀÌ Åõ¸í»ö ÆǺ°À» Çß½À´Ï´Ù.
mov ecx, Size.X
LOOP_X:
cmp ptr byte [esi],
TRANSPARENCY_COLOR
je SKIP
stosb
SKIP:
inc esi
loop
LOOP_X
ÀÌ·± ½ÄÀÌ µÇ¾î¼ Á¡ÀÇ ¼ö¸¸Å 'cmp'¸¦ Çؾ߸¸ Çß¾ú½À´Ï´Ù.
ÇÏÁö¸¸ Áö±Ý ¿ì¸®°¡ ÇÏ°í ÀÖ´Â MMX ÀÇ °æ¿ì¿¡´Â Åõ¸í»öÀÎÁö ÆǺ°Á¶Â÷ ÇÏÁö¾Ê°í¼
µµ 8 °³ÀÇ ½ºÇÁ¶óÀÌÆ®
Çȼ¿À» µ¿½Ã¿¡ Àü¼ÛÇÏ´Â ¹æ¹ýÀ» »ç¿ëÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.
ÀÏ´Ü ¿¹Àüó·³ Åõ¸í»öÀÎÁö ¾Æ´ÑÁö ÆǺ°ÇÏ´Â ºÎºÐÀÌ ¾ø¾îÁ³À¸¹Ç·Î 'je', 'jz' ¶ó
´Â ¸í·É¾î·Î ÀÎÇÑ
ºÐ±âÀÇ ºÎÇϸ¦ ÁÙÀÌ°í 1 byte ¾¿ ÇÏ´ø Àü¼ÛÀ» Çѹø¿¡ 8 bytes
¾¿ °¡´ÉÇÏ°Ô ÇØÁشٴ °Í¿¡ ±× ÀÇÀǸ¦ µÑ ¼ö°¡
ÀÖ½À´Ï´Ù.
Ç®¼Ò½º¿¡ µé¾î°¡±â Àü¿¡ ÇÙ½É ºÎºÐ¸¸ Ãß·Áº¸¸é ´ÙÀ½°ú °°½À´Ï´Ù.
---------------------------------------------------------------------------
>> ÀüÁ¦...
esi : ½ºÇÁ¶óÀÌÆ® µ¥ÀÌÅÍ
edi : Lock µÈ Direct Draw
Surface ÀÇ ¹Ì¸® °è»êµÈ ÁÖ¼Ò
pMask : char pMask[8] ·Î Á¤ÀǵǾî ÀÖÀ¸¸ç 8°³ÀÇ byte °¡ ¸ðµÎ
Åõ¸í»ö
Index ·Î ä¿öÁ® ÀÖ´Ù.
>> ÄÚµå
mov ebx, pMask
movq mm4, [ebx] //
mm4 ¿¡ Åõ¸í»ö ¹øÈ£¸¦ ³Ö´Â´Ù
mov ecx, Size.X // Size.X ¿¡´Â X ½ºÇÁ¶óÀÌÆ®ÀÇ x
»çÀÌÁî°¡ µé¾î°¨
shr ecx, 3 // µ¿½Ã¿¡ 8°³ÀÇ Á¡À» ¿¬»êÇϹǷÎ
LOOP_X:
movq mm0, [edi] // mm0 ˼
Destination
movq mm1, [esi] // mm1 ˼ Source
movq mm2, mm1
// mm2 ¿¡ Source µ¥ÀÌÅ͸¦ º¹»ç
pcmpeqb mm2, mm4 // mm2 ¿¡ Åõ¸í»ö¿¡ µû¸¥ ¸¶½ºÅ©¸¦
»ý¼º
movq mm3, mm2 // mm3 ¿¡ ¸¶½ºÅ©¸¦ Çϳª ´õº¹»ç
pandn mm2, mm1 //
Source ½ºÇÁ¶óÀÌÆ® ºÎºÐ¸¸ º¹»ç
pand mm3, mm0 // Destination ÀÇ °»½ÅµÉ ºÎºÐ¸¸
Á¦°Å
por mm2, mm3 // Source ¿Í Destination À» °áÇÕ
movq [edi],
mm2 // Destination ¿¡ °á°ú¸¦ ¾¸
add esi, 8 // Çѹø¿¡ 8 bytes ¸¦ µ¿½Ã¿¡
ó¸®ÇßÀ¸¹Ç·Î
add edi, 8
loop LOOP_X
>> ÄÚµåºÐ¼®
°¡Àå ÄÚ¾î ºÎºÐ¸¸ º¸¸é ´ÙÀ½°ú °°½À´Ï´Ù.
- movq mm0, [edi]
mm0 ·¹Áö½ºÅÍ¿¡ edi °¡ °¡¸®Å°´Â µ¥ÀÌÅÍÁß 8 bytes ¸¦ °¡Á® ¿É´Ï´Ù.
¿¹> mm0 => 43 2D 1A E4 54 78 20 CA
- movq mm1, [esi]
mm0 ·¹Áö½ºÅÍ¿¡ esi °¡ °¡¸®Å°´Â µ¥ÀÌÅÍÁß 8 bytes ¸¦ °¡Á® ¿É´Ï´Ù.
¿¹> mm2 => 10 2F F8 80 80 3D 80 CE
- movq mm2, mm1
mm2 ·¹Áö½ºÅÍ¿¡ mm1 ·¹Áö½ºÅÍÀÇ ³»¿ëÀ» Ä«ÇÇÇÕ´Ï´Ù.
¼Ò½º µ¥ÀÌÅÍ¿¡¼ Åõ¸í»ö¿¡ ´ëÇÑ
Á¤º¸¸¦ ¾ò±â À§ÇؼÀÔ´Ï´Ù.
- pcmpeqb mm2, mm4
À§¿¡ º¸½Ã¸é ÀÌ¹Ì mm4¿¡´Â 1byte Â¥¸® ¸¶½ºÅ©·Î 8bytes °¡ ä¿öÁ®
ÀÖ½À´Ï´Ù.
'pcmpeqb' ¸í·ÉÀº byte ´ÜÀ§·Î 8 °³ÀÇ °¢ byte °¡ °°ÀºÁö °°Áö ¾ÊÀºÁö¸¦ ÆÇ
º°ÇÕ´Ï´Ù.
±×·¡¼ ¸¸¾à °ªÀÌ °°´Ù¸é ±× byte´Â ¸ðµÎ 1·Î ä¿ì°í ±×·¸Áö¾Ê´Ù
¸é ¸ðµÎ 0À¸·Î ä¿ó´Ï´Ù/
¿¹> mm2 => 10 2F F8 80 80 3D 80
CE
mm4 => 80 80 80 80 80 80 80 80 ( Åõ¸í»öÀÌ 0x80 À϶§
)
°á°ú mm2 => 00 00 00 FF FF 00 FF 00
- movq mm3, mm2
ÀÌ·¸°Ô ¸¸µé¾îÁø ¸¶½ºÅ©¸¦ mm3 ¿¡ Çϳª ´õ º¹»çÇÕ´Ï´Ù.
- pandn mm2, mm1 // Source ½ºÇÁ¶óÀÌÆ® ºÎºÐ¸¸ º¹»ç
'pandn' ¸í·É¾î´Â mm2 ¸¦ ¹ÝÀüÇÑÈÄ ±× mm2 ¿Í mm1 ¸¦ and Çؼ mm2
·Î
³Ö½À´Ï´Ù.
¿¹> mm2 => 00 00 00 FF FF 00 FF
00
mm2 => FF FF FF 00 00 FF 00 FF ( ¹ÝÀü
)
mm1 => 10 2F F8 80 80 3D80 CE
°á°ú mm2 => 10 2F F8 00 00 3D 00 CE ( mm2 & mm1 )
°á°ú¿¡¼ º¸½Ã¸é ¾Æ½Ã°ÚÁö¸¸ ¿ø ½ºÇÁ¶óÀÌÆ® µ¥ÀÌÅÍ¿¡¼ Åõ¸í»ö ºÎºÐ¸¸ '00'
ÀÌ µÇ¾ú´Ù´Â
°ÍÀ» ¾Ë °ÍÀÔ´Ï´Ù.
- pand mm3, mm0
'pand' ¸í·É¾î´Â mm3 ¿Í mm0 ¸¦ and ¿¬»êÇÏ¿© mm3 ¿¡ ³Ö½À´Ï´Ù.
¿¹> mm3 => 00 00 00 FF FF 00 FF
00
mm0 => 43 2D 1A E4 54 78 20 CA
°á°ú mm3 => 00 00 00 E4 54 00 20 00
- por mm2, mm3
'por' ¸í·É¾î´Â mm2 ¿Í mm3 ¸¦ or ¿¬»êÇÏ¿© mm2 ¿¡ ³Ö½À´Ï´Ù.
¿¹> mm3 => 00 00 00 E4 54 00 20
00
mm2 => 10 2F F8 00 00 3D 00 CE
°á°ú mm2 => 10 2F F8 E4 54 3D 20 CE
- movq [edi], mm2
edi °¡ °¡¸®Å°´Â ÁÖ¼Ò¿¡ mm2 ÀÇ ³»¿ë 8 bytes ¸¦ ¾´´Ù.
ÀÌ·¸°Ô Çؼ °á±¹Àº ¾Æ·¡ÀÇ °á°ú¸¦ ³À´Ï´Ù.
[edi] => 43 2D 1A E4 54 78 20 CA ( ¹è°æ
)
[esi] => 10 2F F8 80 80 3D 80 CE ( ½ºÇÁ¶óÀÌÆ®, Åõ¸í»ö 80
)
[edi] => 10 2F F8 E4 54 3D 20
CE
~~ ~~ ~~ ( Åõ¸í»öÀ̾ú´ø
ºÎºÐ¸¸
¹è°æÀ¸·Î ġȯ
)
---------------------------------------------------------------------------
Á¦ ³ª¸§´ë·Î´Â ¿½ÉÈ÷ ¼³¸íÀ» µå¸°´Ù°í Çϱä Çߴµ¥ Á¦´ë·Î ÀÌÇØ°¡ µÇ¼Ì´ÂÁö
¸ð
¸£°Ú³×¿ä...
±×¸®°í Á¦°¡ 8 bit Ä÷¯ ¸ðµå¿¡ ´ëÇؼ¸¸ ¼³¸íÇߴµ¥, 16bit ¸ðµå³ª Æ®·çÄ÷¯ ¸ð
µå¿¡¼µµ ¶È°°ÀÌ
Àû¿ëµË´Ï´Ù. ´Ü 'pcmpeqb' ¶ó´Â ¸í·É¾î°¡ 2bytes, 4bytes ¾¿ ºñ
±³ÇÏ´Â 'pcmpeqw', 'pcmpeqd' ·Î
¼öÁ¤ÇÏ½Ã¸é µË´Ï´Ù.
±×¸®°í ¾Æ·¡´Â ¹æ±Ý Çغ» ÄÚµåÀÇ µ¨ÆÄÀÌ ¼Ò½ºÀÔ´Ï´Ù.
( ¸ðµç Ç® ¼Ò½º¿Í ½ÇÇà ÆÄÀÏÀº °ÔÀÓ Á¦ÀÛ µ¿È£È¸
ÀÚ·á½Ç¿¡¼ ( go gma 5
)
=========================================================================
5366
k2gma3 mmx_spr.zip 192K 156 SOUR MMX ¹«ºÐ±â SPRITE Ãâ·Â
¼Ò½º&
=========================================================================
ˤ˂
ÀڷḦ ¹ÞÀ¸½Ã¸é µË´Ï´Ù.
---------------------------------------------------------------------------
(
¿©±â´Â °¢°¢ ¼Çǽº¿¡¼ Á÷Á¢ ÀоúÁö¸¸ ½ÇÁ¦·Ð ½ºÇÁ¶óÀÌÆ®°¡ À¯Àú µ¥ÀÌÅÍÇüÀ¸
·Î µé¾î°¡°Ô µÇ°ÚÁÒ... ( ÀÌ°Ç Å×½ºÆ®¶ó¼ Direct
Draw Surface »ç¿ëÇßÀ½.. ))
procedure SpriteCopy(DestX, DestY :
integer;
SourX, SourY :
integer;
Size :
TPoint;
Sour, Dest :
IDirectDrawSurface);
const
TRANSPARENCY_VALUE = 80; // Åõ¸í»öÀÌ 80¹ø
À妽ºÀÌ´Ù.
var
SourDesc, DestDesc : TDDSurfaceDesc;
pSour, pDest,
pMask : PByte;
Transparency : array[1..8] of
byte;
begin
FillChar(Transparency,8,TRANSPARENCY_VALUE);
SourDesc.dwSize :=
SizeOf(TDDSurfaceDesc);
with Basic do repeat
until
MakeItSo(Sour.Lock(PRect(nil)^,SourDesc,DDLOCK_SURFACEMEMORYPTR
+
DDLOCK_WAIT,0));
DestDesc.dwSize :=
SizeOf(TDDSurfaceDesc);
with Basic do repeat
until
MakeItSo(Dest.Lock(PRect(nil)^,DestDesc,DDLOCK_SURFACEMEMORYPTR
+
DDLOCK_WAIT,0));
pSour :=
PByte(DWORD(SourDesc.lpSurface)+SourY*SourDesc.lPitch+SourX);
pDest :=
PByte(DWORD(DestDesc.lpSurface)+DestY*DestDesc.lPitch+DestX);
pMask :=
Pointer(@Transparency);
asm
push esi
push
edi
mov esi, pMask
db
$0F,$6F,$26 /// movq mm4, [esi]
// mm4
¿¡ Åõ¸í»ö ¹øÈ£¸¦ ³Ö´Â´Ù
mov esi, pSour
mov edi,
pDest
mov ecx, Size.Y
@@LOOP_Y:
push ecx
mov ecx, Size.X
shr ecx, 3
// µ¿½Ã¿¡ 8°³ÀÇ Á¡À» ¿¬»êÇϹǷÎ
@@LOOP_X:
db $0F,$6F,$07 /// movq mm0,
[edi]
// mm0 ˼ Destination
db
$0F,$6F,$0E /// movq mm1, [esi]
// mm1
˼ Source
db $0F,$6F,$D1 /// movq mm2,
mm1
// mm2 ¿¡ Source µ¥ÀÌÅ͸¦ º¹»ç
db
$0F,$74,$D4 /// pcmpeqb mm2, mm4
// mm2
¿¡ Åõ¸í»ö¿¡ µû¸¥ ¸¶½ºÅ©¸¦ »ý¼º
db $0F,$6F,$DA /// movq mm3,
mm2
// mm3 ¿¡ ¸¶½ºÅ©¸¦ Çϳª ´õ º¹»ç
db
$0F,$DF,$D1 /// pandn mm2, mm1
// Source
½ºÇÁ¶óÀÌÆ® ºÎºÐ¸¸À» ³²±è
db $0F,$DB,$D8 /// pand mm3,
mm0
// Destination ÀÇ °»½ÅµÉ ºÎºÐ¸¸ Á¦°Å
db
$0F,$EB,$D3 /// por mm2, mm3
// Source
¿Í Destination À» °áÇÕ
db $0F,$7F,$17 /// movq [edi],
mm2
// Destination ¿¡ °á°ú¸¦ ¾¸
add esi,
8
// Çѹø¿¡ 8 bytes ¸¦ µ¿½Ã¿¡ ó¸®ÇßÀ¸¹Ç·Î
add
edi, 8
loop @@LOOP_X
add esi, SourDesc.lPitch
sub
esi, Size.X
add edi, DestDesc.lPitch
sub edi,
Size.X
pop ecx
loop
@@LOOP_Y
db $0F,$77 /// emms
pop edi
pop esi
end;
Sour.UnLock(SourDesc.lpSurface);
Dest.UnLock(DestDesc.lpSurface);
end;
---------------------------------------------------------------------------
copyright
SMgal 1999/11/04
#####################################################
---------------------------------------------------------------------------
µ¨ÆÄÀÌ¿¡¼
MMX Äڵ带 (4/4)
1. µ¨ÆÄÀÌ¿¡¼ MMX Äڵ带 »ç¿ëÇÏ´Â ¹ý
2. MMX üŷ°ú MMX ·¹Áö½ºÅ͸¦ ÀÌ¿ëÇÑ 8
bytes Àü¼Û
3. MMX ÀÀ¿ë (1) - Å©·Î¸¶Å°
4.
MMX ÀÀ¿ë (2) - °í¼Ó Çà·Ä ¿¬»ê
---------------------------------------------------------------------------
¾È³çÇϼ¼¿ä.. ¾È¿µ±âÀÔ´Ï´Ù.
À̹ø¿¡´Â MMX ÀÇ ¶Ç´Ù¸¥ ÀÀ¿ëÀÎ 3D ¿¡ »ç¿ëµÇ´Â °í¼Ó Çà·Ä ¿¬»êÀ» ¼³¸íÇÏ°íÀÚ
ÇÕ
´Ï´Ù.
ÈçÈ÷ 3D °ÔÀÓÀ» ¸¸µé ¶§ °¡Àå ±âº»ÀÌ µÇ´Â ¿¬»êÀ̸ç È®´ë, Ãà¼Ò, À̵¿, °¢µµ º¯
È µîµî¿¡ °ÉÃÄ
´Ù¿ëµµ·Î ¾²ÀÌ´Â ºÎºÐÀÔ´Ï´Ù.
MMX°¡ ź»ýÇÑ ¹è°æÀÌ ºü¸¥ Multimedia Áö¿øÀÌ´Ï ¸¸Å ÀÌ·± ÂÊ¿¡¼µµ Áö¿øÀÌ µÇ´Â
µ¥¿ä... ÀÌ¿¡,
Á¦°¡ ¼Ò°³ ÇÏ°íÀÚ ÇÏ´Â ÀÀ¿ëÀÌ ¹Ù·Î MMX Äڵ带 ÀÌ¿ëÇÏ¿© ±× Çà·Ä
°è»êÀ» ºü¸£°Ô Çغ¸ÀÚ´Â ÀǵµÀÔ´Ï´Ù.
Ç®¼Ò½º¿¡ µé¾î°¡±â Àü¿¡ ÇÙ½É ºÎºÐ¸¸ Ãß·Áº¸¸é ´ÙÀ½°ú °°½À´Ï´Ù.
-------------------------------------------------------------------------
>> MMX ÀÌ·Ð
±¸Ã¼ÀûÀÎ ¹æ½ÄÀ̶ó°í ¸»ÇÑ´Ù¸é MMX ¸í·É¾îÀÎ 'pmaddwd'¶ó´Â ¸í·É¾î¿¡ ÀÖ½À´Ï´Ù.
ÀÌ ¸í·É¾î´Â ¿©Å¸ÀÇ
DSP Ĩ¿¡¼¿Í °°ÀÌ °öÇÏ°í µ¿½Ã¿¡ ´õÇÏ´Â ¿¬»êÀ»
ÇÕ´Ï´Ù.
~~~~~~~~~~~~~~~~~~~~~~~~~
±×¸®°í
Çѹø¿¡ ÇϳªÀÇ °ö¼ÀÀÌ ¾Æ´Ñ µ¿½Ã¿¡ word Çü µ¥ÀÌÅÍ 4°³¸¦ °öÇÏ°í ´õÇÕ´Ï
´Ù.
±×·¸´Ù¸é °¨ÀÌ ¿À½Ã°ÚÁÒ ?
3D °ÔÀÓ¿¡¼ »ç¿ëÇÏ´Â Çà·ÄÀº 4-3 ¸¦ ÁÖ·Î »ç¿ëÇÏ°í 4-3 ³¢¸® °öÇÏ´Â ¿¬»êÀ» ÇÏ
±â À§Çؼ 4 - 4
Çà·Ä·Î È®ÀåÀ» Çؼ »ç¿ëÇÏ°Ô µË´Ï´Ù. ¹°·Ð ¸¶Áö¸· °ªÀº Ç×»ó
( 0, 0, 0, 1 )·Î µÓ´Ï´Ù.
( 4-3 °ú 4-3 ³¢¸®´Â Àý´ë °öÇØÁú¼ö ¾øÁÒ. °í±³ Á¤¼® ¼öÇРåÀ» Âü°í ÇϽñæ..)
±×¸®°í Á¦°¡ À̹ø¿¡ ½ÇÇèÇÏ°íÀÚ ÇÏ´Â Çà·Ä½ÄÀ» º»´Ù¸é...
| x' | | a1 a2 a3 a0 | | x |
| y' | = | b1
b2 b3 b0 | | y |
| z' | | c1 c2 c3 c0 | | z |
| w' |
| p1 p2 p3 p0 | | 1 |
ÀÌ·¸½À´Ï´Ù.. ¶ÇÇÑ,
x' = a1 * x + a2 * y + a3 * z + a0
·Î °è»êÀÌ µË´Ï´Ù.
»õ·Î¿î x ÁÂÇ¥ÀÎ x' ¸¦ °è»êÇϱâ À§Çؼ´Â ÃÑ 8°³ÀÇ ÀÎÀÚ¸¦ ¦À» ¸ÂÃç °öÇÏ°í ±×
4°³ÀÇ °ªÀ» ´õÇÏ´Â
Çü½ÄÀÔ´Ï´Ù.
Áï ÀÌ ¹æ½ÄÀÌ ¹Ù·Î pmaddwd ¸í·É¾î¿Í µ¿ÀÏÇÏÁÒ ?
±×·³ pmaddwd ÀÇ ±¸Ã¼ÀûÀÎ µ¿ÀÛÀ» ¾ê±âÇØ º¸°Ú½À´Ï´Ù.
1 2 3 4 5 6 7 8 <- °¢ byteº°
mm0 = ( w1 ) ( w2 ) ( w3 ) ( w4 )
mm1 = ( w1' ) ( w2' ) ( w3' ) ( w4' )
°¡ µé¾î ÀÖÀ» ¶§ ...
pmaddwd mm0, mm1
À̶õ ¸í·ÉÀ» ½ÇÇàÇϸé..
1 2 3 4 5 6 7 8 <- °¢ byteº°
mm0 = ( w1*w1' + w2*w2') ( w3*w3' + w4*w4')
ÀÌ·¸°Ô word°¡ DWORD·Î È®ÀåÀÌ µÇ¸é¼ ´õÇØÁý´Ï´Ù.(mm0 ·¹Áö½ºÅÍ´Â 8bytesÂ¥¸®)
±×¸®°í »óÀ§ 4bytes ¿Í ÇÏÀ§ 4bytes ¸¦ ´õÇÏ¸é µÇ´Âµ¥..
movq mm1, mm0
psrlq mm1, 32
paddd mm0,
mm1
movd eax, mm0
ÀÌ·¸°Ô Çϸé ÃÖÁ¾ °á°úÀÎ w1*w1' + w2*w2' + w3*w3' + w4*w4' °¡ eax¿¡
µé¾î°¡°Ô
µË´Ï´Ù.
À§¿¡ ÀÖ´Â MMX ·¹Áö½ºÅͳ¢¸®ÀÇ ´ëÀÔÀ̳ª ½¬ÇÁÆ®´Â ¸ðµÎ 1 Ŭ·°¸¸ ¼ÒºñÇϹǷΠºü
¸¥ ¼Óµµ·Î Çà·Ä °è»êÀ»
ÇØ ³¾ ¼ö°¡ ÀÖ´Â °ÍÀÔ´Ï´Ù.
---------------------------------------------------------------------------
>> ±¸Ã¼ÀûÀÎ ÄÚµå·Î ¼³¸í
À§ÀÇ ÇÔ¼ö´Â C = A * B ¶ó´Â Çà·ÄÀ» °è»êÇϱâ À§ÇØ ÀÓÀÇ·Î ¸¸µé¾îÁø ¿¹Á¦½ÄÀ̸ç
( A = 4*4,
B = 4*1, C = 4*1 )
A : array[1..4,1..4] of word
=
((1,2,3,4),(5,6,7,8),(9,10,11,12),(13,14,15,16));
B :
array[1..4] of word =
(11,22,33,44);
C : array[1..4] of word;
MMX_Matrix(A,B,C);
À§¿Í °°Àº ¹æ½ÄÀ¸·Î »ç¿ëÇϽøé C ¿¡ °á°ú°¡ µ¹¾Æ¿À´Â ¹æ½ÄÀÔ´Ï´Ù.
¿ø·¡ ¿ì¸®µéÀº ÀåȲÇÑ À̷к¸´Ù´Â ¼Ò½ºÄÚµåÀÇ ÁÖ¼®¿¡ ´õ »¡¸® ¸Ó¸®°¡ ¹ÝÀÀÇϹǷÎ
¹Ù·Î ¼Ò½º¿¡ ÁÖ¼®À» ´Ù´Â
½ÄÀ¸·Î ¼³¸íÇÏ°Ú½À´Ï´Ù.
| procedure MMX_Matrix(var A, B, C);
assembler;
| asm
| mov esi, eax // A ÀÇ Æ÷ÀÎÅÍ ÁÖ¼Ò¸¦ esi¿¡
|
| mov ebx, edx // B ÀÇ Æ÷ÀÎÅÍ ÁÖ¼Ò¸¦ ebx¿¡
| db $0F,$6F,$13
/// movq mm2, [ebx]
| // mm2 ¿¡ B[]ÀÇ
wordÇü Àμö 4°³¸¦ ÀúÀå
|
| mov edi, ecx // C ÀÇ Æ÷ÀÎÅ͸¦ edi¿¡
|
| db $0F,$EF,$E4 /// pxor mm4, mm4
|
// mm4 ·¹Áö½ºÅÍ ÃʱâÈ
| mov eax, 0000FFFFh
|
db $0F,$6E,$E0 /// movd mm4, eax
|
// mm4 <- 0000 0000 0000 FFFF
|
| // 1
Çà
| db $0F,$6F,$06 /// movq mm0, [esi]
|
// A[0]ÀÇ 4°³ÀÇ wordÇü Àμö¸¦ ÀúÀå
| db $0F,$6F,$CA
/// movq mm1, mm2
| // mm1 À» B ÀÇ
°ªÀ¸·Î
|
| db $0F,$F5,$C1 /// pmaddwd mm0, mm1
|
// ¹®Á¦ÀÇ ¿¬»ê, ¼³¸íÀº À§¿¡¼ Çß´Ù..
| db $0F,$6F,$C8
/// movq mm1, mm0
| // ÇöÀç °öÇÏ°í ´õÇÑ
°á°ú°¡ 4bytes¾¿ ºÐ¸®µÇ¾î
| db $0F,$73,$D1,$20 /// psrlq mm1, 32
|
// ÀÖÀ¸¹Ç·Î »óÀ§¿Í ÇÏÀ§ 4bytes ¸¦ ´õÇؼ
| db $0F,$FE,$C1
/// paddd mm0, mm1
| // mm0 ·¹Áö½ºÅÍ¿¡
ÀúÀå
| db $0F,$DB,$C4 /// pand mm0, mm4
|
// mm3 ´Â ÇÏÀ§ 2bytes ¸¸ ³²°ÔÇÔ
| db $0F,$6F,$D8
/// movq mm3, mm0
| // mm3 ÀÇ C[0]
À§Ä¡¿¡ ÀúÀå
|
| // 2 Çà
| db $0F,$6F,$46,$08 /// movq mm0,
[esi+8]
| // A[2]ÀÇ 4°³ÀÇ wordÇü Àμö¸¦ ÀúÀå
| db
$0F,$6F,$CA /// movq mm1, mm2
|
| db $0F,$F5,$C1
/// pmaddwd mm0, mm1
| db $0F,$6F,$C8 /// movq mm1,
mm0
| db $0F,$73,$D1,$20 /// psrlq mm1, 32
| db $0F,$FE,$C1
/// paddd mm0, mm1
| db $0F,$DB,$C4 /// pand mm0,
mm4
| db $0F,$73,$F0,$10 /// psllq mm0, 16
| db $0F,$EB,$D8
/// por mm3, mm0
| // mm3 ÀÇ C[1]
À§Ä¡¿¡ ÀúÀå
|
| // 3 Çà
| db $0F,$6F,$46,$10 /// movq mm0,
[esi+16]
| db $0F,$6F,$CA /// movq mm1, mm2
|
| db
$0F,$F5,$C1 /// pmaddwd mm0, mm1
| db $0F,$6F,$C8 ///
movq mm1, mm0
| db $0F,$73,$D1,$20 /// psrlq mm1, 32
| db
$0F,$FE,$C1 /// paddd mm0, mm1
| db $0F,$DB,$C4 ///
pand mm0, mm4
| db $0F,$73,$F0,$20 /// psllq mm0, 32
| db
$0F,$EB,$D8 /// por mm3, mm0
| //
mm3 ÀÇ C[2] À§Ä¡¿¡ ÀúÀå
|
| // 4 Çà
| db $0F,$6F,$46,$18 /// movq
mm0, [esi+24]
| db $0F,$6F,$CA /// movq mm1, mm2
|
|
db $0F,$F5,$C1 /// pmaddwd mm0, mm1
| db $0F,$6F,$C8
/// movq mm1, mm0
| db $0F,$73,$D1,$20 /// psrlq mm1,
32
| db $0F,$FE,$C1 /// paddd mm0, mm1
| db $0F,$DB,$C4
/// pand mm0, mm4
| db $0F,$73,$F0,$30 /// psllq mm0,
48
| db $0F,$EB,$D8 /// por mm3, mm0
|
// mm3 ÀÇ C[3] À§Ä¡¿¡ ÀúÀå
|
| db $0F,$7F,$1F
/// movq [edi], mm3
| // mm3 ÀÇ ³»¿ëÀ»
C[] ¿¡ º¹»ç
|
| db $0F,$77 /// emms
|
// FPU »óÅ ºñ¿ò
| end;
pmaddwd ¸í·ÉÀÇ ¿ëµµ¸¸ ¾Ë¸é ½±°Ô ÀÌÇØ°¡ µÉ¸¸ÇÑ ³»¿ëÀ̶ó µû·Î ¼³¸íÀº ÇÏÁö ¾Ê
°Ú°í 4°³ÀÇ ÇàÀ»
°¢°¢ Ç®¾î¾´ °ÍÀº ±×³ª¸¶ ¼Óµµ°¡ Á¶±ÝÀ̳ª¸¶ »¡¶óÁöÁö ¾Ê°Ú³ª¶ó
´Â »ý°¢¿¡ ÇÑ °ÍÀÔ´Ï´Ù.
---------------------------------------------------------------------------
>> ÆÛÆ÷¸Õ½º
ÀÏ´Ü °¡Àå Áß¿äÇÑ °Ô ¾ó¸¶³ª ºü¸£³Ä ? ¶ó´Â °ÍÀÔ´Ï´Ù.
ºü¸£Áö ¾Ê´Ù¸é ±¸Å¿© ÀÌ·± °ÍÀ» »ç¿ëÇÒ ÇÊ¿äµµ ¾ø°í
»ç¿ëÇؼµµ ¾ÈµÉ °ÍÀÔ´Ï´Ù.
Á÷Á¢ µ¨ÆÄÀÌ ÄÚµå·Î¸¸ ¶È°°Àº ±â´ÉÀ» ÇÏ´Â ÇÔ¼ö¸¦ ¸¸µé¾î µ¹·Á º» °á°ú´Â
´ÙÀ½°ú
°°½À´Ï´Ù.
===========================================================================
ÀϹÝ
Çà·Ä °è»ê½ÄÀ¸·Î °è»ê : 1000000 ¹ø È£ÃâÇϴµ¥ Æò±Õ 0.483
ÃÊ
~~~~~~~~~~~~~
MMX
Çà·Ä °è»ê½ÄÀ¸·Î °è»ê : 1000000 ¹ø È£ÃâÇϴµ¥ Æò±Õ 0.222
ÃÊ
~~~~~~~~~~~~~
(
ÆæƼ¾ö 2 266MHz ¿¡¼ Å×½ºÆ®..
)
===========================================================================
ÀÌ·¸°Ô ¾à 2 ¹è ÀÌ»óÀÇ ¼º´É Çâ»óÀ» º¸ÀÌ´Â °ÍÀ¸·Î °á°ú°¡ ³ª¿Ô½À´Ï´Ù.
ÀÌÁ¦´Â À§¿Í °°Àº ´Ü¼ø Çà·Ä °è»ê½ÄÀ» Àڽſ¡°Ô ¸Â´Â 3D ¿ë Çà·Ä °è»ê¿¡ Àû¿ë½Ã
Å°´Â ÀÏÀÌ
³²¾Ò½À´Ï´Ù.
±×¸®°í Æ®·çÄ÷¯¿¡¼ MMX ¾ËÆÄºí·£µù ¹æ¹ýµµ À§¿Í ´ëµ¿¼ÒÀÌÇÑ °ÍÀÌ°í Æ®·çÄ÷¯ÀÇ
RGB °ª ºÐÇصµ °ÅÀÇ °°Àº
¸Æ¶ôÀ¸·Î º¸½Ã¸é µË´Ï´Ù.
---------------------------------------------------------------------------
<< ¿¡ÇÊ·Î±× >>
ÀÌ °Á´ ¿¹Àü¿¡ °ÔÀÓ Á¦ÀÛ µ¿È£È¸¿¡¼ Çß´ø C++ºô´õ¿ë °Á¸¦ µ¨ÆÄÀÌ·Î ÄÁ¹öÀü
ÇÑ °ÍÀÔ´Ï´Ù. MMX ¿¡
´ëÇؼ ´õ ÀÚ¼¼ÇÏ°Ô ¾²°í ½ÍÁö¸¸ Intel »çÀÌÆ®¿¡ ÀÖ´Â µµÅ¥
¸àÆ®°¡ ¿ö³« ÀߵǾî ÀÖ¾î¼ Á¦°¡ ¼³¸íÇØ¾ß ÇÒ ºÎºÐÀÌ Àû¾î Áø °Í
°°½À´Ï´Ù.
±×¸®°í ÀÌ °Á ÀÌ¿Ü¿¡µµ Á¦°¡ÇÑ ¸ðµç °Áµé°ú ±× ¼Ò½ºµé.. ±×¸®°í Á¦°¡ ¸¸µé¾ú
´ø °ÔÀÓ ¼Ò½ºµéÀº ¸ðµÎ Á¦
ȨÆäÀÌÁö¿¡ ÀÖ½À´Ï´Ù.
< http://smgal.com/ >
±×·³ ¸¶Áö¸·À¸·Î ÇѸ¶µð ÇÏ°Ú½À´Ï´Ù.
" A Mountain is a mountain, Water is water "
copyright
SMgal 1999/11/04