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

NASMをwindows7にインストールしました。
次のようなソースをmathandcomp.asmというファイル名で保存し、
コマンド・プロンプトで nasm mathandcomp.asm -o mathandcomp.com のようにすると、mathandcomp.comが生成されるそうですが、エラーが出てしまいます。
下記のメッセージが出るはずなんですが、手順をおしえていただけますか。
NASMのバージョンはnasm-2.08.01です。
http://www.nasm.us/

org 100h
mov dx,mesg
mov ah,9
int 21h
mov ah,4Ch
int 21h
mesg db 'Math with PC,PC through Math!
How wonderful!',0Dh,0Ah,'$'

A 回答 (7件)

エラーメッセージはなんと出ます?


# 短いから回答者側で試せ…と?

まぁ、うまく実行ファイルができたとしても…たぶん動かないと思いますが。
# int 21hのサービスコール、Windows7で使えますかねぇ…。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
すみません。エラーは、以下の2行です。
mathandcomp.asm:7:error: expression syntax error
mathandcomp.asm:8:error: parser :instruction expected

windows7では動かないのでしょうか。

お礼日時:2010/11/29 01:58

7行目と 8行目, なんで 2行にわかれてるの?

この回答への補足

すみません。ソースのことですね。
!のあとにバックスラッシュがあるのですが、印刷のために改行が入るが、論理的には次の行に続くことを意味しているとのことです。バックスラッシュが打てなくて省略してしまいました。

補足日時:2010/11/29 02:33
    • good
    • 0
この回答へのお礼

この通り2行に分かれて出てきました。私自身もわからないのですが。

お礼日時:2010/11/29 02:30

XPで試してみました。



7行目と8行目は下記のように連結していますが。

> mesg db 'Math with PC,PC through Math!',0Dh,0Ah,'How wonderful!',0Dh,0Ah,'$'

command.comが起動して、そちらで実行されました。
Windows7にもcommand.comがあるかどうかは不明ですが…

この回答への補足

今、ソースの7行目と8行目を連結したら、メッセージが出ました。改行していたのがエラーを出していたことがわかりました。
ありがとうございました。

補足日時:2010/11/29 11:40
    • good
    • 0
この回答へのお礼

command.comとは何ですか。
vistaでも同様なエラーが出てしまうのですが、すみませんが、NASMのインストールから手順を教えていただけますか。

お礼日時:2010/11/29 11:21

ちなみに、7行目の最後に半角バックスラッシュ(日本語OSでは半角の\)を入れた状態でもアセンブルできます。


http://ja.wikipedia.org/wiki/%E3%83%90%E3%83%83% …
http://www.relief.jp/itnote/archives/001280.php
http://oshiete.goo.ne.jp/qa/1236976.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でそういうプログラム組んだことないので細かい経緯は不明ですが。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。私は基礎力がないものでこれからです。

お礼日時:2010/11/29 14:09

横からすいません。


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のファンクションコールなど)も指しています。

もう、過去の遺物かも知れませんが、言語だけじゃなく、メモリモデル、その動作環境(自作プログラムがどうやって起動されるのか)や関連ツール(アセンブラ・リンカ)などについて調べられたらいかがでしょうか。
こういう基本を抑えれば、いろいろと応用が効くと思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。私は基礎力がないものでこれからです。
ちなみにwindows7の64bitでは動きませんでした。64ビットではコードが違うのでしょうか。

お礼日時:2010/11/29 14:11

> ちなみに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ビットでも動かしたいのですが。

補足日時:2010/11/29 15:59
    • good
    • 0

検索すればこのくらいすぐ出る. 便利な世の中になったものだ.



参考URL:http://forum.nasm.us/index.php?topic=830.0
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
ご紹介くださったサイトを読む限り、スムーズに動かないようです。

お礼日時:2010/11/29 21:07

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