アセンブリコードのコンパイルについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Fimbul
記事: 100
登録日時: 12年前

アセンブリコードのコンパイルについて

#1

投稿記事 by Fimbul » 10年前

MASM32と16bitリンカーを用いてアセンブリコードをコンパイルしようとするとエラーが出ます。

OSはWindows Vista 32 bitです。
MASM32と16bitリンカーの導入は以下のページを参照しました。
http://www5c.biglobe.ne.jp/~ecb/assembler/inst.html

コードは同ページの「4. 実行」の部分のコードです。

コード:

CODE	SEGMENT
		ASSUME	DS:CODE,CS:CODE,ES:CODE,SS:CODE
		.186
		ORG	100h

START:
		mov	ah,2
		mov	dl,'A'
		int	21h

		mov	ax,4c00h
		int	21h
		
CODE	ENDS
		END	START
同ページの手順で、このコードをコンパイルすると以下の様にリンクエラーが出ました。

コード:

C:\test>dir
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は 3CE8-856F です

 C:\test のディレクトリ

2013/11/02  22:15    <DIR>          .
2013/11/02  22:15    <DIR>          ..
2013/11/02  21:32               178 test.asm
               1 個のファイル                 178 バイト
               2 個のディレクトリ  137,680,089,088 バイトの空き領域

C:\test>ml /c /Fl test.asm
Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997.  All rights reserved.

 Assembling: test.asm

C:\test>dir
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は 3CE8-856F です

 C:\test のディレクトリ

2013/11/02  22:16    <DIR>          .
2013/11/02  22:16    <DIR>          ..
2013/11/02  21:32               178 test.asm
2013/11/02  22:16               867 test.lst
2013/11/02  22:16                60 test.obj
               3 個のファイル               1,105 バイト
               2 個のディレクトリ  137,680,084,992 バイトの空き領域

C:\test>link /t test.obj,test.com,nul,nul,nul
[highlight=#ff0000]link:[/highlight] cannot create link `test.obj,test.com,nul,nul,nul' to `/t': No such file o
r directory

C:\test>
良く分かりませんが、/tをオプションとして認識していないのでしょうか。
何が問題なのか教えてください。よろしくお願いします。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: アセンブリコードのコンパイルについて

#2

投稿記事 by みけCAT » 10年前

linkというコマンドがMASMの実行ファイルではなく、OS標準のコマンドとして認識されているようです。
linkと入力する代わりに、MASMに付属するlink.exeのフルパスを入力してみてください。
例えば、

コード:

C:\test>c:\masm32\bin\link.exe /t test.obj,test.com,nul,nul,nul
みたいな感じです。

【修正】
OS標準のコマンドかはわかりませんが、何らかのコマンドと競合している可能性が考えられます。
考えられる対処法は変わりません。
最後に編集したユーザー みけCAT on 2013年11月02日(土) 23:09 [ 編集 1 回目 ]
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: アセンブリコードのコンパイルについて

#3

投稿記事 by みけCAT » 10年前

自分もImagemagickのconvertコマンドで同様の罠に引っかかりました。
そのときはOSのconvertコマンドは使用することは無いと思ったので、
PATHに登録するときにImagemagickの実行ファイルがあるフォルダをC:\Windows\なんとか より前に登録することで解決しました。

しかし、OSのlinkとMASM32では前者のほうが重要そうなので、今回はこの方法はおすすめしません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Fimbul
記事: 100
登録日時: 12年前

Re: アセンブリコードのコンパイルについて

#4

投稿記事 by Fimbul » 10年前

みけCAT さんが書きました:linkと入力する代わりに、MASMに付属するlink.exeのフルパスを入力してみてください。
フルパスを入力したところ、以下の様に無事実行することができました。

コード:

C:\test>c:\masm32\bin\link.exe /t test.obj,test.com,nul,nul,nul

Microsoft (R) Segmented Executable Linker  Version 5.60.339 Dec  5 1994
Copyright (C) Microsoft Corp 1984-1993.  All rights reserved.


C:\test>dir
 Volume in drive C has no label.
 Volume Serial Number is 3CE8-856F

 Directory of C:\test

2013/11/02  23:07    <DIR>          .
2013/11/02  23:07    <DIR>          ..
2013/11/02  21:32               178 test.asm
2013/11/02  23:14                11 test.com
2013/11/02  22:16               867 test.lst
2013/11/02  22:16                60 test.obj
               4 File(s)          1,116 bytes
               2 Dir(s)  137,689,587,712 bytes free

C:\test>test
A
C:\test>
みけCAT さんが書きました:OS標準のコマンドかはわかりませんが、何らかのコマンドと競合している可能性が考えられます。
軽く調べた結果、Visual studio 2008のLINK.EXEがありました。
http://msdn.microsoft.com/ja-jp/library ... s.90).aspx
ただ、
このツールは、Visual Studio コマンド プロンプトからのみ開始できます。システム コマンド プロンプトや Windows エクスプローラからは開始できません。
とあるので、違うかもしれません。


みけCATさん、どうもありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る