stanford-oval/wikipedia huggingface dataset:
スタック
抽象データ型 > 関連するデータ構造

FIFO (First In First Out、先入れ先出し) の原則を持つデータ構造または抽象データ型はキューである。スタックとキューの操作を組み合わせて提供するものは両端キュー (deque) と呼ぶ。例えば、探索アルゴリズムでスタックを使うかキューを使うかによって、深さ優先探索（スタック使用）か幅優先探索（キュー使用）になる。
ハードウェア

ハードウェアによるスタックの実装法には、主に次の2つがある。
シフトレジスタ等により、ハードウェア的に直接、プッシュ・ポップできるようにしたもの
メモリ上の領域と、スタックポインタによるもの
前者は、たとえばIntel 4004の「3段のスタック」がそのようなものである。後者は多くのコンピュータが持っている。以下これについて述べる。
ハードウェア > 典型的なスタック

典型的なスタックはコンピュータのメモリ上に固定の基点と可変のサイズを持つ領域である。初期状態ではスタックのサイズはゼロである。「スタックポインタ」（一般にハードウェアのレジスタが使われる）はスタック内で最も後で参照された位置を指している。スタック長がゼロのとき、スタックポインタはスタックの基点を指す。
あらゆるスタックで実施可能な2つの操作は以下の通りである。
スタック操作の基本原則には様々なバリエーションがある。スタックは初期状態ではメモリ上の固定の位置に配置される。データがスタックに追加されると、スタックポインタはデータ追加に伴うスタックの領域拡張に従って変更される。そのときのスタックの延びていく方向は特に規則は無く、実装によってアドレスの小さくなる方向だったり、大きくなる方向だったりする。
昔のコンピュータで、ヒープ領域をアドレスの小さいほうから大きいほうへ伸ばし、スタックを大きいほうから小さいほうへ伸ばす（そのようにすると、メモリが足りない場合はどちらを伸ばす余裕もなく、完全にメモリを使い切って計算続行不可能となる）という設計にした名残りから、アドレスの大きいほうから小さいほうへ伸びるものが多いが、PA-RISCは逆である。
例えば、あるスタックが1000番地から開始して、アドレスの小さい方向に延びていくとする。その場合、データは1000番地よりも小さい番地に格納され、スタックポインタはそれに伴って小さな番地を格納するようになる。そのスタックからデータをPopすると、スタックポインタに格納されているアドレスは大きくなる。
（初期状態の）スタックポインタはスタックの基点そのものではなく、その少し上か下（スタック成長方向に依存）の限界アドレスを指している場合もある。しかし、スタックポインタは基点を超えていくことはできない。換言すれば、スタックの基点が1000番地でスタックがアドレスの小さい方向（999番地、998番地など）に成長する場合、スタックポインタは決して1000番地を超えてはならない（1001番地や1002番地は不可）。Pop操作によってスタックポインタが基点を超えると「スタック・アンダーフロー」が発生する。逆にPush操作がスタックの最大許容範囲を超えてスタックポインタを操作することになるなら「スタック・オーバーフロー」が発生する。
スタックに強く依存している環境では、追加の操作を備えている場合がある。以下に例をあげる。
スタックは上に成長するようにイメージされることもあるし、左から右に成長するようにイメージされることもあり、トップという言い方ではなく右端と言ったりもする。このようなイメージはメモリ上のスタックの実際の構造とはあまり関係ない。right rotateと言ったとき、1番目の要素を3番目の位置に置き、2番目を1番目、3番目を2番目の位置に置く。これを2種類のイメージで表すと次のようになる。
apple                         banana
banana    ===right rotate==>  cucumber
cucumber                      apple
cucumber                      apple
banana    ===left rotate==>   cucumber
apple                         banana
スタックはコンピュータ内では通常、メモリセルのブロックで構成される。そのブロックの「底」は固定の位置にあり、スタックポインタが「トップ」のセルのアドレスを格納している。「底」とか「トップ」という用語はスタックがアドレスの大きくなる方向に成長するか、小さくなる方向に成長するかに関係なく使われる。
スタックへのアイテムの push により、そのアイテムのサイズのぶんだけスタックポインタがずらされ（増減はメモリ空間内のスタックの成長方向に依存する）、次のセルを指すようにして、新たなトップとなるアイテムをスタック領域にコピーする。詳細な実装に依存するが、push 操作を完了したときのスタックポインタの値はスタック上の次の未使用領域を指しているかもしれないし、現在のトップのアイテムを指しているかもしれない。スタックポインタが現在のトップのアイテムを指している場合、次回の push のときには最初にスタックポインタをずらさなければならない。逆にスタックポインタが次の未使用領域を指しているなら、次回の push のときには最後にスタックポインタをずらすことになる。
スタックの pop 操作は push の逆となる。push とは逆の順番でスタックのトップのアイテムが取り出され、スタックポインタが更新される。
ハードウェア > 典型的なスタック > コールスタック

→詳細は「コールスタック」を参照
以上のようなスタックは、特にコールスタックに使われる。
ハードウェア > 典型的なスタック > 具体例

多くのプロセッサはスタックポインタとして使用可能なレジスタを持っている。x86のようなプロセッサは専用のスタックポインタレジスタを持っている。他のPDP-11や68000ファミリなどは、アドレッシングモードによって任意のレジスタをソフトウェア的にスタックポインタとして使用できるようになっているが、普通は割込みやJSR命令が操作するR6レジスタやA7レジスタを使う。RISCの多くはそのように特別扱いされるようなレジスタを持たず、どのレジスタをスタックポインタとして使うかは通常ABIで決めており、ソフトウェアでスタック処理をおこなう。Intel 8087シリーズの数値演算コプロセッサはスタックアーキテクチャである。一部のマイクロコントローラ（例えばいくつかのPIC）は固定サイズのスタックを内蔵しており、その任意の位置に直接アクセスすることはできない。
以上のようなスタックポインタによるスタックではなく、直接ハードウェアで実現したスタックを持つコンピュータもある。
Computer Cowboys MuP21
Harris RTX line
Novix NC4016
なお、以上のようなスタックがあるコンピュータをスタックマシンとするのは間違いである。詳細は後述のスタックマシンについての記述を参照すること。
ソフトウェア

