MAC下使用nasm编译汇编

时间:2022-03-20 12:29:19

汇编的基础知识

我们知道, 对于计算机的CPU而言, 无论是指令还是数据, 都是以机器码的形式存在于计算机当中。我们的高级语言都需要通过编译器或者解释器转化成机器码才能执行。

对于不同的CPU而言, 其可以识别的汇编语言并不相同, 这就决定了汇编语言并不具备良好的可移植性。所以我们在编译汇编代码的时候,需要注意汇编的代码是否与当前的机器CPU兼容。

NASM简介

nasm是一款开源的汇编语言编译器, 其官网在

http://www.nasm.us/


在这个官网上面, 我们可以找到开发文档和历史上的所有版本。

在mac os上配置nasm

首先, 我们会发现, 在我们的mac上面早已安装好了nasm,但是我们看版本的话

nasm -v

会发现这一个版本太过久远, 特别是不支持64位处理器代码的编译, 这将给我们带来极大的困难。所以, 我们需要将下载的最新版本的nasm来代替原有的老版本的nasm.
我们执行下面的语句:

which nasm
cp nasm <route of nasm>


将我们下载的nasm复制到指定的地点来覆盖原有的nasm,我们再次检查版本号,就会发现我们的nasm已经被我们更新到最新的版本了。

在mac上使用nasm

使用我们最熟悉的命令man来查询nasm支持的CPU框架, 我们得到下面的信息:

```
valid output formats for -f are (`*' denotes default):
* bin flat-form binary files (e.g. DOS .COM, .SYS)
ith Intel hex
srec Motorola S-records
aout Linux a.out object files
aoutb NetBSD/FreeBSD a.out object files
coff COFF (i386) object files (e.g. DJGPP for DOS)
elf32 ELF32 (i386) object files (e.g. Linux)
elf64 ELF64 (x86_64) object files (e.g. Linux)
elfx32 ELFX32 (x86_64) object files (e.g. Linux)
as86 Linux as86 (bin86 version 0.3) object files
obj MS-DOS 16-bit/32-bit OMF object files
win32 Microsoft Win32 (i386) object files
win64 Microsoft Win64 (x86-64) object files
rdf Relocatable Dynamic Object File Format v2.0
ieee IEEE-695 (LADsoft variant) object file format
macho32 NeXTstep/OpenStep/Rhapsody/Darwin/MacOS X (i386) object files
macho64 NeXTstep/OpenStep/Rhapsody/Darwin/MacOS X (x86_64) object files
dbg Trace of all info passed to output stage
elf ELF (short name for ELF32)
macho MACHO (short name for MACHO32)
win WIN (short name for WIN32)

选择合适的框架, 现在的苹果MBP需要使用macho64来编译, 生成可执行文件, 然后就可以执行了。