• ベストアンサー

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

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

質問者が選んだベストアンサー

  • ベストアンサー
  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.3

●回答(1) 後者が正しいです。 http://ja.wikipedia.org/wiki/ソースコード の編集履歴を参照してみましたが, 「アセンブラ用の文字列で記述されたプログラムはソースコードとは呼ばれないのが普通」 というのは,この箇所を書いた 2009年6月18日 (木) 11:26 Tosaka (全体に加筆と編集) という人の独断でしょう。アセンブリ言語であっても上記ページ内の定義に該当するのにどういう理由でアセンブリ言語だけを除外しているのか,この執筆者はその根拠を示していません。 ●回答(2) IT用語辞典が正しいです。アセンブラ言語のソースコードと,目的プログラムとは別物です。 コンパイラは翻訳結果として機械語(目的プログラム,実行プログラム)を出力できればいい。翻訳結果としてアセンブラ言語を出力できるコンパイラ製品もありますが,その機能を持っていなくてもコンパイラと呼べます。 http://okwave.jp/qa5107126.html?ans_count_asc=0 の私の過去の回答No.3, No.7

wooyan_52
質問者

お礼

ありがとうございました。 おかげで大分理解できました。

その他の回答 (3)

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.4

回答者No.3です。 Wikipediaは誰でも書き換えることができますので,たった今,内容を書き換えました。 「ソースコード の変更履歴」の (最新) 2009年9月19日 (土) 17:01 JJon.com (アセンブリ言語でもソースコードと呼ぶ) がそれです。(日本における時刻は上記に+9時間してください)

wooyan_52
質問者

お礼

>>たった今,内容を書き換えました。 す...すごい。 それにしても Wikipediaにも間違いがあるとは思いませんでした。(汗)

  • petertalk
  • ベストアンサー率69% (152/219)
回答No.2

質問(1) >注2:【アセンブリ言語で書かれたプログラムはソースコードと呼ばれない】 この記述は間違っています。 以下は Microsoft のマクロ・アセンブラーの起動時のメッセージですが、 入力ファイルを source(.asm)、出力ファイルを out(.obj) と表現しています。 また、IBM の High Level Assembler z/OS & z/VM & z/VSE の説明にも、 「一般的なコーディング・エラーを広範囲にわたって検査しながら、 シンボリックなソース・ステートメントを マシン言語のオブジェクト・コードに変換することができます」とあります。 http://www-06.ibm.com/jp/domino02/NewAIS/aisextr.nsf/ByLetterNo/SWA04094?OpenDocument&ExpandSection=1 質問(2) >ソースプログラムをコンパイラで翻訳するとアセンブリ言語になるんではないのですか? >そのアセンブリ言語をアセンブラで翻訳して機械語になるのではないのでしょうか? Wikiにこう書いてあったのでそう理解されたのかもしれませんが、これも違います。 コンパイラの仕事は、ソースプログラムを翻訳してオブジェクトプログラムを生成することです。 内部的には、ソースプログラムから、直接、機械語を生成するタイプもあるし、 一旦アセンブリ言語を生成し、それをアセンブルして機械語を生成するタイプもあります。 しかし、それはあくまで内部処理の話であって、使用者からは見えない部分だし、 最終的にコンパイラが生成するのは機械語です。

wooyan_52
質問者

お礼

大分理解できました。 ありがとうございました。

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

(1)ソースコードを、「オブジェクトコードを生成するためのテキスト」と定義するなら、アセンブリ言語を手入力したファイルは、ソースコードと呼んで良いかと。 例えば、gccやMS-Visual C++では、Cのコード中にx86ニーモニックをインライン形式で記述できます。このファイル(拡張子cとか。)はソースコードと呼べないのか、みたいな。 (2)Cのソースから直接オブジェクトコードを生成するコンパイラがあります。なので、アセンブラ及びアセンブリ言語を前提とする必要はないかと。

wooyan_52
質問者

お礼

ありがとうございました。

