Some Concepts
什么是NASM
1. NASM简介
Netwide Assembler (简称 NASM)是一款基于英特尔 x86 架构的汇编与反汇编工具。它可以用来编写 16位、32位(IA-32)和 64位(x86-64)的程序。 NASM 被认为是 Linux 平台上最受欢迎的汇编工具之一。
NASM是用来编译汇编程序的, 正如gcc是用来编译C程序的
Bochs是一个模拟了x86架构硬件的虚拟机, 正如同QEMU一样
虚拟机主要分成两类, 一类主要使用虚拟化技术, 另一类主要模拟硬件环境和外围设备
- bochs由于模拟了硬件环境, 因此速度比较慢
- VirtualBox模拟了大部分硬件环境, 少部分用虚拟化技术实现
- VMWare主要使用虚拟化技术实现,
磁盘映像(英语:Disk image)是计算机领域中的一个计算机文件,其包含一个磁盘卷或数据存储设备的内容和结构,包括但不限于硬盘、软盘、磁带、光盘、闪存盘等。磁盘映像通常是按照原介质的扇区级复制,从而完全复制存储设备文件系统的结构和内容。根据磁盘映像的格式不同,一个映像可能表现为一个或多个计算机文件。
2. 关于CPU架构
一些容易混淆的概念
参考了这篇文章
常见的CPU指令集架构分成几种:
- x86 (Intel公司)
- ARM (ARM公司)
- MIPS (MIPS公司)
- power
- alpha
其中比较常见的是 x86架构, ARM架构和MIPS架构. 出现这些区别的原因是, 早期的CPU有两种设计思路:
- RISC (Reduced instruction set computing): 精简指令集, 尽可能把cpu做的简单,依靠简单指令的组合迭代完成复杂指令
- ARM架构是 RISC 设计理念的典型代表,不过在 ARM 的发展过程中引入了部分复杂指令(完全没有复杂指令的话操作系统跑起来异常艰难),所以ARM架构CPU是一个RISC基础外加CISC技术的CPU。使用ARM架构的公司需要拿到ARM公司的授权, 包括高通, 苹果, 三星等.
- MIPS 架构也使用了RISC的设计理念. MIPS架构的授权门槛很低, 因此很多厂家都做MIPS/MIPS衍生架构的CPU, 一个主要的领域是嵌入式, 很多常见的路由器都是用MIPS架构的CPU.
- CISC (Complex instruction set computing): 复杂指令集, 把CPU内的逻辑电路做的非常复杂,这样可以直接用CPU硬件事先复杂指令
- 早期的x86架构使用 CISC 的设计思路, 后来的发展中逐步引入了 RISC 的部分理念,将内部指令的实现大量模块化,现在的x86-64架构准确来说是一个CISC外加部分RISC技术的架构。
两个做CPU的厂商:
- Intel
- AMD
Intel公司的CPU分成两类:
- 8086: 一般指Intel于1978年所设计的16位微处理器芯片
- x86: 是80x86系列,80286开始有了保护模式,80386 (1985) 是32位CPU,以及后续还有80486,80586等。
- 从80386开始的架构叫做I386架构
- 从80586开始的处理器开始使用64位总线
AMD公司的产品和Intel的产品基本都是兼容的(Intel和AMD两家专利交叉的很严重):
- Intel首先提出了x86(又叫IA32, 32位)架构, 从32位向64位转变时, 提出了一个ia64(x64)架构, 由于和x86架构不兼容, 市场反响很差
- 与此同时, AMD由于x86的授权, 首先设计出了x86的64位兼容(64和32位混合架构), 不久后Intel也拿到了这种CPU的授权
- 这种类型的CPU叫做x86-64CPU, 由于是AMD公司先设计出的, 因此又叫AMD64
现在的x86狭义上指32位的x86架构, 广义上指的是32位的x86架构和64位的x86-64架构
x86-64完全向下兼容x64
- 目前x86的主要产品有Intel的至强,酷睿,奔腾,赛扬和凌动;amd的锐龙,apu等。
- 上文提到的x64架构目前只有Intel安腾而且已经放弃了产品线。
3. 关于汇编语言
汇编语言的种类: 常见的汇编语言包括两种:
- IBMPC汇编
- IBM公司最早开发了PC, 相当于业内标准, 因此后来的汇编语言都选择迎合它, 使用IBMPC汇编
- x86架构CPU使用IBMPC汇编
- ARM汇编
- ARM汇编自成一体, 由于不考虑兼容性, 因此高校汇编语言的教学往往使用IBMPC汇编
- 下文指的所有汇编语言都是IBM-PC汇编语言
对于IBM-PC汇编语言:
由于汇编语言出现的很早, 并没有像C语言那样形成标准, 因此汇编语言的编译器厂商往往自己实现一套汇编器(汇编器将汇编语言转换成机器语言), 比较有名/常见的有:
- MASM: 微软公司, 只支持x86架构的电脑, 而且只能用在Windows/DOS系统(Unix中无法使用)中
- MASM升级次数非常多, 向下兼容性也不好
- 使用Intel汇编语法
- GAS(GNU ASM): 开源产品, 适用于大部分架构的电脑, 主要用在Linux中
- 使用AT&T汇编语法
- NASM: 开源产品, 适用于x86架构, 是Linux上最受欢迎的汇编/反汇编器之一
- 使用一种类似于Intel语法的语法, 但是做出了自己的简化.
- TASM: Borland公司, 最新版本只支持win32, 几乎已经被淘汰
不同的汇编器有不同的语法. MASM汇编器由于是微软公司的产品, 只适用于Windows.
对于上述的这么多汇编器, NASM有自己的优势, 可以查看这个论坛
汇编语言的格式/语法分成两种主流:
- Intel格式: Intel格式由Intel公司提出, 常见于Windows平台
- Windows平台下的汇编器(MASM)只可以使用Intel汇编风格
- AT&T格式: 最早由Bell实验室提出, 用于Unix系统中
- GNU汇编器(叫做GAS)的缺省格式就是AT&T, 但是实际上对这两种格式都支持, 可以任意切换