好学IT学院:IT信息技术分享交流平台
标签:汇编  来源:互联网  作者:本站整理  发布时间:2009-05-20  ★★★加入收藏〗〖手机版
摘要:第一节 应用工具一、对程式的认识写作程式不难,但要写出好程式却不容易。这就好像画图一样,人人都能画,而画出来的图却可能有天壤之别。想作一个好画家,首先要有观察及分析的能力,面对着杂乱的事物,先整理出头绪,找到主题。再在画布上勾出轮廓,这叫做……

三、指令应用要灵活

有一段很简单的程式,其写作的方法甚多,但是指令应用的良窳,会使得程式的效率相去天上地下,难以估计。

这段程式的用途,是要将一段资料中,英文字符大、小写相互转换。当然,转换的选择要由使用者决定,在下面程式且略去使用介面,假设已得知转换的方式。

设资料在 DS:SI中,资料长度=CX ,大写转小写时BL=0,反之,则BL=1。

我见过一种写法,简直无法原谅:
  1: LOOP1:
  2:      CALL  CHANGE
  3:      JC  LOOP11
  4:      ADD  AL,20H
  5:      JMP  SHORT LOOP12
  6: LOOP11:
  7:      SUB  AL,20H
  8: LOOP12:
  9:      MOV  [SI-1],AL
   10:      LOOP  LOOP1
   11:      RET
   12: CHANGE:
   13:      LODSB
   14:      OR  BL,BL
   15:      JZ  CHANGS
   16:      CMP  AL,61H
   17:      JB  CHARET
   18:      CMP  AL,7AH
   19:      JA  CHARET
   20:      STC
   21: CHARET:
   22:      RET
   23: CHANGS:
   24:      CMP  AL,41H
   25:      JB  CHARET
   26:      CMP  AL,5AH
   27:      JA  CHARET
   28:      CLC
   29:      RET

这种程式错在把由12到29的程式写得太长,共 25B,有共用的价值,于是作为子程式调用。

试想一下,每一笔资料,都要调用一次,浪费四个字元事小,但每次要费 23+20个时钟脉冲,资料多时,不啻为天文数字。更何况这段程式写得极差,在回路中,又多浪费了几十个时钟。关于这一点,下面会继续讨论。

照上面这段程式,略加改进,写法如下:

1: CHANGE:
  2:      LODSB
  3:      OR  BL,BL
  4:      JZ  CHANGS
  5:      CMP  AL,61H
  6:      JB  CHARET
  7:      CMP  AL,7AH
  8:      JA  CHARET
  9:      SUB  AL,20H
   10: CHANG0:
   11:      MOV  [SI-1],AL
   12: CHANG1:
   13:      LOOP  CHANGE
   14:   RET
   15: CHANGS:
   16:      CMP  AL,41H
   17:      JB  CHANG1
   18:      CMP  AL,5AH
   19:      JA  CHANG1
   20:      ADD  AL,20H
   21:      JMP  CHANG1

这样的写法还是不佳,因为在回路中,用常数与暂存器比较,速度较暂存器相比为慢。应该先将需要比较的值,放在暂存器DH,DL 中,改进如次:

1:      MOV  AH,20H
  2:      MOV  DX,7A61H
  3:      OR  BL,BL
  4:      JZ  CHANGE
  5:      MOV  DX,5A41H
  6: CHANGE:
  7:      LODSB
  8:      CMP  AL,DL
  9:      JB  CHANG1
   10:      CMP  AL,DH
   11:      JA  CHANG1
   12:      XOR  AL,AH
   13:      MOV  [SI-1],AL
   14: CHANG1:
   15:      LOOP  CHANGE
   16:   RET

以上这段程式,空间小,速度快,每笔资料,平均仅需不到40个时钟值,以10 MHZ计,十万笔资料,约需半秒钟!
 请注意程式中所用的技巧,由2至6的分支法,就比下面这种写法为佳:

1:      OR  BL,BL
  2:      JZ  CHAN1 
  3:      MOV  DX,5A41H
  4:    JMP  SHORT CHANGE
  5: CHAN1:
  6:      MOV  DX,7A61H
  7: CHANGE:

这种分支也可以由另一种技巧所取代,即预设法。事先将所需用的参数放在固定的缓冲区中,此时取用即可:
         MOV  DX,BWCOM   ; 比较之预设值 
  这样程式又简单些了:

1:     MOV  AH,20H
  2:      MOV  DX,BWCOM
  3: CHANGE:
  4:      LODSB
  5:      CMP  AL,DL
  6:      JB  CHANG1
  7:      CMP  AL,DH
  8:      JA  CHANG1
  9:      XOR  AL,AH
   10:      MOV  [SI-1],AL
   11: CHANG1:
   12:      LOOP  CHANGE
   13:   RET

以上介绍为变数法技巧,即将所要比较的值,放在暂存器中。由于暂存器快速、节省空间,因此程式效率高。更重要的一点,是程式本身的弹性大,只要应用方式统一,事先把参数设妥,即可共用。

思科交换机提供的三种交换模式
  交换机在交换数据帧时可以选择不同的模式来满足网络和用户的需要,思科的交换机提供三种交换模式:快速转发模式快速转发(Fast-for…
  • 好学触屏公众号虎力全开、杨帆起航!
  • 好学考试H5触屏版开放内测