• 締切済み

プログラミングとコンピュータについて

プログラミングとコンピュータについて 大学でプログラミング(C言語)を勉強をしててふと思いました プログラミングでどうやってCPUとかメモリとか、そういったコンピュータの深い部分を操作できるのでしょうか? すみません 抽象的でどう説明したらいいかわかりません 簡単なプログラミングだったらカレンダーとか電卓とか作れますが、これらのプログラムってCPUとかメモリとかOSとかの根本的な部分があればこそ成り立つものですよね 例えばCPUの状態を表示するソフトウェアだったりレジストリを削除するツールだったり、こういうプログラムってプログラムが直接コンピュータの根本的な部分と直結してるってことですよね? つまりハードとソフトの境目がどのような構造なのかよくわからないって感じですかね ソフトを作るのはプログラミングだけどソフトとハードを繋げるのもプログラミング ゲームとかスクリーンセーバーとか電卓とかを作っても、これでどうやってwindowsやLinuxは作れたんだろう?って思ってしまいます C言語や他のプログラミング言語を学んでいけば自ずと理解できるものなんでしょうか? 無知は承知で質問します どうにも不思議で、しかし腹立たしくてむずがゆいです 誰か教えてください、お願いします

みんなの回答

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.6

もっと素朴なマイコンとして、AVRマイコンも紹介しておきます。 連載でアセンブラにも触れられているの調度良いかも知れません。 連載記事「マイコン制御基礎以前」 http://monoist.atmarkit.co.jp/fembedded/index/miconkiso1.html 連載記事「マイコン制御基礎の基礎」 http://monoist.atmarkit.co.jp/fembedded/index/miconkiso2.html 連載記事「マイコン制御基礎の次」 http://monoist.atmarkit.co.jp/fembedded/index/miconkiso3.html

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.5

もっと素朴なコンピュータであるマイコンをやってみるともう少し理解が進むかも知れません。C言語だけじゃなくアセンブラ言語も挑戦してみると良いでしょう。 H8マイコン。色んなOSが使えます。OSなしでもOKです。 http://monoist.atmarkit.co.jp/fembedded/index/h8.html http://monoist.atmarkit.co.jp/fembedded/index/cadh8road.html

  • k_kota
  • ベストアンサー率19% (434/2186)
回答No.4

プログラミング言語を勉強するのとコンピュータのハードの仕組みを勉強するのは別な話です。 情報系の大学ならやるべき内容だと思います。(パソコン教室ばっかりやってるのは大学としてはどうなのかね、と思う) そういう本やサイトはたくさんあると思いますが、知ってる範囲で説明します。 まず、コンパイルすると機械語のプログラムが出来ます。 実行時にはそれがメモリに展開されます。 メモリ上の機械語は0,1の並びです。 CPUは論理演算とか四則演算を行う所の他に、メモリ等外部機器に対して、入出力を行う所があります、あとクロックとかも受けてるはずです。 機械語の信号を受けるとメモリの情報を読み込んだりとか参照する所を変えたりとか地味な作業を繰り替えします。 例えばメモリの次のアドレスの値を1増やしたものを100番先に保存とか、実行ステップを200番先に飛ばすとか。 そんで、順次計算をしていきます。 その他ハードの制御とかもあります。 UNIXとかはC言語と深い関わりがあります。 確か、Cコンパイラを作って、それでUNIXを作るようになったとかだったと思いますので、それ以前は機械語とかアセンブラとかで作ってのでしょう。 プログラム内蔵方式とかで調べるといいですかね。

  • lunarx
  • ベストアンサー率39% (16/41)
回答No.3

まずはコンパイラがC言語からマシン語に翻訳します。(実際にはもっといろいろな事(字句解析から始まって)がされているが最終的な事として) >C言語や他のプログラミング言語を学んでいけば自ずと理解できるものなんでしょうか? 多分無理。 OS作るにはハードウェア(CPUなどの仕組み)の知識が必要になってくる。 後OSの機能についても知識が必要になる。(タスク管理やメモリ管理など) 後Windowsにおいて原則としてユーザが作成したアプリは直接ハードウェアの制御ができません。 APIを介して処理をする必要があります。 これが足枷になってWindows上のゲームがDirectX(その前にはWinGと言う物もあったが試験的要素の物だった)が出るまでMS-DOS上でのゲームが主流だった。(EAGE3Dの用に独自APIを搭載した物はあったが) MS-DOS当時はハードウェアを直接制御して描画処理を高速化することができた。

  • ari-ari3
  • ベストアンサー率40% (4/10)
