2012-05-07 28 views
1

私はアセンブリ言語の学習にWindows 7を使用しています。実行可能ファイルを作成するためのオブジェクトファイルとmingwの作成にNASMを使用しています。ファイルhello.exeファイルを実行している間Windows 7のnasmで実行可能な実行ファイルを実行できません

私は、使用している間

「ファイルhello.exeが働いて立ち止まった」を示すエラーメッセージが表示され、実行可能ファイル

del hello.o 
del hello.exe 
nasm -f elf hello.asm 
ld hello.o -o hello.exe 
hello 

をコンパイルため、次のコマンドを使用して実行していますコマンド

nasm -f bin hello.asm -o program.exe 

次私は

の下に表示されるエラーを持っている

enter image description here

あなたはLinuxのコード(int 80sys_writesys_exitているカーネルのシステムではなく、低レベルのものを要求)がある持っているどのような私のプログラムコード

global _start   ; global entry point export for ld 
section .text 
_start: 
; sys_write(stdout, message, length) 
mov eax, 4  ; sys_write syscall 
mov ebx, 1  ; stdout 
mov ecx, message ; message address 
mov edx, length  ; message string length 
int 80h 
; sys_exit(return_code) 
mov eax, 1  ; sys_exit syscall 
mov ebx, 0  ; return 0 (success) 
int 80h 
section .data 
message: db 'Hello, world!',0x0A ; message and newline 
length: equ $-message   ; NASM definition pseudo-instruction 
+0

私たちにコードを教えてください。 – paxdiablo

+0

私のシステムのタイプ:32bit os –

答えて

3

Windowsオペレーティングシステムで実行しているときにLinuxカーネルを試してみることをお勧めします。それはうまく終了する可能性は低いです:-)

MinGWはのWindows用最小限のGNUです。 Windowsアプリケーションの作成にはgccツールチェーンを使用する方法です。したがって、Windowsのルールに従わなければなりません。

+0

+1。ナイスキャッチ。 :) –

+0

Nasmを使用して8086プログラムをコンパイルする方法 –

+0

オプション以外の正しいコンパイル(組み立てる、技術的に)しています。 ELF形式(Windowsのやり方ではないので)やBIN形式(古典COMファイルのようなフラットファイルなのでEXE形式ではないので)を使用したいとは思っていません。あなたの問題は、コンパイル_process_ではなく、コンパイルしているソースコードです。 Linux OSではなく、Windows OSと通信できるコードを記述する必要があります。たとえば、http://stackoverflow.com/questions/572818/best-book-to-learn-windows-assembly-programmingを参照してください。 – paxdiablo

2

paxdiabloが指摘しているように、あなたのコードはLinuxカーネルを呼び出す以外に、フラットフォームのバイナリにアセンブルしています。これはウィンドウの下では実行されません。 nasm -f win32を使用する必要があります。

+0

nasmを使って8086プログラムをコンパイルする方法 –

関連する問題