• 締切済み

コーディングについて。

コーディングとは、コンピュータにコード入力する事を言います。 転じてプログラミングの意味で使われますが、プログラムコードを書くこと全般を言います。 プログラムコードはふつうソースコードと呼びます。 ソースコードとは普通はテキストファイルの形で保存されるコードのことです。 アセンブリ言語もテキストファイルに書き込んでゆきます。 マシン語は、基本的にはテキストファイルではなく、実行形式のバイナリファイルそのままをバイナリエディタや専用エディタで編集します。 C言語中のインラインアセンブラのように、そこにマクロ命令でマシン語を書き込む事も出来るには出来ます。 勿論、マクロアセンブラ(MASM)のようなアセンブリ言語でもマクロ命令でマシン語コードを記述出来ます。 大昔まで言えば、穿孔テープを使っていた頃のコンピュータなら、テープに穴を空ける作業もコーディングです。 穿孔テープは穴の有無を2進数で示していて、そこに必要に応じてチェックサムなどを付けたものですが、これは紛れもなくマシン語です。 これら全てを総じてコーディングと呼びます。 ですから、アセンブリ言語もマシン語もそれを書くことはコーディングです。 以下四つの質問に答えていただけると幸いです。 ①テキストファイルとは何でしょうか? ② マシン語は、基本的にはテキストファイルではなく、実行形式のバイナリファイルそのままをバイナリエディタや専用エディタで編集します。 C言語中のインラインアセンブラのように、そこにマクロ命令でマシン語を書き込む事も出来るには出来ます。 勿論、マクロアセンブラ(MASM)のようなアセンブリ言語でもマクロ命令でマシン語コードを記述出来ます。 ここの意味がわかりません。もう少し詳しく教えて頂きたいです。 ③チェックサムとは何でしょうか? よろしくお願いします。 と ④テキストは文字コードが割り当てられた、16進数でいう0x20~7f のものです。 マシンコードは8bitなら全部 0x00~oxff 全部の値があり得ます よろしくお願いできればと思います。

みんなの回答

回答No.1

①テキストファイルとは何でしょうか? マシン語では、何が何だかわかりません。ですから、プログラミング言語と言うものが存在します。質問の場合、プログラミング言語の命令等を記入したものをテキストと呼びます。 ② マシン語は、基本的にはテキストファイルではなく、(以下略) マシン語は、指定された番地(メモリ上の)に直接記入しなければなりません。よって、記入開始番地を指定し、0x00~0xFFまでの256通りのパターンを16進数で記入します。 ③チェックサムとは何でしょうか? マシン語は16進数の塊ですから、横計・縦計が計算できます。横計なり縦計の両方が合っていれば、まず間違っていないと言う目安のものです。 ④テキストは文字コードが割り当てられた、(以下略) 文字コードも0x00~0xFFまでの256通りが存在します。しかし、中には表現できない制御コードも含まれます。タブや改行などの制御コードも立派な文字コードです。

zasx1097
質問者

補足

② について詳しく教えていただけないでしょうか?すみません。

