作者:四月草上飞2602920415 | 来源:互联网 | 2022-12-03 14:47
我以为没有.但是,我在这里看到,
具有两个存储器操作数的指令极为罕见
我找不到任何可以解释什么指令的内容,尽管很少见.有什么例外?
1> Peter Cordes..:
我找不到任何可以解释稀有性的东西.
x86指令最多只能有一个ModR/M + SIB + disp0/8/32.因此,有两个显式内存操作数的零指令.
x86内存存储器指令都至少有一个隐式内存操作数,其位置被写入操作码,就像push
访问堆栈一样,或者字符串指令movs
和cmps
.
有什么例外?
我将使用[mem]
以表明它可以是一个MODR/M寻址模式[rdi]
,[RIP+whatever]
,[ebx+eax*4+1234]
,或任何你喜欢.
push [mem]
:读取[mem]
,写入隐式[rsp]
(更新后rsp
).
pop [mem]
call [mem]
:从中读取新的RIP [mem]
,在堆栈上推送返回地址.
movsb/w/d/q
:读取DS:(E)SI
,写入ES:(E)DI
(或64位模式RSI和RDI).两者都是隐含的; 只有段reg可以覆盖.适用于DS
.
rep
:读取cmpsb/w/d/q
和DS:(E)SI
(或在64位模式下RSI和RDI).两者都是隐含的; 只有段reg可以覆盖.适用于ES:(E)DI
/ DS
.
MPX repe
:"将bnd中的边界和mib的索引寄存器中的指针值存储到绑定表条目(BTE),并使用mib的基址进行地址转换." 操作部分显示了一个负载和一个商店,但我不太了解MPX来理解它.
repne
.有自己的功能位,可在即将推出的Tremont(Goldmont Plus Atom的继任者)中使用.将64字节作为直接存储(WC)移动,具有64字节写入原子性,从源存储器地址到目标存储器地址.目标操作数是(对齐原子)bndstx mib, bnd
movdir64b r16/r32/r64, m512
来自ModRM,源是(未对齐的非原子)es:
来自ModRM.
对商店使用写合并,请参阅说明.这是任何x86 CPU供应商第一次保证原子性超过8个字节/r
.但不幸的是,它对于多线程实际上并不是很好,因为它会强制类似NT的高速缓存驱逐/绕过行为,因此其他内核必须从DRAM而不是共享外部高速缓存中读取它.
AVX2聚集和AVX512分散指令是值得商榷的.它们显然会进行多次加载/存储,但所有指针都来自一个SIMD向量(和一个标量基数).
我不计算指令等/m
,lock cmpxchg16b
,pusha
,fldenv
,或xsaveopt
与嵌套级别> 1是做多的商店或载荷的连续块.
我也没有计算iret
/ enter
string指令,因为它们将内存复制到I/O空间或从I/O空间复制内存.I/O空间不是内存.
我没有看到http://felixcloutier.com/x86/index.html上的VMX或SGX指令,只是主要列表.我不认为我错过了,但我当然可以.