汇编
MASM 汇编器 链接器
32 位保护模式 64 位模式 16 位实地址模式
所有 x86 处理器都理解共同的机器语言
汇编语言不是可移植的,因为它是为特定处理器系列设计的 每一种都基于一个处理器系列
由于汇编语言占用内存少,因此它是编写嵌入式程序的理想工具
汇编语言可以用于优化应用程序的部分代码来提升速度,或用于访问计算机硬件
计算机使用的是字符集,将字符映射为整数 , 在字符模式(如 MS-DOS)下运行时,IBM 兼容微机使用的还是 ASCII(读为“askey”)字符集 .
ANSI Unicode
- UTF-8 用于 HTML,与 ASCII 有相同的字节数值。
- UTF-16 用于节约使用内存与高效访问字符相互平衡的环境中。比如,Microsoft Windows 近期版本使用了 UTF-16,其中的每个字符都有一个 16 位的编码。
- UTF-32 用于不考虑空间,但需要固定宽度字符的环境中。每个字符都有一个 32 位的编码。
32 位 x86 处理器 包括了 Intel IA-32 系列中的成员和所有 32 位 AMD 处理器
x86 处理器
有三个主要的操作模式:保护模式、实地址模式和系统管理模式;以及一个子模式:虚拟 8086 (virtual-8086) 模式,这是保护模式的特殊情况。
基本程序执行寄存器(basic program execution registers)。8 个通用寄存器,6 个段寄存器,一个处理器状态标志寄存器(EFLAGS),和一 个指令指针寄存器(EIP)
指令指针(EIP)寄存器中包含下一条将要执行指令的地址。某些机器指令能控制 EIP,使得程序分支转向到一个新位置。
32 位 | 16 位 | 8 位(高) | 8 位(低) |
---|---|---|---|
EAX | AX | AH | AL |
EBX | BX | BH | BL |
ECX | CX | CH | CL |
EDX | DX | DH | DL |
特殊用法其他通用寄存器只能用 32 位或 16 位名称来访问,如下表所示:
32 位 | 16 位 | 32 位 | 16 位 |
---|---|---|---|
ESI | SI | EBP | BP |
EDI | DI | ESP | SP |
特殊用法
某些通用寄存器有特殊用法:
- 乘除指令默认使用EAX。它常常被称为扩展累加器(extended accumulator)寄存器。
- CPU 默认使用 ECX 为循环计数器。
- ESP 用于寻址堆栈(一种系统内存结构)数据。它极少用于一般算术运算和数据传输,通常被称为扩展堆栈指针(extended stack pointer)寄存器。
- ESI 和 EDI 用于高速存储器传输指令,有时也被称为扩展源变址(extended source index)寄存器和扩展目的变址(extended destination index)寄存器。
- 高级语言通过 EBP 来引用堆栈中的函数参数和局部变量。除了高级编程,它不用于一般算术运算和数据传输。它常常被称为扩展帧指针(extended frame pointer)寄存器。
浮点单元(FPU, floating-point unit)执行高速浮点算术运算。之前为了这个目的,需要一个独立的协处理器芯片。从 Intel486 处理器开始,FPU 已经集成到主处理器芯片上。
x86 处理器按照前面讨论的基本操作模式来管理内存。保护模式是最可靠、最强大的,但是它对应用程序直接访问系统硬件有着严格的限制。
在实地址模式中,只能寻址 1MB 内存,地址从 00000H 到 FFFFFH。处理器一次只能运行一个程序,但是可以暂时中断程序来处理来自外围设备的请求 (中断处理)
在保护模式中,处理器可以同时运行多个程序,它为每个进程(运行中的程序)分配总共 4GB 的内存。 每个程序都分配有自己的保留内存区域,程序之间禁止意外访问其他程序的代码和数据。
x86-64 指令集的 64 位处理器
包括 Intel 64 和 AMD64 处理器系列 ,
-
向后兼容 x86 指令集。
-
地址长度为 64 位,虚拟地址空间为 2 64 字节。按照当前芯片的实现情况,只能使用地址的低 48 位。
-
可以使用 64 位通用寄存器,允许指令具有 64 位整数操作数。
-
比 x86 多了 8 个通用寄存器。
-
物理地址为 48 位,支持高达 256TB 的 RAM。
另一个为人所知的 64 位 Intel 架构是 IA-64,后来被称为 Itanium。 IA-64 指令集与 x86 和 x86-64 完全不同,Itanium 处理器通常用于高性能数据库和网络服务器。