2012-12-14 134 views
0

可能重複:
what does movsbl instruction do?這是什麼movsbl指令?

相關:what does movsbl instruction do?

在拆卸程序,我發現一個非常奇特的指令:

0x0000000000401106: movsbl (%rbx,%rax,1),%ecx 

我想我知道什麼movs BL確實:它基本上擴展了一個字節並將其中的前導(擴展符號)添加到寄存器中。

但是我完全不知道它在上面的上下文中使用它時會發生什麼。

任何照亮這條指令的燈光都將非常感謝!

+0

哪個反彙編?我假設'<' and '>'應該是'('和')',它只是一個普通的「地址爲RBX + RAX的符號擴展字節* 1到32位並存儲在RCX中」指令。 – Brendan

+0

注意:具有諷刺意味;數據移入ECX導致RCX的高32位被清零;所以這條指令實際上會從8位擴展到32位,然後從32位擴展到64位...... :-) – Brendan

回答

2

指令

movsbl <%rbx,%rax,1>,%ecx 

讀取從由所述第一操作數尋址的存儲器位置的一個字節,符號擴展字節到32位,並且將結果存儲在寄存器ecx

現在到<%rbx,%rax,1>。這只是表示通過將rbxrax的值相加形成的存儲器地址。如果您想知道,1是適用於rax的乘數。

0

該指令從地址rbx+rax加載一個字節,並將符號擴展爲ecx。請注意,符號擴展會將源的最重要位複製到目標的最高位,因此它並不總是「前導位」。這是因爲當解釋爲2的補碼有符號數時,該值不會改變。