プロが教える店舗&オフィスのセキュリティ対策術

ニーモニックとオペコードは何が違うのでしょうか?教えていただけないでしょうか?アセンブリ言語です。

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

  • うーん・・・

    どうしてあなたはその機械語とアセンブリ言語を翻訳できたのかも知りたいです。すみません。

    No.6の回答に寄せられた補足コメントです。 補足日時:2021/06/11 07:36
  • うーん・・・

    movが機械語でb8が載っているところはどこでしょうか?教えていただけないでしょうか?すみません。

    No.7の回答に寄せられた補足コメントです。 補足日時:2021/06/11 22:19
  • うーん・・・

    ニーモニックでXRA AはAの排他的論理和。XRAがオペコード、Aがオペランド。機械語でAF。
    次のMOV C, A
    Aレジスターの内容をCレジスターに移動する命令。
    命令に当たるMOV、これがオペコード。目的とするC, Aがオペランド。機械語にすれば4F。上のAFの次にありますよね。
    同様にADD CならADDがオペコード、Cがオペランド。機械語では81。上にあるでしょ。最後のRETがC9。
    NOPやHLTのようにオペランドがない命令もあります。
    なんだかPUSHにこだわっていますがPUSH BであればPUSHがオペコード、Bがオペランドです。機械語にすればC5。
    の説明が載っているところを示して頂けないでしょうか?どこに書かれているのでしょうか?教えていただけないでしょうか?すみません。

    No.8の回答に寄せられた補足コメントです。 補足日時:2021/06/13 19:41

A 回答 (9件)

1. B8+ rd id MOV r32, imm32 OI Valid Valid Move imm32 to r32.


immediate 32bitをr32に移動

mov $0x616b6157,%eax
たぶんGCCが吐き出しているコードなのでオペランドが前後逆です。
16進数の616b6157をレジスターEAXに格納

2. 0xはその後ろは16進数という意味です

3. 77は"w"、57なので"W"
    • good
    • 0
この回答へのお礼

迅速な回答大変恐縮です。お手数ですが、さらに質問があり、
すみません。
①1. B8+ rd id MOV r32, imm32 OI (Valid Valid Move imm32 to r32.)
immediate 32bitをr32に移動

mov $0x616b6157,%eax
たぶんGCCが吐き出しているコードなのでオペランドが前後逆です。
16進数の616b6157をレジスターEAXに格納
がよく分かりません。
括弧の部分が表載っていません。
②オペランド"$0x616b6157,%eax"からB8とわかります。
の所も分かりません。
以上 2点教えていただけないでしょうか?

お礼日時:2021/06/12 11:30

X86系と回答しているのに検索できませんか?


たとえばここでMOVをサーチ。
https://www.felixcloutier.com/x86/
MOV - MOVE
https://www.felixcloutier.com/x86/mov
Opcodeには88, 89, 8A, ,,と複数ありますがオペランド"$0x616b6157,%eax"からB8とわかります。

>高級言語は、何でも良い
よいですよ。FORTRANでもCでもC++でもお好きなものを。


$0x616b6157
Wakaね。
https://www.k-cube.co.jp/wakaba/server/ascii_cod …
61 a
6b k
61 a
57 W
この回答への補足あり
    • good
    • 0
この回答へのお礼

迅速な回答ありがとうございます。また、質問で申し訳ないですが、
①すみません。https://www.felixcloutier.com/x86/https://www.felixcloutier.com/x86/movの見方が分かりません。
②$0xとはどういう意味でしょうか?
③57 Wは77 Wの間違いではないでしょうか?
以上3点について教えていただけないでしょうか?
大変恐縮ですが。

お礼日時:2021/06/12 06:03

>b8 57 61 6b 61 mov $0x616b6157,%eax



intel X86系です。
mov(機械語ではb8)がオペコードになります。さすがにX86系ではアセンブラーは使いません。高級言語で書いてコンパイルします。

アセンブリーマニュアルは以下。日本語版も出版されていましたがもう買えないでしょう。
https://altairclone.com/downloads/manuals/8080%2 …

簡易版はここにありました。
http://tyunitidenko.x0.com/pdfsetumeisyo/nd8080_ …


>アセンブリ言語がなぜその機械語に直せるのかも知りたいです。

http://www.tamabi.ac.jp/idd/shiro/hist/8080/8080 …
にテーブルがありました。たとえばPUSH Bは横のCと縦の5の交差するところにあるので機械語はC5、POP Bは横のCと縦の1の交差するところにあるので機械語はC1となります。昔はこれを見ながら手でやってたので機械語は覚えてしまいました。

