• ベストアンサー

命令レジスタとデコーダ

翻訳の勉強をしていて、プログラムについては門外漢です。 「命令レジスタには機械語命令が格納される」「命令レジスタに格納された命令をデコーダが解読する」とテキストに書かれているのを読みました。 機械語は既に0か1であると思うので、それをどう解読するのか、「解読」の意味が分かりません。 詳しい方、できれば簡潔に解説をお願いします。

noname#225019
noname#225019

質問者が選んだベストアンサー

  • ベストアンサー
  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

機械語は確かにただの数値の羅列です。 しかし、その数値には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を引く」を実行します。 上記の流れの中で、数値から実行すべき処理とその処理の長さを割り出している箇所がありますよね。 その箇所のことを「解読」と言っているのです。

noname#225019
質問者

お礼

ありがとうございます。 お礼が遅くなり申し訳ありません。

noname#225019
質問者

補足

回答ありがとうございます。 ご説明では、「02」は、「この命令の次の数を足す」という命令の意味を持つ場合と、単に「2」という数字を表す場合があるということでしょうか? 同じく「04」にも「この命令の次の数を引く」という意味と「4」という数字の意味があるということでしょうか? 「02」や「04」が表しているのが命令であるのか数字であるのかは、レジスタに読み込まれた時に「02」または「04」が前の命令の対象になっているかによって判断される、ということですか?

その他の回答 (5)

  • seph02
  • ベストアンサー率0% (0/1)
回答No.6

No5です。 「訳して」を「理解して」に置き換えてください。。。

  • seph02
  • ベストアンサー率0% (0/1)
回答No.5

たとえば日本人が英単語で「add」と命令された場合に 頭の中で「追加」と訳して行動を行う場合を想定します。 英単語「add」は26種類のアルファベットa~zのパターンで表現されていますが、 機械語では0と1の2種類のパターンでこれを表現します(仮にこれを「01001101」とします) ここで上記「日本人」の部分を「CPU」に置き換え、命令を目で見た情報を一時的に記憶する脳の一部分を「命令レジスタ」とした場合・・ CPUが(命令レジスタ経由)で「01001101」と命令された場合に、 内部でこれを「追加」と訳して行動(処理)を行う ・・というようなイメージとなります。 この「01001101」を「追加」に訳す部分が「解読」となり、それを行う工程をデコードと呼んでいます。

noname#225019
質問者

お礼

ありがとうございます。 お礼が遅くなり申し訳ありません。

  • 530529
  • ベストアンサー率16% (86/521)
回答No.4

既に、何人かの方が書かれておられるようですが.... 1.命令レジスタ自体が複数ビットを格納出来ます。   そのビット数は8ビットの倍数である事が多いです。 2.命令レジスタ自体に格納された0,1の組み合わせで、何をするかが決められています。   例えば、「足し算」、「引き算」等々。また、CPUの種類により異なる事が多いです。

noname#225019
質問者

お礼

ありがとうございます。 お礼が遅くなり申し訳ありません。

  • Tasuke22
  • ベストアンサー率33% (1799/5383)
回答No.3

多分、疑問に思われていることは0,1以下に分解できないから 解読という意味合いが納得出来ない、ということだと思います。 この場合の解読というのは、 命令コードの部分は命令によってビット数が違ったり、 レジスタと命令内のコードだけで演算できたり、 オペランドをアドレスとしてそのアドレス内のデータとレジスタを演算したり、 と命令の最終実行まで段階を追って手続きが必要なことを言っていると思います。 更に言うと、機械語は最終段階と思われるかもしれませんが、機械語の実行は 具体的にはマイクロ命令が行います。 例えば機械語でL(ロード)というとあるアドレスの値をレジスタに持ってきますが、 これはマイクロ命令で、どこそこのゲートを何マイクロ秒開けろ、とかの命令の 組合せで実行されます。

  • koujikuu
  • ベストアンサー率43% (428/992)
