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位进行零扩展…:-)