Assembly 如果在x86 AT&;中省略了和索引寻址模式的比例因子,会发生什么;T语法?

Assembly 如果在x86 AT&;中省略了和索引寻址模式的比例因子,会发生什么;T语法?,assembly,x86,att,gnu-assembler,addressing-mode,Assembly,X86,Att,Gnu Assembler,Addressing Mode,我是装配新手,我正在从中学习。在第41页和第42页,本书讨论了索引寻址模式 内存地址引用的一般形式如下: 地址\u或\u偏移量(%BASE\u或\u偏移量,%INDEX,乘数) 所有字段都是可选的。要计算地址,只需执行以下计算: FINAL ADDRESS=地址或偏移量+%BASE\u或偏移量+乘数*%INDEX 地址\或\偏移量和乘法器必须都是常量,而其他两个必须是寄存器如果遗漏了任何一个片段,则只需将其替换为等式中的零。 所以我决定玩一下这个。我编写了以下代码: .code32 .第节.数据

我是装配新手,我正在从中学习。在第41页和第42页,本书讨论了索引寻址模式

内存地址引用的一般形式如下:
地址\u或\u偏移量(%BASE\u或\u偏移量,%INDEX,乘数)

所有字段都是可选的。要计算地址,只需执行以下计算:
FINAL ADDRESS=地址或偏移量+%BASE\u或偏移量+乘数*%INDEX

地址\或\偏移量和乘法器必须都是常量,而其他两个必须是寄存器如果遗漏了任何一个片段,则只需将其替换为等式中的零。

所以我决定玩一下这个。我编写了以下代码:

.code32
.第节.数据
str:
.ascii“Hello world\0”
.第节.正文
.全球启动
_开始:
movl$2,%ecx#索引寄存器。
mov str(,%ecx,),%bl
movl$1,%eax
整型$0x80
我希望程序的退出结果是72(H的ASCII码),因为没有任何乘法器(根据本书,应该用零代替)。但令人惊讶的是,我得到了108(l的ASCII码)。我认为这可能是一个
.ascii
问题,并试图看看是否可以使用不同的数据类型得到不同的结果。我也用
.byte
得到了同样的结果

我试图用AT&T语法在x86汇编中查找索引寻址模式,但找不到任何有用的东西(可能是因为我不知道搜索什么)

书中有我遗漏的东西吗?还是有错?鉴于我对这个领域还不熟悉,如果你能详细说明,我真的很感激

如果遗漏了任何一个部分,则在等式中用零代替

这本书的一般规则对于比例因子并不十分准确。如果省略,默认比例因子为
1

x86索引缩放在机器代码中作为2位移位计数工作。

asm默认值是
的移位计数,尝试区分汇编语言及其语法与机器代码及其编码。机器代码编码规定了什么可以编码,什么不能编码。汇编语言受编码的限制,因为它只能对可编码的对象进行编码。但是对于相同的编码,汇编语言语法可能会有很大的差异。