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

📄 movecar.asm

📁 一个小程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
DATA   SEGMENT
            SET_LINE                               DW    100                   ;车身左上角的行号
            SET_ROW                              DW    100                   ;车身左上角的列号
            WHEEL_RADIUS                    DW    10                     ;车轮半径
            COLOR                                    DW     15                    ;车身颜色
            BKCOLOR                               DW     1                      ;背景色
            WHEEL_FLAG                        DB      4                      
            FLAG_RADIUS                        DW    1
DATA    ENDS

CODE   SEGMENT
             ASSUME CS:CODE,DS:DATA
START: 
            MOV              AX,DATA
            MOV              DS,AX
            MOV              AX,0A000H
            MOV              ES,AX

            MOV              AX,0012H
            INT               10H	               ;设置640*480*16图形模式

            MOV              AL,2
            CALL             SET_WRITE_MODE	;将写模式设为写模式2

            MOV              AX,BKCOLOR
            CALL             CLEAR		;将背景清成蓝色

            CALL             CAR_
WAIT_IN:
             MOV             AH, 08H                         ;程序暂停,等待键入
             INT               21H        
SPEAKER:
             CMP             AL, 53H                 ;S键喇叭
             JNE              FORWARD
             CALL            SOUNDF
FORWARD:                                            ;D 键向前
             CMP             AL, 44H                     
             JNE              BACK
             MOV             DX, COLOR
             MOV             BX, BKCOLOR
             MOV             COLOR, BX
             CALL            CAR_                     ; 将车身颜色与背景色一致,重画车身,达到擦除目的
             DEC              WHEEL_FLAG       ; 控制车轮上圆点的位置
             JNZ              A
             MOV             WHEEL_FLAG, 4      
A:
             ADD             SET_ROW, 5         ;每次移位5
             MOV             COLOR, DX
             CALL            CAR_
BACK:                                            ;A键向后
             CMP            AL, 41H                     
             JNE             EXIT
             MOV            DX, COLOR
             MOV            BX, BKCOLOR
             MOV            COLOR, BX
             CALL           CAR_
             INC              WHEEL_FLAG
             CMP            WHEEL_FLAG, 4
             JBE             B
             MOV            WHEEL_FLAG, 1      
B:
             SUB            SET_ROW, 5
             MOV            COLOR, DX
             CALL           CAR_
EXIT:     
             CMP            AL, 51H                       ;Q 键退出
             JNE             WAIT_IN
             MOV            AH, 4CH
             INT              21H


;************************汽车子程序*************************** 
CAR_      PROC      NEAR                 
;***********画车身********************************************** 
TOP:
            PUSH           SET_ROW
            PUSH           SET_LINE
            ADD              SET_ROW, 200
            PUSH           SET_ROW
            SUB             SET_ROW, 200
            PUSH           SET_LINE
            CALL LINE		;直接调用画线函数
BOTTOM:
            ADD            SET_LINE, 50
            PUSH          SET_ROW            
            PUSH          SET_LINE
            ADD            SET_ROW, 40
            PUSH         SET_ROW
            PUSH         SET_LINE
            CALL LINE		;直接调用画线函数
            ADD           SET_ROW, 20
            PUSH        SET_ROW            
            PUSH        SET_LINE
            ADD           SET_ROW, 80
            PUSH        SET_ROW
            PUSH        SET_LINE
            CALL LINE		;直接调用画线函数
            ADD          SET_ROW, 20
            PUSH        SET_ROW            
            PUSH        SET_LINE
            ADD           SET_ROW, 40
            PUSH        SET_ROW
            PUSH        SET_LINE
            CALL         LINE		;直接调用画线函数
            SUB          SET_LINE, 50
            SUB          SET_ROW, 200
LEFT:
            PUSH        SET_ROW
            PUSH        SET_LINE
            PUSH        SET_ROW
            ADD          SET_LINE, 50
            PUSH        SET_LINE
            SUB          SET_LINE, 50
            CALL LINE		;直接调用画线函数        
RIGHT:
             ADD         SET_ROW, 200
             PUSH       SET_ROW
             PUSH       SET_LINE
             PUSH       SET_ROW
             SUB         SET_ROW, 200
             ADD         SET_LINE, 50
             PUSH       SET_LINE
             SUB         SET_LINE, 50
             CALL LINE		;直接调用画线函数

;********************画车轮***********************************
             ADD          SET_LINE, 50
             ADD          SET_ROW, 50
             PUSH        SET_ROW
             PUSH        SET_LINE
             PUSH        WHEEL_RADIUS
             CALL         CIRCLE
             ADD           SET_ROW, 100
             PUSH        SET_ROW
             PUSH        SET_LINE
             PUSH        WHEEL_RADIUS
             CALL         CIRCLE
             SUB          SET_LINE, 50
             SUB          SET_ROW, 150
                
