可能重复:
movsbl 指令是做什么的?
在反汇编一个程序时,我发现了一个非常奇特的指令:
0x0000000000401106: movsbl (%rbx,%rax,1),%ecx
我想我知道 movsbl 做了什么:它基本上扩展了一个字节并将前导字节(符号扩展)添加到寄存器中。
但是我完全不知道在上述情况下使用它时它会做什么。
任何阐明此说明的信息将不胜感激!
可能重复:
movsbl 指令是做什么的?
在反汇编一个程序时,我发现了一个非常奇特的指令:
0x0000000000401106: movsbl (%rbx,%rax,1),%ecx
我想我知道 movsbl 做了什么:它基本上扩展了一个字节并将前导字节(符号扩展)添加到寄存器中。
但是我完全不知道在上述情况下使用它时它会做什么。
任何阐明此说明的信息将不胜感激!
该指令
movsbl <%rbx,%rax,1>,%ecx
从第一个操作数寻址的内存位置读取一个字节,符号将该字节扩展为 32 位,并将结果存储在ecx
寄存器中。
现在到<%rbx,%rax,1>
. rbx
这只是表示通过将和的值相加形成的内存地址rax
。如果您想知道,1
是适用于 的乘数rax
。
该指令从地址加载一个字节,rbx+rax
并将其符号扩展为ecx
. 请注意,符号扩展将源的最高有效位复制到目标的最高位,因此它并不总是“领先的”。这样当解释为 2 的补码有符号数时,该值不会改变。