什麼時候在x86中使用大小指令似乎有點含糊。 This x86 assembly guide說以下內容:什麼時候應該在x86中使用尺寸指令?
通常,的數據項中的一個給定的存儲器地址 預期的大小可以從彙編代碼指令,其中它是 引用來推斷。例如,在所有上述指令中,可以根據寄存器 操作數的大小來推斷存儲器區域的大小。當我們加載一個32位寄存器時,彙編器可能會推斷我們所指的內存區域是4個字節寬。 當我們將一個字節寄存器的值存儲到存儲器時,彙編器可能會推斷出我們希望地址引用內存中的單個字節 。
他們給出的例子非常微不足道,比如將立即值移入寄存器。
但是關於更復雜的情況,如下列內容:
mov QWORD PTR [rip+0x21b520], 0x1
在這種情況下,是不QWORD PTR大小指令多餘的,因爲,按照上面的指導,我們可以假設,我們要由於RIP爲8字節,因此將8個字節移入目標寄存器? x86架構上尺寸指令的權威規則是什麼?我無法在任何地方找到答案,謝謝。
更新:正如Ross指出的那樣,上例中的目的地不是寄存器。以下是一個相關的例子:
mov esi, DWORD PTR [rax*4+0x419260]
在這種情況下,不能把它假設我們要移動4個字節,因爲ESI爲4個字節,使得DWORD PTR指令冗餘?
RIP不是目標寄存器。目的地根本不是寄存器,它是一個內存位置。該指令將值1存儲在內存中的地址「RIP + 0x21b520」。 –
@RossRidge啊,我從來沒有這樣看過。謝謝,這爲我澄清了一點,但我已經看到了目的地其實是寄存器的其他情況。我會更新這個問題。 – Hello
你的第二個例子中不需要'dword ptr'。 – interjay