您的位置:控制工程论坛网论坛 » 教程与手册 » 几个简单的汇编初学者问题总结1

osmaosi

osmaosi   |   当前状态:在线

总积分:1122  2024年可用积分:0

注册时间: 2008-10-09

最后登录时间: 2022-04-26

空间 发短消息加为好友

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

osmaosi  发表于 2008/10/14 9:27:11      599 查看 0 回复  [上一主题]  [下一主题]

手机阅读

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

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 个时钟周期。

是不是一目了然呢?呵呵!
1楼 0 0 回复