Assembly 在现代系统的装配中,我可以使用movl而不是movb或movw吗?

Assembly 在现代系统的装配中,我可以使用movl而不是movb或movw吗?,assembly,x86,cpu-architecture,micro-optimization,mov,Assembly,X86,Cpu Architecture,Micro Optimization,Mov,我正在学习如何在汇编中编程,我有一个澄清问题。在我的书中,它充分考虑了在命令中使用正确后缀的重要性。然而,在课堂上,老师只使用了“movl”操作数。我的老师这样做是为了简单,还是‘movb’和‘movw’命令近年来已经过时了?例如,在字符类型上使用movl而不是movb时,效率是否会降低?它会起作用吗? 谢谢 更新:我说的是x86-64汇编在更高级的语言中使用整数和字符是相当相似的。它们不是过时的,但在小示例中,小数字是否存储为32位字或字节并不重要。但是,如果您操作字符串,我强烈建议使用字节。

我正在学习如何在汇编中编程,我有一个澄清问题。在我的书中,它充分考虑了在命令中使用正确后缀的重要性。然而,在课堂上,老师只使用了“movl”操作数。我的老师这样做是为了简单,还是‘movb’和‘movw’命令近年来已经过时了?例如,在字符类型上使用movl而不是movb时,效率是否会降低?它会起作用吗? 谢谢


更新:我说的是x86-64汇编

在更高级的语言中使用整数和字符是相当相似的。它们不是过时的,但在小示例中,小数字是否存储为32位字或字节并不重要。但是,如果您操作字符串,我强烈建议使用字节。(或者您可能会意外地覆盖一些相邻的字符。)

在更高级的语言中,使用整数和字符是相当相似的。它们不是过时的,但在小示例中,小数字是否存储为32位字或字节并不重要。但是,如果您操作字符串,我强烈建议使用字节。(或者您可能会意外地覆盖一些相邻字符。)

这个问题与什么样的体系结构有关?

例如,在现代x86上,使用mov[b/w]加载会由于部分寄存器更新而降低性能(阻止寄存器重命名/扩展依赖链)。使用
movzx
/
movsx
将零/符号扩展到全尺寸寄存器中以防止出现这种情况。

这个问题与什么样的体系结构有关?

例如,在现代x86上,使用mov[b/w]加载会由于部分寄存器更新(防止寄存器重命名/扩展依赖链)而降低性能。使用
movzx
/
movsx
将零/符号扩展到全尺寸寄存器以防止出现这种情况。

顺便说一句,某些处理器可以处理未对齐的数据,但不是全部。然后,如果您解析接收到的消息,。。。字段通常不是零填充的。。。或者,如果你有一个大数组,比如说,兆字节大小的结构作为元素,那么将所有字节填充到32位字确实会有效果。顺便说一句,有些处理器可以处理非对齐数据,但不是全部。然后,如果您解析接收到的消息,。。。字段通常不是零填充的。。。或者,如果你有一个大数组,比如说,兆字节大小的结构作为元素,那么将所有字节填充到32位字确实会产生效果。只是澄清一下;movzx将通过零填充将数据扩展到32位,以便数据完全占用寄存器?@jnel899:是。有关在各种微体系结构上写入部分寄存器的详细信息,请参见。只是澄清一下;movzx将通过零填充将数据扩展到32位,以便数据完全占用寄存器?@jnel899:是。有关在各种微体系结构上编写部分寄存器的详细信息,请参见。非常好的一点,我了解了如何容易出错。你也提出了一个很好的观点,关于如何在大型结构上这样做也会出错。非常好的观点,我明白了错误是如何容易犯的。您还提出了一个很好的观点,即使用大型结构进行此操作可能会出错。