• 締切済み

アセンブリ言語について。

CPUを直接操作するうなプログラムは高水準言語では作れないので低水準言語が必要になります。 CPUをスリープ状態にするHLT命令はアセンブラにはありますがC言語などの高水準言語には無い機能ですから、アセンブラを使ってプログラムを書かないと実現できません。というのは、合っていますでしょうか?教えていただけないでしょうか?すみません。

みんなの回答

  • notnot
  • ベストアンサー率47% (4847/10260)
回答No.9

> では、あなたはなぜ何のために低水準言語があると思うのでしょうか?教えていただけないでしょうか?すみません とのことですが、あなたは質問で、 > CPUを直接操作するうなプログラムは高水準言語では作れないので低水準言語が必要になります。 とお書きでしたので、そのあたりは当然のこととして理解しているものとばかり思っていました。 あなたの質問内容は、 > CPUをスリープ状態にする~~。というのは、合っていますでしょうか? だけではなく、 > CPUを直接操作するうなプログラムは高水準言語では作れないので低水準言語が必要になります。 の一見、あなたの考えを書いている風の文章についても、「というのは、合っていますでしょうか?」の対象だったのでしょうか? であれば、この部分は、「その通りです」というのが回答です。 もちろん、高級言語とアセンブリ言語を混ぜて書く事の出来るCなどの言語もあるわけですが、本来のCだけで書けないから混ぜて書けるように作られているわけです。 私の回答は、 > CPUをスリープ状態にするHLT命令はアセンブラにはありますがC言語などの高水準言語には無い機能ですから、アセンブラを使ってプログラムを書かないと実現できません。というのは、合っていますでしょうか? の合っているかどうかという質問に対しての回答です。 あとは、CPUが実行できるのは機械語だけで、高級言語は直接実行できないわけですが、機械語と1対1対応しているものがアセンブリ言語なので、高級言語は最終的にアセンブリ言語にならないと実行できません。

  • DESTROY11
  • ベストアンサー率23% (781/3371)
回答No.8

そのとおりです。 高級言語ではサポートされない機能を実現するためにアセンブラが必要です。 CPU自体の自己診断、初期化などに今でも使われています。 そういうわけで、スーパーコンピューターで使われるようなCPUでもアセンブラは現役です。

  • bya00417
  • ベストアンサー率35% (56/158)
回答No.7

一部のC言語には、プログラムの途中にアセンブラのプログラムを記述して埋め込める機能があります。 なぜこのような機能が用意されたのかというと、C言語だけでは実現できない動作があるからです。 なので、高級言語だでは実現できない機能があるからアセンブラのような低水準言語が必要というのは正しいです。

  • kzr260v2
  • ベストアンサー率48% (788/1619)
回答No.6

>>では、あなたはなぜ何のために低水準言語があると思うのでしょうか?教えていただけないでしょうか?すみません CPUの事実を順番にご案内しますと、最初はマシン語でした。CPUがそのまま実行できるコードでありデータです。これは人間では読み取りが困難なので、ニーモニックとして読みやすくなるようにしました。そのニーモニックで記述することをアセンブリ言語と呼んでいたりもします。ただこれも扱いづらいものなので、様々な高級言語が作られました。とはいえどのような高級言語でもコンパイラを通してCPUが実行する形式、いわゆるマシン語に変換された後に実行されます。高級言語の開発統合環境(IDE)ではデバッグ実行後に、任意の場所でプログラムを停止(ブレーク)できますが、その際、見ようと思えば高級言語の行間にニーモニックの表現も表示できるはずです。 それとは別に、現状の環境を理解する必要があります。Windowsなど既存のOSは、アプリケーションから直接ハードウェアにアクセスできるようには設計されていません。実メモリアドレスにアクセスできないのと同様に、CPUも物理的なハードウェアのひとつとされCPUの動作に影響を与える命令も実行できないよう制限されています。これは、OSが全てのハードウェアを制御し、アプリケーションはOSとの取り決め(API)を通じてリクエストするか、APIをパッケージングしたライブラリを通してリクエストするような設計を生み出しました。 これは、アプリケーションがハードウェアの特性を気にせずにプログラミングできる、という利点をもたらしました。また、OS上に複数のアプリケーションを同時実行できるようにもなりました。 ということで、前回ご案内したように、ハードウェアを直接扱いたいなら、「OSを作成するレベルでプログラミング」または、「Windowsのルールに沿うようにデバイスドライバを作成する」のどちらかになります。 前者ならば、CPUやその他の周辺デバイスの仕様書の入手が必要です。後者でしたらデバイスドライバ作成に関するMicrosoftのデベロッパー向けの情報を読む流れとなります。いずれも情報量は膨大です。 ※ HLTを実行しただけでしたら、パソコンのそれではなく、8ビットマイコンボードなどを入手して、そのボード上で実行する方向性が考えられます。パソコンで扱うよりコンパクトになるからです。書籍としてはトラ技コンピューターのような雑誌が情報源になります。 ※ どうしてもパソコンをスリープや休止にしたいなら、以下のようなコマンドがあります。 休止にするコマンド powercfg -h on rundll32.exe PowrProf.dll,SetSuspendState スリープにするコマンド powercfg -h off rundll32.exe PowrProf.dll,SetSuspendState 以上、参考にならなかったらごめんなさい。

