簡體   English   中英

不同類型的匯編寄存器的用途是什么?

[英]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個幾乎可以完全互換的寄存器(請注意, ebpesp仍用作基本指針和堆棧指針,並且通常不可用於其他目的)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM