我在32位Windows 7上用NASM汇编语言编写一个hello世界程序。 我的代码是:
section .text global main ;must be declared for linker (ld) main: ;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 ;our dear string len equ $ - msg ;length of our dear string
我把这个程序保存为hello.asm 。 接下来,我创build了hello.o :
nasm -f elf hello.asm
现在我试图用这个命令创buildexe文件:
ld -s -o hello hello.o
但是现在我收到这个错误:
从x86 asm在Linux中访问命令行参数的问题
Main()被调用之前Windows做了什么?
无法理解下面的macros
程序集x86中的Math.h库函数?
ld不被识别为内部或外部命令,可操作程序或批处理
访问x64 TEB C ++&Assembly
将内联GASM移植到x64 MASM访问冲突问题
英特尔指令的LOCK前缀。 有什么意义?
在32位操作系统上,虚拟8086模式下运行16位程序吗?
下载并安装Mingw。 然后把nasm放在Mingw bin文件夹中。 在名为Hello的bin文件夹中创建一个文件夹。 在此文件夹中,使用以下代码创建一个名为main.asm的文件:
extern _printf global _main section .data msg: db "Hello,world!",10,0 section .text _main: push msg call _printf add esp,4 ret
D:MinGWbinHello> ..nasm -fwin32 main.asm
D:MinGWbinHello> ..gcc main.obj -o main.exe
最后,测试一下:
D:MinGWbinHello> main.exe Hello,world!
OP给出了一些他从教程中得到的代码,然后和NASM进行了汇编。 当他把输出连接到一个Windows可执行文件时,他无法让它工作。
@Michael Petch指出,该教程的源代码是为Linux设计的 – 所给出的代码在Windows上无法工作。 他接着提到链接器不是由NASM提供的:OP需要从微软获得它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。