質問: CPUなどには幾つかのポートが接続されていると思います。 例えば、文字を入力したら受け取るポートやディスプレイに文字などを表示するポートなどがあると思うのですが、CPU内に入力された文字を受ける取るだけの専用レジスタやディスプレイに文字を表示するためだけの専用レジスタがあるのでしょうか? それ以外は多分、演算回路へ数値を送るための専用レジスタや値を一時的に維持するための凡用レジスタなどですかね。 そうでなければ、どのようにしているのでしょうか? 専用のレジスタを使わずに文字データや色をどうやってCPUで判断してデイスプレイなどに行くポートのレジスタを使っているのか知りたいです。 凡用レジスタなどをいかに工夫して文字や色のデータを表示したりしているのか気になります。 アセンブリ言語などでもウィンドウの画面全体を赤色で表示させるにもレジスタを指定すると思いますが、色のデータを扱うようなレジスタを指定したりするのかなど。 HELLO WORD をアセンブリプログラムにしてみましたが、 ``` .section .rdata,"dr" LC0: .ascii "Hello, world!\0" .text .globl _main .def _main; .scl 2; .type 32; .endef _main: LFB10: .cfi_startproc pushl %ebp # .cfi_def_cfa_offset 8 .cfi_offset 5, -8 movl %esp, %ebp #, .cfi_def_cfa_register 5 andl $-16, %esp #, subl $16, %esp #, call ___main # movl $LC0, (%esp) #, call _puts # movl $0, %eax #, _3 leave .cfi_restore 5 .cfi_def_cfa 4, 4 ret .cfi_endproc LFE10: .ident "GCC: (MinGW.org GCC-6.3.0-1) 6.3.0" .def _puts; .scl 2; .type 32; .endef ``` pushl %ebpから文字データをレジスタ%ebpに入れてからいろいろやっているのかと思いきや%ebpはスタックポインタなどのレジスタなので違うと考えています。 また文字データとは言え数値ですのでeaxレジスタにHELLO WORD と出るような(演算結果の)数値を入れてポートを経由して数値が文字として画面に表示されるのかなとも考えています。 出来る限り詳しく説明して頂けると大変勉強になります。 CPU内に入力された文字を受ける取るだけの専用レジスタやディスプレイに文字を表示するためだけの専用レジスタから(例えばA)ポートを使ってたり、 CPUの文字を受け取る専用レジスタに文字データを入れたり、入力した文字を(例えばB)ポートを経由してディスプレイに文字を表示する専用のレジスタに文字データやRGBのデータを入れているのでしょうか? ただ、文字も色も数値でしかないので、 文字を表す数値の時は、色を表す数値の時は、どこどこのレジスタを通るなど、物理的にCPUやGPUであらかじめ製作者側によって作られているのかもしれませんね。 長文の質問になってしまいましたがどうかよろしくお願いいたします。 //編集内容// 例えば‘A‘という文字を表示するため、Aの二進数データをデイスプレイに表示するためにアセンブリ命令でどのように命令するのでしょうか?どのレジスタを指定してもいいのでしょうか? どのレジスタを指定してもいいとしてもデイスプレイに文字を表示するためのポートやメモリを指定するのでしょうか? 先ほどPICマイコンとLCDモジュールの解説について読んでいました。 PICでは自分で出力ポートが決められ、そのポート先にLCDを取り付ければ文字を表示することができます。CPUの場合はマイコンとは違い複雑ですが、文字を表示するための出力ポートはあると思います。 そのポートはマイコンと違って製作者が決めているため、どの出力ポートを使えばデイスプレイに文字が表示されるかわかりません。 またアセンブリ言語でレジスタを指定できても、出力ポートまでは指定できないと思います。 なのでその出力ポートと繋がったレジスタに二進数のデータを入れれば、レジスタからポートを経由して二進数データに対応した文字をデイスプレイに表示してくれるのではないかと考えました。 正直アセンブリ言語でどこまで直接動かせるかはわかりませんが、CPUで文字として扱うようにbitを立てるなどする、えーと、文字などを扱う時のオペランドを使ってデータを扱えば、コンパイラでオペランドが二進数されたときのオペランドのbitによってCPUのほうに文字データを扱っていること指定する。 このオペランドによってどのレジスタを関与してもオペランドのbitデータによってちゃんと文字データとしてCPUで扱われ文字のデータをレジスタから文字をデイスプレイに表示するためポートへ送られ、結果としてデイスプレイに文字が表示されるのかなとサイトを調べていて考えました。 もし以上のことが全く違うとすると、レジスタと演算回路では所詮、数値を求めるだけであり、その数値をどのように(アセンブリプログラムなどで)扱って文字データだよとCPUに認識させる?というか扱わせるのかなと疑問があります。 いったいどのようにアセンブリ命令すればCPUのほうでデータを文字データとして扱い、なおかつその文字データをデイスプレイに表示してくれるのでしょうか? アセンブリ命令で文字データであることやその文字データを指定したレジスタに入れること、そして指定したレジスタからデイスプレイに表示するためのポートなどまで指定して、文字をデイスプレイに表示できるのでしょうか? 編集内容となってしまいましたが、どうかよろしくお願いいたします。
回答: 画面表示機能はCPUの機能ではありません。 CPUの機能はあくまでも演算処理です。他の機能は他の装置が担当しています。CPUの演算結果に応じてバスの状態が変化しますので、これを他の装置が検出して動作する仕組みとなっています。 つまり、CPUだけの立場からすれば、「どの数値が色に対応する」というようなことは考える必要がありません。プログラマが両方のルールを理解したうえで、ロジックを作っています。