●●●请问如何判断汇编指令的长度和运行时间?●●●

crossbow 2004-08-03 08:16:22
mov eax, 00000000h ;5 bytes
xor eax, eax ;2 bytes
cmp eax, 00000000h ;5 bytes
je _label_ ;2/6 bytes (short/near)

不知道这些对指令长度的判断是从何而来的,又如何判断运行的时钟周期?

本人菜鸟一个,期盼老大们不吝赐教。谢谢!
...全文
1497 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
kwing 2004-08-08
  • 打赏
  • 举报
回复
实际上现在CPU的执行情况已经很复杂了,
现代CPU的流水线技术使得某些不相关指令可以并行或乱序执行,
所以不好确定某条指令使用多少时钟周期.
bsnhk 2004-08-07
  • 打赏
  • 举报
回复
指令的长度就是指机器码的长度,如果没有操作数的话,指令的长度是固定的,否则,指令的长度就受到寻址方式、指令的运算长度(如字节或字运算)、立即数是字节还是字等因素的影响。
在存储器寻址方式中,编译器对指令中的偏移量跟位移量是做不同处理的,位移量根据其大小给以分配字节或字空间来存放,而偏移量固定分配字空间来存放。
有时操作码的长度也会受操作数的实际寻址方式的影响,因为操作码长度不一定是字节的倍数。
我认为深入研究指令机器码的格式是深刻理解寻址方式及其所涉及概念的一个很好的办法。如果只是看看书本上关于寻址方式的介绍,有时很难去体会到或猜到某些概念的具体含义。
firstrose 2004-08-07
  • 打赏
  • 举报
回复
时钟周期是硬件决定的,可以查表。纯软件的方法不准确。注意,我说的是纯软件计算!
programfanny 2004-08-05
  • 打赏
  • 举报
回复
对,INTEL
NullUser 2004-08-04
  • 打赏
  • 举报
回复
看intel指令手册
rdtsc是取程序运行时间的,单位好像是时间周期。高位在edx,低位在eax。执行两次,比较eax的值就知道了
FlyindanceDDr 2004-08-03
  • 打赏
  • 举报
回复
楼上的,1个时钟周期是计算机中计时的最小单位,1毫秒可以执行n条指令的说
SDFDSAC 2004-08-03
  • 打赏
  • 举报
回复
v里面好像有个计算时间的函数,可以精确到毫秒级,忘了
crossbow 2004-08-03
  • 打赏
  • 举报
回复
感谢!
SDFDSAC 2004-08-03
  • 打赏
  • 举报
回复
指令长度可以根据程序的起始地址和结束地址算出来
时间好像只有查表,一个一个的加起来
kugou123 2004-08-03
  • 打赏
  • 举报
回复
楼主,一般像mov,lea,cmp这些指令,在书上都有一个表,会给出这类指令执行的时间的。
参考《IBM PC汇编语言程序设计》清华出版的,上面就有。
Areslee 2004-08-03
  • 打赏
  • 举报
回复
什么叫比较准?
人家做的CPU,当然是人家的资料最好了
allkill 2004-08-03
  • 打赏
  • 举报
回复
确实INTEL的手册上的比较准。

《IBM PC汇编语言程序设计》上的有些新的指令可能查不到.
Areslee 2004-08-03
  • 打赏
  • 举报
回复
到INTEL去下CPU手册
crossbow 2004-08-03
  • 打赏
  • 举报
回复
哪位有关于指令时钟周期详细的表格?谢谢.
crossbow 2004-08-03
  • 打赏
  • 举报
回复
同意楼上的观点,1秒中有n G次的周期
FlyindanceDDr 2004-08-03
  • 打赏
  • 举报
回复
一般来说,移位,加法,取反这种指令只需要一个时钟周期,而乘法,除法等指令需要几个乃至几十个时钟周期执行,1个时钟周期远远小于1微秒,楼主的代码执行时间是不能用毫秒描述的
SDFDSAC 2004-08-03
  • 打赏
  • 举报
回复
?

21,458

社区成员

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

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