分かりやす〜い
コンピュータ技術情報

TOPに戻る
▼Processor
簡単なアセンブラ言語
┣ 高級、低級の意味と
┃ レジスタ、mov、add

┣ 計算を行う
┣ プログラムを作る
┣ loop命令
┣ Indexレジスタの
┃ 役割とレジスタの
┃ 大きさ
┣ リピートプリフィック
┃ ス・ストリング命令

┣ inc・dec命令
┣ MMX技術
┣ MMXレジスタ
┣ MMX・SIMD・SSE
┣ CMP・JMP命令
┣ 関数とパラメータ
┣ スタック領域
┣ ESPレジスタ
┣ セグメント・
┃   call・ret

┣ コードファイルを作る
┣ コードファイル説明1
┣ コードファイル説明2
┗ マイクロコード

Copyright(C) 2001-2002.ugpop. All rights reserved.




■デジタル用語辞典:
■ MMXレジスタ ■

前回はMMX技術について簡単に動作概念を説明しました。
MMXとはMulti Media eXtensionの略であり、インテルが開発し
た技術の事でした。ちょっと復習してみましょう。

以下にMMXの動作イメージを示します。

1.データaからレジスタへデータを読み出す。

     レジスタ            メモリ
┌────────────┐      ┌───┐
│  3  2  1  0│←─────┤  0│データa
└────────────┘ ┌────┤  1│
   ↑  ↑  ↑     │┌───┤  2│
   │  │  └─────┘│┌──┤  3│
   │  └─────────┘│
   └─────────────┘

2.データbからレジスタへデータを読み出す。

     レジスタ            メモリ
┌────────────┐      ┌───┐
│ 13 12 11 10│←─────┤ 10│データb
└────────────┘ ┌────┤ 11│
   ↑  ↑  ↑     │┌───┤ 12│
   │  │  └─────┘│┌──┤ 13│
   │  └─────────┘│
   └─────────────┘


3.データaにデータbの値を加算する。

     レジスタ     
┌────────────┐
│ 16 14 12 10│
└────────────┘
   ↑  ↑  ↑  ↑ 
   +  +  +  + 
   │  │  │  │ 
┌──┴──┴──┴──┴┐
│ 13 12 11 10│
└────────────┘


4.レジスタからデータaへデータを書き込む。

     レジスタ            メモリ
┌────────────┐      ┌───┐
│ 13 12 11 10├─────→│ 10│データa
└──┬──┬──┬───┘ ┌───→│ 11│
   │  │  │     │┌──→│ 12│
   │  │  └─────┘│┌─→│ 13│
   │  └─────────┘│
   └─────────────┘


これがMMX技術の動作概念でした。
MMX技術が出来る前までは1つのデータを1つずつ処理しなけ
ればなりませんでしたが、MMX技術を導入する事で複数のデー
タをいっぺんに処理する事が出来るようになったのでした。

後はこのMMX技術を「EAX」レジスタ等で動作するようにすれば
レジスタを効率良く使用できるようになるのでした。

ここまでは前回説明しました。


しかし、インテルの人達は「EAX」レジスタ等にはこれらの処
理が行なえるようにはしませんでした。

それは何故なのでしょうか?

実は「EAX」レジスタ等よりも、もっと使われる機会の少ない、
もったいないレジスタが存在しているのです。

このレジスタは「浮動小数点レジスタ」と呼ばれる物で、「科
学技術計算」を行なう為のレジスタです。

より精密な計算が行えるように、80ビットの大きさがあるの
ですが、今まで科学技術計算を行なう以外には使われる事があ
りませんでした。
「EAX」レジスタより大きなレジスタなのに使われる機会はず
っと少なかったのです。

これはもったいない事です。

という事で、インテルの人達は「EAX」レジスタ等よりもこの
「浮動小数点」レジスタの方にMMX技術を適用する事にしまし
た。

浮動小数点レジスタは80ビットの大きさがあるのですが、中
途半端なビット数なのでこの内の64ビットを使う事になりま
す。

以下に浮動小数点レジスタをMMXレジスタとして使用している
図を示します。


1.データaからレジスタへデータを移動する。

           レジスタ               メモリ(データa)
┌────────────────────────┐        ┌───┐
│  7  6  5  4  3  2  1  0│←───────┤  0│
└────────────────────────┘ ┌──────┤  1│
   ↑  ↑  ↑  ↑  ↑  ↑  ↑     │┌─────┤  2│
   │  │  │  │  │  │  └─────┘│┌────┤  3│
   │  │  │  │  │  └─────────┘│┌───┤  4│
   │  │  │  │  └─────────────┘│┌──┤  5│
   │  │  │  └─────────────────┘│┌─┤  6│
   │  │  └─────────────────────┘│┌┤  7│
   │  └─────────────────────────┘│
   └─────────────────────────────┘


2.データbからレジスタへデータを移動する。

           レジスタ               メモリ(データb)
┌────────────────────────┐        ┌───┐
│ 17 16 15 14 13 12 11 10│←───────┤ 10│
└────────────────────────┘ ┌──────┤ 11│
   ↑  ↑  ↑  ↑  ↑  ↑  ↑     │┌─────┤ 12│
   │  │  │  │  │  │  └─────┘│┌────┤ 13│
   │  │  │  │  │  └─────────┘│┌───┤ 14│
   │  │  │  │  └─────────────┘│┌──┤ 15│
   │  │  │  └─────────────────┘│┌─┤ 16│
   │  │  └─────────────────────┘│┌┤ 17│
   │  └─────────────────────────┘│
   └─────────────────────────────┘


3.データaにデータbの値を加算する。

┌────────────────────────┐
│ 24 22 20 18 16 14 12 10│
└────────────────────────┘
   ↑  ↑  ↑  ↑  ↑  ↑  ↑  ↑
   +  +  +  +  +  +  +  +
   │  │  │  │  │  │  │  │
┌──┴──┴──┴──┴──┴──┴──┴──┴┐
│ 17 16 15 14 13 12 11 10│
└────────────────────────┘


4.レジスタからデータaへデータを移動する。

           レジスタ                メモリ(データa)
┌────────────────────────┐         ┌───┐
│ 24 22 20 18 16 14 12 10├────────→│ 10│
└──┬──┬──┬──┬──┬──┬──┬───┘ ┌──────→│ 12│
   │  │  │  │  │  │  │     │┌─────→│ 14│
   │  │  │  │  │  │  └─────┘│┌────→│ 16│
   │  │  │  │  │  └─────────┘│┌───→│ 18│
   │  │  │  │  └─────────────┘│┌──→│ 20│
   │  │  │  └─────────────────┘│┌─→│ 22│
   │  │  └─────────────────────┘│┌→│ 24│
   │  └─────────────────────────┘│
   └─────────────────────────────┘


浮動小数点レジスタの80ビットの大きさの内の64ビットが
使えるので一気に8バイトずつ処理が行なえるようになりまし
た。


次回はMMX技術を使用したプログラムを実際に作成してみる予
定です。



▲このページの上へ

▲このページの上へ

←前に戻る    ▲このページの上へ    続きを読む→