不同类型的汇编寄存器的目的是什么?

时间:2014-06-10 00:07:26

标签: assembly cpu-registers

假设这是AT& T语法。

当出现如下问题时:

movl (%rdi), %ecx

%rdi%ecx的目的是什么?

我理解mov(q,l,w,b)add(q,l,w,b)等概念。

我们可以写%rdx代替%rdi吗?如果是这样,会有什么变化?为什么%rdi存在?

1 个答案:

答案 0 :(得分:7)

x86_64有16个通用寄存器。 8从x86(eax,ebx,ecx,edx,esi,edi,ebp,esp)继承,8是全新的(r8到r15)。

在过去的几天里,寄存器具有非常特殊的功能。

  • eax是您主要执行算术的累加器寄存器
  • ebx是进行内存地址计算的基本寄存器
  • ecx是持有循环计数器的计数寄存器
  • edx是您可以用于I / O端口访问的数据寄存器
  • edi是目标索引寄存器,它指向" destination"一个字符串操作
  • esi是源索引寄存器,它指向" source"一个字符串操作
  • ebp是指向当前堆栈帧基础的基指针。
  • esp是堆栈指针。

最初,当指令集很小时,某些指令只能用某些寄存器操作。例如,rep stos指令使用ECX作为计数器,并将数据存储到EDI指向的内存中。

如今,像这样的专门指令并不常见,编程器现在使用的指令通常接受任何通用寄存器。所以,现在,您基本上可以将CPU视为具有14个几乎完全可互换的寄存器(请注意ebpesp仍然用作基指针和堆栈指针,并且通常不可用用于其他目的)。