LEFT_SE:                                                    ; 画左轮上的四个点,点根据标志依次显示   
             CMP          WHEEL_FLAG, 4
            JNE            LEFT_SW
            ADD           SET_ROW, 53
            ADD           SET_LINE, 54
            PUSH         SET_ROW
            PUSH         SET_LINE
            PUSH         FLAG_RADIUS
            SUB           SET_ROW, 53
            SUB           SET_LINE,  54
            CALL          CIRCLE
            JMP            RIGHT_SE
LEFT_SW:   
            CMP           WHEEL_FLAG, 3
            JNE            LEFT_NW
            ADD           SET_ROW, 47
            ADD           SET_LINE, 54
            PUSH         SET_ROW
            PUSH         SET_LINE
            PUSH         FLAG_RADIUS
            SUB           SET_ROW, 47
            SUB           SET_LINE,  54
            CALL          CIRCLE
            JMP           RIGHT_SE
LEFT_NW:         
             CMP          WHEEL_FLAG, 2
             JNE           LEFT_NE
             ADD           SET_ROW, 47
             ADD           SET_LINE, 46
             PUSH         SET_ROW
             PUSH         SET_LINE
             PUSH         FLAG_RADIUS
             SUB           SET_ROW, 47
             SUB           SET_LINE,  46
             CALL          CIRCLE
             JMP           RIGHT_SE
LEFT_NE:         
             CMP           WHEEL_FLAG, 1
             JNE            RIGHT_SE   
              ADD           SET_ROW, 53
              ADD           SET_LINE, 46
              PUSH         SET_ROW
              PUSH         SET_LINE
              PUSH         FLAG_RADIUS
              SUB           SET_ROW, 53
              SUB           SET_LINE,  46
             CALL           CIRCLE    
RIGHT_SE:                                                    ;  画右轮上的四个点,点根据标志依次显示
              CMP            WHEEL_FLAG, 4
              JNE             RIGHT_SW
              ADD             SET_ROW, 153
              ADD             SET_LINE, 54
              PUSH           SET_ROW
              PUSH           SET_LINE
              PUSH           FLAG_RADIUS
              SUB             SET_ROW, 153
              SUB             SET_LINE,  54
              CALL            CIRCLE
              JMP             DOOR_LEFT
RIGHT_SW:   
              CMP             WHEEL_FLAG, 3
              JNE              RIGHT_NW
              ADD             SET_ROW, 147
              ADD             SET_LINE, 54
              PUSH           SET_ROW
              PUSH           SET_LINE
              PUSH           FLAG_RADIUS
              SUB             SET_ROW, 147
              SUB             SET_LINE,  54
              CALL            CIRCLE
              JMP              DOOR_LEFT
RIGHT_NW:         
              CMP              WHEEL_FLAG, 2
               JNE              RIGHT_NE
               ADD              SET_ROW, 147
               ADD              SET_LINE, 46
               PUSH            SET_ROW
               PUSH            SET_LINE
               PUSH            FLAG_RADIUS
               SUB              SET_ROW, 147
               SUB              SET_LINE,  46
               CALL             CIRCLE
               JMP              DOOR_LEFT
RIGHT_NE:         
               CMP             WHEEL_FLAG, 1
               JNE              DOOR_LEFT   
               ADD              SET_ROW, 153
               ADD              SET_LINE, 46
               PUSH           SET_ROW
               PUSH           SET_LINE
               PUSH           FLAG_RADIUS
               SUB             SET_ROW, 153
               SUB             SET_LINE,  46
               CALL            CIRCLE    
;*********************画车门************************************
DOOR_LEFT:
                ADD             SET_ROW, 165
                PUSH          SET_ROW
                PUSH          SET_LINE
                PUSH          SET_ROW
                SUB             SET_ROW, 165
                ADD             SET_LINE, 50
                PUSH          SET_LINE
                SUB            SET_LINE, 50
                CALL           LINE

DOOR_RIGHT:
                ADD              SET_ROW, 190
                PUSH           SET_ROW
                PUSH           SET_LINE
                PUSH           SET_ROW
                SUB              SET_ROW, 190
                ADD               SET_LINE, 50
                PUSH            SET_LINE
                SUB              SET_LINE, 50
                CALL             LINE

;***************************画车窗***********************
                PUSH           SET_ROW
                ADD              SET_LINE, 25
                PUSH            SET_LINE
                ADD              SET_ROW, 165
                PUSH            SET_ROW
                SUB              SET_ROW, 165
                PUSH            SET_LINE
                SUB              SET_LINE, 25
                CALL             LINE
             RET
CAR_      ENDP

;*********************************汽车喇叭***********************************
;produces a tone of a specified frequency
SOUNDF proc near 
     push ax
     push bx
     push cx
     push dx
     push di
     mov al,0b6h     ;write timer mode reg
     out 43h,al
     mov di, 100 
     mov dx,12h      ;timer divisor
     mov ax,348ch    ;1193100hz/frzq
     div di          ;value of frzq
     out 42h,al      ;write timer2 count low byte
     mov al,ah
     out 42h,al      ;write timer2 count low byte
     in   al,61h
     mov ah,al
     or   al,3
     out 61h,al
     mov bx,100
wait1:
     mov cx,633

⌨️ 快捷键说明

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