2016-11-30 5 views
0

は、私はいくつかの一般的なx86のNASMコードを持って言う:NASM:コンパイル時に定数値を提供

%define Constant 123 
mov si, Constant 

問題はアセンブリが書き込まれたときに一定の値Constantがまだ知られていないということです。これにより、ファイルがアセンブルされたときに定数の値を指定する必要があります。私の場合、必要な定数はテキストファイルのサイズに依存します。

これはどのように達成できますか?

答えて

0

NASMのマニュアルを調べたところ、私が必要としたようなアセンブラのコマンドラインオプションは見つかりませんでした。私の解決策はかなり簡単です。次のスクリプトは、私がどのように問題を解決したかを示しています。

#!/bin/sh 

# Could be replaced by any other way of getting the constant value; this gets a file's size 
fileSize=`stat --printf="%s" my_file.txt` 

# Write the constant definition to a temporary file 
printf "%%define FILE_SIZE %s\n" $fileSize > tmp 

# Append the rest to the temporary file 
cat my_asm.asm >> tmp 

# Assemble the file and name the output correctly 
nasm tmp -o my_asm.out 

# Remove the temporary file 
rm tmp 
+3

'-D'オプションは必要なものを実行しませんか? –

+1

ビルドプロセスで少なくとも 'cat'-on-a-temporaryを保存するには'%include'を使用します。 –

+0

@PeterCordes私はあなたの考えが好きです。あなたの方法には、何かが追加されることをASMファイル内で確認する方法が含まれています。 +1 –

関連する問題