zasx1098
質問者

補足

2進数の羅列では人間にはあまりに読み書きしにくいからです。 それを命令単位に区切って、英単語を元にした名前を与えたのが、アセンブリ言語です。 ニーモニックとは、その命令の名前の事です。これは合っていますでしょうか?教えていただけないでしょうか?すみません。

  • notnot
  • ベストアンサー率47% (4847/10260)
回答No.5

OSの配下で動くプログラムであれば、なんであれプログラムでCPUをスリープにする事はできません。そのあたりはOSが介入します。 OSを介さないで動くプログラムであれば、概ねその通りですが、 Cで書いたプログラムの中に #asm ディレクティブなどでアセンブラコードを埋め込むことが出来るコンパイラであれば、ほとんどをCで書いてHALT部分のみアセンブラコードという書き方も出来ます。

zasx1098
質問者

お礼

2進数の羅列では人間にはあまりに読み書きしにくいからです。 それを命令単位に区切って、英単語を元にした名前を与えたのが、アセンブリ言語です。 ニーモニックとは、その命令の名前の事です。これは合っていますでしょうか?教えていただけないでしょうか?すみません。

zasx1098
質問者

補足

では、あなたはなぜ何のために低水準言語があると思うのでしょうか?教えていただけないでしょうか?すみません

  • kzr260v2
  • ベストアンサー率48% (788/1619)
回答No.4

半分正解です。 質問主さんがWindowsのようなOSレベルのソフトウェアをプログラミングするなら、まさにそうなります。しかし今回はWindows上で動作するアプリケーションソフトウェアをプログラミングするご様子です。それに間違いないなら、WindowsのAPIまたは、プログラミング環境で利用したライブラリ内に、ご希望のものが無いか探し、それを利用することになります。 ※ Windowsがスリープに移行するには、Windowsの実行中のソフトへの対応が必須となりますから、APIやライブラリはそのリクエストを行うだけで、スリープそのものはWindows側の都合の良いタイミングになると予想されます。 ※ デバイスドライバのようなWindowsと同じ特権レベルで動作するソフトウェアなら、ご希望のコードを埋め込むことは可能かもしれませんが、Windows全体が不安定になると思われます。 以上、参考にならなかったらごめんなさい。

zasx1098
質問者

お礼

2進数の羅列では人間にはあまりに読み書きしにくいからです。 それを命令単位に区切って、英単語を元にした名前を与えたのが、アセンブリ言語です。 ニーモニックとは、その命令の名前の事です。これは合っていますでしょうか?教えていただけないでしょうか?すみません。

zasx1098
質問者

補足

では、あなたはなぜ何のために低水準言語があると思うのでしょうか?教えていただけないでしょうか?すみません

noname#252929
noname#252929
回答No.3

>では、あなたはなぜ何のために低水準言語があると思うのでしょうか?教えていただけないでしょうか? 逆ですって。 高級言語というのは、人間には理解しにくい低級言語をセット化してわかりやすい様にしたものです。

zasx1098
質問者

補足

2進数の羅列では人間にはあまりに読み書きしにくいからです。 それを命令単位に区切って、英単語を元にした名前を与えたのが、アセンブリ言語です。 ニーモニックとは、その命令の名前の事です。これは合っていますでしょうか?教えていただけないでしょうか?すみません。

  • mink6137
  • ベストアンサー率23% (595/2498)
回答No.2

>CPUをスリープ状態にするHLT命令はアセンブラにはありますがC言語などの高水準言語には無い機能ですから、アセンブラを使ってプログラムを書かないと実現できません。というのは、合っていますでしょうか? 概ね合っています。 高水準言語とアセンブラ言語しか使えないならHLT命令はアセンブラで書くしかない…のは当然でしょう。 しかし、アセンブラー言語を設計する人は機械語命令とアセンブラ命令との一対一の対応を知っていますから、HLT命令を機械語で書くくとが出来ます。

zasx1098
質問者

お礼

2進数の羅列では人間にはあまりに読み書きしにくいからです。 それを命令単位に区切って、英単語を元にした名前を与えたのが、アセンブリ言語です。 ニーモニックとは、その命令の名前の事です。これは合っていますでしょうか?教えていただけないでしょうか?すみません。

