⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 简单动画程序设计终极版.asm

📁 用汇编语言编写的音乐动画程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;***********************************************
;  作者 千斤拨四两                             *
;  程序名  简单音乐动画                        *
;  编程语言 windows 汇编                       *
;***********************************************
      OUTSTR  MACRO     ROW,TIER,STR            ;row为行,tier为列,STR为字符串名
              MOV       AH,2
              MOV       BH,0
              MOV       DH,ROW
              MOV       DL,TIER
              INT       10H
              MOV       DX,OFFSET STR
              MOV       AH,9
              INT       21H
              ENDM

 CLEARSCREEN  MACRO     ROW0,TIER0,ROW1,TIER1
              MOV       CL,TIER0
              MOV       CH,ROW0
              MOV       DL,TIER1
              MOV       DH,ROW1
              MOV       BH,0
              MOV       AX,0600H
              INT       10H
              ENDM

        DRAW  MACRO                 ;画图宏定义
              LOCAL     DRAW_1,DRAW_EXIT
              MOV       AL,[SI]
              CMP       AL,0
              JNE       DRAW_1
              CALL      LINE        ;画直线
              JMP       DRAW_EXIT
     DRAW_1:  CMP       AL,1
              JNE       DRAW_EXIT
              CALL      ROUND       ;画圆
  DRAW_EXIT:
              ENDM

       POINT  MACRO
              LOCAL     POINT_1
              PUSH      CX
              PUSH      DX
              ADD       CX,PRESENT_X
              ADD       DX,PRESENT_Y
              CMP       CX,0280H
              JAE       POINT_1
              MOV       AH,0CH
              MOV       AL,[SI+1]
              MOV       BH,0
              INT       10H
    POINT_1:  POP       DX
              POP       CX
              ENDM

       CLEAR  MACRO
              MOV       CL,4
              MOV       AX,PRESENT_Y
              SHR       AX,CL
              MOV       CH,AL
              PUSH      CX
              MOV       CX,3
              MOV       AX,PRESENT_X
              SHR       AX,CL
              POP       CX
              MOV       CL,AL
              MOV       DX,CX
              ADD       DX,AREA
              MOV       BH,0
              MOV       AX,0600H
              INT       10H
              ENDM

      STACKS  SEGMENT   STACK       ;堆栈段
              DW        128 DUP(?)
      STACKS  ENDS
       DATAS  SEGMENT
   PRESENT_X  DW        0
   PRESENT_Y  DW        100
           T  DW        ?
          XE  DW        ?
          YE  DW        ?
    DISTANCE  DW        ?
        INCX  DW        ?
        INCY  DW        ?
       INCDI  DW        ?
     DELTA_X  DW        ?
     DELTA_Y  DW        ?
       COUNT  DW        ?
           F  DW        ?
     TIMESTR  DB        'System time:'
        TIME  DB        5 DUP(?),'$'
       TIME1  DW        ?
       TIME2  DW        ?
        AREA  DW        0610H
       LINES  DW        ?
 STATE_MUSIC  DB        0
           STATE_PICTURE  DB        0
   DATA_BIRD  DW        0101H,30,34,14,0
              DW        0101H,11,26,7,0
              DW        0201H,10,23,2,0
              DW        0200H,0,36,7,33
              DW        0200H,0,36,3,28
              DW        0200H,0,36,6,31
              DW        0100H,28,22,32,0
              DW        0100H,32,22,48,6
              DW        0100H,32,0,48,6
              DW        0100H,42,30,62,18
              DW        0100H,62,18,68,34
              DW        0100H,44,34,68,34
              DW        0600H,35,46,54,52
              DW        0600H,38,44,54,50
    DATA_CAR  DW        0101H,50,90,10,0
              DW        0101H,150,90,10,0
              DW        0100H,0,90,204,90
              DW        0201H,50,90,2,0
              DW        0201H,150,90,2,0
              DW        0101H,204,32,4,0
              DW        0100H,0,42,24,0
              DW        0100H,0,42,0,90
              DW        0100H,0,42,198,42
              DW        0100H,18,12,168,12
              DW        0100H,18,12,18,42
              DW        0100H,24,0,156,0
              DW        0100H,156,0,198,42
              DW        0100H,0,42,24,0
              DW        0100H,168,12,168,42
              DW        0100H,198,42,198,75
              DW        0100H,192,75,204,75
              DW        0100H,192,90,192,75
              DW        0100H,204,75,204,90
              DW        0100H,48,12,48,42
              DW        0100H,70,84,70,98
              DW        0100H,70,98,120,98
              DW        0100H,120,84,120,98
              DW        0100H,70,84,120,84
              DW        0100H,80,12,80,90
              DW        0100H,90,12,90,90
              DW        0100H,100,12,100,90
              DW        0100H,110,12,110,90
              DW        0100H,198,42,204,36
   MUSICTIME  DW        400,400
              DW        400,200,400,400,800,400,400
              DW        400,200,400,200,200,800,400,400
              DW        400,200,400,400,800,400,400
              DW        400,200,400,200,200,800,400,400
              DW        400,800,400,800,400,400
              DW        400,200,200,400,400,800,400,400
              DW        400,200,400,400,800,800
              DW        1600,800,800
              DW        400,800,400,800,400,400
              DW        400,400,400,400,800,400,400
              DW        400,800,400,800,400,200
              DW        2400,400,400
              DW        400,800,400,800,400,400
              DW        400,800,200,200,800,400,400
              DW        400,800,400,800,800
              DW        2400,400,400
              DW        400,800,400,800,400,400
              DW        400,800,200,200,800,400,400
              DW        800,400,800,400,200
              DW        2400,400,400
              DW        400,800,400,800,400,400
              DW        400,800,200,200,800,400,400
              DW        400,800,400,800,800
              DW        2400,400,400
              DW        400,800,400,800,400,400
              DW        400,800,400,800,400,400
              DW        3200
              DW        800,400,400,400,400,400,400
              DW        4000
        STR1  DB        'Welcome you to run this programme!',13,10,'$'
        STR2  DB        24 DUP('*'),13,10,'$'
        STR3  DB        '* Esc   ----- Exit     *$'
        STR4  DB        '* M     ----- Music    *$'
        STR5  DB        '* 1     ----- Bird     *$'
        STR6  DB        '* 2     ----- Car      *$'
        STR7  DB        'Esc:Exit  Space:Pause  M:Music$'
        FREQ  DW        196,220
              DW        262,262,262,262,262,220,196
              DW        262,262,262,262,294,262,220,262
              DW        294,294,294,294,294,262,220
              DW        294,294,294,294,330,294,330,392
              DW        440,440,392,440,392,330
              DW        294,294,330,294,262,220,196,220
              DW        262,262,262,262,262,220
              DW        262,196,220
              DW        440,440,392,440,524,440
              DW        392,330,294,262,220,196,220
              DW        262,262,262,262,294,262
              DW        262,330,392
              DW        440,440,440,440,524,440
              DW        392,392,392,440,392,330,294
              DW        262,262,262,262,294
              DW        330,330,294
              DW        262,262,262,262,524,440
              DW        392,392,392,440,392,330,392
              DW        440,524,524,440,392
              DW        392,330,392
              DW        440,440,440,440,524,440
              DW        392,392,392,440,392,330,294
              DW        262,262,262,262,392
              DW        330,330,294
              DW        262,262,262,262,294,330
              DW        392,392,330,392,330,392
              DW        440
              DW        100,100,196,660,294,294,262
              DW        262,-1
       DATAS  ENDS
       CODES  SEGMENT               ;代码段
              ASSUME    CS:CODES,DS:DATAS,SS:STACKS
      START:  MOV       AX,DATAS    ;初始化
              MOV       DS,AX
              MOV       AH,0        ;初始化屏幕大小
              MOV       AL,12H
              INT       10H
              MOV       AH,0BH      ;设置背景色
              MOV       BH,0
              MOV       BL,1
              INT       10H
              MOV       AH,0BH      ;设置调色板
              MOV       BH,1
              MOV       BL,2
              INT       10H
              LEA       DI,FREQ
              LEA       SI,MUSICTIME
              SUB       SI,DI
              MOV       INCDI,SI
              MOV       AH,0
              INT       1AH
              MOV       TIME1,DX
              MOV       TIME2,DX
     MAIN_1:  CALL      MENU        ;显示菜单
     MAIN_2:  CALL      MUSIC
              CALL      OUTTIME
              MOV       AH,06H      ;从键盘输入字符
              MOV       DL,0FFH
              INT       21H
              JZ        MAIN_2
              CMP       AL,'m'
              JNE       MAIN_4
              MOV       AL,1
              SUB       AL,STATE_MUSIC
              MOV       STATE_MUSIC,AL
     MAIN_3:  JMP       MAIN_2
     MAIN_4:  CMP       AL,'1'
              JNE       MAIN_5
              MOV       STATE_PICTURE,0
              MOV       PRESENT_X,280H
              MOV       PRESENT_Y,180
              JMP       MAIN_6
     MAIN_5:  CMP       AL,'2'
              JNE       MAIN_13
              MOV       STATE_PICTURE,1
              MOV       PRESENT_X,0
              MOV       PRESENT_Y,150
     MAIN_6:  CLEARSCREEN       0,0,14H,50H
              OUTSTR    29,15,STR7
     MAIN_7:  MOV       AH,06H      ;从键盘输入字符
              MOV       DL,0FFH
              INT       21H
              JZ        MAIN_10
              CMP       AL,1BH
              JE        MAIN_1
              CMP       AL,'m'
              JNE       MAIN_9
              MOV       AL,1
              SUB       AL,STATE_MUSIC
              MOV       STATE_MUSIC,AL
              JMP       MAIN_7
     MAIN_8:  JMP       MAIN_3
     MAIN_9:  CMP       AL,20H
              JE        MAIN_11
    MAIN_10:  CALL      MUSIC
              CALL      OUTTIME
              CALL      CARTOON
              JMP       MAIN_7
    MAIN_11:  MOV       AL,0
              OUT       61H,AL
    MAIN_12:  MOV       AH,06H      ;从键盘输入字符
              MOV       DL,0FFH
              INT       21H
              JZ        MAIN_12
              CMP       AL,20H
              JNE       MAIN_12
              JMP       MAIN_7

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -