📄 03.asm
字号:
data_seg segment
car db 2
db 40h,0bh,0,0
db 02ah,0bh,0,1
jeep db 2
db 40h,0bh,0,0
db 02ah,0bh,0,-1
star db 2
db 40h,0bh,0,0
db 02ah,0,0,1
star1 db 2
db 40h,0bh,0,0
db 02ah,0,0,-1
star2 db 26
db 40h,0bh,0,0
db 02ah,0bh,0,1
db 40h,0bh,-1,-3
db 02ah,0bh,0,1
db 40h,0bh,2,-1
db 02ah,0bh,0,1
db 40h,0bh,1,-3
db 02ah,0bh,0,1
db 40h,0bh,-4,-1
db 02ah,0bh,0,1
db 40h,0bh,-1,-3
db 02ah,0bh,0,1
db 40h,0bh,6,-1
db 02ah,0bh,0,1
db 40h,0bh,1,-3
db 02ah,0bh,0,1
db 40h,0bh,-8,-1
db 02ah,0bh,0,1
db 40h,0bh,-1,-3
db 02ah,0bh,0,1
db 40h,0bh,10,-1
db 02ah,0bh,0,1
db 40h,0bh,1,-3
db 02ah,0bh,0,1
db 40h,0bh,-12,-1
db 02ah,0bh,0,1
star3 db 26
db 40h,0bh,0,0
db 02ah,0bh,0,-1
db 40h,0bh,-1,3
db 02ah,0bh,0,-1
db 40h,0bh,2,1
db 02ah,0bh,0,-1
db 40h,0bh,1,3
db 02ah,0bh,0,-1
db 40h,0bh,-4,1
db 02ah,0bh,0,-1
db 40h,0bh,-1,3
db 02ah,0bh,0,-1
db 40h,0bh,6,1
db 02ah,0bh,0,-1
db 40h,0bh,1,3
db 02ah,0bh,0,-1
db 40h,0bh,-8,1
db 02ah,0bh,0,-1
db 40h,0bh,-1,3
db 02ah,0bh,0,-1
db 40h,0bh,10,1
db 02ah,0bh,0,-1
db 40h,0bh,1,3
db 02ah,0bh,0,-1
db 40h,0bh,-12,1
db 02ah,0bh,0,-1
char_cnt1 dw ?
pointer1 dw ?
line_on1 db ?
col_on1 db ?
char_cnt2 dw ?
pointer2 dw ?
line_on2 db ?
col_on2 db ?
char dw ?
col db ?
col0 db ?
col00 db ?
col01 db ?
count db ?
count0 db ?
count1 db ?
count2 db ?
char0 db ?
char1 db ?
char01 db ?
char2 db ?
line1 db ?
col1 db ?
pot1 dw ?
line2 db ?
col2 db ?
pot2 dw ?
count_cx db ?
data_seg ends
;---------------------------------------
code_seg segment
assume cs:code_seg,ds:data_seg
main proc far
push ds
sub ax,ax
sub cx,cx
push ax
push cx
mov ax,data_seg
mov ds,ax
mov col,2
mov col0,2
mov col01,2
mov char0,2
mov char01,2
mov count,5
mov char1,76
mov char2,2
mov count0,4
mov count1,2
mov count_cx,2
again:
lea di,star
mov dh,3
mov dl,2
call move_shape
dec count0
lea di,star1
mov dh,17
mov dl,76
call move_shape
dec count0
lea di,jeep
mov dh,4
mov dl,2
call move_shape
dec count0
lea di,car
mov dh,16
mov dl,76
call move_shape
;------------------------------
mov count0,13
again1:
mov col,2
mov col0,2
mov col01,2
mov char0,2
mov char01,2
mov count,5
mov char1,76
mov char2,2
mov count1,2
mov count_cx,2
lea di,star2
mov dh,10
mov dl,40
call move_shape1
lea di,star3
mov dh,10
mov dl,38
call move_shape2
call must_2
dec count0
jne again1
pop cx
ret
main endp
;----------------------------
clear_screen proc near
push ax
push bx
push cx
push dx
mov ah,6
mov al,0
mov ch,0
mov cl,0
mov dh,24
mov dl,79
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
mov cl,[di]
inc di
mov char_cnt1,cx
mov pointer1,di
mov line_on1,dh
mov col_on1,dl
plot_next:
add dh,[di+2]
add dl,[di+3]
cmp count0,3
je exit2
cmp count0,2
je exit9
cmp count0,1
je exit10
cmp dl,78
jb mov_crsr
jmp exit1
exit2: cmp dl,1
jnb mov_crsr
jmp exit1
exit9: cmp dh,17
jb mov_crsr
jmp exit1
exit10: cmp dh,3
ja mov_crsr
exit1: 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
exit4: dec count
je exit3
call dly_qrtr
jmp exit4
exit3: call erase
mov count,5
jmp short plot_next
move_shape endp
;----------------------------------------
;-------------------------------------
move_shape1 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_cnt1,cx
mov pointer1,di
mov line_on1,dh
mov col_on1,dl
mov char,cx
pop di
pop dx
pop cx
pop bx
pop ax
ret
move_shape1 endp
;----------------------------
move_shape2 proc near
push ax
push bx
push cx
push dx
push di
mov ah,0fh
int 10h
sub ch,ch
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -