2012-12-14 181 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的补码有符号数时,该值不会改变。