プロが教えるわが家の防犯対策術!

翻訳の勉強をしていて、プログラムについては門外漢です。

「命令レジスタには機械語命令が格納される」「命令レジスタに格納された命令をデコーダが解読する」とテキストに書かれているのを読みました。

機械語は既に0か1であると思うので、それをどう解読するのか、「解読」の意味が分かりません。

詳しい方、できれば簡潔に解説をお願いします。

A 回答 (6件)

No5です。


「訳して」を「理解して」に置き換えてください。。。
    • good
    • 1

たとえば日本人が英単語で「add」と命令された場合に


頭の中で「追加」と訳して行動を行う場合を想定します。

英単語「add」は26種類のアルファベットa~zのパターンで表現されていますが、
機械語では0と1の2種類のパターンでこれを表現します(仮にこれを「01001101」とします)

ここで上記「日本人」の部分を「CPU」に置き換え、命令を目で見た情報を一時的に記憶する脳の一部分を「命令レジスタ」とした場合・・

CPUが(命令レジスタ経由)で「01001101」と命令された場合に、
内部でこれを「追加」と訳して行動(処理)を行う

・・というようなイメージとなります。

この「01001101」を「追加」に訳す部分が「解読」となり、それを行う工程をデコードと呼んでいます。
    • good
    • 0

既に、何人かの方が書かれておられるようですが....



1.命令レジスタ自体が複数ビットを格納出来ます。
  そのビット数は8ビットの倍数である事が多いです。

2.命令レジスタ自体に格納された0,1の組み合わせで、何をするかが決められています。
  例えば、「足し算」、「引き算」等々。また、CPUの種類により異なる事が多いです。
    • good
    • 0

多分、疑問に思われていることは0,1以下に分解できないから


解読という意味合いが納得出来ない、ということだと思います。

この場合の解読というのは、
命令コードの部分は命令によってビット数が違ったり、
レジスタと命令内のコードだけで演算できたり、
オペランドをアドレスとしてそのアドレス内のデータとレジスタを演算したり、
と命令の最終実行まで段階を追って手続きが必要なことを言っていると思います。

更に言うと、機械語は最終段階と思われるかもしれませんが、機械語の実行は
具体的にはマイクロ命令が行います。
例えば機械語でL(ロード)というとあるアドレスの値をレジスタに持ってきますが、
これはマイクロ命令で、どこそこのゲートを何マイクロ秒開けろ、とかの命令の
組合せで実行されます。
    • good
    • 0

コンピュータにも種類ごとに命令コードが違うので、一例としてZ-80の場合で説明します



命令の単位は1バイト(8ビット)なので 256種類の命令を表せます 
(命令によっては次のデータ、アドレス等が続き4バイトになるときもある)
上位2ビットが、01 ならばレジスタ間の転送命令を表し、続く3ビットで転送されるレジスタ名
次の3ビットで転送するレジスタ名を表します
このように命令の並びは規則性があり、上位ビットを見れば何の命令か判断できます、(一部例外もあります)
01XX XYYY LD レジスタ間転送命令
1000 0XXX ADD 加算命令 XXXはレジスタを表す
1000 1XXX ADC 加算(Cy含む)命令
1001 0XXX SUB 減算命令
1001 0XXX SBC 減算(Cy含む)命令
1010 0XXX AND
1010 1XXX XOR
1011 0XXX OR
1011 1XXX CP
のように上位ビットで各処理に振り分けています。

http://poke-com.jimdo.com/z80-機械語に触れる/z80-コード一覧/
    • good
    • 0

機械語は確かにただの数値の羅列です。


しかし、その数値にはCPUが行うべき処理が割り振られています。たとえば「何もしない」には00,「1を足す」には01といった具合に。
ここで問題なのはその次です。「2を足す」という処理を何らかの数値に割り当てるべきでしょうか?

もし割り当ててしまったら、じゃあ3は? 4は? という具合にキリがありません。
そこで、「この命令の次の数を足す」という命令を用意して(02に割り当てます)、02 02としてやれば2を足す処理になります。

さて、同じように03に「1を引く」を、04に「この命令の次の数を引く」を割り当てたとします。
その状態で、次のような数値の羅列があったとして、これをどう解釈しましょうか。

 01 02 04 03

まず、最初の01を命令レジスタに格納し、その値に対応する処理が何かを見ます。これは「1を足す」ですから1を足します。
次に、02を命令レジスタに格納し、その値に対応する処理が何かを見ます。これは「この命令の次の数を足す」ですから4を足します。
次に、04……は前の命令で使ったのでその次の03を命令レジスタに格納し、その値に対応する処理が何かを見て、「1を引く」を実行します。

上記の流れの中で、数値から実行すべき処理とその処理の長さを割り出している箇所がありますよね。
その箇所のことを「解読」と言っているのです。

この回答への補足

回答ありがとうございます。

ご説明では、「02」は、「この命令の次の数を足す」という命令の意味を持つ場合と、単に「2」という数字を表す場合があるということでしょうか?
同じく「04」にも「この命令の次の数を引く」という意味と「4」という数字の意味があるということでしょうか?

「02」や「04」が表しているのが命令であるのか数字であるのかは、レジスタに読み込まれた時に「02」または「04」が前の命令の対象になっているかによって判断される、ということですか?

補足日時:2014/05/03 20:53
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!