MAC下使用nasm编译汇编
2016-03-03 21:03
537 查看
汇编的基础知识
我们知道, 对于计算机的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来编译, 生成可执行文件, 然后就可以执行了。
相关文章推荐
- 蓝桥杯:圆的面积
- 什么是信息增益(Information Gain)
- openfire连接登陆优化方案
- 软件工程学习笔记之基本理念
- x-Utils在android5.0下报错的解决方案
- Android Studio如何取消与SVN的关联
- 数据库中的分组
- 关于Popup的一些技巧
- poj2096概率dp
- Python3解决vs输出中文报错问题
- 多重集组合数 (DP)
- SPRING IN ACTION 第4版笔记-第四章ASPECT-ORIENTED SPRING-009-带参数的ADVICE2
- 蓝桥杯 蚂蚁感冒 不要模拟!
- Codeforces Round #316 (Div.2) C. Replacement
- XTU 1205 Range
- javascript中的prompt()用法
- bzoj 1084: [SCOI2005]最大子矩阵 dp
- rpm方式安装部署gitlab
- iOS中使用正则表达式 RegexKitLite
- showDialog()和onCreateDialog()方法过时,如何创建一个Dialog?