[英]what are the purpose of different types of assembly registers?
假設這是AT&T語法。
出現以下問題時:
movl (%rdi), %ecx
%rdi
或%ecx
的目的是什么?
我了解mov(q,l,w,b)
或add(q,l,w,b)
等的概念。
我們可以寫%rdx
代替%rdi
嗎? 如果是這樣,那將會發生什么變化? 為什么%rdi
存在?
x86_64具有16個通用寄存器。 8個是從x86繼承的(eax,ebx,ecx,edx,esi,edi,ebp,esp),而8個是全新的(r8至r15)。
在過去的日子里,寄存器具有非常特定的功能。
eax
是您主要在其上進行算術運算的累加器寄存器 ebx
是您用來計算內存地址的基址寄存器 ecx
是保存循環計數器的計數寄存器 edx
是可用於I / O端口訪問的數據寄存器 edi
是目標索引寄存器,它指向字符串操作的“目標” esi
是源索引寄存器,它指向字符串操作的“源” ebp
是指向當前堆棧框架基礎的基礎指針。 esp
是堆棧指針。 最初,當指令集很小時,某些指令將僅對某些寄存器進行操作。 例如, rep stos
指令使用ECX
作為計數器及存儲數據到存儲器通過指向EDI
。
如今,像這樣的專用指令已不那么普遍了,如今,編譯器使用的指令通常都接受任何通用寄存器。 因此,如今,您基本上可以將CPU視為具有14個幾乎可以完全互換的寄存器(請注意, ebp
和esp
仍用作基本指針和堆棧指針,並且通常不可用於其他目的)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.