首页 新闻 赞助 找找看

汇编语言2个操作数为什么不能同时为内存地址

1
悬赏园豆:50 [已解决问题] 解决于 2015-03-04 19:07

  我发现比如mov类指令,不合法的情况就是当2个操作数同时为内存地址的时候。我想了解这个问题产生的原因,而不是说人家这么规定的,他这么规定那么肯定有其原因。我网上搜索到的一个比较靠谱的解释是:

  因为内存一般不在cpu内,如果两个操作数都是内存的,cpu无法介入,必须有一个能和cpu联系。

  大家有什么好的解释,或者说能把这个问题细化分析。

  还有就是变址寻址 base(offset, index, size),为什么规定offset,index只能是寄存器,size一般是个立即数。首先offset,index不能是内存,此处base已是内存地址,而一条指令里面不能出现2个内存地址,offset,index也不能是立即数,否则失去变址寻址的意义了,那么他俩只能是寄存器了。不知道我这样的猜想是否正确?

  以上我用的是AT&T的汇编。

thammer的主页 thammer | 初学一级 | 园豆:148
提问于:2015-03-04 10:14
< >
分享
最佳答案
1

因为CPU对内存操作要么读,要么写;不能既读又写。

详见:为什么X86汇编中的mov指令不支持内存到内存的寻址?

收获园豆:50
dudu | 高人七级 |园豆:31075 | 2015-03-04 10:32

受教了,正是我需要的回答。谢谢!

thammer | 园豆:148 (初学一级) | 2015-03-04 10:42

@thammer: 你应该接着问为啥不把数据总线设计成双车道?

Launcher | 园豆:45045 (高人七级) | 2015-03-04 11:32

@Launcher: 是我的问题问得很低级吗?何必讽刺我呢?

thammer | 园豆:148 (初学一级) | 2015-03-04 11:40

@thammer: 没这个意思,只是因为导致同一时刻,CPU 只能对内存做一种访问的直接限制条件就是数据总线是单车道。

Launcher | 园豆:45045 (高人七级) | 2015-03-04 11:50

@thammer: 90后都这么玻璃心吗?

爱编程的大叔 | 园豆:30839 (高人七级) | 2015-03-04 12:13

@Launcher: 我理解错你意思了,只是我觉得问问题归问问题,不要带感情色彩。不好意思。

thammer | 园豆:148 (初学一级) | 2015-03-04 12:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册