Some-Concepts

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, 但是实际上对这两种格式都支持, 可以任意切换