请验证AT&T装配线的含义

asi*_*mes 2 x86 assembly att

这条线对我来说不是很清楚(我对大会很新):

movsbl 0xffffffff(%edx,%ebx,1),%eax
Run Code Online (Sandbox Code Playgroud)

我理解mov,但movsbl对我来说是一个新的.在一个更简单的例子中,使用foo而不是0xffffffff(%edx,%ebx,1)我理解它是这样(完全不确定这是正确的,只是搜索了一个相关的主题):

eax = foo&0x800000ff;
Run Code Online (Sandbox Code Playgroud)

我从未有过一行汇编引用-1(0xffffffff),那里的信息%eax究竟来自哪里?是存储在以下的任何内容:

[%edx + %ebx -1]
Run Code Online (Sandbox Code Playgroud)

Gor*_*man 6

movsbl <%x, %y, 1>, %z
Run Code Online (Sandbox Code Playgroud)

说,从第一个操作数(x)寻址的存储单元读取一个字节,将字节扩展到32位,并将结果存储在寄存器(z)中.

<%x,%y,1>是通过将x和y的值相加而形成的存储器地址; 1是应用于y的乘数.

  • 使用`movsx`,前24位最终等于源字节的最高位,因此*sign*扩展.它是`movzx`,用0填充那24位,因此***扩展. (3认同)