我今天决定学习装配,因为它似乎是一个非常强大的工具,但我不知道从哪里开始学习它,所以我用谷歌搜索它并发现: 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;
我知道这不会输出任何东西,但它至少应该运行吗?
我做错了什么?
使用:
答案 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?