• ベストアンサー

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

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

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

  • ベストアンサー
  • BuriBuri4
  • ベストアンサー率28% (150/525)
回答No.3

> windowsはint 21hなのにlinuxはint 0x80なので これはアセンブリ言語の問題ではなくAPIの問題です。 intはソフトウエア割り込み命令でBIOSやAPIを呼び出すのに使います。 同じような機能でもWindowsやLinuxなどのOSが違えば呼び出しアドレスが違うのは当然です。 > アセンブラはCPUが同じならどれも同じだと思っていたのですが アセンブリ言語のニーモニクはCPUメーカーが同じなら同じです。 が、CPU毎に同じなのはマシン語であってアセンブリ言語のニーモニクではありません。 例えばインテル8080とザイログZ80はマシン語レベルで高い互換性がありますがアセンブリ言語のニーモニクは大きく異なります。 最終的にマシン語コードが出来上がればニーモニクはmov ax,1でもmove ax,1でもax=1でも関係ありません。

すると、全ての回答が全文表示されます。

その他の回答 (5)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.6

アセンブラによっては, ニーモニックを含めてマクロとかで置き換えることができたような気がする. nasm でできるかどうかは知らん.

すると、全ての回答が全文表示されます。
  • php504
  • ベストアンサー率42% (926/2160)
回答No.5

アセンブル言語の命令をニーモニックと呼びますがこれは自分で勝手に作ってもいいですよ 普通はCPUメーカのニーモニックを使いますがmovは嫌いだから俺はLDを使うと決めても問題ありません 16進数の表記も0xでもhでも好きな表記法を使ってかまいません ただそのニーモニックを正しい機械語に変換するアセンブラまで自作しないとだめです まあ1対1で対応させるだけなので出来ないことはないでしょう

すると、全ての回答が全文表示されます。
回答No.4

最終的な機械語が同じであれば,作るのは可能です。 例えば,i386系の B8 01 00 00 00 という機械語は,Intelニーモニックのアセンブリ言語ならば mov eax, 1 ですが,GAS (The GNU Assembler) ならば movl $1, %eax になります。 ちなみに,「アセンブリ言語」を「アセンブル」することができるプログラムが「アセンブラ」です。 「コンパイル可能言語 (e.g. C)」を「コンパイル」することができるプログラムを「コンパイラ」と呼ぶのと同じ関係です。

すると、全ての回答が全文表示されます。
  • tohru999
  • ベストアンサー率49% (76/154)
回答No.2

それは、アセンブラ言語ではなく、コンパイラですね。 CPUは、move ax,1とかInt 21等の命令は理解できません。 コンパイルされた機械語(マシン語)のみ理解できます。 ですので、ソフトウェアレベルで変える(作る)ことができるのは コンパイラとなります。

すると、全ての回答が全文表示されます。
回答No.1

コンパイラをご自身で作りたいという趣旨と判断して回答します。 現存のアセンブラ(コンパイラ)にマクロ機能が大抵付いていますので、自分の書きやすいニーモニックで書いて本来のアセンブラコードを吐き出す様にマクロ定義を書けば、ご希望の環境を作成できると思います。 もしくは、Visual C++などでソースデコーダーからマシン語への変換までの全てを作れば ニーモニックの置き換えは当然可能です。自分しか使わないと決めて、ラベル数は1ファイル最大256個だとか、include機能は無いなどと、機能を限定したアセンブラは意外と短期間でも作れますよ。

noname#178821
質問者

お礼

ありがとうございます。 説明がかなり悪かったです・・ 自分自身はアセンブラはCPUに依存していて OSが違っても表記方法など、すべて同じだと思っていたのですが linuxのnasmはint 0x80なのに windowsだとint 21hなので疑問に思い質問しました。 movをmoveに変えられるか?という質問は 要は自分でアセンブラのコンパイラを作れるのか、 nasmも作られたものでnasmの表記方法自体変えられるのか?という意味です。 (アセンブラは初めからハードウェアに組み込まれている? と勘違いしていました。)

すると、全ての回答が全文表示されます。

関連するQ&A