2017-01-29 1 views
0

조립 프로그램을 실행할 수 없습니다 : https://www.tutorialspoint.com/assembly_programming매우 강력한 도구처럼 보였지만, 그것을 배우기 시작 위치를 내가 알고하지 않았다, 그래서 그것을 봤이 발견 때문에 나는 오늘 어셈블리를 배우기로 결정

컴파일과 링크를 위해 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 

을 복사

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

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

이후

를 작성하여 "hello.asm"라는 빈 문서에 붙여 넣기하고 컴파일 그것은 성공적으로 두 번. exe 파일을 만들었지 만, 그것을 실행하려고했을 때, 그것은 단지 바람을 열었습니다 ows 명령 프롬프트와 "hello.exe가 더 이상 작동하지 않는다."라는 새로운 창이 열립니다.

아무 것도 출력하지 않지만 적어도 실행해서는 안된다는 것을 알고 있습니까?

내가 뭘 잘못 했니?

사용 :

  • 윈도우 7 프로 64 비트
  • AMD의 FX 4350
  • NASM-2.12.02
  • MinGW
+1

이것은 리눅스의 튜토리얼입니다. 이것은 Windows에서는 작동하지 않습니다. – tkausl

+0

어셈블리가 특이한가요? –

+2

아니요, syscalls은 ('int 0x80')입니다. – tkausl

답변

0

당신은 다른 자습서를 필요로하기 위하여려고하고있다, tkausl 사용자는이 튜토리얼을 Linux x86_64 비트 용이라고 지적했기 때문입니다.

윈도우의 경우 원하는 경우 NASM 어셈블러와 MinGW를 사용할 수 있지만 다른 호출로 인해 코드가 다르게 보일뿐만 아니라 외부 라이브러리를 사용해야 할 수도 있습니다.

그러나 Microsoft에서 설계 했으므로 MASM for Windows를 사용하는 것이 좋으며 다른 도구가있는 MASM32v8 패키지에도 포함되는 것이 좋습니다. 당신은 여기에서 MASM을 얻을 수 있습니다 : 당신이, 당신은 여기 caffiend에 의해 게시 대답을 참조 할 수있는 NASM 어셈블러를 사용하여 의도하는 경우, 그러나 https://www-s.acm.illinois.edu/sigwin/old/workshops/winasmtut.pdf

: http://www.masm32.com/

는 윈도우 총회를위한 튜토리얼이있다 : How to write hello world in assembler under Windows?