yuyuhongss 发表于 2011-2-10 18:53:10

多一字节也嫌多,多一时钟更嫌慢【转】

为了便于叙述,下面以"T"表「时钟脉冲」; "B"表字符。其中时钟脉冲T = 1 / 振荡频率

一、避免浪费速度及空间

    汇编语言的效率建立在指令的运用上,如果不用心体会下列指令的有效用法,汇编
语言的优点就难以发挥。
1,    CALL    ABCD
      RET
    这种写法,是没有用心的结果,共享了 4B,23T+20T,完全相同的功能,如:
      JMP   ABCD或
      JMP   SHORT ABCD
    却只要 2-3B,15T。
      此外,上述的CALL XXXX 是调用子程序的格式,在直觉认知上,与JMP XXXX完
全不同。对整体设计而言,是不可原谅的错误,侦错的时候,也很难掌握全盘的理念。
      尤其是在精简程序的时候,很可能会遇到 ABCD 这个子程序完全独立,是则把
这段程序直接移到 ABCD 前,不仅能节省空间,而且使程序具有连贯性,易读易用。

2,    MOV   AX,0
    同样,这条指令要 3B,4T,如果用:
      SUB   AX,AX 或
      XOR   AX,AX
    只要 2B,3T, 唯一要注意的是,后者会影响旗号,所以不要用在有旗号判断的指
令前面。
      在程序写作中,经常需要将寄存器或缓冲器清为0,有效的方法,是使某寄存
器保持为0,以便随时应用。
      因为,MOV [暂存器],[暂存器] 只要 2B,2T, 即使是清缓冲器,也比直接填
0为佳。
      只是,如何令寄存器保持0,则要下一番功夫了。
      还有一种情况,就是在一回路中,每次都需要将 AH 清0,此时对速度要求很
严,有一个指令 CBW 原为将一 个字符转换为双字符,只需 1B,2T 最有效率。可是应
该注意,此时 AL 必须小于 80H,否则 AH 将成为负数。
3,    ADD   AX,AX
    需要 2B,3T不如用:
      SHL   AX,1
    只要2B,2T。

4,    MOV   AX,4
    除非这时 AH 必为0,否则,应该用:
      MOV   AL,4
    这样会少一个字符。

5,    MOV   AL,46H
      MOV   AH,0FFH
    为什么不写成:
      MOV   AX,0FF46H
    不仅省了一个字符,四个时钟,而且少打几个字母!

6,    CMP   CX,0
    需要 4B,4T, 但若用:
   OR      CX,CX
    完全相同的功能,但只要 2B,3T。再若用:
      JCXZ    XXXX
    则一条指令可以替代两条,时空都省。不幸这条指令限用于CX ,对其他暂器无效。

7,    SUB   BX,1
    这更不能原谅,4B,4T无端浪费。
      DEC   BX
    现成的指令,1B,2T为何不用?
      如果是
SUB   BL,1
也应该考虑此时 BH 的情况,若可以用
DEC   BX
取代,且不影响后果,亦不妨用之。

8,    MOV   AX,
      INC   SI
      INC   SI
    这该挨骂了,一定是没有记熟指令,全部共4B,21T。
      LODSW
    正是为这个目的设计,却只要 1B,16T。

9,    MOV   CX,8
      MUL   CX
      写这段程序之时应先养成习惯,每遇到乘、除法,就该打一下算盘。因为它们
太浪费时间。8位的要七十多个时钟,16位则要一百多。所以若有可能,尽量设法用简
单的指令取代。
      SHL   AX,1
      SHL   AX,1
      SHL   AX,1
   原来要 5B,137T,现在只要 6B,6T。如果CX能够动用的话,则写成:
   MOV   CL,3
   SHL   AX,CL
   这样更佳,而且CL之值越大越有利。用CL作为计数专 用暂存器,不仅节省空间,
且因指令系在 CPU中执行,速 度也快。

小甲鱼 发表于 2011-2-13 13:44:02

恩,有时候虽然是一个时间脉冲的差距,但由于迭代却会产生几万倍的效率差~从小处做起!

郑小夕 发表于 2011-2-13 16:17:24

看不懂

jueqingsizhe66 发表于 2011-3-7 12:14:05

学习了 !!!这个挺有用的!以后要多多运用一下

zcmxhl 发表于 2011-3-8 11:15:47

高手...............

復襍 发表于 2013-9-15 10:48:57

淡定...淡定...淡定...

sako_sc 发表于 2013-9-15 22:44:30

学习了 !!!这个挺有用的!以后要多多运用一下

2004222 发表于 2014-2-4 16:02:32

这是我见过的最好的论坛!
页: [1]
查看完整版本: 多一字节也嫌多,多一时钟更嫌慢【转】