アドレス指定あたりのイメージが全く付かない
広告
八王子さん
(No.1)
絶対アドレス指定や間接アドレス指定などの一つ一つの言っていることは機械的に理解していますが、アドレス指定方式の全容が何も分かりません。
1つの命令に、どのアドレス指定方式を使うのかは誰が決めているのですか?「このプログラムは絶対アドレス指定が1番効率がいいな」とCPUが決めているのか、プログラムを作った人が「この関数は即値アドレス指定にしよう」とプログラムに組み込んでいるのですか?
また命令を実行する前に、その命令で使う値が主記憶に既にあるというのもイメージが付きません。
例えば「現在の時間を返すexeファイル」があったとして、そのファイル内の命令の1つに「命令?次のアドレスにある時刻を表す数値を表示させる オペランド:1200」があったとして、オペランド1200番地に時刻の情報が書き込まれたのはいつなのですか?
1つの命令に、どのアドレス指定方式を使うのかは誰が決めているのですか?「このプログラムは絶対アドレス指定が1番効率がいいな」とCPUが決めているのか、プログラムを作った人が「この関数は即値アドレス指定にしよう」とプログラムに組み込んでいるのですか?
また命令を実行する前に、その命令で使う値が主記憶に既にあるというのもイメージが付きません。
例えば「現在の時間を返すexeファイル」があったとして、そのファイル内の命令の1つに「命令?次のアドレスにある時刻を表す数値を表示させる オペランド:1200」があったとして、オペランド1200番地に時刻の情報が書き込まれたのはいつなのですか?
2024.02.06 04:39
pixさん
★AP シルバーマイスター
(No.2)
アドレス指定とはCPUの動作の最も基本的なものになります。
CPUを直接操作することになりますので、言語はアセンブラになります。
どのアドレス指定を利用するかはプログラマが決めます。
利用される場面も以下のようなものと思われます。
・OSの開発にアセンブラを利用する場合
・組み込みの開発にアセンブラを利用する場合
現代のコンピュータにおいては通常ユーザーが直接CPUを操作するようなことは
ほぼありません。
すみません。それについてはなにか思い違いをしているのではないでしょうか。
事前に時刻の情報が書き込まれるとは考えずらいです。
それはどこからの引用でしょうか。
時刻を返すAPIやシステムコールを利用しているのではないでしょうか。
CPUを直接操作することになりますので、言語はアセンブラになります。
どのアドレス指定を利用するかはプログラマが決めます。
利用される場面も以下のようなものと思われます。
・OSの開発にアセンブラを利用する場合
・組み込みの開発にアセンブラを利用する場合
現代のコンピュータにおいては通常ユーザーが直接CPUを操作するようなことは
ほぼありません。
>また命令を実行する前に、その命令で使う値が主記憶に既にあるというのも
>イメージが付きません。
>例えば「現在の時間を返すexeファイル」があったとして、そのファイル内の
>命令の1つに「命令?次のアドレスにある時刻を表す数値を表示させる
>オペランド:1200」があったとして、オペランド1200番地に時刻の情報が
>書き込まれたのはいつなのですか?
すみません。それについてはなにか思い違いをしているのではないでしょうか。
事前に時刻の情報が書き込まれるとは考えずらいです。
それはどこからの引用でしょうか。
時刻を返すAPIやシステムコールを利用しているのではないでしょうか。
2024.02.06 07:28
八王子さん
(No.3)
すみません、時刻を返す云々は私がイメージするアドレス指定を書いただけなので恐らく実態とは全然違います。
しかし下のURL先でも「メモリの位置を指定」とありますし、他の記事を見ても流れとしては
(1)(何が起因かは全く分かりませんが)CPUに命令レジスタが読み込まれる(命令レジスタをCPTが読みに行く?)
(2)CPUが命令レジスタに書いてあるオペランドから得た値で、命令部の命令を実行する
という事ですよね?
このアドレス指定で命令文を解読するのは、CPUがある端末(スマホとかパソコンとか)で日常的に行われている技術なのですか?
最初の質問と被りますが、なぜ命令文を読解する前に、オペランドにそれを求める値が格納されているのですか?
アドレス指定方式を決めるのはプログラマとpixさんは仰っていますが、なぜプログラマはどのPCのどの主記憶のどの番地に何の値が入っているのか分からない段階でオペランドに「〇番地の値を参照してね」と書けるのですか?
https://www.ap-siken.com/s/kakomon/26_haru/q10.html
しかし下のURL先でも「メモリの位置を指定」とありますし、他の記事を見ても流れとしては
(1)(何が起因かは全く分かりませんが)CPUに命令レジスタが読み込まれる(命令レジスタをCPTが読みに行く?)
(2)CPUが命令レジスタに書いてあるオペランドから得た値で、命令部の命令を実行する
という事ですよね?
このアドレス指定で命令文を解読するのは、CPUがある端末(スマホとかパソコンとか)で日常的に行われている技術なのですか?
最初の質問と被りますが、なぜ命令文を読解する前に、オペランドにそれを求める値が格納されているのですか?
アドレス指定方式を決めるのはプログラマとpixさんは仰っていますが、なぜプログラマはどのPCのどの主記憶のどの番地に何の値が入っているのか分からない段階でオペランドに「〇番地の値を参照してね」と書けるのですか?
https://www.ap-siken.com/s/kakomon/26_haru/q10.html
2024.02.06 14:01
pixさん
★AP シルバーマイスター
(No.4)
>このアドレス指定で命令文を解読するのは、CPUがある端末(スマホとかパソコンとか)で
>日常的に行われている技術なのですか?
>最初の質問と被りますが、なぜ命令文を読解する前に、オペランドにそれを求める値が
>格納されているのですか?
この件を理解するには、コンピューターの基礎理論を理解する必要があります。
そもそも現代のコンピューターとはなにか。コンピューターの理論と実装はどうやって
決められたかについての理解が必要です。
例えば、自動車はエンジンが1つ、タイヤが4つ、ハンドルが1つ、ブレーキと
アクセルとギアがついています。
当たりまえのようですが、自動車においてこのような構成を決めた人がいるはずです。
私は自動車エンジニアではないので分かりませんが・・・
それと同様にコンピューターにおいて
・制御装置(現代のCPUの機能)
・演算装置(現代のCPUの機能)
・記憶装置(現代のメモリの機能)
・入力装置
・出力装置
この5つの装置が基本的な構成であることを理論実装したのは、今から70年以上前、
原子爆弾の開発に関わった世紀の天才、ジョン・フォン・ノイマンです。
現在でもこのアーキテクチャのことをノイマン型コンピューターと呼びます。
ノイマン型コンピューターの特徴は
・メモリ上にプログラムを配置する
・CPUはメモリ上のプログラムを逐次読み込み、実行を繰り返す
というものです。これは一般的にストアードプログラム方式とも呼ばれます。
現代のコンピューターのほぼすべてはノイマン型コンピューターであり、
ストアードプログラム方式を採用しています。
信じられないかもしれませんが、ノイマン型コンピューター以前のコンピューターは
メモリにプログラムを配置するといった概念すら存在していませんでした。
もし、将来とてつもない天才が現れて、ノイマン型コンピューターを超える
仕組みを発明すれば、ストアードプログラム方式が過去のものになるかもしれません。
>アドレス指定方式を決めるのはプログラマとpixさんは仰っていますが、
>なぜプログラマはどのPCのどの主記憶のどの番地に何の値が入っているのか
>分からない段階でオペランドに「〇番地の値を参照してね」と書けるのですか?
すみません。ここに関しては込み入った話は非常に難しくなります。
概要ですが、現代のOSは仮想記憶を用いており、プログラマが直接アドレスを
指定するようなことはほぼないです。
アセンブラレベルであれば、ラベルにより間接的な参照となります。
組み込み環境などであれば、OSが存在しないため、絶対アドレスでプログラムを
組む様な場合も多少ですが考えられます。
どちらかというと、IPAの試験で問われるコンピューターアーキテクチャは
学習のために内容を極端にシンプルにしたものです。
敢えて言えば、50年以上前のシンプルな時代のコンピューターの
アーキテクチャを学習しているようなものです。
現代のコンピューターアーキテクチャはこの何倍も複雑となっています。
ですので、IPAの試験でのアーキテクチャが現代のコンピューターアーキテクチャに
ぴったり当てはまるようなことはあまりないと考える方よいです。
もし現代のコンピューターアーキテクチャに照らし合わせるのであれば、
OSや仮想記憶、アセンブラやコンパイラなどの様々な知識が必要になります。
2024.02.06 15:40
八王子さん
(No.5)
頓珍漢な質問に丁寧なご回答ありがとうございます。
つまり、資格試験突破を目指すレベルなら
(1)補助記憶装置にプログラム(Excelとかのイメージでも合ってますかね?)を保存
(2)実行する際はメモリにプログラムを展開
(3)CPUが一行一行メモリから読み込み実行。
(4)この際、CPUはプログラムに書かれたアドレス指定方式に則り、メモリから値を取ってきて計算する。
※これがノイマン型コンピュータであり、ほぼ全てのコンピュータはこの方法でプログラムを実行している
……という認識で十分という事ですか?
つまり、資格試験突破を目指すレベルなら
(1)補助記憶装置にプログラム(Excelとかのイメージでも合ってますかね?)を保存
(2)実行する際はメモリにプログラムを展開
(3)CPUが一行一行メモリから読み込み実行。
(4)この際、CPUはプログラムに書かれたアドレス指定方式に則り、メモリから値を取ってきて計算する。
※これがノイマン型コンピュータであり、ほぼ全てのコンピュータはこの方法でプログラムを実行している
……という認識で十分という事ですか?
2024.02.06 17:24
pixさん
★AP シルバーマイスター
(No.6)
>……という認識で十分という事ですか?
はい。その認識で十分です。
このような単純さはおよそ50年前くらいのコンピューターのものです。
単純ですが基礎中の基礎なので、コンピューターアーキテクチャの
基礎を理解する上で適しているのでしょう。
コンピューターの進化は常に早いです。
特に2000年代以降の進化のスピードはある意味、異常すぎるくらいです。
現代のコンピューターしか経験のない方からすると、IPAの試験で学習する
コンピューターアーキテクチャは古典を学んでいるようなものです。
そのため、いまひとつピンとこないのかもしれません。
ですが、現代のコンピューターにもアーキテクチャは存在しています。
もし、現代のコンピューターアーキテクチャを学ぶのであれば、IPAの
古典的なコンピューターアーキテクチャの知識の十倍以上の知識量が
必要になるでしょう。
2024.02.06 17:40
八王子さん
(No.7)
ありがとうございました。大変参考になりました。
2024.02.06 19:36
返信投稿用フォーム
スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。