NASM 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
NASM 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
NASM 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !
授权协议 未知
开发语言 汇编
操作系统 跨平台
软件类型 开源软件
开源组织
地区 不详
投 递 者 不详
适用人群 未知
收录时间 2008-10-01

软件简介

NASM是一个为可移植性与模块化而设计的一个80x86的汇编器。它支持相当多
的目标文件格式,包括Linux和'NetBSD/FreeBSD','a.out','ELF','COFF',微软16
位的'OBJ'和'Win32'。它还可以输出纯二进制文件。它的语法设计得相当的简
洁易懂,和Intel语法相似但更简单。它支持'Pentium','P6','MMX','3DNow!',
'SSE' and 'SSE2'指令集,

1.1.1 为什么还需要一个汇编器?

NASM当初被设计出来的想法是'comp.lang.asm.x86'(或者可能是'alt.lang.asm'
,我忘了),从本质上讲,是因为没有一个好的免费的x86系例的汇编器可以使用,
所以,必须有人来写一个。

(*)'a86'不错,但不是免费的,而且你不可能得到32位代码编写的功能,除非你
付费,它只使用在dos上。

(*) 'gas'是免费的,而且在dos下和unix下都可以使用,但是它是作为'gcc'的一
个后台而设计的,并不是很好,'gcc'一直就提供给它绝对正确的代码,所以它的
错误检测功能相当弱,还有就是对于任何一个想真正利用它写点东西的人来讲,
它的语法简直太可怕了,并且你无法在里面写正确的16位代码。

(*) 'as86'是专门为Minix和Linux设计的,但看上去并没有很多文档可以参考。

(*) 'MASM'不是很好,并且相当贵,还且只能运行在DOS下。

(*) 'TASM'好一些,但却极入与MASM保持兼容,这就意味着无数的伪操作码和繁琐
的约定,并且它的语法本质上就是MASM的,伴随着的就是一些自相矛盾和奇怪的
东西。它也是相当贵的,并且只能运行在DOS下。

所以,只有NASM才能使您愉悦得编程。目前,它仍在原型设计阶段-我们不期望它
能够超越所有的这些汇编器。但请您发给我们bug报告,修正意见,和其他有用的
信息,还有其他任何你手头有的对我们有用的信息(感谢所有已经这样在做了的
人们),我们还会不断地改进它。

展开阅读全文

评论 (0)

加载中
更多评论
暂无内容
发表了博客
2012/03/28 15:40

nasm

; hello.asm section .data ; 数据段声明 msg db "Hello, world!", 0xA ; 要输出的字符串 len equ $ - msg ; 字串长度 section .text ; 代码段声明 global _start ; 指定入口函数 _start: ; 在屏幕上显示一个字符串 mov edx, len ; 参数三:字符串长度 mov ecx, msg ; 参数二:要显示的字符串 mov eb...

0
1
发表了博客
2012/08/25 17:53

NASM

C.1.1 Version 2.10.04 Add back the inadvertently deleted 256-bit version of the VORPD instruction. Correct disassembly of instructions starting with byte 82 hex. Fix corner cases in token pasting, for example: %define N 1e%++%+ 5 dd N, 1e+5...

0
0
发表于AI & 大数据专区
2018/05/31 11:44

NASM语法

要汇编一个文件,你可以以下面的格式执行一个命令: nasm -f <format> <filename> [-o <output>] 比如, 会把文件'myfile.asm'汇编成'ELF'格式 的文件'myfile.o'.还有: nasm -f bin myfile.asm -o myfile.com 会把文件'myfile.asm'汇编成纯二进制格式的文件'myfile.com'。 想要以十六进制代码的形式产生列表文件输出,并让代码显示在源代码的左侧, 使用'-l'选项并给出列表文件名,比如: nasm -f coff myfile.asm -l myfile.ls...

0
0
发表了博客
2019/06/03 16:11

NASM 之 helloworld1

SECTION .data msg: db "Hello World!", 0x0a len: equ $-msg SECTION .text global _main kernel: syscall ret _main: mov rax,0x2000004 mov rdi,1 mov rsi,msg mov rdx,len call kernel mov rax,0x2000001 mov rdi,0 call kernel 编译这个文件: nasm -f macho64 hello.asm ld -o hello -e _main hello.o -macosx_version_min 10.13 -lSystem 运行这个文...

0
0
发表了博客
2019/04/09 19:26

