汇编语言

  • 和其他语言不一样,汇编语言没有统一的编译器,汇编语言的格式随着编译的不同而不同,因此了解什么是汇编语言是学习汇编语言的第一道门槛。
  • 首先,我们需要知道汇编语言为什么出现,为了回答这个问题,我们就不得不聊一聊处理器指令。

处理器指令:

在计算机内部,处理器基于芯片制造商内置于芯片内的二进制代码来处理数据,这些代码定义了处理器操作数据的行为。这些代码通常被叫做指令编码,不同的处理器,指令编码也一般不一样。

指令编码:

处理器通过不断读取内存中的指令编码来运行,指令编码包含一个或多个字节的数据用来完成不同的任务,指令编码用到的数据也被处理器读取到内存,本质上指令编码和相关的数据对处理器来说没有什么不同。

为了区分指令编码和数据,我们用指针来区分,指令指针指向要操作的对象,数据指针指向相关的数据。

指令指针总是指向当前要执行的指令。

数据指针用来标识当前内存中程序数据开始的地方,这个区域也称为栈。

指令编码的格式:

这里我们以当前使用比较广泛的IA-32指令编码来说明,指令编码主要包含4个部分:

  • 指令前缀(可选)

  • 操作码

  • 修饰符(可选)

  • 数据 (可选)

操作码:

从上面可以看出指令编码中唯一必须的元素就是操作码,他的主要功能是用来完成不同的任务。

指令前缀:

指令前缀的主要功能是修饰操作码,按功能主要分为4种类型:

锁和重复前缀

段重载和分支预测前缀

操作数size重载前缀

地址size重载前缀

修饰符:

一些操作码需要额外的修饰符来指定寄存器或内存的位置

数据:

操作码操作的对象

汇编语言:

汇编语言主要包括3部分:

  • 助记符
  • 数据区
  • 指令

助记符

汇编语言定义的运算符号

数据区

汇编语言主要使用两种方式来定义数据:

  • 内存中
  • 栈中
栈这种定义数据的方式比较简单,主要通过运算符直接操作
内存定义的方法主要包含两个部分:
  • 标签
  • 数据类型
testvalue:
	.long 150
message:
	.ascii "this is a test message"
pi:
	.float 3.14159

指令

最终要的指令是 .section 被用来定义段,汇编语言中最重要的3个段:

  • 数据段
  • 堆栈段
  • 文本段
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章