首页
社区
课程
招聘
[求助]汇编请教
发表于: 2009-4-21 21:18 4120

[求助]汇编请教

2009-4-21 21:18
4120
在汇编教程中看到这句话:目的操作数和源操作数不能同时用存储器寻址方式,这个限制适用于所有指令。不太理解,哪位大牛能解释下怎么回事,以及为什么?

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (13)
雪    币: 370
活跃值: (52)
能力值: ( LV13,RANK:350 )
在线值:
发帖
回帖
粉丝
2
这个是关系到CPU的实现细节了,至于CPU为什么没有这样的实现那我也不是很清楚了
2009-4-21 21:22
0
雪    币: 212
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
这个不好说,上网搜一下比较现实
2009-4-21 21:28
0
雪    币: 421
活跃值: (83)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
貌似在那里看到过的,说是和intel的CPU指令有关系
真的想知道那就去intel网站上找找CPU相关的电子资料好了
2009-4-21 22:52
0
雪    币: 202
活跃值: (15)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
你知道该怎么用就行了,
比如 mov eax,0  
两个操作数必须有一个是寄存器
mov data,eax  /  mov ebx,eax /mov ebx,[ebx] /mov [1234],eax
都是可行的
但 mov data,data1 / mov [eax],[ebx]  /mov [eax],0
都是错误的
2009-4-21 23:54
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
这是跟cpu设计原理有关的。

CPU不能直接在内存里进行计算;
寄存器是比内存更快的数据存放处。
2009-4-22 12:10
0
雪    币: 202
活跃值: (57)
能力值: ( LV9,RANK:370 )
在线值:
发帖
回帖
粉丝
7
指令编码的设计原因:
你可以看看下面的指令格式:

Intel只给了编码一个内存寻址操作数的位置。

至于更深层次的原因,可能就跟处理器的设计有关了。
上传的附件:
2009-4-22 21:29
0
雪    币: 82
活跃值: (10)
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
8
内存寻址需要把地址装入专门的地址寄存器,类似于ALU,因为是在同一个总线上的,如果两个间接寻址的话,就要装载两次地址,而一般处理指令都是并行处理的,这第二次寻址前什么都做不了,浪费了一个周期,所以决定每个指令只能进行一次间接寻址.
2009-4-22 21:34
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
学习了,但是还是看不懂.
2009-4-22 23:08
0
雪    币: 2368
活跃值: (81)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
10
就是说 运算的两个数不能都放在内存里面。
2009-4-22 23:20
0
雪    币: 723
活跃值: (81)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
11
指令集的设计是一个原因:modrm 寻址中没有提供 mem 对 mem 编码

另一个原因,正如 8 楼所说的,所有的内存操作都要放在 CPU 的 load-store 队列里,一条指令有两种内存操作数的话,同步是一个问题,即使使用 lock 锁总线,指令也会出现混乱。
2009-4-22 23:35
0
雪    币: 427
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
是不好懂,只要记住不可以就行了不一定非要理解它。。
2009-4-23 10:32
0
雪    币: 19
活跃值: (1086)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
mov [eax],[ebx]  一句指令说明一切。
2009-4-23 11:15
0
雪    币: 339
活跃值: (10)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
14
to 菜鸟乱飞:

  我的理解是源和目的必须有一个指定以字节、字还是双字操作,比如说mov [eax],[ebx],你根本不知道从ebx地址上转移了一个字节、两个字节还是四个字节到eax指示的地址上;而mov byte ptr [eax],[ebx]则明确指示出移动一个字节。
2009-4-25 15:49
0
游客
登录 | 注册 方可回帖
返回
//