相关:what does movsbl instruction do?
拆开程序后,我发现了一条非常奇特的指令:
0x0000000000401106: movsbl (%rbx,%rax,1),%ecx
我想我知道movsbl的作用:它基本上扩展了一个字节并将前导符号(符号扩展)添加到寄存器中。
但我完全不知道在上述情况下使用它会起什么作用。
任何关于这条指令的亮光都会非常感激!
答案 0 :(得分:2)
指令
movsbl <%rbx,%rax,1>,%ecx
从第一个操作数寻址的内存位置读取一个字节,sign将字节扩展为32位,并将结果存储在ecx
寄存器中。
现在到<%rbx,%rax,1>
。这仅表示通过将rbx
和rax
的值相加而形成的存储器地址。如果您想知道,1
是应用于rax
的乘数。
答案 1 :(得分:0)
该指令从地址rbx+rax
加载一个字节,并将符号扩展为ecx
。请注意,符号扩展将源的最高位复制到目标的顶部位,因此它并不总是&#34;前导的&#34;。这样,当被解释为2的补码有符号数时,该值不会改变。