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

📄 f.asm

📁 一个还算可以的汇编源码动画
💻 ASM
字号:
DLY  macro opr1,opr2              ;延时子程序
local    dl1,dl2     
  PUSH CX
       PUSH DX
       MOV  DX,opr1
DL1:   MOV  CX,opr2
DL2:   LOOP DL2
       DEC  DX
       JNZ  DL1
       POP  DX
       POP  CX
 endm
PRO_NAM   SEGMENT                       ;数据段
BUFA   DB 200
       DB ?
       DB 200 DUP(0)
BUFB   DB 200 DUP(?)
CAR    DB 7                  ;小汽车的字符图形表
       DB 52H,7,0,0
       DB 0B1H,7,0,1
       DB 0DBH,7,0,1
       DB 0DBH,7,0,1
       DB 4FH,7,1,0
       DB 4FH,7,0,-3
       DB 2,7,-2,1
       CHAR_CNT DW ?
       POINTER DW ?
       LINE_ON DB ?
       COL_ON DB ?
PRO_NAM ENDS
STACK  SEGMENT stack                ;堆栈段定义
       DB 200 DUP(0)                ;200字节空间
STACK  ENDS
code segment              ;代码段定义
main proc far               
       ASSUME CS:CODE,DS:PRO_NAM,SS:STACK
start:
;set up stack for return
        push ds
        sub ax,ax
        push ax
;main  part of program goes here
mov ah,0
mov al,0dh
int 10h
      call line
      call ligh
      call bus
      ret
main endp
;jmp main
;####################################
line proc near
       call hori
     call vert
     ret
;*******************************
hori proc near
       push ax
       push cx
        push dx
        mov dx,60
hine:mov cx,0
hdot:
         mov al,0bH
        mov ah,0ch    ; 像素功能
        int 10h
        inc cx
        cmp cx,300
        jl hdot
       add dx,90          ;行间距
        cmp dx,160
        jl hine
        pop dx
        pop cx
        pop ax
        ret
hori endp
;*************************************
vert proc near
         push ax
         push cx
          push dx
         mov cx,100
vline:mov dx,0
vdot: mov al,0bH
          mov ah,0ch
          int 10h
           inc dx
           cmp dx,200
           jl vdot
          add cx,90  ; 列间距
          cmp cx,200
           jl vline
          pop dx
          pop cx
          pop ax
           ret
vert    endp
;**********************
    line   endp                  
;#################################
ligh proc near
rotate:   mov ah,2
         mov dh,8
         mov dl,22     
         mov bh,0     ;100
         int 10h
         Call red
         dly 55500,42040
          call yellow
           dly 55100,42040
           call green
        DLY  55000,45001
         ret
         ligh endp
green proc near
         mov ah,9
         mov al,'*'
         mov bh,0
         mov bl,02h
         mov cx,1
         int 10h
         ret
green endp
;****************************
yellow proc near
          mov ah,9
          mov al,'*'
          mov bh,0
          mov bl,0eh
          mov cx,1
          int 10h
           ret
yellow endp
;********************
red proc near

          mov ah,9
          mov al,'*'
         mov bh,0
         mov bl,4h
          mov cx,1
          int 10h
          ret
red endp
;###########################
bus proc near
 begin:mov ax,pro_nam
       mov ds,ax     ;ds段地
       CALL QICHE
       INT 21

QICHE  PROC near              ;汽车子程序 
       PUSH AX
       PUSH BX
       PUSH CX
       PUSH DX  
       LEA DI,CAR            ;DI指向字符图形表
       MOV DH,12            ;从第9行9列位置开始显示汽车
       MOV DL,0
       CALL MOVE_SHAPE
       RET
QICHE  ENDP
MOVE_SHAPE PROC NEAR         
       PUSH AX
       PUSH BX
       PUSH CX
       PUSH DX
       PUSH DI
       MOV AH,0FH             ;取当前显示方式
       INT 10H
       SUB CH,CH
       MOV CL,[DI]            ;CL放字符个数
       INC DI                 ;DI指向字符图形表中的第一个字符
       MOV CHAR_CNT,CX
       MOV POINTER,DI
       MOV LINE_ON,DH
       MOV COL_ON,DL

PLOT_NEXT: 
       ADD DH,[DI+2]          ;改变行列坐标
       ADD DL,[DI+3]
       CMP DL,80             ;出屏否?
       JB MOV_CRSR
       Pop DI
       Pop DX
       Pop CX
       Pop BX
       Pop AX
       jmp exit2
MOV_CRSR:  
       MOV AH,2               
       INT 10H
       MOV AL,[DI]            ;取字符值
       MOV BL,[DI+1]          ;取字符属性
       PUSH CX
       MOV CX,1
       MOV AH,09              ;显示字符
       INT 10H
       POP CX
       ADD DI,4               ;DI指向下一个字符
       LOOP PLOT_NEXT
         DLY 40000,6801
       CALL ERASE
       JMP SHORT PLOT_NEXT
exit2: ret    
MOVE_SHAPE ENDP
ERASE  PROC NEAR            ;檫除子程序
       MOV CX,CHAR_CNT
       MOV DI,POINTER
       MOV DH,LINE_ON
       MOV DL,COL_ON
ERASE_NEXT: 
       ADD DH,[DI+2]
       ADD DL,[DI+3]
       MOV AH,2
       INT 10H
       MOV AL,[DI]
       MOV BL,0
       PUSH CX
       MOV CX,1
       MOV AH,9
       INT 10H
       POP CX
       ADD DI,4
       LOOP ERASE_NEXT
       MOV CX,CHAR_CNT
       MOV DI,POINTER
       MOV DH,LINE_ON
       INC COL_ON
       MOV DL,COL_ON
       RET
ERASE  ENDP
  bus endp
;######################
code ends
         end       start

⌨️ 快捷键说明

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