www.pudn.com > AUTOCAR.rar > AUTOCAR.asm


DISP    MACRO  ADDR 
            LEA DX,ADDR 
            MOV AH,09H 
            INT   21H 
            ENDM 
INPT    MACRO 
            MOV AH,01H 
            INT  21H 
            ENDM 
;********************设置汽车公路的相关数据******************  
STACK SEGMENT STACK 
            DB 256 DUP(?) 
TOP     LABEL WORD 
STACK ENDS 
DATA  SEGMENT  
CAR    DB 5 DUP(20H)    ;汽车图形数据  
           DW     0DBDBH  
           DB      154 DUP(20H)  
           DW     0DBDBH  
           DB      20H  
           DW     0DBDBH  
           DB      20H  
           DW     0DBDBH  
           DB      20H  
           DW     0DBDBH  
           DB      151 DUP(20H),4FH,5 DUP(20H),4FH  
LENCAR  DW 330           ;汽车显示总长度  
ROAD  DW 80 DUP(01616H) ;公路图形数据  
LENROAD DB 80           ;公路显示总长度  
YQZ    DB '                     WELCOME TO PROGRAM OF  YOUNGER!' 
           DB  0DH,0AH,'                          PRESS ANY KEY TO BEGIN!$' 
ZQY    DB 0DH,0AH,0DH,0AH,0DH,0AH,'                    PRESS ANY KEY TO EXIT!$' 
DATA ENDS  
;**************************************************************  
 
 
;**************************程序代码区**************************  
CODE   SEGMENT  
ASSUME CS:CODE,DS:DATA ,SS:STACK 
START: MOV AX,DATA   ;程序开始  
             MOV DS,AX  
             LEA BP,CAR                  ;将汽车数据传给显示入口  
             MOV ES,AX  
             MOV AX,STACK 
             MOV SS,AX 
             MOV SP,OFFSET TOP 
             DISP   YQZ 
             INPT 
             MOV CX,69D                 ;69祯画面  
             MOV DH,6D                  ;第6行  
             MOV DL,00H                 ;第0列  
S0:                                             ;动画  
CALL     CARDISPLAY                ;画汽车  
             INC DL                          ;向后移一列  
CALL     DELAY                         ;停留一小段时间  
LOOP    S0                                ;如果没到第69祯,继续画  
EXIT:     DISP   ZQY                  ;返回DOS  
             INPT 
             MOV AX,4C00H  
             INT 21H  
;**************************显示汽车子程序**********************  
CARDISPLAY PROC NEAR  
CALL     CLEAR                           ;清屏  
             PUSH DX  
             PUSH CX  
             MOV CX,LENCAR           ;设置显示汽车长度  
             MOV BH,00H                  ;第0页  
             MOV BL,0F9H                 ;白色背景(F) 蓝色前景(9)  
             MOV AX,1301H               ;显示汽车  
             INT 10H   
             POP CX  
             POP DX  
             RET  
CARDISPLAY ENDP  
;**************************************************************  
 
;***************************清屏子程序*************************  
CLEAR  PROC NEAR  
             PUSH AX                        ;保存寄存器内容  
             PUSH BX  
             PUSH CX  
             PUSH DX  
             PUSH BP  
             PUSH ES  
 
             MOV AX,0600H              ;AH=06(滚动) AL=00(全屏空白)  
             MOV BH,0F0H               ;黑色背景(0) 白色前景(F)  
             SUB CX,CX                    ;左上角行:列   
             MOV DX,184FH             ;右下角行:列  
             INT 10H  
             MOV DH,11D                ;第11行  
CALL     ROADDISPLAY  
             MOV DH,12D                ;第12行  
CALL     ROADDISPLAY  
             POP ES                         ;恢复寄存器内容  
             POP BP  
             POP DX  
             POP CX  
             POP BX  
             POP AX  
             RET  
CLEAR  ENDP  
;**************************************************************   
 
;**************************显示子程序2*************************   
ROADDISPLAY PROC NEAR  
             MOV AX,DATA  
             MOV DS,AX  
 
             LEA BP,ROAD               ;将公路数据传给显示入口  
             MOV ES,AX  
 
             MOV DL,00H                 ;第0列  
             MOV CH,00H  
             MOV CL,LENROAD        ;设置显示公路长度  
             MOV BH,00H                 ;第0页  
             MOV BL,0F5H                ;白色背景(F) 棕色前景(9)  
             MOV AX,1301H              ;显示公路  
             INT 10H  
             RET   
ROADDISPLAY ENDP  
;**************************************************************  
 
;***************************延时子程序*************************  
DELAY PROC  
             PUSH CX                       ;保存寄存器内容  
             PUSH DX   
   
             MOV DX,0FFFH  
UP:       XOR CX,CX                    ;延时   
A:          LOOP A  
             DEC DX   
             JNZ UP  
             POP DX                         ;恢复寄存器内容  
             POP CX  
             RET                               ;返回  
DELAY  ENDP  
;**************************************************************  
 
CODE   ENDS  
             END START                   ;程序结束  
;**************************************************************