通行证│用户名: 密码: 验证码: 验证码,看不清楚?请点击刷新验证码 电信网通铁通移动   在线
资源搜索:
热门搜索:Linux VB C语言 PhotoShop Flash TCP/IP
   首页 | 文章 | 软件 | 动画 | 资源 | 励志 | 骗术 | 论坛 | 邮箱 | 会员中心 | 军事 | 科技 | 博客 | 图片 | 商城 | 最新更新 | 800g资源 | 爱心黑客
您现在的位置: 爱国者黑客 >> 资源 >> 程序设计 >> 汇编语言 >> 基础教程 >> 文章正文
汇编语言---程式设计 (5)
责任编辑:admin   更新日期:2005-8-6
   19:        PUSH    AX
   20:        PUSH    BX
   21:        PUSH    CX
   22:        CALL    SUBTB[BX]
   23:        POP    CX
   24:        POP    BX
   25:        POP    AX
   26: LOOP1:
   27:        INC    BX
   28:        INC    BX
   29:        LOOP    LOOP0
   30: ENTRET:
   31:        RET
    这样好得多了,可是,还能不能再加改进呢?组合语言的妙处就在于变化无穷,且看看是否还能变出花样来。
    从设置开始,方式稍微改变一下,旗号的观念是供程式检查用。在应用时,要占用一个暂存器,而暂存器有限,浪费了可惜。此外,八个不同的子程式,又要占用一个计数用的暂存器,最好能够省掉。
    因此,设置的重要性就显而易见了,程式的好坏,并非仅仅在于指令的应用。原始的理念,及程式的规划,经常在程式设计之前已经决定了。
    我们称之为「预置法」,把前述的设置方式改变一下,用一组缓冲区,先定义如下:
        DB    0        ; 计数用
     BUFER    DW    8 DUP (0)    ; 存程式入口用
        DW    1        ; 终止信号
    然后再设计程式,预置及执行如次:
    1: SETUP:
    2:        CMP    BX,MAXVAL    ; 最大值检查
    3:        JA    SETRET        ; 超过,无效
    4:        SHL    BX,1        ; 参数乘2
    5:        ADD    BX,SUBTB
    6:        JMP    BX        ; 各种程式
    7: SUB3:
    8:        XOR    BUUER,BX    ; 设为第三组
    9:        JNZ    SUB31        ; 开
   10:    SUB30:
   11:        DEC    BUFER-1     ; 取消
   12:        RET
   13: SUB31:    INC    BUFER_1     ; 计数
   14:        RET
   15: SUBTB    DW    SUB1
   16:        DW    SUB2
        ..
   21:        DW    SUBN
   22: ENTER:
   23:        MOV    SI,OFFSET BUFER-1
   24:        LODSB            ; 查是否需要
   25:        OR    AL,AL        ; 为0则无
   26:        JZ    ENTRET
   27: ENTER1:
   28:        LODSW            ; 取程式资料
   29:        CMP    AX,1        ; 查程式入口
   30:        JB    ENTER1        ; 0表示不做
   31:        JZ    ENTRET        ; 1表示终止
   32:        PUSH    SI
   33:        CALL    AX        ; 执行
   34:        POP    SI
   35:        JMP    ENTER1
   36: ENTRET:
   37:        RET
    前一段调用程式需要31个字元,而现在只要21个字元,速度也快得多。不仅如此,前段程式仅能提供八个子程式,最多用十六位元,不过十六个子程式。本程式则不然,只要预留的缓冲器够,可提供的子程式可以说是无限。
    更重要的功能,是程式执行的顺序。除了这种预置法外,其他的方法,都受限于 SUBTB的安排次序,无法变更。但本方法则完全可任依使用者的需要,来决定子程式执行的顺序,以及是否执行。
    请注意在 SETUP时,BX的参数就同时代表了执行的顺序。如果要想依照设定的次序决定顺序,只要将缓冲区加大,再加一组预设程式即可,如下所示:
    1: SETUP:
    2:        SHL    AX,1        ; 输入参数
    3:        ADD    AX,OFFSET SUBTB ; 子程式入口
    4:        MOV    BX,BUFER-2    ; 位置序数
    5:  &

上一页  [1] [2] [3] [4] [5] [6] 下一页

  • 上一篇文章:
  • 下一篇文章:
  • 热门文章
    Olldbg常见问题
    汇编语言的艺术(组合语言的艺术)--观
    汇编语言的艺术(组合语言的艺术)--准
    汇编语言的艺术(组合语言的艺术)--基
    汇编语言的艺术(组合语言的艺术)--基
    汇编语言---程式设计 (4)
    虚拟8086模式
    SYS命令使用说明
    javascript + CSS 实现动态菜单显
    推荐文章
    自制Windows XP SP2自动安装光盘
    SQLServer注入工具改进版 v1.02
    使用photoshop CS进行自然美肤
    Photoshop绘制诺基亚手机
    PHOTOSHOP制作秋日之梦
    PHOTOSHOP鼠绘名模王爱萍
    Photoshop制作晶莹飞溅的水珠
    教你用PHOTOSHOP做放大镜
    鼠绘美女及服装修画全过程