回答No.2

コンピュータにも種類ごとに命令コードが違うので、一例として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-コード一覧/

noname#225019
質問者

お礼

ありがとうございます。 お礼が遅くなり申し訳ありません。

関連するQ&A

  • アドレスレジスタは物理的に存在しますか?

    情報系の勉強している、初心者です。 アドレス修飾というところを今勉強中です。 命令が読み出しから実行終了までのステップを    段階      関係するレジスタ等 1. 命令の取り出し:命令アドレスレジスタ,命令レジスタ 2. 命令の解読:デコーダ,演算装置(演算命令の場合) 3. 有効アドレス計算:アドレスレジスタ,主記憶装置 4. データの取り出し5. 命令の実行:演算装置(演算命令の場合) 6. 演算結果格納:主記憶装置 ・・と説明しています。(一部省略している部分があります。)  そこで、この流れが意味することがいまいちつかめないし、覚えられないので パソコンの中をみて確かめようと思いました。 使っているノートパソコンのメモリーは取り出せました。が、一番知りたかったCPUはどこにあるのか分からなかったので、インターネットでアドレスレジスタや命令レジスタを視覚的にとらえられないかといろいろ調べましたが・・イメージ図は出てくるのですが写真は見つけられませんでした。 アドレスレジスタ・デコーダ等が実際に存在するのか、アドバイスお願いします。

  • ハイパースレディングのレジスタについて

    ハイパースレディングのレジスタについて ハイパースレッデイングのCPUで2つのスレッドA,Bを動かすとする。 このときAの実行状態を示す汎用レジスタやプログラムカウンタと     Bの実行状態を示す汎用レジスタやプログラムカウンタの扱いはどうなのでしょうか。 次の2つの方法が考えられる。 (1) レジスタのロード、実行、レジスタのセーブを繰り返す方法。     CPU内に高速なメモリを持ち、実行前にレジスタに値をロードして、命令を実行して、レジスタの値を保存を繰り返して、A,Bのスレッドを実行する方法。 (2) A用のレジスタとB用のレジスタを2組用意して、相互に切り替えながら実行する方法。     Aを実行するときはA用のレジスタを使用して、Bを実行するときはB用のレジスタを使用する方法。 の2つが考えられるが、それとも他の方法があるのでしょうか。 それに関連して、1度に実行する機械語命令の個数はいくつなのでしょうか。 スレッドAの機械語命令を実行して、切り替えてBの機械語命令を実行するときに、 Aの1命令を実行してから、Bの1命令を実行する。1命令毎に切り替えるのでしょうか、 それともAの数個の命令を実行してから、Bの数個の命令を実行するのでしょうか。 このときスレッドを切り替える際に1度に実行する機械語命令の個数はいくつでしょうか。 ご存知の方がおりましたら、教えて下さい。

  • PLCの命令語の使い方について

    PLCのラダープログラムを勉強し始めたところの初心者です。 各種PLCには様々な命令語が用意されています。(基本命令、応用命令、演算命令など) これらの基本命令について、個々の動作については取扱説明書を読めば理解できますが、 実際にこれらの命令を使って装置のプログラムを書くときに、何をどう使うことが有効なのか? この辺りがよくわかりません。 たとえば、データシフト命令について、内部レジスタを右にシフトしたり左にシフトしたり。 そういうことができるのはわかりますが、じゃあそれを使ったら装置ではどんなことができるのでしょうか? データ転送命令などもよくわかりません。MOV命令でデータをレジスタに格納できることはわかりましたが、これが何の役に立つのやら… 全くの初歩的な質問で申し訳ないですが、取扱説明書を隅々まで読んでいますが、命令語の基本的な機能については紹介してくれていますが、実世界での使い方については全くと言っていいほど触れられていません。 どんな時に、こうした命令語が有効なのか?具体的な例を教えていただければ幸いです。 また、そうした具体例をまとめたようなサイトがあれば併せてご教授いただけませんでしょうか。 よろしくお願いします。

  • 複数バイト命令実行のタイミング

    1バイト単位でメモリの各アドレスにデータが保存されているコンピューターにおいて、複数のバイトで表される命令がどのように実行されるのか教えて下さい。 メモリには一つのアドレスごとに8ビット(1バイト)のデータが入っており、CPUはプログラムカウンタで示されたメモリ上のアドレスにあるデータや命令を一つずつ順番に読み込んで、それをデコーダーが解釈し各回路への指令に変換することでプログラムを実行していくということは理解しています。 しかし現在の32ビットコンピューターなどにおいてアセンブリの命令、例えば「MOV A,B」(Bレジスタの内容をAレジスタにコピーする)といった命令は、「B90001」などの3バイトのマシン語で表されるとすると、メモリ上では アドレス  内容 0000  0xB9 0001  0x00 0002  0x01 のように3つの連続するアドレスにまたがってデータが存在し、CPUが「MOV A,B」を読み込み、それを順次デコーダーに送るまでには「MOV」、「A」、「B」の3クロックを要すると思います。 その際、デコーダーが命令を解釈し各回路に指令の信号を送るタイミングというのは、最後の「B」のデータを読み込んだ時点になるのでしょうか?もしそうならば、3クロック目に最後の「B」のデータがデコーダーに到着するまでの間、「MOV」と「A」のデータというのはCPUにメモリから読み込まれた後はどのように扱われるのでしょうか? 少し質問が分かりにくく恐縮ですが、情報工学を独学で勉強しており、プログラムが実際の回路でどのように実行されるのか理解したいと思っています。 どうぞご回答よろしくお願い致します。

  • アドレス指定方式での、命令語が参照する番地

    16進数で”C13B0206”という32ビットの命令語があります。 <命令語の仕様> 0~7ビット:命令指示部 8~10ビット:レジスタ 11~15ビット:アドレス修飾部 16~31ビット:番地 <アドレス修飾と参照番地の関係> 00 0固定 直接アドレス (11,12の値が00、13~15の値が0固定のとき、直接アドレス。) 01 0固定 間接アドレス 10 インデックスレジスタ インデックスレジスタ+番地の値 11 インデックスレジスタ インデックスレジスタ+番地が示す内容の値 <主記憶、レジスタの状態> ●主記憶に格納されている値(16進数) 番地(16進数)が  202,203,204,205,206,208,209,20A...の順に、それぞれの格納値は、 203,204,205,206,208,209,20A,20B...。 ●インデックスレジスタに格納されている値(16進数) インデックスレジスタ番号(16進数)が1,2,3,4,5… の順に、それぞれの格納値は、 0,1,2,3,4…。 (1) アドレス修飾部のインデックスレジスタ番号。 命令語の”C13B0206”で、アドレス修飾部にあたるのが”3B”。00111011(2進数)。8~10ビットの001がレジスタになるから、3。 (2)命令の番地部の番地の値(16進数) 命令の番地部の番地の値。命令部では、”0206”。ちょうど16進数なので、206。 (3) 命令が最終的に参照する番地。 上の、<主記憶、レジスタの状態>より、11~15ビットが”1011”。 インデックス番号が11(2進数)なので、3(16進数)。インデックスレジスタ番号が3のとき、格納されているのは2。番地の値である206と3を合わせ、209。 最終的に参照される番地は209。 (1)(2)(3)、自分の解き方が正しいのかどうか自信がありません。どなたか補足、訂正などありましたら、よろしくお願いいたします。

  • CASLとフラグレジスタ

     私は今CASLの勉強をしています。  今はLD命令や分岐命令を使ってプログラムを作っているのですが、LD命令のフラグレジスタの設定の説明がよくわからないところがあるのです。  それは、LD命令は転送する値によってFRが決まるということですよね。それは、転送を命令された番地の数字(すなわち番地名)なのか、それともその番地に入っている値そのものなのかがなかなか調べても出てきません。  初心者な質問ですが、どなたか回答よろしくお願いします。

  • 三菱製PLC:ファイルレジスタ(R)の使い方

    現在他人が作ったシーケンサを読んでいます。 その中でファイルレジスタ(R)というものを使用しているのですが それが、どういうものかというのは「QnUCPUユーザーズマニュアル(機能解説・プログラム基礎編)」 をよんでなんとなく分かりましたが、基本的な使い方がよく分かりません。 たとえば、Rの値を読み出す命令はあるのですが   例) [* K6000 R480 D560]      6000とR480の中身を乗算してD560へ格納 プログラムの何処を見渡してもRの値を出力、または値を定義している命令がみあたりません。 実態は何処にあるのでしょうか? もしくは自動で振り当てられるのでしょうか? **装置の構成としては** 三菱のQシリーズのCPUユニット(Q03UDECPU)を使用し その他インテリジェント機能ユニットなども多数使用しています。 ちなみに「QnUCPUユーザーズマニュアル(機能解説・プログラム基礎編)」 を読んでも分かりませんでした。。。 初心者で申し訳ありませんがどなたかご教授をお願い致します。

  • オペランド

    基本情報技術者の問題でわからないところがあったので教えてください。 【問題】 機械語命令のインデックス就職によってオペランドアドレスを指定する場合、表に示す値のときの有効アドレスはいくらか? 【答え】 110 【表】 インデックスレジスタの値 10 命令語のアドレスの値  100 命令が格納されているアドレス 1000 【質問】 オペランドの意味はわかりますが、どうしてこうなるのわかりません。(問題の意味がわかってないかも)

  • 情報処理概論

    今情報処理概論という勉強をしています。教科書をよんでもわからないので2つ質問です。 1.プログラムカウンタと命令レジスタ  例えばプログラムカウンタが”2256040”であるとき、次のフェッチサイクルではこの番地からはじまる命令が命令レジスタに移され移された命令が4バイト命令であれば、プログラムカウンタには4が加えられる。、と教科書に書いてあるのですがチンプンカンプンです。誰かわかりやすいように説明していただけますか? 2.演算装置について  例えば”01001010 11001101”と表記されている命令は、あるコンピュータでは”1010 11001101”にある16ビット符号付整数を演算装置のレジスタ(アキュムレーター)の内容に加え、その結果(和)をアキュムレーターにセットすることを意味する。、と教科書に書いてあります。まったく意味不明なので誰かわかりやすく説明できる人回答お願いします。 ながくなりましてすいません。よろしくお願いします。

  • CASL2(減算命令と比較命令の違い)

    CASL2勉強用のテキストに【以下】のような説明文がありました。前半部分の意味は分かるのですが、後半部分(SFに設定される・・・)という所からの説明の意味がよく分かりません。 【比較演算命令の特徴】  比較減算命令(CPA、CPL)の大きな特徴は、命令の実行によって状態が変化するハードウェアはFRだけである点である。比較演算命令の実行によって、汎用レジスタや主記憶装置の状態はまったく変化しない。  SFに設定される値は、比較命令では比較される数値の大小によって決定されるが、減算命令では演算結果の最上位ビットの値が設定される。このことから減算命令ではSFの値だけから元の数値の大小を判定することができない。 (1)減算命令の結果の最上位ビットがマイナスになって大小関係が判定できない場合などあるのでしょうか?(例)12-15=-3 → 12<15 このように判定できているように思うのですが? (2)そもそも大小の判定は減算によって判定しているのではないのでしょうか?それでは、内部的にはどのようにして大小判定を行っているのでしょうか? そもそも文章を理解できていないのかも知れませんが・・・ よろしくお願いします。

専門家に質問してみよう