2017-01-29 11 views
0

アセンブリプログラムを実行することはできません。 https://www.tutorialspoint.com/assembly_programmingそれはかなり強力なツールだように思えたが、それを学習を開始する場所を私は知りませんでしたので、私はそれをGoogleで検索して、この見つかったので、私は、今日のアセンブリを学ぶことにしました

コンパイルとリンクのためにNASMとMinGWをインストールするように言われたので、ダウンロードしてインストールして、両方が正しく動作していることを確認しました。

私は与えられたコード

section .text 
    global _start  ;must be declared for linker (ld) 

_start:    ;tells linker entry point 
    mov edx,len  ;message length 
    mov ecx,msg  ;message to write 
    mov ebx,1  ;file descriptor (stdout) 
    mov eax,4  ;system call number (sys_write) 
    int 0x80  ;call kernel 

    mov eax,1  ;system call number (sys_exit) 
    int 0x80  ;call kernel 

section .data 
msg db 'Hello, world!', 0xa ;string to be printed 
len equ $ - msg  ;length of the string 

をコピーして、 "hello.asm" と呼ばれ、

nasm -f elf hello.asm 
(later nasm -f win32 hello.asm) 

、その後

ld hello.o -o hello.exe 
(later ld hello.obj -o hello.exe) 

を書き込むことによって、それをコンパイルし、空の文書に貼り付けます両方の時間が.exeファイルを正常に作成しましたが、実行しようとしたときには、 owsコマンドプロンプトと、 "hello.exeがもう動作しない"という新しいウィンドウが開きました。

これは何も出力されませんが、少なくとも実行するべきではないことは知っていますか?

どうしたのですか?

使用:

  • のWindows 7のプロフェッショナル64
  • AMDのFX 4350
  • のnasm-2.12.02
  • MinGW
+1

これはLinuxのチュートリアルです。これはウィンドウでは機能しません。 – tkausl

+0

アセンブリーは特殊ですか? –

+2

いいえ、しかし、システムコールは( 'int 0x80')です – tkausl

答えて

0

あなたは別のチュートリアルが必要になるだろう、ユーザーtkauslはこのチュートリアルをLinux x86_64ビット用に指摘しています。

Windowsの場合でも、必要に応じてNASMアセンブラとMinGWを使用できますが、コールが異なるためにコードが異なって見えます。また、外部ライブラリを使用する必要があります。

ただし、Microsoftが設計したもので、他のツールを備えたMASM32v8パッケージにも含まれているため、MASM for Windowsの使用をお勧めします。ここからMASMを取得することができます。http://www.masm32.com/

は、Windows総会のためのチュートリアルもあります: https://www-s.acm.illinois.edu/sigwin/old/workshops/winasmtut.pdf

はしかし、あなたはNASMアセンブラを使用して上の意図している場合、その後、あなたはここにcaffiendにより投稿の回答を参照することができます: How to write hello world in assembler under Windows?

関連する問題