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

📄 12.asm

📁 能在DOS里显示字体,并且字体可以移动,移动时改变颜色,也用中断控制速度
💻 ASM
字号:
  DATA  SEGMENT
          car      db 238                ;定义字符图形表
          db 2ah,50,0,1
          db 2ah,50,0,1
          db 2ah,50,0,1
          db 2ah,50,0,1
          db 2ah,50,0,1
          db 2ah,50,0,1
          db 2ah,50,0,-3
          db 2ah,50,1,0
          db 2ah,50,1,0
          db 2ah,50,1,0
          db 2ah,50,0,-2
          db 2ah,50,0,1
          db 2ah,50,0,1
          db 2ah,50,0,1
          db 2ah,50,0,1
          db 2ah,50,0,1
          db 2ah,50,0,-3
          db 2ah,50,0,1
          db 2ah,50,0,1
          db 2ah,50,0,-2
          db 2ah,50,1,0
          db 2ah,50,1,0
          db 2ah,50,1,0
          db 2ah,50,0,-2
          db 2ah,50,0,1
          db 2ah,50,0,1
          db 2ah,50,0,1
          db 2ah,50,0,1
          db 2ah,50,0,1
          db 2ah,50,-7,2
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,-3
db 2ah,50,1,0
db 2ah,50,1,0
db 2ah,50,1,0
db 2ah,50,-3,-3
db 2ah,50,1,0
db 2ah,50,1,0
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,-2,1
db 2ah,50,1,0
db 2ah,50,1,0
db 2ah,50,1,0
db 2ah,50,1,0
db 2ah,50,0,-1
db 2ah,50,0,-1
db 2ah,50,0,-1
db 2ah,50,0,-1
db 2ah,50,0,-1
db 2ah,50,0,-1
db 2ah,50,-1,0
db 2ah,50,1,0
db 2ah,50,1,3
db 2ah,50,1,-2
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,1,-2
db 2ah,50,1,-3
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,-7,2
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,-3
db 2ah,50,1,0
db 2ah,50,1,0
db 2ah,50,1,0
db 2ah,50,1,0
db 2ah,50,1,0
db 2ah,50,1,0
db 2ah,50,1,0
db 2ah,50,0,-3
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,-7,3
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,-1,-3
db 2ah,50,1,0
db 2ah,50,1,0
db 2ah,50,1,0
db 2ah,50,1,-1
db 2ah,50,1,-1
db 2ah,50,1,-1
db 2ah,50,1,-1
db 2ah,50,-4,4
db 2ah,50,1,1
db 2ah,50,1,1
db 2ah,50,1,1
db 2ah,50,1,1
db 2ah,50,-7,3
db 2ah,50,0,2
db 2ah,50,0,2
db 2ah,50,1,2
db 2ah,50,1,0
db 2ah,50,-1,-1
db 2ah,50,0,-1
db 2ah,50,0,-1
db 2ah,50,0,-1
db 2ah,50,0,-1
db 2ah,50,0,-1
db 2ah,50,0,-1
db 2ah,50,1,0
db 2ah,50,1,2
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,1,-1
db 2ah,50,1,-1
db 2ah,50,1,0
db 2ah,50,1,0
db 2ah,50,1,0
db 2ah,50,1,0
db 2ah,50,0,-1
db 2ah,50,-3,-2
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
COLOR DB 80,100,140,160,220,20,30,55,60,75,100


      CHAR_CNT  DW        ?

        POINTER  DW        ?

        LINE_ON  DB        ?

        COL_ON  DB        ?
        

        DATA  ENDS

        STACK  SEGMENT

               DB       2040 DUP (0)

        STACK  ENDS

        CODE  SEGMENT

              ASSUME    CS:CODE,DS:DATA

        MAIN  PROC      FAR

              PUSH      DS

              SUB     AX,AX

              PUSH   AX

              MOV    AX,DATA     ;初始化DS

              MOV    DS,AX

              MOV    AH,0   ;设置300*204彩色图形方式

              MOV    AL,03H
            

              INT     10H

              MOV    AH,0BH      ;设置背景颜色

              MOV    BH,0

              MOV    BL,2

              INT     10H
              MOV    AH,0BH      ;设置彩色调板

              MOV    AL,0

              MOV    BL,10H

              INT      10H

             CALL     CLEAR_SCREEN       ;清屏

              LEA      DI,CAR      ;di指向字符图形表

              LEA      SI,COLOR
             

              MOV     DH,10    ;从第5行第5列位置开始

              MOV     DL,-98       ;显示汽车

        START:

CALL      MOVE_SHAPE
	
                 INC SI   
              JMP START
             RET

      MAIN  ENDP

      CLEAR_SCREEN  PROC  NEAR      ;清屏子程序

              PUSH      AX          ;保护寄存器

              PUSH      BX
              PUSH      CX
              PUSH      DX

              MOV       AH,6        ;屏幕上卷功能

              MOV       AL,6

              MOV       CH,0        ;左上角行号

              MOV       CL,0        ;左上角列号

              MOV       DH,250      ;右下角行号

              MOV       DL,204      ;右下角列号

              MOV       BH,7        ;卷入行属性

              INT       10H         ;调用显示功能


              POP       DX          ;恢复寄存器

              POP       CX

              POP       BX

              POP       AX

              RET                   ;返回主程序

     CLEAR_SCREEN  ENDP

     MOVE_SHAPE  PROC      NEAR

              PUSH      AX

              PUSH      BX

              PUSH      CX

              PUSH      DX

              PUSH      DI

              MOV      AH,0FH      ;取当前显示方式

              INT       10H

              SUB      CH,CH  ;清除寄存器CX的高字节

              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,204      ;出屏否?
              JB        MOV_CRSR

              CALL      ERASE
              POP       DI
              POP       DX

              POP       CX

              POP       BX

              POP       AX

              RET
MOV_CRSR:

              MOV       AH,2        ;移动光标位置

              INT       10H

              MOV       AL,[DI]
              MOV       BL,[SI]   ;取字符值及属性
             

              PUSH      CX

              MOV       CX,1

              MOV       AH,09       ;显示字符

              INT       10H
             

              POP       CX

              ADD       DI,4 
           
                                  ;di指向下一个字
           LOOP      PLOT_NEXT
           CALL      DLY_QRTR   ;调用延时
           CALL      ERASE ;调用擦除子程序
           JMP       SHORT PLOT_NEXT
           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
MOV AH,0BH;;;;
INT 21H;;;;;;;;;;
INC AL;;;;;;;;;;;;;
JZ WAIT1;;;;;;;;;;
    WAIT2:        DEC COL_ON 

WAIT1:   
           MOV       DL,COL_ON

              RET
       ERASE  ENDP

      DLY_QRTR  PROC      NEAR       ;延时子程序

              PUSH      CX  

              PUSH      DX
  MOV       DX,5000

        D11:  MOV       CX,20400
              

        D12:  LOOP      D12

              DEC       DX

              JNZ       D11

              POP       DX

              POP       CX
cmp al," "     ;如果键入SPACE,则游戏暂停 
je pause 
 
pass:    pop cx 
inc cx 
pause:   push dx        ;暂停处理 
mov ah,06h 
mov dl,0ffh 
int 21h 
pop dx 
cmp al," " 
jne pause 
jmp pass 

            
              RET

    DLY_QRTR  ENDP




CODE  ENDS
END       MAIN

⌨️ 快捷键说明

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