不能执行汇编程序

时间:2017-01-29 06:43:17

标签: windows assembly nasm x86-64

我今天决定学习装配,因为它似乎是一个非常强大的工具,但我不知道从哪里开始学习它,所以我用谷歌搜索它并发现: 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

并将其粘贴到名为" 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文件,但是当我尝试执行它时,它只打开了Windows命令提示符并打开了一个新窗口,表示" hello.exe不再工作了#34;

我知道这不会输出任何东西,但它至少应该运行吗?

我做错了什么?

使用:

  • Windows 7 professional 64bit
  • AMD FX 4350
  • NASM-02年12月2日
  • MinGW

1 个答案:

答案 0 :(得分:0)

您将需要一个不同的教程,因为用户tkausl指出本教程适用于Linux x86_64位。

对于Windows,如果愿意,您仍然可以使用NASM汇编程序和MinGW,但由于调用的不同,您的代码看起来会有所不同,并且还需要您使用外部库。

我建议使用MASM for Windows,因为它是由Microsoft设计的,也包含在MASM32v8包中,其中包含其他工具。你可以从这里获得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?