相關:what does movsbl instruction do?
在拆卸程序,我發現一個非常奇特的指令:
0x0000000000401106: movsbl (%rbx,%rax,1),%ecx
我想我知道什麼movs BL確實:它基本上擴展了一個字節並將其中的前導(擴展符號)添加到寄存器中。
但是我完全不知道它在上面的上下文中使用它時會發生什麼。
任何照亮這條指令的燈光都將非常感謝!
相關:what does movsbl instruction do?
在拆卸程序,我發現一個非常奇特的指令:
0x0000000000401106: movsbl (%rbx,%rax,1),%ecx
我想我知道什麼movs BL確實:它基本上擴展了一個字節並將其中的前導(擴展符號)添加到寄存器中。
但是我完全不知道它在上面的上下文中使用它時會發生什麼。
任何照亮這條指令的燈光都將非常感謝!
指令
movsbl <%rbx,%rax,1>,%ecx
讀取從由所述第一操作數尋址的存儲器位置的一個字節,符號擴展字節到32位,並且將結果存儲在寄存器ecx
。
現在到<%rbx,%rax,1>
。這只是表示通過將rbx
和rax
的值相加形成的存儲器地址。如果您想知道,1
是適用於rax
的乘數。
該指令從地址rbx+rax
加載一個字節,並將符號擴展爲ecx
。請注意,符號擴展會將源的最重要位複製到目標的最高位,因此它並不總是「前導位」。這是因爲當解釋爲2的補碼有符號數時,該值不會改變。
哪個反彙編?我假設'<' and '>'應該是'('和')',它只是一個普通的「地址爲RBX + RAX的符號擴展字節* 1到32位並存儲在RCX中」指令。 – Brendan
注意:具有諷刺意味;數據移入ECX導致RCX的高32位被清零;所以這條指令實際上會從8位擴展到32位,然後從32位擴展到64位...... :-) – Brendan