Z80はこちら。アセンブラーはニーモニックに対応する機械語を拾っていくだけの単純なものです。
http://www.ze.em-net.ne.jp/~kenken/misc/z80.html
この回答への補足あり
    • good
    • 0
この回答へのお礼

迅速な回答大変恐縮です。で、質問なのですが、
その高級言語は、何でも良いのでしょうか?高級言語でコンパイルするというところです。mov がなぜ機械語でb8がオペコードになるのはどうやって知ったのでしょうか?教えていただけないでしょうか?すみません。

お礼日時:2021/06/11 08:55

機械語でAF4F5E237EFEFFCA1100571A8123C3010079C9と記載されてもなんだかわかりませんよね。

人が見てわかるように簡単な英語の命令にしたのがニーモニックです。上の機械語は以下をアセンブルしたものです。これなら何をしているのか見てわかります。
XRA A
LOOP: MOV C,A
MOV E,M
INX H
MOV A,M
CPI 0FFH
JZ BACK
MOV D,A
LDAX D
ADD C
INX H
JMP LOOP
BACK: MOV A,C
RET

ニーモニックでXRA AはAの排他的論理和。XRAがオペコード、Aがオペランド。機械語でAF。
次のMOV C, A
Aレジスターの内容をCレジスターに移動する命令。
命令に当たるMOV、これがオペコード。目的とするC, Aがオペランド。機械語にすれば4F。上のAFの次にありますよね。

同様にADD CならADDがオペコード、Cがオペランド。機械語では81。上にあるでしょ。最後のRETがC9。
NOPやHLTのようにオペランドがない命令もあります。

なんだかPUSHにこだわっていますがPUSH BであればPUSHがオペコード、Bがオペランドです。機械語にすればC5。

以上はインテル80系の話。CPUが変わればニーモニックも機械語も変わります。
この回答への補足あり
    • good
    • 0
この回答へのお礼

すみません。インテル80系の命令一覧が載っているサイトや書籍を知らないでしょうか?アセンブリ言語がなぜその機械語に直せるのかも知りたいです。
後これも

(機械語データ) (アセンブリ言語)
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
これもインテル80系でしょうか?教えていただけないでしょうか?すみません。

お礼日時:2021/06/11 07:35

オペコードは命令自体。

それが何で表現されているかは関係ない。アセンブリ言語だけでなく、機械語でもオペコードはある。


ニーモニックは、アセンブリ言語でオペコードを表現する英数字の綴りです。状況によっては疑似命令も含む。

アセンブリ言語について書かれている文章の中であれば、同じ意味でしょう。
    • good
    • 0
この回答へのお礼

ニーモニックは例えばpush10とかでしょうか?で、オペコードがpushとかでしょうか?教えていただけないでしょうか?pushをニーモニックと言っても良いのでしょうか?教えていただけないでしょうか?すみません。

お礼日時:2021/06/10 19:55

No.2です。



> 例えば、
「push 10」をアセンブルして得た結果(機械語)がニーモニック、
「10」の部分がオペランド、です。
    • good
    • 0
この回答へのお礼

ニーモニックは例えばpush10とかでしょうか?で、オペコードがpushとかでしょうか?教えていただけないでしょうか?pushをニーモニックと言っても良いのでしょうか?教えていただけないでしょうか?すみません。

お礼日時:2021/06/10 19:55

>例えば、push 10とかがニーモニックで、pushとかADDとかが、


>オペコードという事でしょうか?
そういうことです
    • good
    • 0
この回答へのお礼

ニーモニックは例えばpush10とかでしょうか?で、オペコードがpushとかでしょうか?教えていただけないでしょうか?pushをニーモニックと言っても良いのでしょうか?教えていただけないでしょうか?すみません。

お礼日時:2021/06/10 19:55

ノーモニックとは、機械語のこと。


オペランドとは、命令に利用するデーター(の場所)を示すもの。
    • good
    • 0
この回答へのお礼

例えば、push 10とかがニーモニックで、pushとかADDとかが、オペコードという事でしょうか?教えていただけないでしょうか?すみません。

お礼日時:2021/06/10 18:47

ニーモニック



アセンブリ言語の文法に則って書いた命令語
CPUの種類によって異なる

オペコード、オペランンド

アセンブリ言語表記の部位の呼称
どういうことする命令なのか、を示す部位はオペコード
どこのレジスタやメモリを指すのかを示す部位はオペランド
    • good
    • 0
この回答へのお礼

例えば、push 10とかがニーモニックで、pushとかADDとかが、オペコードという事でしょうか?教えていただけないでしょうか?すみません。

お礼日時:2021/06/10 18:47

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