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以及后续还有8048680586等
    • 从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, 但是实际上对这两种格式都支持, 可以任意切换