2

アセンブリ言語の学習に Windows 7 を使用しています。オブジェクト ファイルの作成には NASM を使用し、実行ファイルの作成には mingw を使用しています。

実行可能ファイルのコンパイルと実行に次のコマンドを使用しています

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

hello.exe ファイルの実行中に、「hello.exe が動作を停止しました」というエラー メッセージが表示される

次のコマンドを使用している間

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

以下に示すエラーが発生しました

ここに画像の説明を入力

私のプログラムコード

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
4

2 に答える 2

3

そこにあるのはLinuxコード (int 0x80sys_writeありsys_exit、かなり低レベルのものに対するカーネル システム コールです)。

Windows オペレーティング システム上で実行しているときに、Linux カーネルを試して呼び出すのが良い考えであるとは確信していません。それはうまく終わる可能性は低いです:-)

MinGW はWindows 用の最小限の GNU であり、ツールチェーンを使用しgccて Windows アプリケーションを作成する方法です。したがって、Windows の規則に従う必要があります。

于 2012-05-07T06:56:46.163 に答える
2

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

于 2012-05-07T07:16:00.060 に答える