みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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

投稿日時 - 2010-06-17 03:40:55

QNo.5974360

すぐに回答ほしいです

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

> 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でも関係ありません。

投稿日時 - 2010-06-17 04:48:14

このQ&Aは役に立ちましたか?

9人が「このQ&Aが役に立った」と投票しています

回答(6)

ANo.6

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

投稿日時 - 2010-06-17 10:58:31

ANo.5

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

投稿日時 - 2010-06-17 08:29:16

ANo.4

最終的な機械語が同じであれば,作るのは可能です。

例えば,i386系の
B8 01 00 00 00
という機械語は,Intelニーモニックのアセンブリ言語ならば
mov eax, 1
ですが,GAS (The GNU Assembler) ならば
movl $1, %eax
になります。

ちなみに,「アセンブリ言語」を「アセンブル」することができるプログラムが「アセンブラ」です。
「コンパイル可能言語 (e.g. C)」を「コンパイル」することができるプログラムを「コンパイラ」と呼ぶのと同じ関係です。

投稿日時 - 2010-06-17 05:21:23

ANo.2

それは、アセンブラ言語ではなく、コンパイラですね。
CPUは、move ax,1とかInt 21等の命令は理解できません。
コンパイルされた機械語(マシン語)のみ理解できます。

ですので、ソフトウェアレベルで変える(作る)ことができるのは
コンパイラとなります。

投稿日時 - 2010-06-17 04:03:38

ANo.1

コンパイラをご自身で作りたいという趣旨と判断して回答します。

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

投稿日時 - 2010-06-17 04:00:28

お礼

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

投稿日時 - 2010-06-17 04:35:58

あなたにオススメの質問