2013-02-15 180 views
3

一直在組裝作業,而且大部分我都很瞭解組件。或者至少對於這個任務來說是足夠好的。但是這個mov聲明讓我沮喪。我真的很感激,如果有人可以解釋這個mov語句如何操作寄存器值。「mov(%ebx,%eax,4),%eax」是如何工作的?

MOV(%EBX,%eax中,4),%eax中

P.S.我無法通過基本搜索找到這種特定類型的mov語句,所以我很抱歉如果我錯過了它並且在回答問題。

+1

這個問題絕對是重複的。讓我看看周圍。你有沒有檢查過[docs](http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html)?他們很好地解釋了這個問題。儘管如此,您可能想要翻譯爲英特爾格式程序集,以便在這些書籍中查找。 – 2013-02-15 17:45:23

+0

我覺得這將是,但我很欣賞尋找合適的地方尋找幫助。 – Scalahansolo 2013-02-15 17:48:21

+0

請參閱wikibooks上的[GAS語法尋址模式語法](http://en.wikibooks.org/wiki/X86_Assembly/GAS_Syntax#Address_operand_syntax)以及[x86 tag wiki]中的其他鏈接(https://stackoverflow.com/tags/x86/info) – 2017-09-23 07:44:47

回答

5

完整的存儲器尋址模式格式AT &變速箱總成是:

offset(base, index, width) 

因此,對於您的情況:

offset = 0 
base = ebx 
index = eax 
width = 4 

含義,該指令是一樣的東西:

eax = *(uint32_t *)((uint8_t *)ebx + eax * 4 + 0) 

在類似C的僞代碼中。

+0

爲什麼'uint8_t'在這裏? – 0xAX 2015-02-03 10:57:22

+0

指針算術。 – 2015-02-03 11:08:26

+0

是的,但爲什麼特別是uint8?所有的ebx,eax等等......寄存器都是32位的,無論信息在高三位字節中是否丟失?我問,因爲我有:'leal 0x2004(%ebx),%eax',但我看到:'leal 0x4(%ebx),%eax'在調試器中 – 0xAX 2015-02-03 11:19:19

相關問題