Assembly 这个movsbl指令是什么?

Assembly 这个movsbl指令是什么?,assembly,Assembly,可能重复: 相关的: 在反汇编程序时,我发现了一条非常奇特的指令: 0x0000000000401106: movsbl (%rbx,%rax,1),%ecx 我想我知道movsbl的功能:它基本上扩展一个字节,并向寄存器中添加前导字节(符号扩展) 但我完全不知道它在上面的上下文中使用时会做什么 如果您对本说明有任何了解,我们将不胜感激 指令 movsbl <%rbx,%rax,1>,%ecx movsbl,%ecx 从第一个操作数寻址的内存位置读取一个字节,将字节扩展到32

可能重复:

相关的:

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

0x0000000000401106: movsbl (%rbx,%rax,1),%ecx
我想我知道movsbl的功能:它基本上扩展一个字节,并向寄存器中添加前导字节(符号扩展)

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

如果您对本说明有任何了解,我们将不胜感激

指令

movsbl <%rbx,%rax,1>,%ecx
movsbl,%ecx
从第一个操作数寻址的内存位置读取一个字节,将字节扩展到32位,并将结果存储在
ecx
寄存器中


现在转到
。这只是表示通过将
rbx
rax
的值相加而形成的内存地址。如果您想知道,
1
是应用于
rax
的乘法器,该指令从地址
rbx+rax
加载一个字节,并将其扩展到
ecx
。请注意,符号扩展将源的最高有效位复制到目标的顶部位,因此它并不总是“前导位”。这样,当解释为2的补码符号数时,该值不会改变。

哪个反汇编程序?我假设
应该是
,它只是一个普通的“地址RBX+RAX*1处的符号扩展字节到32位并存储在RCX中”指令;移动到ECX的数据导致RCX的上32位归零;所以这条指令实际上是从8位到32位进行符号扩展,然后从32位到64位进行零扩展…:-)