Assembly 程序集阵列访问

Assembly 程序集阵列访问,assembly,x86-64,att,mov,addressing-mode,Assembly,X86 64,Att,Mov,Addressing Mode,我正在学习汇编,我有一个关于数组寻址的问题。假设rsi持有一个数组的地址,我想获取从这个地址开始的数据的第一个字节。以下两段代码可以完成这项工作吗?如果有,它们之间的区别是什么?先谢谢你 (AT&T语法) 版本1 movb (%rsi), %al 版本2 movb (, %rsi, 1), %al 两者的作用相同,但寻址模式不同,前者使用索引寻址模式,而后者使用SIB地址模式。如果可能的话,选择前者。通常您希望movzx,即AT&T语法中的akamovzbl(%rsi),%eax将一个字

我正在学习汇编,我有一个关于数组寻址的问题。假设
rsi
持有一个数组的地址,我想获取从这个地址开始的数据的第一个字节。以下两段代码可以完成这项工作吗?如果有,它们之间的区别是什么?先谢谢你

(AT&T语法)

版本1

movb (%rsi), %al 
版本2

movb (, %rsi, 1), %al 

两者的作用相同,但寻址模式不同,前者使用索引寻址模式,而后者使用SIB地址模式。如果可能的话,选择前者。通常您希望
movzx
,即AT&T语法中的aka
movzbl(%rsi),%eax
将一个字节零扩展到RAX中。当您明确希望将新的低字节合并到现有的高字节时,通常只希望
mov
到8位寄存器<代码>添加(%rsi),%al在大多数CPU上都可以;您已经对AL的旧值有了一个输入依赖项,因此避免了错误的依赖项不会丢失任何东西。