我发现比如mov类指令,不合法的情况就是当2个操作数同时为内存地址的时候。我想了解这个问题产生的原因,而不是说人家这么规定的,他这么规定那么肯定有其原因。我网上搜索到的一个比较靠谱的解释是:
因为内存一般不在cpu内,如果两个操作数都是内存的,cpu无法介入,必须有一个能和cpu联系。
大家有什么好的解释,或者说能把这个问题细化分析。
还有就是变址寻址 base(offset, index, size),为什么规定offset,index只能是寄存器,size一般是个立即数。首先offset,index不能是内存,此处base已是内存地址,而一条指令里面不能出现2个内存地址,offset,index也不能是立即数,否则失去变址寻址的意义了,那么他俩只能是寄存器了。不知道我这样的猜想是否正确?
以上我用的是AT&T的汇编。
因为CPU对内存操作要么读,要么写;不能既读又写。
受教了,正是我需要的回答。谢谢!
@thammer: 你应该接着问为啥不把数据总线设计成双车道?
@Launcher: 是我的问题问得很低级吗?何必讽刺我呢?
@thammer: 没这个意思,只是因为导致同一时刻,CPU 只能对内存做一种访问的直接限制条件就是数据总线是单车道。
@thammer: 90后都这么玻璃心吗?
@Launcher: 我理解错你意思了,只是我觉得问问题归问问题,不要带感情色彩。不好意思。