【问题标题】:What is this movsbl instruction? [duplicate]这个 movsbl 指令是什么? [复制]
【发布时间】:2012-12-14 15:47:30
【问题描述】:

可能重复:
what does movsbl instruction do?

相关:what does movsbl instruction do?

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

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

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

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

我们将非常感谢您对本说明的任何启发!

【问题讨论】:

  • 哪个反汇编程序?我假设<> 应该是(),它只是一个普通的“将地址RBX+RAX*1 处的符号扩展字节到32 位并存储在RCX 中”指令.
  • 注:讽刺的是;移入 ECX 的数据会导致 RCX 的高 32 位清零;所以这个指令实际上将符号从 8 位扩展到 32 位,然后零从 32 位扩展到 64 位...... :-)

标签: assembly


【解决方案1】:

说明

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

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

现在到&lt;%rbx,%rax,1&gt;。这只是表示通过将rbxrax 的值相加形成的内存地址。如果您想知道,1 是应用于rax 的乘数。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-12-13
      • 2018-10-16
      • 2014-06-25
      • 1970-01-01
      • 2010-11-05
      • 1970-01-01
      • 1970-01-01
      • 2012-10-31
      • 2019-06-18
      相关资源
      最近更新 更多