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

📄 flycar.asm

📁 已编译通过的简单的显示例程,对初学者会很有帮助,如果好好看看的话.
💻 ASM
字号:
;******************************************************
;* 堆栈段 
;******************************************************
STACK SEGMENT STACK
    STACK_BUF DW 120 dup(?)
    TOP EQU $-STACK_BUF
STACK ENDS
;******************************************************
;* 数据段 
;******************************************************
DATA SEGMENT PARA
;------------------------------------------------------
; TODO: 数据的定义及存储器的分配
;------------------------------------------------------
car DB 7
    DB 52h,70h,0,0
    DB 0b1h,70h,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 ?                    
DATA ENDS
;******************************************************
;* 代码段 
;******************************************************
CODE SEGMENT PARA
;------------------------------------------------------
MAIN PROC far
    ASSUME cs:CODE,ds:DATA
    ASSUME ss:STACK
START:
    MOV ax,STACK
    MOV ss,ax
    MOV sp,TOP
    MOV ax,DATA
    MOV ds,ax
;------------------------------------------------------
; TODO: 从这里开始您的代码
;------------------------------------------------------
    CALL clear_screen
    LEA di,car
    MOV dh,10
    MOV dl,10
    CALL MOVe_shape    
    MOV ax,4C00H
    INT 21H
MAIN ENDP 
;------------------------------------------------------
clear_screen PROC near
    PUSH ax
    PUSH bx
    PUSH cx
    PUSH dx
    MOV ah,6
    MOV al,0
    MOV cx,0
    MOV dh,24
    MOV dl,79
    MOV bh,5
    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
    MOV cl,[di]
    INC di
    MOV char_cnt,cx
    MOV pointer,di
    MOV line_on,dh
    MOV col_on,dl
    ;These instructions plot the shape on the screen
plot_next:
    ADD dh,[di+2]
    ADD dl,[di+3]
    CMP dl,80
    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,[di+1]
    PUSH cx
    MOV cx,1
    MOV ah,09
    INT 10h
    POP cx
    ADD di,4
    LOOP plot_next
    CALL dly_qrtr
    CALL erase
    JMP short plot_next
MOVe_shape ENDP
;-------------------------------------------------
;this procedure erases a shape by reploting it
;with attribute=0
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
;-----------------------------------------
;this procedure generate a one_quarter second delay
dly_qrtr PROC near
    PUSH cx
    PUSH dx
    MOV dx,1500
dl1:
    MOV cx,2801
dl2:
    LOOP dl2
    DEC dx
    JNZ dl1                                               
    POP dx
    POP cx
    RET
dly_qrtr ENDP                                        
;------------------------------------------------------
CODE ENDS
;******************************************************
    END START    ;程序结束

⌨️ 快捷键说明

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