組み込み機器のソフトウェア開発を行なっております。
ソフトウェアのようなテキスト文書で、なぜハードウェアが制御できるのかがわかりません。
例えば一般的なマイコンで
あるレジスタの値を1に書き換えることで
該当するポートの電圧がHになるという制御において
レジスタの値が書き換われば電圧がHになるというのはイメージがつかめるのですが
ソフトウェアでなぜレジスタの値が書き換わるのかがわかりません。
なるべく具体例でアセンブリ言語→機械語→レジスタが書き換わる
の対応関係を説明していただけると幸いです。
よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
おもしろい(失礼)質問ですねー。
基本の知識だけ抜け落ちてるんですね。これからも組み込み開発するのなら、マイコンやデジタル回路については本を買ってひととおり勉強したほうがよいですよ。
さて、質問の答えですが、ぶっちゃけマイコンのハードウェアとはそういうふうにできているからです。
極論するとマイコンはあるところから数値を読み出して、何らかの足し引きをして、その結果をあるところに書き込む、ということを繰り返すだけのものです。その「あるところ」が時にはメモリだったりレジスタだったりするだけで。
どこからどこへどういう足し引きをするか、ということをずらずらと書き連ねたのがソフトウェアという命令書なのです。
ただマイコンは人間がアセンブラ言語で書いたテキスト文書(ソースコード)をそのままでは読めません。ですので、アセンブラという道具を使って、機械語という数値(バイナリコード)の並びに変換します。これをマイコンのメモリに置いてやってマイコンを動作させると、ソフトウェアが実行されたということになるのです。
で、その中にレジスタを1に書き換えろという命令(に相当する数値)があればそのとおりに実行します。
えらく単純に書くとこんな感じ。
人間の命令 レジスタ1234に1を書け
ソースコード mov 1,(1234) (movは書けという命令)
バイナリコード 56 01 12 34 (56はmov命令に相当する数値)
マイコン レジスタ1234に1をセット
わかりましたかね?
仕組みそのものをまじめに説明すると学校で一時間使って教えるようなものになるのでこんなところで。
ご回答ありがとうございます。
おっしゃる通り基本知識がごっそり抜け落ちて、とりあえずはマイコンを使えるようになっている(つもり?)だけの状態です。
アドバイス通り一通り勉強したいと思います。
もう一点だけ伺いたいのですが
>えらく単純に書くとこんな感じ。
>人間の命令 レジスタ1234に1を書け
>ソースコード mov 1,(1234) (movは書けという命令)
>バイナリコード 56 01 12 34 (56はmov命令に相当する数値)
>マイコン レジスタ1234に1をセット
ここのバイナリコードまでは理解できるのですが、そこからマイコンがどのようにセットするのかのイメージがつかめません。
バイナリまではソフトウェアで、マイコンがセットするのはハードウェアだと思うのですが、その境界部分がよくわかりません。
本で勉強すれば理解できることかもしれませんが、とりあえず簡単に説明していただいてもよろしいですか?
No.6
- 回答日時:
#3 への「お礼」の文章でちょっと気になったんですが, 「ソフトウェア」と「ハードウェア」を完全に別個のものとして認識していませんか? 特に, 「バイナリをハードウェアで記憶する」というところがすっぽり抜け落ちてるような気がします.
バイナリはハードウェアで記憶しなきゃならなくって, 今だと (最終的に) 電圧の H/L で記憶します (多分). この時点でハードウェアになってますね. あとは DFF (とか D ラッチ) の動作を考えるとか信号の流れを考えるとかすればわかる... かもしれない.
しかし, この状態で「組み込み機器のソフトウェア開発」ってできるんだ....
No.5
- 回答日時:
CPUは、大雑把に言って、
A.1. プログラムカウンタ(PC)の指すメモリから命令を読む。
A.2. 命令を解析する。
A.3. 解析結果に従い演算する。
A.4. PCを進める。
という動作を繰り返します。これは解りますか?
ソフトウェア・プログラムというのは、CPUが読み込む命令列をメモリ上に置いたものです。
プログラムが実行されるのは、
B.1. メモリ上に命令列を書き込む。
B.2. CPUのPCが命令列の先頭を指すようにセットする。
という操作を行うからです。この操作を行えば、後はCPUが自動的にA.1~A.4を繰り返してプログラムが実行されます。
プログラムが実行されれば、A.3で言う「演算」が順次行われていきます。これには、レジスタの値を変更したり、メモリを読み書きしたり、あるいはI/Oポートを読み書きしたり、等を含みます。
従って、「演算」の結果、ハードウェアが制御されます。
さて、どこが解りませんでしたか?
No.4
- 回答日時:
> とりあえず簡単に説明していただいてもよろしいですか
私には説明することは出来ませんが、この本が参考になるのではないでしょうか。
「CPUの作り方」渡波 郁 著、毎日コミュニケーションズ刊(2003.10)
http://www.amazon.co.jp/exec/obidos/ASIN/4839909 …
(内容紹介)
『コンピューターの中核であるCPUという名のブラックボックス。その動作の「超」基本原理から設計までを4bitCPUを例に解説。アキバで手に入る部品だけで実際の制作も可能!実際に作らない人も読み物としてもタメになること請け合いです。』
No.2
- 回答日時:
機械語は 0/1 の羅列ではあるんだけど, これを実際にはメモリに入れなきゃならなくって, メモリに入れた時点で (一般には) 電圧の H/L になってます. で, この電圧の H/L でプロセッサ内部のゲートを操作することによって (いろんな処理が行われて) レジスタを書き換えるわけです. つまり, 「誰がなんと言おうと最終的には電圧の H/L によって動いている」ということを頭に入れておくことになると思います.
なおむか~し昔には「内部のゲートの制御をずらっと機械語に書く」という, 今では想像できないようなプロセッサもあったそうです. 当然制御しなきゃならないゲートの数だけビット数が必要なので「1個の機械語がやたらとデカい」という問題 (1個の機械語が 1024ビット!) はあるわけですが, できる人が書けばおそらく最速でしょう.
No.1
- 回答日時:
すべてのソフトウェアはその言語そのものの記載のまま動いているわけではありません。
あくまで人間が見やすいように記載しているだけです。これをコンパイラやリンカによって
機械語(0と1のカタマリ)に直して、これを元に動かすことになります。この機械語という
言語は、そのビット1個1個の構造自体が1つの命令およびシーケンス決定機能を持ってい
て、プロセッサ内部レジスタのどれを参照するのかとそれをどうするのかなどといった決め
事を実施する条件となり、その処理が終わったら次の命令を処理する(分岐命令の場合は分岐
先に移動する)といった処理を繰り返して動作させているものです。
組み込みソフトウェアの開発をされているのであれば、何らかの対象ハードウェアを知って
いると思いますので、そのプロセッサのアセンブラコマンドマニュアルなどを見てみること
をお勧めします。このアセンブラは機械語の1命令を1行で見易くしたものですので、実際
のハードウェア(プロセッサ内部レジスタ)をどのように動作させるのかといった動作内容が
1目で分かります。
当方は組み込みシステム開発なども行うハードウェア技術者ですので、あまり説明になって
いないかもしれませんが、参考まで。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
レジストってなんですか?
-
CPUのビット数と、メモリ(主記...
-
シーケンサのデータレジスタD...
-
キャッシュメモリとレジスタの...
-
8ビットのデータの、先頭ビット...
-
0xffffとは?
-
スロースキャンコンピュータ 加...
-
ライン数とステップ数の違いは?
-
アセンブラからC言語に変換する...
-
エクセルVBAのIf,Then 構...
-
ビットシフトってどんな時使うの?
-
アセンブラ言語がわかりません。
-
C言語で128bitの2進数のビット...
-
アセンブラwordという単位
-
一般のソフトで画像を扱う場合...
-
PS3に搭載されている"Cell"は、...
-
成人してから
-
素朴な疑問 (C言語とアセン...
-
アセンブラエディタ
-
ULONGLONGよりも大きい整数を扱う
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
レジストってなんですか?
-
専用レジスタ 汎用レジスタ
-
シーケンサのデータレジスタD...
-
レジスタの数
-
CPUのビット数と、メモリ(主記...
-
SRAMとレジスタの違いは何でし...
-
CPUは何故、16bit→32bit→64bit...
-
トリムレジスタ
-
PC-G830
-
PIC16F1シリーズマイコンのNCO...
-
Z80、6502、i8086、MC68000につ...
-
レジスタとメモリについて
-
インデックスレジスタについて。
-
biosとは人の体でいえば脳のよ...
-
アキュムレータとインデックス...
-
キャッシュメモリとレジスタの...
-
0xffffとは?
-
8ビットのデータの、先頭ビット...
-
ライン数とステップ数の違いは?
-
アセンブラからC言語に変換する...
おすすめ情報