1

可能重复:
movsbl 指令是做什么的?

相关:movsbl 指令是做什么的?

在反汇编一个程序时,我发现了一个非常奇特的指令:

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

我想我知道 movsbl 做了什么:它基本上扩展了一个字节并将前导字节(符号扩展)添加到寄存器中。

但是我完全不知道在上述情况下使用它时它会做什么。

任何阐明此说明的信息将不胜感激!

4

2 回答 2

2

该指令

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

从第一个操作数寻址的内存位置读取一个字节,符号将该字节扩展为 32 位,并将结果存储在ecx寄存器中。

现在到<%rbx,%rax,1>. rbx这只是表示通过将和的值相加形成的内存地址rax。如果您想知道,1是适用于 的乘数rax

于 2012-12-14T15:56:18.423 回答
0

该指令从地址加载一个字节,rbx+rax并将其符号扩展为ecx. 请注意,符号扩展将源的最高有效位复制到目标的最高位,因此它并不总是“领先的”。这样当解释为 2 的补码有符号数时,该值不会改变。

于 2012-12-14T15:56:57.643 回答