nasm汇编讲解

一、什么是nasm汇编 nasm使用在windows、linux等系统下的汇编。 二、语法介绍 2.1 nasm 是区分大小写 例如:符号 foo 与 FOO 是两个不同的标识符。 2.2 内存操作数表达式 2.2.1 在 nasm 语法里,对 memory 操作数需要加 [ ] 括号 下面的代码: foo equ 1 bar dw 2 bits 32 mov eax, foo mov ebx, bar 第 2 指令的意图是:将bar 内的值赋给ebx 寄存器。但这样是错误的,nasm 只会把 bar 当作是 imme...

0
0
发表了博客
2015/01/01 00:31

Nasm编译命令

Nasm –f <format> <filename> [-o output] 例子: Nasm –f elf myfile.asm Nasm –f bin myfile.asm –o myfile.com 在源文件左边用16进制显示代码使用如下指令 Nasm –f coff myfile.asm –f myfile.lst 获得帮助 Nasm –h 获得可用输出文件格式 Nasm –hf 如果你使用linux但是不确定是a.out或是ELF File nasm Nasm –f elf Nasm –f aout 将编译错误信息写到文件 Nasm –z myfile.err –f obj myfile.asm 包含包含助编译文件...

0
0
发表了博客
2020/02/22 14:42

NASM汇编语言基础

NASM(NetWide Assembler)是可移植性高的80x86汇编器,支持多种目标文件格式。 源代码行格式 [标号] [指令] [注释] 标号由字母、数字、下划线、点号、问号、~、$、@、#组成,必须以字母、下划线、点号或问号开始,区分字母大小写,后缀冒号可选。标号所辖区域从当前开始直到另一标号开始,以点号开始的标号称局部标号,属于当前非局部标号,可用所属标号限定。 指令包括计算机支持的机器指令和NASM支持的伪指令,通常由操作码和...

0
0
发表了博客
2012/05/02 17:38

nasm简单实例

Sample nasm programs Specifically: for Intel I-32, e.g. 386, 486, pentium Specifically: for use with gcc with its libraries and gdb Specifically: simple nasm syntax using "C" literals Specifically: showing an equivalent "C" program Generally, for Linux and possibly other Unix on Intel Generally, not using 8-bit or 16-bit for anything Contents Makefile for samples shown below h...

0
2
发表了博客
2010/12/30 01:17

NASM源码阅读笔记

NASM源码阅读笔记 NASM(Netwide Assembler)的使用文档和代码间的注释相当齐全,这给阅读源码 提供了很大的方便。按作者的说法,这是一个模块化的,可重用的x86汇编器, 而且能够被嵌入进其它的程序中,比如做为一个高级语言编译器的后端程序。下面 的文字希望能对大家有所帮助。错误之处,多多指正。:> 一、各模块简介: NASM按功能将汇编器的各个部分独立为模块,各个模块之间并不进行直接的联系。 这种编程结构使得阅读源代码...

0
5
发表于软件架构专区
2018/06/22 16:16

Nasm 结构体定义

1. 结构体定义 在NASM内部,没有实际意义上的定义结构体类型的机制,NASM使用宏 STRUC 和 ENDSTRUC来定义一个结构体。STRUC有一个参数,它是结构体的名字。可以使用“RESB”类伪指令定义结构体的域,然后使用ENDSTRUC来结束定义。 如下,定义一个名为“mystruc"的结构体,包含一个long, 一个word, 一个byte和一个字符串。 [plain] view plain copy struc mytype mt_long: resd 1 mt_word: resw 1 mt_byte: resb 1 mt_str: resb ...

0
1
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了问答
2016/11/01 16:37

求解,gcc编译c++内联汇编编译后,原始内联代码被更改的问题

c++内联汇编代码,内存访问处的代码,g++编译之后出现问题: 原始代码: 1 int main() 2 { 3 unsigned long tmp = 0; 4 __asm__ __volatile__ 5 ( 6 ".intel_syntax noprefix\n" 7 "mov rax,%0\n" 8 "mov rbx,1\n" 9 "mov qword [rax],rbx" 10 : 11 :"r"(&tmp) 12 :"rax","rbx" 13 ); 14 return 0; 15 } ...

2
0
发表了问答
2015/03/16 23:17

ARM处理器也有自己的汇编语言吧,nasm现在还有立足之地吗?

2
0
发表了问答
2015/01/06 23:46