関連するQ&A

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

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

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

    アセンブリ言語がアセンブラ&実行出来るサイトを知らないでしょうか?また、アセンブリ言語のプログラムが載っているサイトを知らないでしょうか?教えて頂けると幸いです。

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

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

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

    アセンブリ言語と機械語は一対一で対応しているので、実行ファイルがあれば逆アセンブルすると 完全に元のアセンブリコードが復元できるのでしょうか?教えていただけないでしょうか?すみません。

  • コンパイラーとアセンブラの違い

     今晩は。  コンパイラーとアセンブラとは何がどう違うのでしょうか。 またコンパイラー、アセンブラは、その後に更に機械語に変換されるとききましたが、なぜ一気にソースコード から機械語に変換しないのですか。  他にCalsという言語もあると聞きましたが、この言語も機械語とは違うと聞きました、とするとそもそもこの 言語自体の役割は何なんでしょう。

  • 最初のアセンブラ

    人間がハンドアセンブル際にアセンブリ言語と機械語の対応表を見比べて翻訳する作業を、コンピュータの黎明期に機械語で最初に作られたアセンブラはどのように行っていたのかということを教えて下さい。 プログラミング言語の歴史を考えてみると、(フォン・ノイマン型)コンピュータの黎明期では全てのプログラムは最初人間が直接真空管やディップスイッチのオン/オフを切り替えることで、機械語でプログラムを入力していたと思います。その後アセンブラが開発されたことで、人間はパンチカードやカセットテープなどを通してアセンブリ言語でプログラミングを行えるようになったと聞きました。 アセンブリ言語は機械語と1対1で結びついたもので、アセンブラはアセンブリ言語を機械語に翻訳するのだと言うことは分かります。しかし、パンチカードやカセットテープで入力したアセンブリ言語も、コンピュータにとっては根本的には0/1(スイッチのオン/オフ)という点では変わりはなく、最初のアセンブラはその0/1をどのようにして正しい機械語の0/1に変換することが出来たのでしょうか? 少し質問の意味が分かりにくいかもしれませんが、例えば MOV B, A //Bレジスタの内容をAレジスタに送る といったアセンブリ言語は、機械語では 01000000 に相当するかもしれません。しかしコンピュータがパンチカードを読み込んだ時点では 01010100 といった信号として入力されるとしたら、機械語で最初にアセンブラを作成した人はどのようにしてそれを適切な機械語(ここでは01000000)に翻訳出来たのでしょうか? 想像では最初に機械語で非常に超簡単なアセンブラの原型とも言えるプログラムを作って、それを元にした簡単なアセンブリ言語(の原型)でより高度なアセンブラを作る、といったことを繰り返していまのアセンブラが開発されていったと思いますが、では最初のアセンブラの原型とはメモリ上ではどのように実現されていたのか、ということが気になったので質問させていただきました。アセンブリ言語で実際にプログラムのイメージはこんな感じでは?ということを書いて下さっても構いません。 よろしくお願い致します。

  • 素数を求めるプログラム(アセンブリ言語)

    アセンブリ言語で素数を求めるプログラムを作っているのですが、どうしても内容が理解できなくて困っています。 難しいのは、多分理解できないので、できるだけ簡単なプログラムソースを書いて頂けないでしょうか? または、それがあるページを教えてください。

  • アセンブリ言語プログラムの課題

    先日アセンブリ言語プログラムについての課題が出て、プログラムコードを書くことはできたのですが、「考察」の欄で詰まっています。 ここの過去の質問(http://oshiete1.goo.ne.jp/qa3089577.html)も見てみたのですがよく分かりません。 どのようなことを書けばいいのでしょうか? 「高級言語と違う点」とかでしょうか・・・。

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

    アセンブリ言語と機械語は一対一で対応しているので、実行ファイルがあれば逆アセンブルすると 完全に元のアセンブリコードが復元できるのでしょうか?教えていただけないでしょうか?すみません。教えていただけないでしょうか?すみません。どういった例が挙げられますか?

  • アセンブリ言語のラベルについて

    MASMアセンブラを使ってアセンブリ言語の勉強を始めました。 ラベルについてなのですが、以下のようなコードがあります。 msg db "ABCD" これは、msgという名前でメモリに4バイト確保して文字列で初期化するということだと分かりました。 そこで質問なのですが、msgというのはこの文字列の先頭アドレスを表すということですが、このmsgは上記の"ABCD"のようにメモリに領域を確保されて保存されているものなのでしょうか(C言語のポインタのようなもの)。 それとも、即値のように直接ソースコード上に書かれているものなのでしょうか。(つまり、アセンブルをするとソースコード上のmsgが"ABCD"の先頭アドレスに置き換わるようなことがおこるのでしょうか) 言葉足らずですみませんが、よろしくお願いします。

専門家に質問してみよう