【发布时间】:2017-01-29 06:43:16
【问题描述】:
我今天决定学习汇编,因为它似乎是一个非常强大的工具,但我不知道从哪里开始学习它,所以我搜索了它并找到了这个: 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不再工作”。
我知道这不会输出任何东西,但它至少不应该运行吗?
我做错了什么?
使用:
- Windows 7 专业版 64 位
- AMD FX 4350
- nasm-2.12.02
- MinGW
【问题讨论】:
-
这是linux的教程,在windows上是不行的。
-
所以程序集是操作系统特定的?
-
不,但系统调用是 (
int 0x80)
标签: windows assembly nasm x86-64