009-【X86-汇编语言】-寄存器(Register)

寄存器(Register)

寄存器是CPU运算数据必须使用的空间,只要是运算就必须使用寄存器,个人理解这与数字电路的设计有关。客观上寄存器是CPU内部的组件,所以CPU访问寄存器的数据是非常快的。编程时需要指定名字来操作某个寄存器,而不同的计算使用到的寄存器有不相同,所以这也就要求我们必须记住寄存器的名字和他们的用处。大家不用马上记住所有寄存器,因为在以后的学习中我们还会不断接触各种寄存器,接触到了理解了也就记住了。

查看寄存器

008-【X86-汇编语言】-运行第一个汇编程序中已经介绍了如何打开寄存器监视器。但刚刚打开的监视器,并没有显示所有寄存器。需要我们设置一下,在寄存器监视器上右键点击,如下:

现在我们把这些寄存器都选上,下面对各种寄存器做以下简单的介绍

通用寄存器

你可以把通用寄存器理解为可以直接使用MOV指令,设置并读取值的寄存器,也就是说我们可以任意使用这些寄存器来保存数据。他们有EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP。不过某些指令也会专门使用他们做某些事情,比如循环指令会用专门用ECX作为循环的计数器。至于他们的用法,我们之后再详细介绍

指令寄存器

EIP是指令寄存器,它记录着下一条要指定的指令的地址。从其作用可以看出,我们不能随意修改EIP的地址,这也是为什么它不是通用寄存器的原因。不过我们还是可以通过一些手段来修改它的指,之后介绍过程和跳转时会详细介绍

标记寄存器

EFL是标记寄存器是一个32位寄存器,其中不同的bit位代表不同的信息。可以直接通过打开来查看EFL每位的值。比如ZF(Zero flag 0标志)的值用ZR表示,如果ZR=1时表示运算结果出现了0

CPU段寄存器

这些寄存器与程序对内存的划分有关,程序运行时会将内存分段,指令段,数据段、栈段(还记得代码中的.data .code .stack嘛),这些寄存器中存储着各个段的基地址,不过在32位保护模式下,段的基地址已经变得无关紧要,所以这里不细讨论。到介绍寻址方式时,如果有必要再介绍

浮点寄存器

浮点寄存器与浮点数计算有关,介绍浮点数计算时再详细介绍

MMX、SSE、AVX寄存器

这三个寄存器都与SIMD技术有关。SIMD(Single Instruction Multiple Data)表示单指令多数据。比如:我们需要计算4个乘法运算1*2,2*3,3*4,4*5。按照传统方式,我们需要调用4次乘法指令。而利用SIMD技术我们先将4组数据存入MMX、SSE或AVX寄存器中,然后调用一次乘法指令,就可以完成4组数据的计算了。SIMD可大大提高多媒体数据处理和3D图形计算的速度。

3D图形计算中有大量的向量运算,比如计算向量[1,2,3,4]点乘[5,6,7,8],可以用一次SIMD得到1*5,2*6,3*7,4*8的结果,然后将4组结果相加即可。事实上微软的3D计算库DirectXMath就大量使用了SIMD技术。

猜你喜欢

转载自blog.csdn.net/patronwa/article/details/88243410
今日推荐