アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

質問者からの補足コメント

  • うーん・・・

    低水準言語と高水準言語の違いは、人間が理解しやすいかどうかで、例えば、高水準言語では、SUM は行けますが、低水準言語では、例えば、XQRが和であることをマシン語が解釈できるが、高水準言語では、XQRが和であることを理解できない。という事で合っていますでしょうか?ご教授いただけないでしょうか?意味不明ですみません。

      補足日時:2021/05/24 17:25

A 回答 (9件)

> では、なぜ低水準言語は必要なのでしょうか?



全く「では」「なぜ」がつながってないのですが。
今まで書いてきたのを全く読んでない、って事なんですかねぇ。

> ニーモニックとは何でしょうか?

これも何度も書いてるんですが。
ふざけてます?

> 教えていただけないでしょうか?すみません。

貴方、理解できないでしょう。
すみません。
    • good
    • 0

> ・低水準言語は人がXORを理解していないとプログラミングできない ・高水準言語は人がXORを理解していなくてもプログラミングできるは合っていますでしょうか?



合ってません。
そもそも低水準言語とXORの存在は全く関係ありません。
高水準言語でもXORは存在します。

C言語: ^演算子
Common Lisp: logxor 関数
Python: ^演算子

Common Lispでの例:

CL-USER> (defparameter *p* #b0011)
*P*
CL-USER> (defparameter *k* #b0110)
*K*
CL-USER> (logxor *p* *k*)
5
CL-USER>

※: 二進数0011と二進数0110の排他的論理和は10進数で5となる

そもそもプログラミングは、水準はさておき、人間が理解してないと行えないモノです。
その辺は低水準だろうと高水準だろうとそうであり、「理解してる」「理解してない」で水準を規定は出来ません。

そうじゃなくって、CPU内部の演算装置にXORやADD等の回路があるだけ、です。
「理解」が規定してるのではなく、「回路」が規定してるのです。
言い換えると、CPUが直接そのまま実行出来る命令がアセンブリのニーモニックになっているだけ、です。
「アセンブリ言語について。」の回答画像8
    • good
    • 0
この回答へのお礼

では、なぜ低水準言語は必要なのでしょうか?ニーモニックとは何でしょうか?教えていただけないでしょうか?すみません。

お礼日時:2021/05/26 18:46

> C言語など(高水準言語)は人間が理解しやすい例えば、SUMとかだと知っている人も多いですが



C言語にはSUMなんて命令/関数はありません。

> XORが和だとか言われても意味不明になりますよね。

?
XORは排他的論理和でしょ?
単なる和、summationとは意味が違いますが。
つまり比較や例にはなりません。

> 低水準言語では、命令が単純なので、XORが和であることを理解できるということなのですが。

命令が単純だからXORが和であることを理解出来る?
誰が?
それとXORは排他的論理和であって和ではないのですが。

> 教えていただけないでしょうか?すみません。

何を?
全く意味不明なんですが。

そもそも疑問持つ前に、思ってる事とか、知ってる(つもりになってる)事が雑過ぎるんですよねぇ。
XORが和なのか排他的論理和なのか、の区別も付いてないし、付いてないトコで(何を対象に)「理解してる」とか言ってるのか分からないし、しかもXORがどーの、ってぇのとアセンブリの必要性って全く関係ないでしょう?
結局何が質問したいのか、も分からないんですよ。こっちも分からないけど、質問してる貴方自身も恐らく分かってない。
もうちょっとキチンと調べて考えて、整理してから質問する癖付けた方が良いですよ。
何を訊きたいんだか全く分かりません。
    • good
    • 0
この回答へのお礼

・低水準言語は人がXORを理解していないとプログラミングできない ・高水準言語は人がXORを理解していなくてもプログラミングできるは合っていますでしょうか?教えていただけないでしょうか?すみません。

お礼日時:2021/05/26 08:26

> 低水準言語と高水準言語の違いは、人間が理解しやすいかどうか



極論そうですが、ぶっちゃけ、低水準言語と高水準言語と言う言い回しには厳密な定義はありません。
厳密な定義が無い以上、違いなんて論じても無意味です。

> マシン語が解釈できる
> 理解できない

そもそも、マシン語が「解釈できる」とか「理解出来る」とは何でしょうか。
マシン語が「解釈したり」とか「理解したり」なんてするものでしょうか。

> 意味不明ですみません。

ホント、意味不明ですね。
    • good
    • 0
この回答へのお礼

C言語など(高水準言語)は人間が理解しやすい例えば、SUMとかだと知っている人も多いですが、XORが和だとか言われても意味不明になりますよね。で、低水準言語では、命令が単純なので、XORが和であることを理解できるということなのですが。教えていただけないでしょうか?すみません。

お礼日時:2021/05/25 02:27

完璧に禅問答になってますね。



どこまで話が通じているのか
どこから解説すべきなのか
全くわかりません。

撤退します。
    • good
    • 0

> アセンブリ言語という低水準言語は、なぜ必要なのでしょうか?



いやだから、大枠では、ネイティブ・コードを生成するコンパイラ向けに必要だ、と言う事です。
#3で書いた通りですよ。

> ニーモニックとは何でしょうか?

これも#3で書いた通りです。
アセンブリでの命令の事ですよ。
    • good
    • 0

今現在だと・・・・・・。


まぁ、コンパイラのコンパイル対象ってのは色々ありますが、いわゆるネイティブ・コードへのコンパイラ、って言われるモノは対象とする高級言語をアセンブリ言語に翻訳します。要するに、実用的な意味では、ネイティブ・コードのコンパイラ向けに必要だ、って事ですね。人間の為じゃないです(笑)。
(つまり、実行ファイルにするにはコンパイラ->アセンブラ、と事実上二段階で「翻訳」が必要で、最終的に機械語に変換する)

ニーモニックはアセンブリでの命令名の事ですね。大した意味じゃない。

例:

例えば良くある初心者用のCのプログラムを書く。

#include <stdio.h>

int main(void) {
 printf("Hello, World!\n");
 return 0;
}

これをインテルCPUを用いたLinux上で、GCCを使ってアセンブリファイルを吐き出す様にコンパイル指定する(-Sオプション)。
そうすると、フツーは「隠れて」直接マシン語を生成するトコを途中経過でのアセンブリファイルを吐き出してくれる。
結果、上の6行程度のCのソースコードは以下のようなアセンブリに変換される事が分かる。

   .file  "hello.c"
   .text
   .section    .rodata
.LC0:
   .string "Hello, World!"
   .text
   .globl main
   .type main, @function
main:
.LFB0:
   .cfi_startproc
   endbr64
   pushq %rbp
 .cfi_def_cfa_offset 16
   .cfi_offset 6, -16
   movq  %rsp, %rbp
   .cfi_def_cfa_register 6
   leaq  .LC0(%rip), %rdi
   call  puts@PLT
   movl $0, %eax
   popq %rbp
   .cfi_def_cfa 7, 8
   ret
   .cfi_endproc
.LFE0:
   .size  main, .-main
   .ident "GCC: (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0"
   .section  .note.GNU-stack,"",@progbits
   .section  .note.gnu.property,"a"
   .align 8
   .long  1f - 0f
   .long  4f - 1f
   .long  5
0:
   .string "GNU"
1:
   .align 8
   .long  0xc0000002
   .long  3f - 2f
2:
   .long  0x3
3:
   .align 8
4:
    • good
    • 0
この回答へのお礼

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

お礼日時:2021/05/22 21:52

CPUの構造と動作を把握して、マシン語でそれらに直接アクセス出来る


ので、そういう用途に使う。
①コル一チンライブラリとか、割り込み処理とか、CPUのレジスタを直接操作するようなことが必要なものを書くとき
②組み込み用のロースペックCPUで、極力短く、メモリをけちった処理を書くとき
③そもそも高級言語未整備のCPUを使う時、マシン語で書くしかない。
    • good
    • 0
この回答へのお礼

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

お礼日時:2021/05/22 21:52

今の時代、アプリケーションプログラム向けにアセンブリ言語を使う必然性があるケースは極めてまれだと思います。



私の専門はCPUの開発ですが、その立場で言わせてもらうと、アセンブリ言語がないとテストプログラムを書くのが難しくなるので、CPUの開発が簡単でなくなります。CPUの開発において書かれるテストプログラムは、特定のコーナーケースを突くために、ある決められた命令シーケンスで書かれていたりします。コンパイラで発生させたオブジェクトコード(機械語)ではそのようなきめ細かい命令列の制御はできないので、人間がアセンブルコードを書く必要があるわけです。人間が機械語で書いてもいいけど、機械語よりはアセンブリ言語の方が人間にはわかりやすいので、そっちのほうが重宝します。
また、機械語のプログラムを流したときにおかしな結果になったとすると、デバッグをする必要があるが、デバッグをするためにはどういう命令列を実行したのか知る必要があります。32ビット長の命令が並んだ膨大な機械語のプログラムをみてそれが何をやっているかわかる人なんて皆無ですから、人間にわかりやすいコードとして、アセンブリ言語に変換されてデバッグが行われます。

ニーモニックは、ニックネームのようなものだと思ってください。機械語とアセンブル言語の間で、例えば、0011のオペコードが加算を定義する機械語だったとすると、そのオペコードにADDというニーモニックを割り振る、という感じです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2021/05/22 21:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!