x86在执行指令和读/写数据时如何处理字节和字寻址?

问题描述 投票:0回答:1

因此,我正在学习x86的工作原理,并遇到人们说x86是字节可寻址的,但可以读取单词,双精度单词等。处理器如何决定何时使用哪种方法?例如。用于访问下一条指令以及当用户想要对存储器进行读/写时,使用哪种寻址模式?

memory x86 byte cpu-architecture instruction-set
1个回答
0
投票

每个内存访问都有机器码指令指定的操作数大小。(寻址模式不是正确的术语:不同的寻址模式是指定要分配的内存块的最低地址的不同方法。访问,例如[rdi] vs.[rdi + rdx*8]vs. [RIP + rel32]

对不同的操作数大小进行编码(使用前缀(对于整数指令为16 vs. 32 vs. 64位)或对于相同的助记符(8位整数)使用不同的操作码。或使用可使用xmm,ymm或zmm寄存器的AVX / AVX512指令的VEX或EVEX前缀。


例如,mov [rdi], eax是双字存储,并且机器码编码将通过在操作码上不使用特殊前缀来指定16/32/64位操作数大小。 (有关可用的编码,请参见https://www.felixcloutier.com/x86/mov。)

mov [rdi], ax这样的16位操作数大小将通过66操作数大小前缀具有相同的机器代码。

8位操作数大小(mov [rdi], al)有其自己的操作码,不需要前缀。

movzx / movsx是有趣的情况:存储器访问大小与目标寄存器不同。内存访问大小(字节或字)由操作码指定。操作数大小前缀仅影响目标大小。 x86-64movsx63 /r(dword-> qword符号扩展名)除外,其中movsxd操作数大小前缀does将内存访问大小缩小到66以匹配目标。] >

类似地,对于SIMD指令;指令编码唯一地确定内存访问大小以及读取或写入的寄存器。

© www.soinside.com 2019 - 2024. All rights reserved.