関連するQ&A

  • プログラミングについて。

    コンピュータは電圧の高い(H)と低い(L)を2進数としてCPUがクロック信号の入力を受けて処理します。 2進数はそのままだと扱いづらいので、数値的に親和性のある2のn乗進数を使います。 一般にコンピュータは1オクテットを1バイト、1ワードとしています。 その時16進数2桁で1バイトとなることから16進数表記が使われています。 なので、極論で言えば16進数2桁ではなく256進数1桁でも良かったという事です。 実は、大抵のアセンブリ言語は2進数表記を扱えます(8進数も使えるかも)。 アセンブラは16進数でも2進数でもそのまま対応するマシン語に置き換えていくものです。 アセンブリ言語とマシン語は一体一で対応しているので、実行ファイルがあれば、逆アセンブルで完全なアセンブリコードを復元出来ます。 マクロアセンブラの場合はマクロ命令までは再現されませんが、ここでは関係無いので割愛します。 つまり、マシン語とアセンブリ言語は本質的に全く同じものです。 単に、人間に読みやすく見せているものアセンブリ言語です。 マシン語もアセンブリ言語も低水準言語です。 高水準言語とは、C言語などのコンパイルを必要とするものや、BASICやJavaScriptのようにインタープリタを必要とするもののことです。 こちらは、CPUが直接解釈できるマシン語とは全く違う人間の都合に合わせた表現でコーディングし、後からマシン語に変換する仕組みのものです。 人間に読みやいコードをマシン語に変換するので、関係は一体一ではありません。 つまりコンパイルやインタープリットすると元の情報(ソースコード)は失われます。 で、① インタープリタとインタープリットとは何でしょうか?教えていただけないでしょうか?すみません。 ② マクロアセンブラの場合はなぜマクロ命令が再現されないのでしょうか?教えていただけないでしょうか?すみません。 ③ 実行ファイルがあれば、逆アセンブルで完全なアセンブリコードを復元出来ます。とはどういう事でしょうか?つまり、実行ファイルというのは、プログラマーが書いたソースコードのことでしょうか?教えていただけないでしょうか?すみません。 教えていただけないでしょうか?すみません。

  • オブジェクトファイルのファイルフォーマット

    オブジェクトファイルのファイルフォーマット ELF/DWARF2形式について調べています。 C言語で作ったプログラムをコンパイルし生成されるオブジェクトファイルをバイナリエディタで開き、アセンブリ言語と比較すると、オブジェクトファイルの最初と最後にプログラムの内容(命令)と直接関係ないものが含まれていることが分かりました。 例えば、オブジェクトファイルのある場所や、コンパイルされた日時などです。(これらの情報はテキストだったので判別ができました。) インターネットで調べたところ、生成されたオブジェクトファイルがELF/DWARF2形式とうフォーマットで作られているというところまでは分かりました。 実際のオブジェクトファイルのヘッダとフッタ(命令の前後)を除いて、純粋な機械語(命令)の部分を取り出したいのですが、このELF/DWARF2形式というフォーマットでは、どうすれば、純粋な機械語の始まりと終わりを読み取ることができるでしょうか? よろしくお願いいたします。

  • プログラミング言語の アセンブリ言語 ニーモニ

    プログラミング言語の アセンブリ言語 ニーモニック マシン語 機械語 バイナリー 0と1で表す言語010010等 これらの違い関係性を教えてください

  • Windows・Linuxのバイナリコード解釈違い

    先日、LinuxマシンからWindowsマシンにFTPにてファイルを転送してこんなことがありました。 ・Linuxマシンから転送してきたファイルを、Windows上のサクラエディタで開く。 ファイル内容を見ると、「#!」とある ・転送したファイルをLinuxマシン上で、バイナリ表示する(odコマンドを使用) ファイル内容を見ると、「1234 ・・・・・」とある※正しいコードは忘れました。 バイナリコードと文字の対応表?を見ると 12=! 34=# ・サクラエディタで開いたファイル内容は「#!」だが、バイナリコードを見ると「!#」となるはず。 この箇所だけではなく、ファイル内の全てが、2文字ずつ同じようなことがありました。 単純に逆から書かれているわけではないと思うのですが、どういうことなのでしょうか。

  • osのwindowsはアセンブリ言語でも作られてい

    osのwindowsはアセンブリ言語でも作られていると書いてあるんですが、 アセンブリ言語って機械語に近い低級言語ですよね? windowsを人間がコーディングするときにアセンブリ言語を打つんですか? 大変じゃないんでしょうか?

  • コーディング作法の記事に異議あり

     「投稿日時:2012/05/01 06:28 C言語のお作法」の回答3から辿って見つけた 「【改訂版】組込みソフトウェア開発向けコーディング作法ガイド[C言語版]」 の内容に疑問が有ります。  これの63ページに次のように書いてあります。 適合例 int x = 5; if (x != 0) { … } 不適合例 int x = 5; if (x) { … }  (x != 0) のように「等しくなければ」と否定が入ってくると分かり難い。  ゼロかどうか判断するには、マシン語で自分自身とANDを取れば簡単です。  しかし最適化をせずにその意味のままコンパイルすれば、ゼロとの比較命令になる。  メモリ使用量、速度の両方とも不利になると思います。  特にループカウンタとして使う場合、ディクリメントしてゼロになればゼロフラグが立ち、比較命令無しで条件ジャンプ命令が使えます。  ゼロとの比較命令を入れたら、無駄でしょう。  私なら不適合例の方を使いますが、皆さんはどうですか。

  • CASL アセンブラ命令 アプリ機能

    例えば、CASLのアセンブラ命令にDCがある。 LABER DC 100 とすると。 これは、メモリに領域を確保し100をいれる命令だが、プログラムが変更されれば、メモリアドレスは変更される。 CASLには機械語命令・マクロ命令・アセンブラ命令がある。 機械語命令は人に分かりやすいようにニーモニックが付けられているだけだが、 アセンブラ命令はプログラムが変更されればそのアドレスは移動するという、ハンドアセンブリでは、できない機能が含まれている。 アセンブリ言語は色々ありますが、アセンブラ言語は人に見やすいようにニーモニックが付けられているだけでなく、CASLのDC命令のように、ハンドアセンブリではできないアドレスの自動変更のようなアプリケーションとしての機能(OS的機能)も一般にふくまれているとかんがえてよいのでしょうか? よろしく願います。

  • ファイル(データ)のコピー

    C言語初心者です。 昨年末、C言語の講習時に友人に「例えば100Kくらいのテキストファイルを とあるメモリにコピーする場合、ファイル単位でコピーするのと バイナリ単位でコピーするのはどっちが早いでしょう~?」みたいな ことを言われました。 考えてもよく分からなかったので、実際にコーディングをして実行時間を 計ってみようと思ったのですが、ファイル単位とバイナリ単位でデータを コピーするには具体的にどのようにしたらよいのでしょうか? fopenでテキストファイルをオープンして内容を読み込み、 読み込んだデータをfopenで新規ファイルへ書き込む。 この方法だと、バイナリ単位ということになるのでしょうか?

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

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

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

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