この節では、抽象データ型としてのスタックのソフトウェアによる実装について述べる。
高水準言語では、スタックは配列や線形リストを使って効率的に実装可能である。LISPでは任意のリストに対して push や pop に相当する関数（consがpush、cdrがpopである）を使用可能なので、スタックを実装する必要は無い。
スタック専用のコンテナ（コレクション）型を使わず、動的配列やリストのような他のコンテナ型をスタック代わりに使うことも当然できるが、実装が隠蔽・抽象化されていたり、インデックスによるランダムアクセスや任意位置に対する要素の追加・削除のような一部の操作が制限されていたりする専用のコンテナ型をあえて使ったほうが、コードの意図が明瞭になり、メンテナンス性が向上するなどの利点がある。
ジェネリックプログラミングに対応したオブジェクト指向の静的型付け言語では、任意のデータ型Tを要素とするスタックを定義できるようになっていることも多い。C++ではStandard Template Libraryにstd::stack<T, Container>が用意されている。std::stackはテンプレート第2引数に内部実装コンテナを指定することができ、デフォルトでは両端キューstd::dequeが使われるが、動的配列std::vectorまたは双方向連結リストstd::listを指定することも可能である。実装が抽象化されていることによって、用途に応じて操作の計算量や空間効率などの特性が異なるコンテナを内部実装に使用したり、後から差し替えたりすることが容易となっている。
応用例 > 式評価と構文解析

→「オペランドスタック」も参照
逆ポーランド記法を使用している電卓（Hewlett-Packardの関数電卓など）は、値を保持するためにスタック構造を使う。式は、前置記法、中置記法、後置記法のいずれかで表現される。ある記法から別の記法への変換にはスタックが必要となる。多くのコンパイラは低レベルな言語に翻訳する前の構文解析のためにスタックを使用する。多くのプログラミング言語は文脈自由言語であり、スタックベースの機械で構文解析することができる。ちなみに自然言語は文脈依存言語であり、スタックだけではその意味を解釈することはできない。
例えば、((1 + 2) * 4) + 3 という計算は、交換法則と括弧を優先するという前提で、次のように後置記法（逆ポーランド記法）に変換できる。
1 2 + 4 * 3 +
この式はオペランドスタックを使って左から右に以下のように評価できる。
オペランド（演算数）に遭遇したら push する。
演算子に遭遇したら、オペランドスタックから2つのオペランドを pop して演算を行い、
その解を push する。
具体的には以下のようになる。「オペランドスタック」は「操作」した後の状態を示している。
| 入力 | 操作 | オペランドスタック |
| --- | --- | --- |
| 1 | オペランドをPush | 1 |
| 2 | オペランドをPush | 1, 2 |
| + | 加算 | 3 |
| 4 | オペランドをPush | 3, 4 |
| * | 乗算 | 12 |
| 3 | オペランドをPush | 12, 3 |
| + | 加算 | 15 |
最終的な演算結果は 15 で、終了時にオペランドスタックのトップに置かれている。
応用例 > 探索問題の解法

探索問題を解くとき、総当り的か最適化されているかに関わらず、スタックを多大に必要とすることが多い。総当り探索の例としては、力まかせ探索やバックトラッキングがある。最適探索の例としては、分枝限定法 (branch and bound) やヒューリスティックによる解法がある。いずれのアルゴリズムでも、発見してはいるが探索していない探索ノードを覚えておくのにスタックが必要となる。スタックを使う以外の手法としては再帰を使う方法があるが、これはコンパイラが生成するコードが内部的に使用するスタックで代替しているだけである。スタックを使った探索は幅広く使われており、木構造の単純な幅優先探索や深さ優先探索から、クロスワードパズルを自動的に解くプログラムやコンピュータチェスゲームでも使われている。ある種の問題はキューなどの別のデータ構造を使って解くこともでき、探索順を変えたいときに有効である。
応用例 > プログラミング言語処理系の実装

→詳細は「コールスタック」を参照
ほとんどのコンパイルされたプログラムは実行時（ランタイム）環境においてコールスタックを使用し、プロシージャ/関数呼び出しに関する情報を格納するのに使っている。そして、呼び出し時のコンテキスト切り替えや呼び出し元への復帰の際に使用して、呼び出しの入れ子を可能としている。そのとき、呼び出される側と呼び出し側の間には引数や返り値をスタックにどう格納するかという規則が存在する。スタックは関数呼び出しの入れ子や再帰呼び出しを実現するための重要な要素となっている。この種のスタックはコンパイラが内部的に使用するもので、プログラマがこれを直接操作することはほとんど無い。
コールスタック内に関数の呼び出し毎に作られるフレームをスタックフレームと言い、それをたどって（トレースして）得られる呼び出しの情報をスタックトレースと言う。
プログラミング言語によっては、プロシージャ内のローカルなデータをスタックに格納する。ローカルなデータの（スタック上の）領域はプロシージャに入ってきたときに割り当てられ、出て行くときに解放される。C言語はこのような手法で実装されている典型例である。データとプロシージャ呼び出しに同じスタックを使うことは重大なセキュリティ問題を引き起こす可能性があり、プログラマはそのようなバグを作りこんで深刻なセキュリティ問題を発生させないように気をつける必要がある。
応用例 > プログラミング言語処理系の実装 > セキュリティ

→詳細は「バッファオーバーラン」を参照
たいていの場合、プロシージャ内のローカルなデータとプロシージャ呼び出しに関する情報は共通のスタックに格納されている。つまりプログラムは、プロシージャ呼び出しのリターンアドレスという極めて重要な情報を保持しているスタックに対して、データを出したり入れたりしているのである。データをスタック上の間違った領域に書き込んだり、大きすぎるデータをスタックに書き込んだりして、リターンアドレスが壊されると、プログラムが異常動作することになる（バッファオーバーラン攻撃）。
悪意ある者がこの種の実装を逆手にとって、入力データのサイズをチェックしていないプログラムに大きすぎるデータを入力したりする。そのようなプログラムはデータをスタック上に格納しようとしてリターンアドレスを壊してしまう。攻撃者は実験を繰り返し、リターンアドレスがスタック領域内（特に攻撃者の入力データが書き込まれた領域内）を指すようになる入力データのパターンを見つけ出し、許可されていない操作をするような命令列を入力データに含ませることでセキュリティを破る。こうした攻撃に対してプログラマはスタックの扱いに注意する必要がある。
応用例 > スタック指向プログラミング言語

いくつかのプログラミング言語はスタック指向である。スタック指向言語は、基本操作（二つの数の加算、一文字表示など）でスタックから引数を取ってくるようになっていて、結果をスタックに返すようになっている言語である。
たいていは複数のスタックを使うよう設計されており、典型的なForthは、引数受け渡しのためのスタックとサブルーチンのリターンアドレスのためのスタックを持つ。PostScriptはリターンスタックとオペランドスタックを持ち、グラフィックス状態スタックと辞書スタックも持っている。日本語プログラミング言語のMindもForthベースである。
応用例 > スタックマシン

→詳細は「スタックマシン」を参照
機械語命令の体系がスタック指向プログラミング言語に類似している、すなわち、命令のオペランドがスタックであるマシンをスタックマシンと言う。最も有名なものとしてバロース B5000がある（B5000は、高水準言語（ALGOL）のサポートを目的として、前述のコールスタックもアーキテクチャでサポートしているが、コールスタックをアーキテクチャでサポートしている、という意味では「スタックマシン」の語は使わない）。
またx86等でも、スタックポインタ間接参照によってスタックマシンのように使うことはできるが、普通あまりスタックマシンとはしない。
多くの仮想機械もスタックマシンであり、例えばp-コードマシンやJava仮想マシンなどがある。x87の命令もスタックマシン的である。
これに対し、オペランドがレジスタのマシンをレジスタマシンと言う。多くの実機がレジスタマシンであるため実機に対してこの語が使われることは少ない。仮想機械ではLua 5の仮想機械がレジスタマシンである。
歴史

スタックを使った式評価方法を最初に提案したのはドイツの初期のコンピュータ科学者フリードリッヒ・L・バウアーであり、その業績により1988年、IEEE Computer Societyからコンピュータパイオニア賞を受賞した。
Intel i860

| --- | --- |
 インテル i860 マイクロプロセッサ（50MHz XP版）
生産時期:  1989年から1990年代半ばまで
生産者:  インテル
CPU周波数:  25 MHz から 50 MHz
コア数:  1
パッケージ:  168ピン セラミックPGA
テンプレートを表示
Intel i860（または80860）はインテルのRISCマイクロプロセッサであり、1989年にリリースされた。i860(とi960)は、インテルにとって1980年代のi432以来の完全に新しいハイエンドISAについての試みであった。i860は鳴り物入りで登場し、多くの人が設計が優れていると考えていたi960のリリースを覆い隠したほどだったが、i960が組み込みシステムに活路を見出したのに対して、i860は商業的には全く成功せず、プロジェクトは1990年代中ごろに終結させられた。
アンドルー・グローヴはi860の市場での失敗の原因はインテルにあるとして、次のように述べている。
| 0 | 1 | 2 |
| --- | --- | --- |
| 「 | 我々は同時期に登場した2つの非常に強力なチップを手にしていた。486は主にCISCテクノロジーに基づき、それまでのPCソフトウェアと互換性があった。i860はRISCテクノロジーに基づき、非常に高速だが何とも互換性がなかった。我々はどうすべきかわからなかった。だから両方を市場に投入し、市場に決めさせようとした。…我々の曖昧な態度のせいで、顧客はインテルが486を押しているのか、i860を押しているのか、いぶかしく思うことになった。 | 」 |
—アンドルー・グローヴ
技術的特性

i860は当時ではユニークだったいくつかの特徴を備えている。特にVLIWアーキテクチャと高速浮動小数点数演算が挙げられる。ひとつの32ビットALUとひとつの64ビットFPUを備えており、FPUは3つの部分(加算器、乗算器、グラフィックスプロセッサ)から成っている。ALUと乗算器、加算器に対してそれぞれ命令パイプラインを備えていて、最大3命令を1クロックサイクルで実行することができる。
バスは64ビットかそれ以上であった。キャッシュを結ぶ内部メモリバスは128ビット幅である。CPUもFPUも32本の32ビットレジスタを持ち（うち１つは必ず0を返すゼロレジスタ）、それをFPUは16本の64ビットレジスタとして使った。ALUに対する命令は一度にふたつフェッチして外部バスをフルに使っている。このため、インテルはこのデザインを「i860 64ビット マイクロプロセッサ」と称した。
i860の命令は8ビットから128ビットまでのデータサイズを扱うことができる。
グラフィックスユニットをマイクロプロセッサチップに内蔵するのは当時としては珍しかった。これは基本的にはFPUレジスタを8本の128ビットレジスタとして使った64ビット整数演算ユニットである。様々なSIMD的な命令と基本的な64ビット整数演算機能を持っていた。このi860での経験が後のPentiumプロセッサのMMX機能に影響を与えた。
i860の非常にユニークな機能のひとつとして、各機能ユニットのパイプラインに対してプログラムからアクセス可能であったことが挙げられる。そのため、コンパイラが注意深く命令を並べてパイプラインが満たされた状態にする必要があった。一般的なアーキテクチャではCPU上のスケジューラがその役割を担うが、初期のRISC設計ではシステムの複雑さが用途を限定してしまう。i860はこれを丸ごとチップからコンパイラへ移してしまった。これによりコアが単純になり、他の機能をチップに組み込むことができるようになるため、性能向上につながる。結果としてi860はグラフィックスと浮動小数点については高速に実行できたが、一般的な用途では満足できる性能を出すようなプログラムを書くのが困難だった（後述）。
性能 (問題)

紙上の性能はシングルチップとしては非常に印象的なものだったが、実際の性能は全く違っていた。何が問題なのか当時は不明だったが、実行時のコードの流れを予測することが難しかったためと思われる。つまり、コンパイル時に命令を正しく並べることが非常に困難だったのである。例えば、ふたつの数値の加算命令はその数値がキャッシュ上になければ非常に時間がかかる。しかし、プログラマにはその数値がキャッシュにあるかどうかは分からないのである。もし予想が外れれば、データを待つためにパイプラインが停止する。i860のデザインはこういったことをコンパイラが効果的に行うことを前提としていて、それは不可能だったことが実証されている。XP版では理論上単精度でも倍精度でも60から80MFLOPSの性能が見込まれたが、アセンブリ言語で書いたプログラムでもせいぜい40MFLOPSで、コンパイラを使うと10MFLOPSも難しかった。
もうひとつの重大な問題はコンテキストスイッチを高速に行う手段がなかったことである。i860はいくつかのパイプラインを持っていて、割り込みによってそれを壊すので、復帰時に元に戻さなければならなかった。この処理には最低でも62クロックサイクルを要し、最悪の場合2,000クロックサイクルにもなった。これはクロック周波数40 MHzでは2万分の1秒（50μ秒）であり、CPUにとってはとてつもなく長い。このためi860は汎用CPUになれなかったのである。
バージョンと実際の使用例

このチップにはふたつのバージョンがあった。コードネームN10のXRとコードネームN11のXPである。XPには大きなキャッシュ、二次キャッシュ、より高速なバスと、並列計算のためのバススヌーピング機能とキャッシュ・コンシステンシ機能を持っていた。XRは25 MHzか40 MHzであったが、XPはプロセスを縮小したため(1 μm→0.8 μm)40 MHzか50 MHzで動作。どちらも同じ命令セットが動作する。
まず、i860はロスアラモス国立研究所のiPSC/860（英語版）のようないくつかの大規模マシンで使われた。コンパイラが強化されたためi860の性能もそれなりに強化されたが、当時のi860の性能は他のRISCには及ばなかった。他には、i860XRを28個またはi860XPを14個搭載したアライアント・コンピュータのFX/2800シリーズがある。
インテルはi860をワークステーションのCPUとして使えないか、MIPSアーキテクチャのチップなどと対抗できないか試したことがある。マイクロソフトは内部で設計したi860ベースのワークステーション（コードネームは Dazzle）で後に Windows NT と呼ばれるようになるOSの開発を行っていたが、最終的に NT が実際に動作したのはMIPSと Intel 386 で、その後他のプロセッサにも移植されたが i860 には移植されなかった。NTという名称は、i860XR のコード名が "N-Ten" だったことに由来するとも言われている。
i860をメインCPUとして持つUNIXワークステーションも存在し、沖電気のOKI station 7300と、それをベースにグラフィックスサブシステムに2個のi860を搭載したクボタコンピュータの Titan VISTRA がある。
i860はワークステーション市場でグラフィックスアクセラレータとしても使われた。例えばNeXTDimensionで使われた。このマシンはMachの機能削減版が動作し、完全なPostScriptスタックを実装していた。ただし、PostScript部分が完全に仕上げられることはなく、単に色ピクセルを動かすぐらいしかできなかった。このような環境ではi860はかなりよく動作した。主なプログラムはキャッシュに収まるサイズで、完全に予測通りに動くようにコーディングできたからである。Truevision（英語版）は同社のフレームバッファカード Targa と Vista と共に使うことを意図したi860ベースのアクセラレータカードを作り、ピクサーがそれを使って動作するバージョンのRenderManを開発。これは386ホストの4倍の性能を発揮した。他の採用例は、ジオメトリエンジン内に複数個のi860XPを使った SGI RealityEngine（英語版） がある。SPARCstation330/470などのデスクサイド型のVMEスロットに装備するVX/MVXグラフィックスアクセラレータには40MHzの i860 が搭載され(VXには1個、MVXには4個)、VXは40MIPS/60MFLOPS、MVXは160MIPS/240MFLOPSの性能を持つとされた。このような使用法も徐々に減っていき、多くの汎用CPUがi860の性能に追いついて、インテルもPentiumを主力とするようになった。
Mercury Computer Systems（英語版） はi860を並列計算機に採用した。ファットツリー（英語版）型ネットワークで2個から360個の計算ノードを相互接続したもので、各ノードのローカルメモリに他ノードからもアクセスできる。ノード毎に異なるシステムを採用でき、i860の他にPowerPCや SHARC DSP を3個組合わせたノードがある。i860向けにアセンブリ言語で書かれた信号処理ライブラリを提供したため、よい性能が得られた。19インチラック 9U の筐体に360個の計算ノードを詰め込めるため、軍用機上でのレーダー処理などに適していた。
また1990年代前半、ストラタスがi860ベースの無停止コンピュータ XA/R シリーズを開発している。
1990年代後半、インテルはARMベースのXScaleでRISCビジネス全体を置き換えた。また、インテルのXeonシステム用のマザーボードのチップセットとしてi860という名前が再利用されているため混乱を招くこともある。
脚注・出典

↑  QuantitativeApproach 1990, p. 84.
↑  Intel's 486 CPU turns 15 Geek.com
↑  Kohn, Les; Margulis, Neal (1989), “Introducing the Intel i860 64-Bit Microprocessor”, IEEE Micro 9 (4):  15-30, http://www.computer.org/portal/web/csdl/doi/10.1109/40.31485
↑  Grimes, Jack; Kohn, Les; Bharadhwaj, Rajeev (1989), “The Intel i860 64-Bit Processor: A General-Purpose CPU with 3D Graphics Capabilities”, IEEE Computer Graphics and Applications 9 (4):  85-94, http://www.computer.org/portal/web/csdl/doi/10.1109/38.31467
↑  i860 64-Bit Microprocessor THE ADVANCE INFORMATION 1989
↑  Mega Floating point number Operations Per Second（メガフロップス）。1秒間に浮動小数点演算を100万回行うことを示す、処理性能を表す単位。
↑  “Paul Thurrott's History of Windows Server 2003: The Road To Gold”. 2012年3月2日閲覧。
↑  SuperASCII 1991年1月号, p. 34-35.
↑  Stratus Machine History
i860 XP-50 CPU が3個搭載された基板。インテルのスーパーコンピュータ Paragon XP/S（英語版） で使われたもの。
Intel i860 XR
黄金山神社 (石巻市)

| 黄金山神社 |
| --- | --- |
  拝殿
所在地:  宮城県石巻市鮎川浜金華山5番地
位置:  北緯38度17分52.9秒 東経141度33分21.6秒﻿ / ﻿北緯38.298028度 東経141.556000度﻿ / 38.298028; 141.556000﻿ (黄金山神社（金華山）)座標: 北緯38度17分52.9秒 東経141度33分21.6秒﻿ / ﻿北緯38.298028度 東経141.556000度﻿ / 38.298028; 141.556000﻿ (黄金山神社（金華山）)
主祭神:  金山毘古神 金山毘売神 天神八百万神 地神八百万神
社格等:  式内小社論社・旧県社・別表神社
創建:  伝天平勝宝2年（750年）
本殿の様式:  三間社流造銅板葺
別名:  金華山神社
例祭:  9月25日
主な神事:  初巳大祭（5月）
地図:  黄金山神社 ja
テンプレートを表示
黄金山神社の鳥居
黄金山神社（こがねやまじんじゃ）は、宮城県石巻市の牡鹿半島東南端に相対する太平洋上の孤島、金華山に鎮座する神社である。旧社格は県社で、戦後は神社本庁の別表神社。
金華山の西斜面中腹に西面して鎮座するが、金華山全島を神域とする事もあって神社と金華山（島）とほぼ同義に用いられる場合があり、金華山神社（きんかさんじんじゃ）と通称されたり金華山黄金山神社と称したりもしている。商売繁盛や開運招福といった現世利益を願う参拝者や観光客で賑わっているが、近代以前は弁財天（弁天）を祀る金華山大金寺（だいきんじ）という女人禁制の修験の真言宗寺院であり、広島県の厳島神社等とともに日本の「五弁天」の一にも数えられるとともに、霊場として山形県の出羽三山、青森県の恐山に並ぶ「東奥三霊場」に数えられた。
祭神

