nasm编译运行
① nasm的段定义
可以随便定,什么都可以 .data .text你也可以改成 .a .b,masm里才不可以随便定,masm32里.data和.text就是约定的数据和代码段,nasm则不这样认为,你写来个[secion aabb]也可以啊
比你你写个:
extern _ExitProcess@4
extern _printf
[section .erer]
a db 'hello,world!',13,10
[section asdf]
section .ggg
global _start
_start:
push a
call _printf
add esp, 4
call _ExitProcess@4
照样可以编译运行
② 怎么在64位系统下编译nasm
用记事本写代码
用命令编译
nasm -f <format> <filename> [-o <output>]
-f后面是输出格式,具体的用nasm -hf查询
filename是代码文件名
-o后面是输出文件名
如果输出类型的是一种object file的话要用链接器链接
一切操作都要在命令行下完成,如果不习惯命令行操作不建议用
③ 汇编语言用什么运行
只要不是用机器语言直接写程序,用其它任何语言编写的程序都需要用翻译工具翻译成机器语言程序才能运行。
用汇编语言编写的程序,需要用汇编程序将它翻译成机器语言的目标代码,再用连接工具将目标代码组装成可执行的程序。
有了程序,就可以直接运行了。
在PC机上用的汇编程序有很多,最经典的是MASM,另外还有TASM, NASM等等。
④ 使用GCC和NASM在Linux下联合编译
只要你的程序和库编译时针对的是同一个目标abi(比如说使用同样的系统调用编号),就可以链接。和编译器基本没有关系。
⑤ 如何在64位的Linux系统上使用汇编和C语言混合编程 第2页
编译和链接的时候使用的指令:(AMD处理器,64位操作系统)
编译链接指令
1 nasm -f elf foo.s -o foo.o
2 gcc -c bar.c -o bar.o
3 ld -s -o foobar bar.o foo.o
汇编语言用nasm编写并用nasm编译器编译,而C语言用的是gcc编译,这些都没有问题,但是在链接的时候出错了,提示如下:
ld: i386 architecture of input file `foo.o' is incompatible with i386:x86-64 output
google了一下,意思就是nasm 编译产生的是32位的目标代码,gcc 在64位平台上默认产生的是64位的目标代码,这两者在链接的时候出错,gcc在64位平台上默认以64位的方式链接。
这样在解决的时候就会有两种解决方案:
<1> 让gcc 产生32位的代码,并在链接的时候以32位的方式进行链接
在这种情况下只需要修改编译和链接指令即可,具体如下:
32位的编译链接指令
1 nasm -f elf foo.s -o foo.o
2 gcc -m32 -c bar.c -o bar.o
3 ld -m elf_i386 -s -o foobar foo.o bar.o
具体的-m32 和 -m elf_i386 请自行查阅gcc (man gcc)
如果你是高版本的gcc(可能是由于更新内核造成的),可能简单的使用-m32 的时候会提示以下错误(使用别人的历程,自己未曾遇到):
> In file included from /usr/include/stdio.h:28:0,
> from test.c:1:
> /usr/include/features.h:323:26: fatal error: bits/predefs.h: No such file or directory
> compilation terminated.
这应该是缺少构建32 位可执行程序缺少的包,使用以下指令安装:
sudo apt-get install libc6-dev-i386
此时应该就没有什么问题了。
⑥ 汇编语言编译器的NASM
NASM是一个为可移植性与模块化而设计的一个80x86的汇编器。它支持相当多
的目标文件格式,包括Linux和'NetBSD/FreeBSD','a.out','ELF','COFF',微软16
位的'OBJ'和'Win32'。它还可以输出纯二进制文件。它的语法设计得相当的简
洁易懂,和Intel语法相似但更简单。它支持'Pentium','P6','MMX','3DNow!',
'SSE' and 'SSE2'指令集,

⑦ 用NASM能将asm结尾的文件编译成exe么该怎么处理
可以吧,选择相应平台的版本,nasm -h 有简单的帮助的。
对 x86 也可以使用 Masm5/6 或 Masm32 来做,分别是 dos16 类或 Win32 类的程序。
不同汇编软件,对 asm 源程序的格式要求和支持也可能是不一样的。
⑧ nasm.exe打开就闪退是怎么回事
nasm是没有运行画面的,所以打开就闪退了.
nasm是需要带参数使用的,你可以选择在cmd.exe中用命令行调用nasm或写一个bat批处理文件运行之.
现假设你有一汇编文件a.asm
命令行可以这么写:
(这里写好nasm的安装路径)/nasm.exe -f win32 -o a.obj a.asm
这样就把a.asm编译了,但是没有链接,因为nasm似乎不具有链接的能力.
要解决这个问题,你可以再找一个连接器把这个a.obj链接一下.
对本人而言,本人计算机上安装了DevC++编译器,其内部有一个ld.exe是个链接器
ld -o a.exe a.obj
这样就成功滴链接出了一个可执行文件了.
如果你要写bat的话,建议在每句命令的下一行,加一行pause把控制台停下来,这样能让你看清编译器的反馈信息.
⑨ nasm的安装方法和使用介绍有哪些
1.1在dos和 Windows 下安装NASM
如果你拿到了 NASM 的 DOS 安装包,'nasmXXX.zip'(这里.'XXX'表示该安装包的 NASM 版
本号),把它解压到它自己的目录下(比如:‘c:\nasm')
该包中会包含有四个可执行文件:NASM 可拟行文件'nasm.exe'和'nasmw.exe',还有
NDISASM 可执行文件'ndisasm.exe'和'ndisasmw.exe'。文件名以'w'结尾的是'Win32'
可执行格式。是运行在'Windows 95'或'Windows NT'的 Intel处理器上的,另外的是
16 位的'DOS'可执行文件。
NASM 运行时需要的唯一文件就是它自己的可执行文件,所以可以拷贝'nasm.exe'
和'nasmw.exe'的其中一个到你自己的路径下,或者可以编写一个'autoexec.bat'把
nasm 的路径加到你的'PATH'环境变量中去。(如果你只安装了 Win32 版本的,你可能
希望把文件名改成'nasm.exe'。)
就这样,NASM 装好了。你不需要为了运行 nasm 而让'nasm'目录一直存在(除非你把它
加到了你的'PATH'中,所以如果你需要节省空间,你可删掉它,但是,你可能需要保留
文档或测试程序。
如果你下载了 DOS 版的源码包,'nasmXXXs.zip',那'nasm'目录还会包含完整的 NASM源
代码,你可以选择一个 Makefiles 来重新构造你的 NASM 版本。
注意源文件`insnsa.c', `insnsd.c', `insnsi.h'和`insnsn.c'是由'standard.mac'中
的指令自动生成的,尽管 NASM0.98发布版中包含了这些产生的文件,你如果改动了
insns.dat,standard.mac或者文件,可能需要重新构造他们,在将来的源码发布中有
可能将不再包含这些文件,多平台兼容的 Perl可以从 www.cpan.org 上得到。
⑩ 我下了个nasm编译器,但不知道应该怎么使用,麻烦用过的人可以教教我,谢谢!!!
一般用nasm都是把汇编文件.asm编译成执行文件.bin格式的二进制文件
先要找到你想编译的文件,我的是在F盘OS文件夹下!
第一步:先转到你自己的文件夹下!如图,先输入F:
跳到F:目录下,再用cd命令转换路径(OS是我自己的文件夹下,你自己用你自己的)
第二步:就是编译了!如图nasma.asm-ot.bin
其中a.asm是你要编译的文件,t.bin是编译后的文件,名字自定!
编译之后就已经成功了!!!