回答No.2

プログラムのコードは、人が見て判断できる文字列です。 C言語ならC言語用のコンパイラが、このコードを実行可能な形式に置き換えるのですが、windows用のコンパイラであれば、windowsが実行(解釈)できる形式にコンパイルします。 windowsにとってのwindows用プログラム(ソフト)は、windowsのどの機能をどう実行するかの指示書のようなものです。 CPUやメモリなどハードウェアは実際には2進数のコードで命令され、その命令コードにあった動作をします。 その命令コードは、BIOSであったりwindowsであったり、windows を経由せずにマシン語のプログラムであったり、何かしらが直接制御します。 C言語など高等言語によるプログラミング時には、ハードウェアに直接命令を出しているのがどこなのか、どんな命令コードによって動いているのかを意識する必要がないのが高等言語の利点なのですが、その利点によって質問者さんがお悩みなのかと思います。 最近のPCの制御構造には精通していないのであまり具体的には分かりませんが、マシン語、アセンブラー言語などについてお調べになってみてはどうでしょうか。ハードウェアは具体的にどのように操作することができて、それを簡単に扱えるためにドライバソフトやOSやBIOSなどのソフトウェアがどのような役割を果たしているか、分かりやすくなるかもしれません。 下記のように1対1の関係で、仲介するのがC言語という1つのルールであれば、直接制御となり、「printf」というコードが来たら、その後に指定されたデータを表示する、という仕組みをハード側が持っている、という関係になります。 プログラマ→(C言語)→ PC 実際には下記のように途中に色々入りますので、それぞれの間にはそこで解釈可能な制御コードがやり取りされます。printfという命令コード自体をCPUは解釈できませんので、それぞれの箇所が解釈できる形式のコードに置き換えられながら最終的にハードウェアが制御され、結果を返します。 (すいません、windowsの先は適当に書いてますのでなんとなくイメージとしてでお願いします) プログラマ→(C言語)→コンパイラ→(実行形式ファイル)→windows→(API)→(マシン語)→CPU→(コード)→メモリ→ (中略) →(画面表示指示)→モニタ

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.1

