2012-02-27 146 views
1

我不明白這個彙編指令的作用。它的作用是什麼?爲什麼?彙編語言整數寄存器

imull $16, (%eax, %edx,4) 

寄存器的初始值是

%eax= 0x100x 
%edx= 0x3 
+1

我該如何解決?首先我沒有看到問題。你問的結果是什麼? – Flexo 2012-02-27 00:04:39

回答

1

該指令的結果將是任何dword存儲在乘以16(或地址0x10c,如果願意,向左移位由4位)。結果也將寫入該地址。

+0

你是怎麼找到地址是0x10c – Raj 2012-02-27 00:15:11

+0

這個wat我做了0x3 + 4 = 0x7然後0x7 + 0x100 =?這讓我感到困惑 – Raj 2012-02-27 00:16:27

9

我假設你正在試圖瞭解如何解釋ATT型彙編指令,特別是尋址部分。我相信你不需要幫助瞭解imull $16部件的作用 - 它只是執行有符號乘法運算,最後一個l代表long字。

(%eax, %edx, 4)是尋址,在這裏有一個基地址,一定量的元件中的偏移量,以及用於通過每一個的大小的元素的數量乘以一個比例/乘法器的形式:(base, offset, offset scale/multiplier)

你最終得到的是(base + (offset * multiplier),所以在這種情況下,這將是:

(%eax + (%edx * 4)) 
(0x100 + (0x3 * 4)) 
(0x100 + 0xC) 
(0x10C) 

因此指令imull $16, (%eax, %edx,4)在地址0x10C執行由長字的價值16一個符號乘法。