- ベストアンサー
NASMが動かない?Windows7へのNASMインストールでエラーが発生
- Windows7にNASMをインストールし、mathandcomp.asmファイルをコンパイルするとエラーが発生。
- NASMのバージョンはnasm-2.08.01。
- 手順を教えていただけますか?
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
ちなみに、7行目の最後に半角バックスラッシュ(日本語OSでは半角の\)を入れた状態でもアセンブルできます。 http://ja.wikipedia.org/wiki/%E3%83%90%E3%83%83%E3%82%AF%E3%82%B9%E3%83%A9%E3%83%83%E3%82%B7%E3%83%A5#.E3.83.90.E3.83.83.E3.82.AF.E3.82.B9.E3.83.A9.E3.83.83.E3.82.B7.E3.83.A5.E3.81.A8.E5.86.86.E8.A8.98.E5.8F.B7 http://www.relief.jp/itnote/archives/001280.php http://okwave.jp/qa/q1236976.html などなど… # 「バックスラッシュがないから削除した」のがエラーになった原因でしょう。 # ただし、表示される内容は#3で連結したものとは異なりますが。(改行はされない) >NASMのインストールから手順を教えていただけますか。 掲示先のリンクから、2.08.1のWin32のZip拾ってきて、展開しただけです。 パスも通していないので、nasm.exeのある場所で実行しました。 # C:\Program Filesあたりに入れて、環境変数PATHでパスを通すのが正しいのでしょうが… # 継続的に使用する気はないのでそこまでしていません。 # 「パスを通す」に関しては、自分で検索して下さい。(CUIのツール使おうというのならそのくらい自分で調べられるようでないと…) >command.comとは何ですか。 16bitのMS-DOSのエミュレータ…っぽいです。 XP以降では16bitアプリに関してはいろいろ制限が入ることになりますが…その回避の為に用意されているのでしょう。 WindowsVistaやWindows7にあるかどうかは判りませんが。 http://ja.wikipedia.org/wiki/COMMAND.COM int 21割り込み(システムコール)は、Windowsが32ビットになった時点で使用できなくなっていた…かと思います。 過渡期にMS-DOSでそういうプログラム組んだことないので細かい経緯は不明ですが。
その他の回答 (6)
- Tacosan
- ベストアンサー率23% (3656/15482)
検索すればこのくらいすぐ出る. 便利な世の中になったものだ.
お礼
ご回答ありがとうございます。 ご紹介くださったサイトを読む限り、スムーズに動かないようです。
- ralf124c
- ベストアンサー率52% (232/446)
> ちなみにwindows7の64bitでは動きませんでした。64ビットではコードが違うのでしょうか。 Win7のエディションが何を使われているのかわからないのでなんともいえませんし(HomeとかStarterにはXPモードが無いです)64ビット版を持っていないので無責任な発言かもしれませんが、世間一般ではXPモードで過去のアプリが動けばめっけもん程度の代物とのことです。 動作確認はVirtualPC2007(フリー)とかに古いOS入れて(フリーならOpenDOSとか、ライセンスがあればMS-DOS、PC-DOS、DR-DOS、Win3~XPとか)検証することをお勧めします。
補足
win7のエディションはプロフェッショナルです。32ビットのvistaでは動きました。win7の64ビットでも動かしたいのですが。
- ralf124c
- ベストアンサー率52% (232/446)
横からすいません。 COMMAND.COMについての戯言 一般的にオペレーティングシステム(以下OS→でも、IBMの商標→昔触ったバローズだったかクロメンコのWS(ワークステーション)なんかではMSPとか言ってた気がする→Wikiでは富士通?になってる)はOS本体であるカーネルとユーザインターフェースを提供するシェルから構成されます。 「command.com」とか「cmd.exe」というのはこのシェルというのに該当し、コマンドインタープリターと言い、前者は16ビット後者は32ビットの処理がベースになっています。 あなたの作られているプログラムは16ビット処理が基本の形態(後述)なので前者のシェルで動作します。 また、UNIX系の普通のシェルと少し違うのは、ファイルコピーなど基本的なコマンドを内包しています。 Windows7では、XPモードで動作するかと思います。 あなたが作成しているプログラムは昔のOS、MS-DOSで言うところのメモリモデルの分類上「スモールモデル(100番地からはじまるプログラム)」に該当します。 これはまだ当時のPCのメモリー量が少ない時代に効率的な実行ファイル環境やメモリ管理と、もっとずっと過去のOS,CP/Mの互換性(といってもDOSではほとんど動かないけど)などから生じたもので、現在の潤沢なメモリ管理からは過去の遺物でしか有りません。 できれば、EXEファイルをはきだせるように改造されるともっと勉強になると思います。 オペレーティング・システムは書いて字のごとく「操作」という環境を提供するシステムですが、これは操作者のみを指すのではなく、プログラマが作ったプログラムからOSの操作を提供すること(例:INT21Hのファンクションコールなど)も指しています。 もう、過去の遺物かも知れませんが、言語だけじゃなく、メモリモデル、その動作環境(自作プログラムがどうやって起動されるのか)や関連ツール(アセンブラ・リンカ)などについて調べられたらいかがでしょうか。 こういう基本を抑えれば、いろいろと応用が効くと思います。
お礼
ご回答ありがとうございます。私は基礎力がないものでこれからです。 ちなみにwindows7の64bitでは動きませんでした。64ビットではコードが違うのでしょうか。
- Wr5
- ベストアンサー率53% (2173/4061)
XPで試してみました。 7行目と8行目は下記のように連結していますが。 > mesg db 'Math with PC,PC through Math!',0Dh,0Ah,'How wonderful!',0Dh,0Ah,'$' command.comが起動して、そちらで実行されました。 Windows7にもcommand.comがあるかどうかは不明ですが…
お礼
command.comとは何ですか。 vistaでも同様なエラーが出てしまうのですが、すみませんが、NASMのインストールから手順を教えていただけますか。
補足
今、ソースの7行目と8行目を連結したら、メッセージが出ました。改行していたのがエラーを出していたことがわかりました。 ありがとうございました。
- Tacosan
- ベストアンサー率23% (3656/15482)
7行目と 8行目, なんで 2行にわかれてるの?
お礼
この通り2行に分かれて出てきました。私自身もわからないのですが。
補足
すみません。ソースのことですね。 !のあとにバックスラッシュがあるのですが、印刷のために改行が入るが、論理的には次の行に続くことを意味しているとのことです。バックスラッシュが打てなくて省略してしまいました。
- Wr5
- ベストアンサー率53% (2173/4061)
エラーメッセージはなんと出ます? # 短いから回答者側で試せ…と? まぁ、うまく実行ファイルができたとしても…たぶん動かないと思いますが。 # int 21hのサービスコール、Windows7で使えますかねぇ…。
お礼
ご回答ありがとうございます。 すみません。エラーは、以下の2行です。 mathandcomp.asm:7:error: expression syntax error mathandcomp.asm:8:error: parser :instruction expected windows7では動かないのでしょうか。
お礼
ご回答ありがとうございます。私は基礎力がないものでこれからです。