関連するQ&A

  • 初級者のプログラミング用コンピューター

    初めまして、 プログラミングの仕事をしていまして、それに適する新しいコンピューターを買います。 プログラミングは、 Cや、 C++, Java言語を使います。 特に、Java言語ではJDK, サクラエディタと使っています。 C、C++言語はMicrosoft Visual C++ 2010 Expressを使っています。 将来的には、Androidアプリの開発をする環境をする予定です。 これらの条件で適したコンピューターを教えていただけますか? よろしく御願いします。

  • コンピュータ言語とプログラミング言語の違い

    履歴書のようなものに自分のスキルを登録する際に、 「使用したことのあるプログラミング言語を記入してください」とあったので、 C、C++、アセンブラ、Perl、HTML、 としました。 その後、「使うことの出来るコンピュータ言語を記入してください」とありました。 この、「プログラミング言語」と「コンピュータ言語」という定義には何か違いがあるのでしょうか?また、C、C++、アセンブラは間違いないと思うのですが、残りの2つはプログラミング言語に含めてもいいのでしょうか? よろしくお願いいたします。

  • プログラミングを突き詰めて考えると難しい

    プログラミング(C.C++)を勉強しているのですが、プログラムが実行されるまでの流れの”中身”が分かりません。 ■C言語で書いたプログラム ↓ ■コンパイラ ↓ ■マシン語 ↓ ■CPU だと思うのですが中でどのように処理されているかがよく分かりません。 あと、「マシン語によるプログラミングでは、基本的にCPUが直接解釈できるマシンコードと一対一に対応するニーモニックを使用する。この後アセンブラによってニーモニックをマシンコードに変換し、CPUで実行できるようにする。」と書いてるあったのですが、C言語との違いは何なのでしょうか?どちらもマシンコードに変換するのでおなじプログラムだと思うのですが。 色々調べているうちにこれを理解していくにはかなり難しく、マシン語がどのようにCPUで処理されて結果としてでてくるまでの過程など勉強しなければいけない気がするのですが、わかりやすい参考になる本やサイトがれば教えて頂けないでしょうか

  • プログラミング言語とは

    こんにちは。 今、パソコンの系統図的理解をしたいと思って、必死こいてるのですが・・・ パソコンに入っている、プログラミング言語のソフトというのは、 目に見ることのできない僕が知っている知識としてのプログラミング言語と、 ハードの物理的動作、あるいはさらに下の抽象的な階層に位置するプログラムを動作させるプログラムだ、という定義は、間違っているでしょうか? だめ・・ですか?

  • プログラミング初心者以上になるには…

    これまで参考書やホームページを参考にしてプログラミングについて学んできたつもりです。 しかしどうしても分からないことがあります。 上記の解説は電卓やカレンダーとかの作り方しか説明していません。 それでどうやって高度(?)なソフトウェアができるんでしょうか? 例えばブラウザとかメーラーとかダウンロード支援ソフトとかデフラグツールとか、その他諸々…。 言語の文法なんて少し時間をかければ覚えられます。 しかし、作りたいと思うプログラムを作りたくても、自分が入力する「文章」とコンピュータの深部(?)がどう繋がっているのかわからないため何をやればいいかわかりません。 質問が漠然としていてすみません。 でもこの漠然とした疑問はプログラミング初心者は誰もが持つことと思います。 誰か教えてください。 お願いします。

  • コンピュータープログラミングについて質問です。

    よろしくお願いいたします。 私は、学生時代にC言語とVBを勉強して自分にはプログラミングは 向かないとあきらめて、徐々に疎遠になり、挫折しました。 自分がプログラミングをやめた遠因に 在籍していた学校で 自分がMS-DOSプロンプト画面に、文字コードで■や○で表示して なんとなく、動くプログラムを作っていたときに 後々、気づけば、その人と比べること事態が間違いだったのですが、 その後輩は、学校の特待生で 小学生の頃から、プログラミングを行っていて、学生の1年次に 自分で、企業から請負で2400円時給換算でプログラミングを納品していて さらに、APIとかに直接アクセスして、コンピュータープログラミングゲームで 市販されていてもおかしくないレベルのソフトをつくり、 多分、私も誘われたのですが、、コミックマーケットなどで、絵を描いてくれる友達などと ともに、オリジナルゲームを作ろうなどといって、将来的には会社を自分で興したいといっていた 後輩と比べて、他にも、ダブルスクールで大学時代にハードをいじっていたとか 高校卒業と同時にデザイン系を学んでいてスキルアップのために学校にきました。 とおっしゃる方々がいたのですが、 本当にあっさり、基本情報処理の一種をうかって 匿名掲示板などでもあの試験簡単だぜなどといわれているのを見聞きし、 さらに、2年間の学生自分に第2種基本情報処理試験を合格すれば良いと 聞いていたのに、その方々は、1年時の後期試験で受かられてしまい 私は慌てふためき、完全に空回りしてしまい、 元々、私は勉強のできない人間の典型例なので(現在は本の少しはましになったと思います) 枝葉末節にこだわりすぎて、さらに、はじめから大きいプログラムを作ろうとばかりしてしまい、 自分が完成させたプログラムは、MS-DOS画面に文字コードを利用して動きがあるように 見える、テニスと、後は、適当に作って、自分用に作ったHTMLとCSSのWEBページだけです。 HTMLはJavaスクリプトなどを使っていないし、デザインにこってFlashなどを使っているわけでも ないので、作品というか完成貧としては、これらのしょぼい作品だけです。 やはり、自分に一番足りないのは、無駄を省いた、本当にプログラミングに費やした時間と 完成品を作り実際に動いたプログラムソフトウェアーの数だと思うので、 何を作りたいか明確にすればよいと思うのですが、 そもそも論として、 誰かに、何を作ったらよいですか?と聞いている時点で、プログラマー失格ですよね、、、 でも、教えてください。 実用的なプログラムだと、 エクセルのマクロとか もしくは、WHPなどを勉強して見たいと考えています。 そもそも論として、 Windowsベースのソフトを作るかどうか、ドライバーソフトやIOインターフェースを 制御したりそもそも、OSを作ることもできるC言語を2年ぐらい勉強しただけで、 なんでできないんだろうなどということはうぬぼれもはなはだしいということですよね。。。 後、要領ですよね、、、 サーバーを立ててデーターベースを作って管理するなどにも興味があり、 昔、全文検索システムNAMAZUさんやLinuxについても調べた事があり、 Perl、Rubyなども勉強したいと考えたのですが、 学生時分は、広く浅く知識を集めただけで終わり、 浅さのレベルが本当に浅かったために、プログラムを挫折しました。 現在も、この文章をここまで、書いた時点で、プログラミングを作るのが大変そうだなーと 思うようになり、プログラム大変そうだなー、やっぱりやめようと考えるようになりました。 なので、ものぐさな人間でも、結果が分かりやすいプログラミングの勉強法、 プログラムを作り出したら完成させる、ということを前提に、考えると、 いまさら、iアプリか、今はやりの、スマフォ、iPhone Android向けに、 ソフトを作るのが良いでしょうか? 何が言いたいのか支離滅裂になってしまったのですが、 どのソフトウェアーがお勧めか実際にプログラミング、プログラムを趣味にされている方の アドバイスをよろしくお願いいたします。

  • C++とC#って何が違うのですか?

    C++とC#って根本的に何が違うのでしょうか? 私はC言語でちょっとしたプログラミングをするか、C#で電卓くらいしか作れないのですが、「C++はメモリ管理が大変」とか聞きますが、どのように大変なのですか?配列の宣言と削除くらいしか知らない超ど素人です。。 そもそもメモリを気にするほどのアプリケーションを作れないのでイマイチC++の大変さんがわかりません。 あとC#にポインタがないと聞きますが、ないとどういう問題が起こるのでしょうか?

  • 大阪電気通信大学のコンピュータープログラミング入学試験について

    いま高校三年生なのです。 ゲームプログラマーを目指しています。そこで大阪電気通信大学のコンピュータープログラミング入学試験を受けたいと思うのですが  「 C , Java , BASIC から   一言語選択」 とありました。私はプログラム初心者です。いまからプログラムの勉強をして9月の入試に間に合うものなのでしょうか?教えください。 また、どの言語を選んだらよいでしょうか?  

  • プログラムとコンピュータ内部の物理的(?)な連携について

    C言語を使って、プログラミング作業をしている者です。 今、私は実務を通してC言語を使ったプログラミングを勉強している最中なのですが、自身で作成する場合は勿論ですが、他人が作ったプログラムを修正したりしていると、メモリの取られ方を意識して(或いはそのつもりで)、コーディングされているか(するか)イメージが掴みきれません。 VCを使って値だけの変化は分かりますが、変数がどんな時に(場所が複数ある場合)どこに確保されて、、、といったことがどうも分かりません。 C言語でのプログラムを理解するにはアセンブラ構造(スタックなど)を知っていれば、知らないよりは理解し易いと知り合いに言われ、本屋などで探しているのですが、イメージが掴みやすいように書かれているのがなかなか見当たりません。  C言語での命令を受けてCPUがどう動いているか(或いはどう動かされるように出来ているか)について何か「これは役に立った」とかそういった参考書なりサイトなりありましたらお願いいたします(今、「機械のコトバ」という書籍を読んでいます)。  過去ログでは近いと思い「アセンブラ」で検索してみましたが、「どうやってアセンブラ文法を学べばいいか」といったプログラミングそのものが殆どでした。  また、(まずは上記のことからですが)CPUだけでなくOSの役割についても知りたいので、何か良い参考書がありましたらそれについてもお願いいたします。

  • プログラミング

    インターネットやメールを使いこなせるようになったので、何か変わった事に挑戦したい(ゲーム作成)と思い、プログラミングにトライすることにしました。 エクセルのVBAを使ってプログラミングをしているのですが、逆にこのような動作をするのならマウスで動かしたり、いつも知っている通りした方がが速いんじゃないか?と疑問を抱きはじめました。  プログラムするに当たって色々な言語(C言語やJava etc)の存在がある事をしりました。  一体、何の言語がプログラム初心者にとって学びやすいのですか? またお勧めサイトがあれば紹介してください。 私の参考にしているサイトは(http://www.happy2-island.com/)です。 ちなみにOSはWinME メモリは128 Office2000を使用しています。

専門家に質問してみよう