assembly 为什么x86寄存器要这样命名?

5hcedyr0  于 2023-03-02  发布在  其他
关注(0)|答案(6)|浏览(150)

例如,累加器命名为EAX和,而指令指针命名为IP。我还知道有一些字节命名为CLDH。我知道所有的名称都必须有一个约定,但它是什么?

u5i3ibmn

u5i3ibmn1#

Something i found

* EAX - Accumulator Register
* EBX - Base Register
* ECX - Counter Register
* EDX - Data Register
* ESI - Source Index
* EDI - Destination Index
* EBP - Base Pointer
* ESP - Stack Pointer
xam8gpfp

xam8gpfp2#

C和D是数字/类型,H表示高位寄存器的高位部分,L表示低位部分。http://en.wikipedia.org/wiki/X86
维基百科解释得很好。
更多来自维基百科:

  1. AX/EAX/RAX:蓄电池
    1.银行X/电子银行X/皇家银行X:基
  2. CX/ECX/RCX:计数器
  3. DX/EDX/黑索今:数据/概述
yrefmtwq

yrefmtwq3#

这是历史。x86来自8086,8086来自8080,8080来自8008,8008来自4004。有16位寄存器AX,BX等,对于80386,它们被“扩展”到32位。
补充:顺便说一句,摩托罗拉68K从一开始就有32位寄存器,所以在最初的几十年里编程要容易得多。我参与的项目中,英特尔是出于商业原因而不是技术原因被选中的。

jc3wubiy

jc3wubiy5#

较老的处理器有累加器命名为A,B等(按字母顺序排列)。当16位和32位累加器被开发出来时,工程师们添加了一个X(扩展)。所以这一切都是关于历史的,因为C语言被这样称呼是因为它是从B语言开发出来的(贝尔实验室)。
这个惯例只是内部的,为了跟上他们已经熟悉的名字。

knsnq2tg

knsnq2tg6#

下面简要说明每个x86通用寄存器的含义:

  • EAX:“扩展累加器”-用于算术和逻辑运算,以及存储函数的返回值。
  • EBX:“扩展基”-通常用作内存数据段中数据的指针。
  • ECX:“扩展计数器”-通常用于循环和字符串操作,以及存储函数参数。
  • EDX:“扩展数据”-通常用于I/O操作和存储函数参数。
  • ESI:“扩展源索引”-通常用作字符串操作中源操作数的指针。
  • EDI:“扩展目标索引”--通常用作字符串操作中目标操作数的指针。
  • EBP:“扩展基指针”-通常用作指向当前堆栈帧基的指针。
  • ESP:“扩展堆栈指针”-通常用作指向当前堆栈帧顶部的指针。

相关问题