祭神は鉱山の神である金山毘古神、金山毘売神と、天地の八百万神（やおよろずのかみ。日本の神の総称）。
明治以前は弁財天が祀られ、近世以降からその福を授ける神徳が盛んに喧伝されて開運招福といった現世利益、とりわけ金運や財運に神験著しい事で著名となり、明治になって現祭神に改められた後もその信仰は続いている。
由緒

社伝によれば天平勝宝2年（750年）に神社として創祀されたという。則ち、奈良時代に国家事業としての東大寺毘盧遮那仏（所謂奈良の大仏）建立に際して鍍金に要する金の調達に苦慮していた大和朝廷の下に、天平21年（749年）2月、陸奥国から日本初となる金産出の報せとその金が齎されたが、その産出地が金華山であり、翌天平勝宝2年（750年）、牡鹿連宮麿（おしかのむらじみやまろ）等が時の国守に産金を司る神を祀る神社の創建を申請して金華山に金山毘古神と金山毘売神の2柱を奉祀し、後に弁財天を本尊とする寺院となったといい、日本初の産金を祝して大伴家持が詠んだ短歌、
天皇（すめろぎ）の御代（みよ）栄えむと、東（あづま）なる陸奥山（みちのくやま）に金（くがね）花咲く
に見える「金花（華）」に因んで島（山）名としたと伝える。なお、弁財天については金華山の太平洋岸に漂着した天女を金華山の山頂と麓とに祀り、麓を弁財天堂（大金寺）と山頂を竜蔵権現（現大海祇（おおわたつみ）神社）と称したとも伝え、また、産出した金を朝廷に献上した百済王敬福についても、牡鹿半島の北の付け根に近い女川町の御前浜（おまえはま、おんまえはま）に漂着したという伝説や、同地に住んでいたという伝えがあった。
江戸時代まではこの社伝縁起（当時は寺伝）が広く受け容れられ、陸奥国小田郡の式内社「黄金山神社」はこの産金に因んで創祀されたと考えられる為にその「黄金山神社」に比定されても来たが、文化10年（1813年）に伊勢国の国学者沖安海（おきやすうみ）が天平産金の故地は現宮城県遠田郡涌谷町（旧くは小田郡に属す）であり同地に鎮座する小金神明社が式内黄金山神社である事を査定して再興した為に（現涌谷町黄金山神社）、当神社の創祀に関する縁起も再考される必要が生じた。その結果、海上に屹立するその山容が牡鹿半島周辺沿岸部の人々から神霊の宿るものと意識されて島自体を神霊視する自然崇拝の対象とされていたと思われ、5峰に分かれて「峯巒六十八区、渓澗モ亦四十八谷」とも称される急峻な地形をなす金華山を、平安時代以降に修験者、それも大金寺に真言宗の開祖である弘法大師（空海）に結びついた伝承が多く見られる事や三陸地方の沿岸部一帯には弁財天を祀る真言宗寺院が多い事等からとりわけ真言系の修験者の活動によるものであったと思われるが、それら修験者が島を霊場として開くとともに大金寺を開創した事が発展の契機となったと推測される。その場合、修験者は本州島の最東端に位置する孤島という立地から金華山を古代中国や日本で希求された東方海上に浮かぶ仙土たる蓬萊山や常世国といった理想郷に見立て、大金寺を中心に金華山を開いて弁財天を祀った結果、弁財天の授福を司る神格が天平産金の史実及び「金花咲く」の歌に結び付けられたものとも考えられる。なお、仙台藩の藩撰地誌である『封内風土記』には、そもそもは神代に三輪明神が黄金を練って4本の樁（杭）で築（つ）いて金華山島を造り、天照大神の「正魂」を「留主姫大神」と称して鎮座させたのが後に弁財天となったとの縁起を「旧説」として載録している。また、式内「黄金山神社」説は否定されたが、代わりに陸奥国牡鹿郡の式内「大嶋神社」に比定したり同「計仙麻神社」に比定する説がある。
社伝等に因れば、永万から仁安の頃（12世紀中頃）に藤原秀衡によって大金寺を始めとする48の坊（堂塔）の建立と寺領1,000石の寄進がなされて大金寺を中心とする一山寺院（中核寺院と複数の寺社から構成される独立独派の寺院組織）となり、藤原氏の滅亡後は奥州総奉行として石巻城城主に封じられた葛西清重により堂塔は18坊に寺領は500石に減じられたものの、その保護を受けて寺運を盛んにしたという。その背景には奈良時代以降の朝廷による東北地方の開発や経略（所謂蝦夷征討）を前提に、前九年・後三年の役において戦力としてまたは従軍僧として参加し、その後も現地に留まって山中抖擻（とそう）の行や加持祈祷といった宗教活動の拠点として金華山に集まった修験者に対し、在地の豪族、とりわけ古代末に東北に覇を唱えた藤原氏がこれを平時における領内平安を祈る祈祷活動と戦時における兵力との両様を期待しうる存在と捉えて保護した事情があったと考えられ、鎌倉時代以降も領主との関係は同様であったと思われるが、数度の火災で古記録類が焼忘された為に中世を通じた様相は定かではなく、戦国時代に戦乱によって衰微し、天正年間（16世紀後半）には兵火に罹って全坊を悉く焼失したものを文禄2年（1593年）に下野国岩倉の出で日光山（輪王寺）の僧正でもあったという修験僧、成蔵坊長俊によって再興されたという。
江戸時代には仙台藩藩主の伊達家の崇敬を受けて一山（島）が除地とされて堂塔も再建されたと伝え、本末制度下において醍醐三宝院を本山とする当山派の修験寺院（本寺は仙台城下の龍宝寺）に位置付けられた。伊達家からの崇敬に関しては4代藩主綱村が元禄16年（1703年）に3箇月連続で家臣を代参させて砂金を献納した記録も残るものの、城下からの距離といった地理的条件もあってか藩主からの恒常的、直接的な援助は見られず、18坊を数えた寺院も結局大金寺1寺が残るのみの状態で、三宝院の末寺とされていたように規模としては一山寺院としての組織も勢力も解消されていた。その為に堂塔の維持等を図る大金寺の側は積極的に庶民に接近する必要が生じ、具体的には弁財天の福徳を説きつつ村々を廻る勧進活動を行ったものと考えられるが、その成果として大金寺（金華山）に対する信仰が盛んになり、江戸時代中期以降になると各地に講も結ばれて参詣する者も増えた。もっとも、文化10年（1813年）に火災に遭って再び全山が灰燼に帰しており、伊達家の援助により堂塔は旧観通りに再建されたというが、この際に一切の古記録が失われている。
明治維新後の神仏判然令を受け、明治2年（1869年）に大金寺を廃して金山毘古・金山毘売両神を祭神とする黄金山神社となるとともに大金寺の別当は還俗して奥海姓を称する神職となり、同7年6月に県社に列格した。なお、大金寺の廃寺に際しては、大金寺所蔵の仏典や仏像は悉く島外へ流出している。明治10年（1877年）以来社殿を新改築していたが、同30年2月に社務所付近の家屋からの出火により神体や神輿等を残す他は境内樹林を含めて三度目の全焼に遭った為、大正5年（1916年）の拝殿竣工を皮切りに漸次再建されたものが現社殿である。戦後は神社本庁に参加して昭和27年（1952年）にその別表神社となっている。
信仰

