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

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

📁 用汇编语言编写的音乐动画程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
    MAIN_13:  CMP       AL,1BH
              JNE       MAIN_8
              MOV       AH,0        ;还原屏幕设置
              MOV       AL,2
              INT       10H
              MOV       AX,4C00H    ;自动返回DOS
              INT       21H


     CARTOON  PROC      NEAR        ;动画子程序
              PUSH      AX
              PUSH      BX
              PUSH      CX
              PUSH      DX
              MOV       AH,0        ;读系统时间以确定是否重画
              INT       1AH
              MOV       AX,DX
              SUB       AX,TIME2
              CMP       AX,2
              JNB       CARTOON_0
              JMP       CARTOON_3
  CARTOON_0:  MOV       TIME2,DX
              CMP       STATE_PICTURE,0         ;判断是画鸟还是画车
              JNE       CARTOON_1
              MOV       DELTA_X,-2
              MOV       DELTA_Y,1
              MOV       AREA,0410H
              LEA       SI,DATA_BIRD
              MOV       LINES,14
              JMP       CARTOON_2
  CARTOON_1:  MOV       DELTA_X,2
              MOV       DELTA_Y,0
              MOV       AREA,071BH
              LEA       SI,DATA_CAR
              MOV       LINES,29
  CARTOON_2:  CLEAR
              MOV       AX,DELTA_X
              ADD       PRESENT_X,AX
              MOV       AX,DELTA_Y
              ADD       PRESENT_Y,AX
              MOV       COUNT,0
              CMP       STATE_PICTURE,0
              JE        CARTOON_4
              CMP       PRESENT_X,0280H
              JB        CARTOON_5
              MOV       PRESENT_X,0
              JMP       CARTOON_5
  CARTOON_3:  JMP       CARTOON_EXIT
  CARTOON_4:  CMP       PRESENT_X,0
              JA        CARTOON_A
              MOV       PRESENT_X,0280H
  CARTOON_A:  CMP       PRESENT_Y,0190H
              JB        CARTOON_5
              MOV       PRESENT_Y,0
  CARTOON_5:  MOV       AX,LINES
              CMP       AX,COUNT    ;判断是否已画完
              JE        CARTOON_EXIT
              DRAW
              ADD       SI,0AH
              INC       COUNT
              JMP       CARTOON_5
           CARTOON_EXIT:  POP       DX
              POP       CX
              POP       BX
              POP       AX
              RET
     CARTOON  ENDP

        LINE  PROC      NEAR        ;画直线子程序
              PUSH      AX
              PUSH      BX
              PUSH      CX
              PUSH      DX
              MOV       CX,[SI+2]
              MOV       DX,[SI+4]
              CMP       CX,[SI+6]
              JA        LINE_1
              MOV       INCX,1
              MOV       AX,[SI+6]
              SUB       AX,CX
              MOV       XE,AX
              JMP       LINE_2
     LINE_1:  MOV       INCX,-1
              MOV       AX,[SI+2]
              SUB       AX,[SI+6]
              MOV       XE,AX
     LINE_2:  CMP       DX,[SI+8]
              JA        LINE_3
              MOV       INCY,1
              MOV       AX,[SI+8]
              SUB       AX,[SI+4]
              MOV       YE,AX
              JMP       LINE_4
     LINE_3:  MOV       INCY,-1
              MOV       AX,[SI+4]
              SUB       AX,[SI+8]
              MOV       YE,AX
     LINE_4:  ADD       AX,XE
              MOV       DISTANCE,AX
              MOV       T,0
              MOV       F,0
              CMP       XE,0
              JNE       LINE_5
              MOV       F,-1
     LINE_5:  POINT                 ;打印点
              MOV       AX,T
              CMP       AX,DISTANCE
              JAE       LINE_EXIT
              CMP       F,0
              JL        LINE_6
              ADD       CX,INCX
              MOV       AX,YE
              SUB       F,AX
              JMP       LINE_7
     LINE_6:  ADD       DX,INCY
              MOV       AX,XE
              ADD       F,AX
     LINE_7:  INC       T
              JMP       LINE_5
  LINE_EXIT:  POP       DX
              POP       CX
              POP       BX
              POP       AX
              RET
        LINE  ENDP

     OUTTIME  PROC      NEAR
              PUSH      SI
              PUSH      AX
              PUSH      BX
              PUSH      CX
              PUSH      DX
              LEA       SI,TIME
              MOV       AH,02H
              INT       1AH
              MOV       AX,CX
              MOV       CX,4
         LP:  PUSH      CX
              MOV       CH,0
              MOV       CL,4
              ROL       AX,CL       ;;循环左依次移取小时的十位和个位
              MOV       BL,AL
              AND       BL,0FH
              OR        BL,30H
              MOV       [SI],BL     ;;存放转换后的ASCII在TIME2中
              POP       CX
              INC       SI
              LOOP      LP
              MOV       AX,[SI-2]
              MOV       [SI-1],AX
              MOV       BYTE PTR[SI-2],3AH
              OUTSTR    29,47,TIMESTR
              POP       DX
              POP       CX
              POP       BX
              POP       AX
              POP       SI
              RET
     OUTTIME  ENDP

       ROUND  PROC      NEAR        ;画圆子程序
              PUSH      AX
              PUSH      BX
              PUSH      CX
              PUSH      DX
              MOV       AX,[SI+6]
              MUL       WORD PTR[SI+6]
              MOV       DISTANCE,AX
              MOV       AX,[SI+2]
              ADD       AX,[SI+6]
              MOV       XE,AX
              MOV       AX,[SI+4]
              ADD       AX,[SI+6]
              MOV       YE,AX
              MOV       CX,[SI+2]
              SUB       CX,[SI+6]
              MOV       DX,[SI+4]
              SUB       DX,[SI+6]
    ROUND_1:  CMP       CX,[SI+2]
              JB        ROUND_2
              MOV       AX,CX
              SUB       AX,[SI+2]
              JMP       ROUND_3
    ROUND_2:  MOV       AX,[SI+2]
              SUB       AX,CX
    ROUND_3:  MOV       INCX,AX
              PUSH      DX
              MUL       INCX
              MOV       INCX,AX
              POP       DX
              CMP       DX,[SI+4]
              JB        ROUND_4
              MOV       AX,DX
              SUB       AX,[SI+4]
              JMP       ROUND_5
    ROUND_4:  MOV       AX,[SI+4]
              SUB       AX,DX
    ROUND_5:  MOV       INCY,AX
              PUSH      DX
              MUL       INCY
              POP       DX
              ADD       AX,INCX
              CMP       AX,DISTANCE
              JAE       ROUND_6
              POINT                 ;打印点
    ROUND_6:  CMP       DX,YE
              JE        ROUND_7
              INC       DX
              JMP       ROUND_1
    ROUND_7:  MOV       DX,[SI+4]
              SUB       DX,[SI+6]
              INC       CX
              CMP       CX,XE
              JA        ROUND_EXIT
              JMP       ROUND_1
 ROUND_EXIT:  POP       DX
              POP       CX
              POP       BX
              POP       AX
              RET
       ROUND  ENDP

        MENU  PROC      NEAR
              CLEARSCREEN       0,0,30,80
              OUTSTR    0AH,17H,STR1            ;显示输出字符串
              OUTSTR    0CH,1CH,STR2
              OUTSTR    0DH,1CH,STR3
              OUTSTR    0EH,1CH,STR4
              OUTSTR    0FH,1CH,STR5
              OUTSTR    10H,1CH,STR6
              OUTSTR    11H,1CH,STR2
              RET
        MENU  ENDP

       MUSIC  PROC      NEAR
              PUSH      AX
              PUSH      BX
              PUSH      CX
              PUSH      DX
              PUSH      SI
              CMP       STATE_MUSIC,0
              JE        MUSIC_0
              MOV       AL,0
              OUT       61H,AL
              JMP       MUSIC_EXIT
    MUSIC_0:  MOV       BX,INCDI
              MOV       AX,[DI+BX]
              CWD
              MOV       BX,55
              DIV       BX
              MOV       BX,AX
              MOV       AH,0
              INT       1AH
              MOV       AX,DX
              SUB       AX,TIME1
              CMP       AX,BX
              JB        MUSIC_EXIT
              MOV       TIME1,DX
              ADD       DI,2
              MOV       CX,[DI]
              CMP       CX,-1
              JNE       MUSIC_1
              LEA       DI,FREQ
    MUSIC_1:  MOV       AL,0B6H     ;设置8253
              OUT       43H,AL
              MOV       DX,8H
              MOV       AX,3208H
              DIV       CX
              OUT       42H,AL
              MOV       AL,AH
              OUT       42H,AL
              IN        AL,61H
              MOV       AH,AL
              OR        AL,3
              OUT       61H,AL
 MUSIC_EXIT:  POP       SI
              POP       DX
              POP       CX
              POP       BX
              POP       AX
              RET
       MUSIC  ENDP
       CODES  ENDS
              END       START

⌨️ 快捷键说明

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