控制工程师论坛

教程与手册

几个简单的汇编初学者问题总结1

osmaosi
osmaosi

2008-10-14

几个简单的汇编初学者问题总结

0 关于指令时间的问题上次有兄弟问关于 指令时间的问题,答复查看 intel 手册是一个办法。
但很多人没有那个东东吧!,所以可以用另一招,在编译时加入 /Sc

选项:
ML /Fl /Sc Kinds.asm
还有有位兄弟问过 为什么 mov ax,offset table 比 lea ax,table 速度
要快?但到底快到什么程度,恐怕也没法感性认识。下面让偶们来
看看实际效果:
首先在源文件 Kinds.asm 中敲入:
data    segment
tabledw?
data    ends

code    segment
assume cs:code,ds:data
start:
push  ds
sub    ax,ax
push  ax

mov   ax,data
mov   ds,ax

mov   ax,offset table
lea     ax,table

idiv    table
retf
code    ends
     end    start

保存后,控制台中敲入:
ML /Fl /Sc Kinds.asm
完成后,在同一目录下用记事本打开 Kinds.lst 文件:
0000     datasegment
0000 0000     tabledw?
0002     dataends

0000     codesegment
assume cs:code,ds:data
0000start:
0000  10   1Epushds
0001   3   2B C0     subax,ax
0003  11   50         pushax

0004   4   B8 ---- Rmovax,data
0007   2   8E D8     movds,ax

0009   4   B8 0000 Rmovax,offset table
000C   8   8D 06 0000 R     leaax,table

0010 177+  F7 3E 0000 R     idivtable
     
0014  26   CB     retf
0015   codeends
endstart

可以清楚地看到 :
mov ds,ax 只需要 2个时钟周期
mov ax,offset table 需要 4个
lea ax,table 则需要 8 个
而 idiv table 更是夸张的用到了超过 177 个时钟周期。

是不是一目了然呢?呵呵!
回帖

评论0

首页 | 登录 | 注册 | 返回顶部↑
手机版 | 电脑版
版权所有 Copyright(C) 2016 CE China