2017-03-03 2 views
-1

私はウィンドウ7を使用していますが、このアセンブリコードをコンパイルする方法がわかりません。手動で計算する必要がありますか?もっと速くなる方法を知りたい場合や、行ごとに計算します。私はraxの最終価値が必要です。これは& T構文ATであることを考えると64ビットアセンブリコードをコンパイルする方法

start: 
mov $1020, %rax 
mov $4090, %rbx 
mov $2044, %rcx 
xor %rdx, %rdx 
sub %rcx, %rbx 
cmp %rbx, %rax 
jge loopa 
jmp loopb 
loopa: 
cmp $4, %rdx 
jg end 
inc %rdx 
loopb: 
xchg %rax, %rbx 
idiv %rbx 
add %rdx, %rax 
imul %rcx 
jmp loopa 
end: 

答えて

2

は、あなたはおそらく、あなたがこのうち実行可能ファイルを構築するために使用することができ、MinGWのツールチェーンからasldをしたいです。あなたは、エントリポイントのシンボルをエクスポートして、機能が.textセグメントに入ることをリンカに伝えるために先頭に余分な定型のビットを追加する必要が

:次に、あなたがファイルを組み立てることができ

.text 
.global start 

とそれをリンク:

as filename.as -o filename.o 
ld filename.o -e start -o output.exe 

-eオプションは、実行可能ファイルのエントリポイントになりますどのような機能リンカに指示します。

(私はLinux上でこれをテストしたが、構文は、Windows上でMinGWのツールチェーンで同じである必要があります)

今、あなたのアセンブリ関数は、任意のIOを実行していない、とさえそう、正しく終了しません。実行ファイルを実行すると、おそらくセグメンテーションを取得するだけです。デバッガに関数を実行し、関数の最後にブレークポイントを追加し、実行が終了するとraxを調べる必要があります。

このコードをasmブロックにCファイルに埋め込み、CでIOを実行することもできます。まだ、ツールチェーンがインストールされていない場合は、手作業で結果を高速に展開することができます。

+0

コンパイルのステップバイステップについてのチュートリアル。 –

+2

@MinKoKoチュートリアルのようなオフサイトのリソースのリクエストは、話題にはなりません。そのためにGoogleを使用してください。 –

+0

downvoterの心は説明するでしょうか? –

関連する問題