一个关于mov占用时钟周期的问题。

mem0set 2008-06-03 08:54:30
加精
mov edx,dword ptr [ecx+edx*4+8]
mov eax,dword ptr [eax+14h]
lea eax,[eax+edx*8]

我不知道[ecx+edx*4+8]这个里面的乘法和加法是不是也要占用时钟周期?
这3句要占用多少时钟周期呢?
...全文
6462 91 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
91 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
此贴如此精彩,顶了
o_oxiaocai 2012-05-12
  • 打赏
  • 举报
回复
看不懂,标记一下,磨刀后再来学习
yangzhongshen123 2011-05-27
  • 打赏
  • 举报
回复
来观望,大量学习
coaco 2010-10-19
  • 打赏
  • 举报
回复
这个楼主没道理,人家认真回答了,他又扯到礼貌上去了,同学们不要学这样的人
wjphero 2010-09-16
  • 打赏
  • 举报
回复
什么呀,两位大侠炒的这么凶,可楼主的问题还没说啊。我很想知道答案。
  • 打赏
  • 举报
回复
[Quote=引用 80 楼 dqlihb 的回复:]

不懂汇编,但个人觉得
指令周期和cpu无直接关系,而只和
指令集及编译器有关,
当然,如果cpu不支持此指令集就和cpu有关了
[/Quote]

指令周期和CPU是有关的。不同架构的处理器指令周期是不一样的。比如i386,多少年来一直都是它,但是时钟周期是在不断的变化的。以前在CSDN看过一条各指令的时钟周期,忘了在哪儿看的了。回头再找找
lumeng394356779 2009-09-24
  • 打赏
  • 举报
回复
菜鸟,在学习中

建立一个群,欢迎高手、菜鸟,一起来学习,一起讨论,一起进步

群号:85864592

新群,人员还不多
yshk999 2009-08-06
  • 打赏
  • 举报
回复
二位不要吵了。
我觉的黄山一刀兄弟说的没有什么错。
只是语言表达上,有空可钻而已。
饶了他吧!
Ajampie 2008-11-29
  • 打赏
  • 举报
回复
自己测试一下么。。。。看看你的电脑上的测试和这里的朋友们说的有什么差别么
ahjoe 2008-11-29
  • 打赏
  • 举报
回复
我建议:你们门外单挑去
myouuu 2008-11-28
  • 打赏
  • 举报
回复
han !!!
yufuwan 2008-11-27
  • 打赏
  • 举报
回复
口水战开始了,斑猪就给推荐,嗯,和谐
dqlihb 2008-11-27
  • 打赏
  • 举报
回复
不懂汇编,但个人觉得
指令周期和cpu无直接关系,而只和
指令集及编译器有关,
当然,如果cpu不支持此指令集就和cpu有关了
feeboby 2008-11-27
  • 打赏
  • 举报
回复
mark
xtdumpling 2008-11-26
  • 打赏
  • 举报
回复
现在不懂!
xiaopoy 2008-11-26
  • 打赏
  • 举报
回复
特定8086架构上,指定一种CPU上,指令周期是和功能性复杂度相关联的,依据为常识逻辑的直白推论。赞一个
不同cpu设计,确定指令格式(如RISC),则知道指令存储空间,指令周期基本可知。储存空间说的不对,空间不仅仅是储存空间的。而和时间对应的却是空间,而非储存空间。
设计cpu默认的一定把空间和时间对应起来。前楼有提及按照霍夫曼编码优化指令的,就是依据这种说法,指令的空间和时间对应着处理的。但时间却也不仅仅是指令周期。
wzaen 2008-11-26
  • 打赏
  • 举报
回复
mark.
nooning 2008-09-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jennyvenus 的回复:]
指令周期在不同的cpu上都有差别,即使是同一个型号的不同cpu之间也应该有差别,不同型号的cpu必然有差别,俺上学时看过一本书,讲的是代码极端速度优化的,开始时就指明了不要全信资料上说的,我还照着做了几个实验,果然是那样。
[/Quote]

不同意。指令周期是指完成一条指令所需要的时钟周期数,不存在半个周期的指令。
流水线的影响是多条不使用相同部条的指令可以同时被处理。

如果要得到精确的CPU时间,你应该在单任务系统上测试。去除其它中止影响sti后测试.

使用相同型号的CPU,你能每次都得到近似的值,当然你必须使用一样的主板和内存,访问内存的周期不由CPU决定
  • 打赏
  • 举报
回复
无知。
snk12 2008-07-04
  • 打赏
  • 举报
回复
我来回答你们的问题
所谓指令需要多少时钟周其来运行,可以这样分解

取指令阶段,如果前一条指令导致了内存面面的切换,然后这个页面又不在CPU的缓存中,
哪么会先从内存读入这一页(页的大小具体跟处理器有关),这段其间流水线是阻塞的,
可能会好费几万个时钟周期,如果你的内存是DDR或SDRAM,然后内存正在刷新中(64ms左右一个刷新周期),
哪么你得先等8192个时钟左右来等待内存的ready(注意,这个时钟是内存的时钟,一般比处理器时钟慢几倍,由北桥芯片来做),
如果是SRAM,哪是不用等的,直接读它。
但如果之前内存处于写的状态,哪么有读写切换的时钟要等待(北桥)。
然后在CPU得到总线控制权的情况下,把内存读出并载入到缓存(因为可能有pci之类的设备占用内存总线,使处理器暂时无法得到总线)。

当这个页载入完成,再把指定的指令放到指令译码寄存器中开始译码,(很好,一切很顺利)
然后指令过长,或者因为是cisc的变长指令系统,可能当前的指令和操作数没法全部取得装入到内部指令译码寄存器,哪就打一拍从缓存中读入下一条指令
好,现在可以执行了,如果是加减操作,一个时钟可以完成,乘除操作的话就比较麻烦有协处理器的话应该也可以,协处理器要工作在比处理器高得多的频率下,或者在流水线的开始就把所有可能的寄存器开始做运算,然后在具体指令执行时选择适当的结果。如果是一条跳转指令,然后跳转条件为真,而且是一个长跳转,哪就麻烦大了(短跳转也存在流水线的问题,但是通过n项指令自动预测之类的,基本会好很多),流水线得全部停掉,以前预取的指令要全部无效掉。然后等待n周期,流水线也恢复后,才能继续执行.

如果要是mov指令,然后指令后面的寻址有寄存器的乘法操作,应该会在第一个时钟计算数据地址,第二个时钟才能把这条指令完成

所以具体某条指令运行多少时钟,跟指令长度有点关系(因为是变长指令系统,不能知道是否当前指令是否已完全在指令译码寄存器中,和指令的位置。但关系不大,因为可能intel的指令译码寄存器很长)


大多数情况下,基本的指令都能在1个时钟完成,而且缓存很大,所以命中率比较高,换页比较少,所以因为涉及到很多问题,不要讨论这些无谓的事情了吧
加载更多回复(71)

21,496

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