金華山は古く牡鹿半島周辺沿岸部の人々から崇拝の対象として、殊に漁民からは海上安全や漁の守護神として信仰を受けていたと思われ、後世の例ではあるが鰹漁といった遠洋での漁を行う者は沖を離れて金華山の姿が三分の一程度水平線に沈んだ辺り（およそ20海里）を「サンノゴテ（三の御殿）」と称して順次「ニノゴテ（二の御殿）」等となり、島影が小さく星の形のように見える地点（およそ45海里）を「ニオボシ（乳穂星カ）」と、完全に水平線下に没すると「ヤマナシ（山無し）」と称する等、金華山を山当て（漁場との距離を測る目安）に利用し、山容が見えない「ヤマナシ」にあっても日没時には金華山へ向かって灯明を捧げて拝む習いであったといい、また、遠洋から戻る際に「ニオボシ」を目にした時には得も言われぬ安堵感を覚えたとも言われる。その他、出漁に際しては金華山で祈祷を受け、山容を目に出来る島浜では正月等に必ずこれを拝むといい、或いは沖を通行する船は灯明を点して米を海中に撒いて拝み、秋刀魚漁では7尾の秋刀魚を海中に捧げて漁の無事と大漁とを祈ったという。また、航路に就いた水夫も航海安全の神として信仰し、安政5年（1858年）の仙台藩の軍艦開成丸の航海においても、水夫達は金華山を「御山御山（おやまおやま）」と唱え、大金寺が視界に入ると手を洗い口を漱いで、白米を海中に撒いて拝礼したという。
一方、古代から中世にかけて金華山に集まった修験者は大金寺を建立し、そこを拠点に峰々を巡る山中抖擻の修行に励んだと見られる。金華山修験の実態を伝える史料はないが、かつては島の東側に「金剛界」「胎蔵界」と呼ばれる所があったといい、現存する島内の「胎内潜り」や「蘇字（そじゅ）峠」、「天狗相撲取場」といった地名が修験に関するものと思われる事や、山頂の大海祇神社（旧竜蔵権現）の傍らに護摩壇が組まれている事は、修験者の山中抖擻が行われた事を窺わせる。特に胎内潜りは修行の場である山を母胎と見る修験道の思想を体現するもので、巨岩の基部に空いた腹這いになって潜れる程度の穴を抜ける事で新たな験力を獲得して生まれ変わるという擬死再生の儀礼も行われていたと思われ、また、金華山の北東部海岸に位置する「賽の河原」は、そこを訪れると亡き縁者の声が聞けると言われているので、山形県の山寺（立石寺）や青森県恐山の菩提寺と同様に祖霊・精霊の籠もる霊地としての信仰もあったと思われる。その大金寺における弁財天信仰は早くからのもので、それは『封内風土記』に載録する秀衡建立という48坊の坊名の頭文字が「大弁斎天」（大弁財天）の語呂合わせとなっている事にも窺えるが
、三陸沿岸部一帯に分布する弁財天の伝承、特に陸前地方の沿岸部一帯には漂着伝承を伴う河神（水神）としての弁財天信仰が盛んで、上述の如く金華山弁財天も海岸に漂着したとの伝えが共通している事から、元来は水神としての弁財天に対する信仰が基になったと考えられ、そこには主として沿岸部の漁民に抱かれた海の彼方からの漂着物を神聖視する古い寄神（よりがみ）信仰も窺えるのであるが、そうした基層信仰に修験者が東方海上の理想郷像を重ね、その理想郷を現実に表出すべく図り、その方途として弁財天の財運を齎す（もたらす）福神的側面を強調し、天平産金の史実及び「金花咲く」の歌とその福徳とを結び付けて盛んに喧伝したものと考えられる。
＜拾遺 その1＞
蘇字峠は金華山の東山中に位置し、開山上人（成蔵坊長俊）が千日廻峰行を行った地で俗人不入の聖地とされていた。その基底には山中の奥深い地に理想郷が存在するという山中他界観があり、一種の隠れ里的存在とされていたようであるが、或いは江戸時代に金銀島としての金華山像が形成された後にそれを更に局地化、矮小化した「すこぶる近世的所産」によるものとも思われる。
それらの成果が近世における金華山信仰圏の拡大であったが、黄金山神社に現伝する天正11年（1583年）の年紀をもつ大般若経納箱の蓋裏には中世には広く知られていた弁財天を中心に他の福神を周囲に配する曼荼羅が墨書されているので、福神としての弁財天信仰を媒介とした大金寺と民衆の結びつきも近世以前に遡るものであった。
近世以降には金華山信仰が盛行したが、その背景には領主や藩主といった有力者からの積極的な保護を失い危機感を募らせた大金寺やそこを拠点とする修験者が、寺院経営の維持を一般民衆に対する勧進に求め、信仰圏の拡大を図った結果があったと思われ、或いは受容する側の民衆にもよりよい世界を齎す日本固有の救世主、具体的には農作物の豊饒を齎す存在で関東、東海地方の沿岸部一帯に分布する鹿島踊の章句に現れるミロクを待望する心意が存在し、その「ミロク」が巳（ミ）の年、或いは巳の日に顕現するという信仰と、巳日の当日或いは前日に「巳待講」といった講を設けて集まり「ミロク」の到来を期する習俗があったのに対し、大金寺弁財天にも水神的神格から蛇（巳）を神使とする観念とともに巳年に大がかりな祭祀を行う巳年縁年が催されていた為に、修験者が「ミロク」「巳」「蛇」「弁財天」という連想を活用しつつ村落における信仰に弁財天信仰を習合させ、既存の巳待講等を金華山講に転化させる形で信仰圏を拡大させたものとも考えられる。なお、大金寺の勧進には弁財天像の出開帳を行う事もあったらしく、開帳された弁財天を開帳先で本尊とするようになったと伝える寺院も存在する。
信仰 > 金華山信仰

