寄存器地址和内存地址_x86汇编指南之寄存器与内存寻址模式

  • Post author:
  • Post category:其他


本指南描述了32位x86汇编语言编程的几个基础知识,主要介绍寄存器和内存寻址。

有几种不同的汇编语言可用于生成x86机器代码,本文使用标准的Intel语法来编写x86汇编代码。


寄存器

如图1所示,现代(即386及更高版本)x86处理器有8个32位的通用寄存器。

寄存器的名称大多是基于历史的命名而来。

例如,EAX过去被称为累加器,因为它被大量用于算术运算;而ECX被称为计数器,因为它被用于保存循环索引。

尽管大多数寄存器在现代指令集中已失去了其特殊用途,但是按照使用惯例,有两个寄存器仍然被保留用于特殊用途 — 堆栈指针(ESP)和基址指针(EBP)。

对于EAX、EBX、ECX和EDX四个寄存器,支持以子寄存器的方式使用。

例如,EAX的2个最低有效字节,可作为一个16位的寄存器AX来使用。AX的最低有效字节,可以用作一个8位的寄存器AL;而AX的最高有效字节,可以用作一个8位的寄存器AH。这些名称指的都是相同的物理寄存器。

当将两个字节的数据存入DX时,这个更新操作会同时影响DH、DL和EDX的值。

这些子寄存器主要是从过去的16位版本指令集保留下来的。

但是,当处理小于32位的数据时(例如处理1个字节的ASCII字符),它们有时却很方便。

使用汇编语言引用寄存器时,名称不区分大小写。例如,名称EAX和eax指的是同一个寄存器。



版权声明:本文为weixin_39880666原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。