home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 2001 June / VPR0106A.BIN / OLS / NWSA140 / nwsa140.lzh / SAMPLE.ASM < prev   
Assembly Source File  |  2001-01-27  |  2KB  |  99 lines

  1.         .586            ;Pentium までの命令を使用できるようにします。
  2.         .model  large, c    ;シンボルの先頭に自動的に _ を付加します。
  3.         .mmx            ;mmx 命令などを使用許可します。
  4.         .PentiumPro        ;cmov?? 命令などを使用許可します。
  5.         .3DNow            ;3DNow! 命令を使用許可します。
  6.         
  7.         
  8.         extrn    Vari1:dword    ;Cプログラムのグローバル変数の外部参照
  9.         
  10.         extrn    Sleep@4:near    ;Windows API の外部参照。@4 は合計 4 バイトの
  11.                     ;引数を持つことを示す。関数内部でこれだけの
  12.                     ;スタックが除去される。
  13.         
  14. _text           segment para use32
  15.  
  16.         ;グローバル変数とスタック引数の使用例
  17. AsmFunc         proc    near
  18.         arg    Para1:dword, Para2:dword
  19.         
  20.         mov    eax,Vari1
  21.         add    eax,Para1
  22.         add    eax,Para2
  23.         
  24.         ret
  25.         
  26. AsmFunc         endp
  27.         
  28.         
  29.         
  30.         ;Windows API の呼び出し方の例
  31. TestAPI        proc    near
  32.         
  33.         push    dword ptr 1000
  34.         call    Sleep@4
  35.         
  36.         ret
  37.         
  38. TestAPI        endp
  39.         
  40.         
  41.         
  42.         ;MMX 命令や 3DNow! 命令のアセンブルテスト
  43.         ;実行結果は保証できません(このままでは保護例外が起きる可能性があります。)。
  44. TestFunc        proc    near
  45.         arg    Para1:dword, Para2:dword
  46.         
  47.         
  48.         
  49.         femms
  50.         prefetch    byte ptr ds:[edi*4+1000h]
  51.         
  52.         
  53.         pfmul    mm1,mm2
  54.         pfmul    mm1,[ebx]
  55.         pfmul    mm1,[ebx+10]
  56.         pfmul    mm1,es:[ebx]
  57.         pfmul    mm1,[ebx+eax*4+10]
  58.         
  59.         fcomp    st(1)
  60.         fcomi    st(0),st(1)
  61.         
  62.         cmova    eax,ebx
  63.         cmove    ebx,ds:[edi]
  64.         
  65.         mov    eax,Para1
  66.         add    eax,Para2
  67.         
  68.         paddw    mm0,mm1
  69.         psubsw    mm0,mm1
  70.  
  71.         psllw    mm0,mm1
  72.         psllw    mm1,5
  73.  
  74.         shl    eax,1
  75.  
  76.         movd    mm0,eax
  77.         movd    mm0,ds:[eax]
  78.         movd    mm0,dword ptr ds:[eax]
  79.     ;       movd     mm0,qword ptr ds:[eax]
  80.         
  81.         movq    mm0,qword ptr ds:[eax]
  82.     ;       movq    mm0,dword ptr ds:[eax]
  83.         movq    mm0,mm1
  84.         movq    mm0,ds:[eax]
  85.         
  86.         movq    ds:[eax],mm5
  87.         movd    dword ptr ds:[eax],mm7
  88.         movd    ecx,mm3
  89.         
  90.         emms
  91.         
  92.         ret
  93.         
  94. TestFunc        endp
  95.         
  96. _text           ends
  97.         
  98.         end
  99.