zasx1098
質問者

補足

では、あなたはなぜ何のために低水準言語があると思うのでしょうか?教えていただけないでしょうか?すみません

  • f272
  • ベストアンサー率46% (8003/17108)
回答No.1

一般的にはその通りだが,拡張されたC言語にはそのような命令セットが存在する場合もある。

zasx1098
質問者

お礼

2進数の羅列では人間にはあまりに読み書きしにくいからです。 それを命令単位に区切って、英単語を元にした名前を与えたのが、アセンブリ言語です。 ニーモニックとは、その命令の名前の事です。これは合っていますでしょうか?教えていただけないでしょうか?すみません。

zasx1098
質問者

補足

では、あなたはなぜ何のために低水準言語があると思うのでしょうか?教えていただけないでしょうか?すみません。

関連するQ&A

  • アセンブリ言語について

    アセンブリ言語の勉強をしたいと思っています。 例えば、CやJava,などはコンパイラを使ってコンパイルをしますよねぇ。同じようにアセンブり言語にもアセンブラというものがあるのでしょうか? フリーでそのようなアセンブラ(コンパイラ?)があるのなら教えてくれないでしょうか?できれば、AT互換のアセンブリ言語の仕様書が書かれているサイトでもあれば教えてください。(できれば、日本語で・・・) それと アセンブラ言語を高水準言語と比較した場合の利点について教えてください。 色々とすいません。どうかよろしくお願いします。

  • アセンブリ言語は原始プログラムですか?

    質問(1) アセンブリ言語というのは、 add $S1, $S2 みたいなやつですよね? wikipediaで「ソースコード(ソースプログラム、原始プログラム)」の注釈1,2を読むと、 注1:【機械語の命令に記述するアセンブリ言語(アセンブラ)が存在するが、このアセンブラ用の文字列で記述されたプログラムはソースコードとは呼ばれないのが普通である。】 注2:【アセンブリ言語で書かれたプログラムはソースコードと呼ばれない】 と書かれてあります。 でも、 他の教材では アセンブリ言語で書かれたプログラム(原始プログラム) と書かれています。 どっちが正しいのでしょうか? 質問(2) 目的プログラム(オブジェクトプログラム)とは、 IT用語辞典によると 【オブジェクトプログラムとは、ソースプログラム(人間が認識できるプログラム言語で高水準言語など?)をコンパイラで機械語に翻訳したプログラムのことである】 とありますが、 ソースプログラムをコンパイラで翻訳するとアセンブリ言語になるんではないのですか? そのアセンブリ言語をアセンブラで翻訳して機械語になるのではないのでしょうか? どなたかご教授ください。 お願いします。

  • アセンブリ言語について。

    2進数の羅列では人間にはあまりに読み書きしにくいからです。 それを命令単位に区切って、英単語を元にした名前を与えたのが、アセンブリ言語です。 ニーモニックとは、その命令の名前の事です。とはどういう事でしょうか?教えていただけないでしょうか?すみません。 push %ebp mov %esp,%ebp and $0xfffffff0,%esp sub $0x10,%esp mov 0xc(%ebp),%esp : というプログラムで、オペランドが、%ebpなどがそうなのでしょうか?で、このプログラム言語自体をアセンブリ言語というのでしょうか?また、なぜ、低水準言語というのが存在しているのでしょうか?教えていただけないでしょうか?すみません。

  • アセンブリ言語について

    現在電気工学科の学生です。アセンブリ言語の講義を受けているんですが、試験で単位が取れる自信がありません。。。全くわからないことだらけです。C言語に関してはほんの触りだけ勉強したことがありますが、アセンブラ言語については全くの素人です。演習問題があるんですが、色々本等で探しても見つかりませんでした・・・私の努力不足かもしれませんが、問題の解答と解説を教えて欲しいです。 問題は→メモリアドレス3000H~30FFHの内容(データ)を2000Hから始まるメモリアドレスにコピー(格納)するプログラムをアセンブリ言語で書いてください!それとこの問題には参考のためにアセンブリ言語の命令の例があるんですが LD A、(BC) LD A、(DE) LD A、(HL) って書いてあるんですが、このBCやDE,HLはどんな意味があるんでしょうか?初歩的なことばかりで申し訳ありませんが、ご教授よろしくお願いします。

  • アセンブリ言語について。

    アセンブリ言語という低水準言語は、なぜ必要なのでしょうか?それと、ニーモニックとは何でしょうか?ご教授いただけないでしょうか?すみません。よろしくお願いします。

  • 自分でアセンブラ言語を作れる?

    自分でアセンブラ言語を作れる? あるCPUにmov命令というのがありますが命令名をソフトウェアレベルで変えることは 出来るのでしょうか? (mov ax,1をmove ax,1にしたり) アセンブラはCPUが同じならどれも同じだと思っていたのですが プログラムを終了する時、windowsはint 21hなのにlinuxはint 0x80なので 疑問に思いました。

  • 割り込みベクターをC言語で書きたい

     皆さん、有難う御座います。時々質問させて頂いています。  今回は、ベクターアドレスをC言語で書く方法について質問します。  ルネサスのH8マイコンを使っています。モニターを使うとRAM上に割り込みの仮想ベクターを作れます。  仮想ベクターには、割り込みのジャンプ先アドレスが書かれます。  現在アセンブラで書いているのですが、C言語で書く方法は無いでしょうか。  二つの方法で書きたいと思っています。  アセンブラで次の二つの方法に相当するC言語命令を知りたい。 (1)ORGとEQU命令を使った方法 (2)ムーブ(Z80ならロード)命令で関数のアドレスをメモリに書く方法  ルネサスにはHEWと言うソフトが有りますが、HEW特有の命令によらず、一般的なコンパイラが持っている機能で実現したい。  以上宜しくお願いします。

  • アセンブリ言語についてと言語の違いについて。

    高水準と低水準言語の違いは、まず、マシン語の2進数の羅列では分からないからアセンブリ言語が生まれ、 アセンブリ言語よりさらに人間が理解できる言語が、C言語やBASICなどでしょうか?教えていただけないでしょうか?合っていますでしょうか?

  • アセンブリ言語について。

    >2進数の羅列では人間にはあまりに読み書きしにくいからです。 >それを命令単位に区切って、英単語を元にした名前を与えたのが、 >アセンブリ言語です。 ニーモニックとは、その命令の名前の事です。 簡潔に要点がまとまっている、すばらしい説明ですね。その通りです。 これで理解できないなら、追加の説明のしようがありません。 (なお、このように、他人の発言は引用符を付けて引用すると、わかりやすくなります。是非そうしてください。) まあ具体例を挙げるならこんな感じ。 (機械語データ) (アセンブリ言語) b8 57 61 6b 61 mov $0x616b6157,%eax 53 push %ebx 50 push %eax ba 04 00 00 00 mov $0x4,%edx bb 01 00 00 00 mov $0x1,%ebx b8 04 00 00 00 mov $0x4,%eax 89 e1 mov %esp,%ecx cd 80 int $0x80 58 pop %eax 31 c0 xor %eax,%eax 5b pop %ebx c3 ret 人間がCPUを直接動かすプログラムを書こうとするとき、アセンブリ言語を使って書きます(右側の部分)。 mov $0x616b6157,%eax push %ebx push %eax mov $0x4,%edx mov $0x1,%ebx mov $0x4,%eax mov %esp,%ecx int $0x80 pop %eax xor %eax,%eax pop %ebx ret そしてこれをアセンブルすると、1対1対応した機械語のデータ列が出来ます。 それが b8 57 61 6b 61 53 50 ba 04 00 00 00 bb 01 00 00 00 b8 04 00 00 00 89 e1 cd 80 58 31 c0 5b c3 この部分。 機械語には改行なんてありませんから、実際は一連の b8 57 61 6b 61 53 50 ba 04 00 00 00 bb 01 00 00 00 b8 04 00 00 00 89 e1 cd 80 58 31 c0 5b c3 と言うデータ列になります。 これをCPUが実行していきます。 相当熟練した人で無ければ、このデータ列を見るだけでプログラム構造を理解する、というわけに行きません。 なので、人間が機械語レベルでプログラミングする際には、アセンブリ言語を使います。 ※この回答のプログラムはこちらから引用しました。 >31バイトでつくるアセンブラプログラミング アセンブラ短歌の世界 >https://book.mynavi.jp/support/pc/4946/c01_assembra.pdf で、機械語データは、なぜ、0と 1だけではないのでしょうか?教えていただけないでしょうか?すみません。

  • プログラム言語って何があるの?

    私、プログラム言語について調べています。 ウィキペディアをみてもたくさんあって、そこからまたリンクがたくさんあってどこでどのように区切っていいのか分かりません。そこで皆さんに質問したいのですが、プログラム言語はどのようなものがありますか? 大まかにプログラム言語の総称があってその次に (1)機械語(マシン語) (2)アセンブラ言語 高水準言語これの中に (3)インタプリタ言語 (4)コンパイラ言語がありますが、 (1)~(4)のそれぞれの詳細を教えてください。例:BASIC、C等 またこの枠に入らないプログラム言語がありましたら教えてください。 とってもマイナーなものでも構いません。出来ればURL欲しいです。 お願いします。m(_ _)m