簡體   English   中英

哪些寄存器在匯編中被視為“地址寄存器”?

[英]What registers are considered “address registers” in Assembly?

哪些寄存器被認為是匯編中的“地址寄存器”? 我認為答案類似於:所有段寄存器,加上EBPESPEIP因為它們包含“地址”,如果我可以這么說的話。 但令我驚訝的是,正確的答案實際上是:段寄存器和EIP 我找不到任何類型的解釋,很難。 為什么段寄存器和EIP被稱為“地址寄存器”? 為什么這些寄存器專門而不是其他一些寄存器? (PS 我使用的是 x86 NASM,如果有什么不同的話)

對於80x86,“地址寄存器”沒有明確權威的定義; 並且(除非有明確和權威的定義 - 例如在 CPU 制造商手冊中)“地址寄存器”可以定義為您喜歡的任何內容。

例如,對於 80x86,您可以說所有通用寄存器都可以用作地址(例如“ mov eax,[eax] ”或“ mov eax,[ebx] ”或..),因此所有通用寄存器是“地址寄存器”。

再舉一個例子,對於 80x86,你可以說段寄存器包含一個東西結構(可見值、基地址、限制、類型),因此不是“地址寄存器”,幾乎所有普通寄存器( EIPESPESIEDI , ...) 只能包含段內的偏移量(其本身不是地址),因此也不是“地址寄存器”; 並且根本沒有地址寄存器。

毫無疑問,有一個或一些指令集要解決您必須使用特定寄存器或一組寄存器的問題。 但這是例外而不是規則。

對於有問題的指令集,只需查找文檔並查找可以尋址 memory 的 load/store/read/write/mov/etc 指令並查看編碼,這將顯示該架構的寄存器列表,可以用於保存地址事務的地址(或者有時立即數可能在指令本身中,即地址而不是在寄存器中)。

對於 x86 將 go 反對一些評論並說段寄存器特別是地址寄存器,因為它們的內容專門用於生成地址。 不是靠它自己,而是與其他位組合來創建完整地址。 但是它們的目的和內容用於地址生成。 我當然不會單獨使用術語地址寄存器來描述它們。

暫無
暫無

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

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