近世以降の金華山信仰は財運を主眼とする現世利益を弁財天に求めるものであるが、その根底には黄金産出による授福を待望する余りに在住地域のどこかに黄金に溢れた場所があってそれがいつの日にか現出するという民衆の期待があり、それに乗じた修験者が、金華山に天平産金の史実を結び付ける等しつつ民衆の理想が現実化した地として金華山の存在を説き、信仰圏の拡大を果たしたものと考えられ、遂には金華山周辺においては島の一角に黄金が埋まっていると信じられ、或いはほぼ全島が花崗岩から成り金鉱脈が存在しないにも拘わらず、広く全国的に金華山は黄金で出来た島であるといった観念を生じさせており、西川如見においては「世界の図に日本の東海に金島銀島ありとは此島（金華山）ならん」と、マルコ・ポーロの『東方見聞録』に代表されるヨーロッパ人の日本即金銀島観を受け容れ、それを更に局地的に金華山に当て嵌めている。
＜拾遺 その2＞
（きんこ）
金華山の近海に生育する海鼠は「金海鼠（きんこ）」と呼ばれ、金華山に生じる金砂を食するが故にかく名付けられたといい、佐久間洞厳が、色は濃い黄色で鶏卵の如くこれ即ち「金気の所化」であろうと述べる等、産金伝説との関連を示している。洞厳に因るとその形は円く裏に傷があるのが特徴で、橘南谿に因ると他産の海鼠に比べて小さく、味は格別で乾し堅めたものは日本全国で珍重されたといい、古川古松軒も背に金色があり、他産の海鼠とは大いに異なるとの聞き書きをしている。
金華山詣と金華山講
近世中期以降になると仙台藩内を初め他国からも弁財天による福徳の実現を求める参詣者を集め、仙台から石巻を経て金華山へ至る参詣道は当時の一般旅行案内書である『諸方早見道中記』や『諸国道中記』にも記され、それらによると石巻迄はほぼ石巻街道が利用され、そこから陸海の行路に分かれていたようである。但し、その後の経路については不分明で、渡波（わたのは）を経由して牡鹿半島西海岸を陸路または海路で南西端の鮎川迄向かう表浜（おもてはま）街道と、女川を経由して牡鹿半島東海岸を陸路で山鳥（やまどり）まで南下する裏浜（うらはま）街道とがあったと推測されている。両路とも直接海路で金華山へ赴くことも可能であったが、信心を験す意味からも陸路をとるものとされ、表浜街道で海路をとる場合でも鮎川で下船し、そこから駒ヶ峯の峠を越えて山鳥へ至る半島横断路が辿られ、山鳥に建つ一ノ鳥居を潜ってから山鳥渡（やまどりわたし）と呼ばれる海峡（山鳥の瀬や金華山瀬戸とも呼ぶ）を渡る習いで、山鳥に渡島者が集まった時点で鐘を撞けば島（金華山）から船が迎えに来たという。但し、金華山周辺は潮流が激しい難所として知られ、古来から難船も多く時化の晩には水死者の亡霊が現れて就航中の船に近寄っては柄杓を貸すように頼んだと言われているが、山鳥渡も距離は短いものの「御殿隠し」と呼ばれる大波が頻繁に立ち、余りに風波が激しい時には金華山からの迎船が来られない為に参詣者は鮎川へ戻って滞留する事もあった。金華山に着岸した参詣者は神聖な島へ俗界の汚穢を持ち込まないようにと新しい草鞋に履き替えてから上陸、大金寺へ参詣し、その後「お山がけ」と称する島内の登拝地巡拝（後述）に赴く場合は大金寺に一夜参籠して翌朝にお山がけに出立する例であった。また、金華山島は黄金で出来た島であると信じられ、参詣を終えて離島する際には金等の鉱石は勿論、一木一草から砂一粒に至る迄「島の神惜みたまふゆへ」に島外に持ち出す事は禁忌とされ、参詣者は上陸時の草鞋を桟橋に脱ぎ置く慣例であり、違背すれば帰船が動かなくなったり沈没したりするとも言われていて、真偽は不明ながら木内石亭が金華山に参詣して島内の金砂を窃かに懐中して帰路につくと乗船した船が荒波に遭遇して進めなくなり、船夫の詮索で事が露見した為に金砂を返却せざるを得なかったという逸話も残されている.。草鞋の慣例に見られる金華山を聖域視する観念は強く、大金寺の僧侶が遷化しても決して島内に埋葬する事は無く、その遺骸は対岸の山鳥まで運ばれていたといい、また女性の渡島は堅く禁ぜられ、彼等は上述山鳥の一の鳥居から山を遙拝したという。
また、各地に金華山信仰の為の金華山講と呼ばれる講が結成されたが、既存の講組織から転化したものもあったようで、中には巳待講と称され巳日を中心に種々の宗教行為をそのまま伴っていたものもあった。講への加入は女人禁制の思想から男子に限られ、それも主として戸主層から構成されており、年に数回設けられる開講日には多く講員から輪番制で宿を定めて集まり、座敷の床の間といった上座に金華山の掛け軸を掛けて祭壇とし、灯明を点して神酒を捧げ、講中で拝んでから精進料理での会食となる。遠隔の村落にあって経済的その他の理由から金華山詣が容易でない場合は、講を代表する代参者を選んだり（2人の場合が多い）、参詣を果たした代参者が授与された神札を講中に配布したりする。金華山詣が重ねられると、それを記念する石碑が村落の入り口や辻、鎮守社の境内等に建立される事があり、また弁財天を鎮守社境内に小祠として勧請したり屋敷神として祀ったりする事もあった。各地の金華山講には結成以来存続するものや一定期間の後に解散したもの等、様々な相があるが、現代では宮城県を中心とする東北諸県を始め北海道や千葉県に及ぶ大小併せておよそ500の講が存在し、大正10年（1921年）には黄金山神社が神社の再興と信仰圏拡大を図る目的で既存の講を編成し直した「永代講」の組織もある。
なお、金華山からの産金も有り得ず天平産金の史実も江戸時代中半には否定されてはいたが、明治・大正期に牡鹿郡一帯でよく歌われた遠島甚句（としまじんく）において「金華山には大箱小箱それにつづいて金もある」や「沖に大漁の風が吹けば島に黄金の花が咲く」と歌われ、同じく松坂ぶし（一名松島ぶし）において「東にあたりし金華山、あれは黄金の山じゃもの」と歌われたように、大正末期頃迄なお黄金で出来た島との幻想を抱く者も跡を絶たなかった。
祭祀

9月25日に例祭が行われるが、それ以外にも以下のような神事祭典がある。
社殿

本殿は三間社流造、拝殿は桁行5間梁間3間の入母屋造平入で前面に中央1間を軒唐破風とする3間の向拝を付す。ともに屋根は銅板葺。その他に祈祷殿や随神門等が建ち、祈祷殿では修験時代そのままに護摩木を焚いて祈願者の祈祷を行う。
現社殿群は明治30年の火災後、罹災から30年の年月を掛けて逐次再建されたもの。因みに焼失前の社殿群（明治10年代新改築の社殿）は建築や彫刻に豪華美麗を極め、その姿は「東奥の日光」とも称されたという。なお、大金寺の寺址が本殿西側にある。
拝殿前に建つ常夜燈は山形県山形市在住の崇敬者を発起人として明治25年と27年に1基宛奉納された一対の青銅製灯籠で、いずれも山形市の銅町（どうまち）で鋳造されたもの。高さは4.8メートルに及び、金刀比羅宮（香川県）、山寺立石寺（山形県）のものと共に「日本三大灯籠」と称される。
境内

→「金華山 (宮城県)」も参照
金華山全島を神域とし、近世には弁財天を中心に奥ノ院として金華山山頂に竜蔵権現が祀られ、その他愛宕権現や神明宮、不動堂といった普遍的な神仏を島内各処に勧請し、金華山そのものを霊島として大金寺が別当としてこれを支配していた。また、境内を含む金華山全島が1979年に国定公園に指定され（南三陸金華山国定公園の一部）、2015年には三陸復興国立公園への編入に伴い国立公園指定となった。
境内 > 主な境内社

祈願者による「お山がけ」も行われ、それには大きく表廻りと裏廻りの2種があるが、表廻りは本殿背後の末社滑石（なめらいし）神社から山中の奇岩奇石を巡って菖蒲平に達し、そこから山頂無双峯に登って大海祇神社を拝すもの。裏廻りは無双峯から同様に巨岩を拝しつつ胎内潜りを過ぎ、開山上人座禅石や山形石等の奇石を経て東海岸迄下った後に、千畳敷、千人沢、大函崎、賽の河原と東部海岸を巡り、阿弥陀峠を越えて本殿に帰る。
島内にはおよそ530頭の野生の鹿が蕃息し（平成19年（2007年）時点）、神使として保護されている。もっとも、仙台藩初代藩主の伊達政宗が金華山において鹿狩りを行ったとの伝えがあり、事実とすれば古くは狩猟も行われ、保護はされていなかった事になる。それが、江戸時代後期には鹿狩りの神罰によって勢子1,000人が海に沈められたとの伝えがあるので、近世以降に神使と見做されるようになったと思われる。また、境内社の滑石神社の祭神（武甕槌神）が茨城県鹿島神宮の分霊で同神宮が鹿と親密な関係をもつので、そこから金華山の鹿も神使とされたのではないかという推測もある。
文化財

（件名後の括弧内は指定の種別と年月日）
太刀 備前長船伝兼光（有形文化財、昭和58年12月17日）
太刀 山城粟田口住藤四郎吉光（同上）
牡鹿半島から望む金華山
上代特殊仮名遣

上代特殊仮名遣（じょうだいとくしゅかなづかい）とは、上代日本語における『古事記』・『日本書紀』・『万葉集』など上代（奈良時代頃）の万葉仮名文献に用いられた、古典期以降には存在しない仮名の使いわけのことである。
名称は国語学者・橋本進吉の論文「上代の文献に存する特殊の仮名遣と当時の語法」に由来する。単に「上代仮名」とも呼ばれる。
概要

上代文献には、歴史的仮名遣では区別しない音節（具体的には、コ・ソ・ト・ノ・モ・ロ・ヨ・〈ホ〉、キ・ヒ・ミ、ケ・ヘ・メおよびその濁音）を示す万葉仮名が二通りにはっきりと書き分けられていることが知られている。
二種類のうち、一方を甲類、もう一方を乙類と呼び区別する（橋本）。例えば、後世の「き」にあたる万葉仮名は支・吉・岐・来・棄などの漢字が一類をなし、「秋」や「君」「時」「聞く」の「き」がこれにあたる。これをキ甲類と呼ぶ。己・紀・記・忌・氣などは別の一類をなし、「霧」「岸」「月」「木」などの「き」がこれにあたる。これをキ乙類と呼ぶ。
イ段・エ段の甲乙の区別は動詞の活用にも見られ、四段活用では連用形にイ段甲類が、命令形にエ段甲類が、已然形にエ段乙類が出現する。上一段活用ではイ段甲類が、上二段活用ではイ段乙類が、下二段活用ではエ段乙類が出現する。
こうした甲乙の区別は、一々の単語ごとに習慣的に記憶されて使い分けられたものではなく、何らかの音韻の区別によると考えられている。すなわち、上代日本語にはいろは47字+濁音20の67音でなく、それより20音多い87音の区別があった。後世に存在しない音韻がどのように区別されていたかは諸説があって定説がないが、例えば母音が8種類あったなどと推定することが可能である。
8世紀後半になると、まずオ段のモから区別が失われ、他のオ段へも広がった。このような中間的な状態は、仏足石歌・宣命・正倉院万葉仮名文書・および木簡資料などに見られる。平安時代になると、ほとんどの区別は消滅したが、コの区別は9世紀前半まで、エの区別は10世紀前半まで残った。
音節表と万葉仮名の一覧表 > 音節表

上代特殊仮名遣における音節表。灰色部分が書き分けが存在する音節。
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| --- | --- | --- | --- | --- | --- | --- | --- |
| a | i | i | u | e | e | o | o |
| ka | ki1 | ki2 | ku | ke1 | ke2 | ko1 | ko2 |
| ga | gi1 | gi2 | gu | ge1 | ge2 | go1 | go2 |
| sa | si | si | su | se | se | so1 | so2 |
| za | zi | zi | zu | ze | ze | zo1 | zo2 |
| ta | ti | ti | tu | te | te | to1 | to2 |
| da | di | di | du | de | de | do1 | do2 |
| na | ni | ni | nu | ne | ne | no1 | no2 |
| pa | pi1 | pi2 | pu | pe1 | pe2 | po | po |
| ba | bi1 | bi2 | bu | be1 | be2 | bo | bo |
| ma | mi1 | mi2 | mu | me1 | me2 | mo1 | mo2 |
| ya |   |   | yu | ye | ye | yo1 | yo2 |
| ra | ri | ri | ru | re | re | ro1 | ro2 |
| wa | wi | wi |   | we | we | wo | wo |