win7_x64上cygwin nasm语法汇编程序编译通过,运行报错,帮忙看看。

系统是win7 64位。 nasm代码: 执行命令: ld -m i386pe -e _start test.obj 也不好使,不知道咋回事儿了,求大侠帮忙看看~~~~ ps:linux上可以

5
0
发表了问答
2014/08/24 17:58

nasm淘汰了吗?为什么没人用

为什么问关于nasm的问题,都没人答呢?难道真淘汰了,这么好的编译器没人用。

4
0
发表了问答
2014/08/18 16:44

nasm和masm哪个好?

nasm现在还流行吗?他是开源的,可源代码在哪里。会不会因为公司运作不好倒闭了?还有谁有nasm教程发份。

6
1
发表了问答
2014/04/16 09:33

调用int 0x13中断后,自动跳转

环境如下: ubuntu 13.10 amd_64 nasm 2.10.07 bochs 2.4.5 代码如下: org 0x7c00 jmp entry nop   BS_OEMName  DB 'ForrestY'  ; OEM String, 必须 8 个字节   BPB_BytsPerSec  DW 512    ; 每扇区字节数   BPB_SecPerClus  DB 1    ; 每簇多少扇区   BPB_RsvdSecCnt  DW 1    ; Boot 记录占用多少扇区   BPB_NumFATs  DB 2    ; 共有多少 FAT 表   BPB_RootEntCnt  DW 224    ; 根目录文件数最大值   BPB_TotSec16  DW 2880    ; 逻辑扇区总...

1
0
发表了问答
2013/10/19 12:18

关于8086指令长度的疑惑,Help

8086的cpu是16位的,一次能取2个字节指令,但是有的指令是3个字节的,怎么办?是不是先取头2个字节,发现还需要一个字节,就再取2个字节,一共4个字节,其中前三个字节是正要执行的指令,但是如果这条指令是长跳转指令呢,多出来的那个最后一字节会不会被执行呢? 或者情况完全不是我想的这样?这个指令是怎么取得的呢?

3
0
发表了问答
2013/08/11 18:03

nasm汇编在linux环境下调试

讨教nasm的两个问题: 1、在windows下,nasm可以运行debug,然后就可以进行调试了;那么在linux下,有没有类似的功能?(可以直接查看寄存器、使用寄存器还是挺方便的) 2、当然,nasm汇编可以用gdb调试。我要问的是:怎么根据寄存器内容查看内存信息?或者说,根据寄存器信息查找到对应的内存。比如,cs内容是0x73,eip内容是0x8048084,是不是es*16+eip? 先谢过...

4
0
发表了问答
2012/10/26 18:13

(汇编初级问题)请问这里是用什么命令输出的

之前只知道调用bios中断10h和dos中断21h,然后读取相应的寄存器数据,来输出内容。 这里的TestRead-》DispAL里面调用的哪个命令是屏幕输出呢? 是怎么输出的呢? 哪些文章或书是有关这些I/O一类方面的? ; ========================================== ; pmtest2.asm ; 编译方法:nasm pmtest2.asm -o pmtest2.com ; ========================================== %include "pm.inc" ; 常量, 宏, 以及一些说明 org 0100h jmp LA...

1
1
发表了问答
2012/10/24 08:41

汇编nasm里面变量与宏的区别是什么?

1
0
发表了问答
2012/04/22 10:15

16位 c 汇编 接口 操作系统 16bits assembly interface operating system

请打开这个帖子,内容有你想要的,《 操作系统并没有那么难实现》http://www.oschina.net/question/347009_50280

8
0
发表了问答
2012/04/09 12:46

nasm和mingw在win32下怎么汇编?

汇编代码: extern choose ; int choose(int a, int b); [section .data] ; 数据在此 num1st dd 3 num2nd dd 4 [section .text] ; 代码在此 global _start ; 我们必须导出 _start 这个入口,以便让链接器识别。 ;global myprint ; 导出这个函数为了让 bar.c 使用 _start: push dword [num2nd] ; `. push dword [num1st] ; | call choose ; | choose(num1st, num2nd); jmp $ c代码: int choose(int a,int b) { ...

3
1
发表了问答
2008/10/01 23:09

Linux 汇编器:对比 GAS 和 NASM

http://www.ibm.com/developerworks/cn/linux/l-gas-nasm.html

2
1
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
0 评论
48 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部