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

📄 smi.asm

📁 移动的笑脸的汇编程序
💻 ASM
字号:
DATA   SEGMENT
STR    DB 0dh,0AH,' Thanks for watching,Copyright:Software 0405 No.06 Briant $'
STR1   DB 0DH,0AH,' Would you like to see again(y/n):$'
STR2   DB 0DH,0AH,' What you input is wrong,must be (y) or (n)!$'
SMI    DB 1                   
       DB 2,7,0,0
       CHAR_CNT DW ?
       POINTER DW ?
       LINE_ON DB ?
       COL_ON DB ?
DATA   ENDS

CODE 	SEGMENT
        ASSUME	CS:CODE,DS:DATA
MAIN    PROC    FAR
t1:     PUSH	DS
	SUB	AX,AX
	PUSH	AX
	MOV	AX,DATA
	MOV	DS,AX
	CALL  CLEAR_SCREEN
	LEA	DI,SMI

       MOV	DH,5
	MOV	DL,5
	CALL	MOVE_SHAPE

        MOV	AH,0
        MOV	AL,02
	INT	10H
        LEA     DX,STR
        MOV	AH,9
        INT	21H

t3:     LEA     DX,STR1
        MOV	AH,9
        INT	21H

        MOV	AH,01H
        INT	21H
    
        CMP	AL,79H
        JE	t1 
        CMP     AL,6EH
        JE	t2
        
        LEA     DX,STR2
        MOV	AH,9
        INT	21H
        JMP	T3
t2:	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_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,80
	JB	MOVE_CRSR
	CALL	ERASE
	POP 	DI
	POP	DX
	POP	CX
	POP	BX
	POP	AX
	RET
MOVE_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

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 
        call    rand    
	MOV	DH,LINE_ON      
	INC	COL_ON
	MOV	DL,COL_ON
	RET
ERASE 	ENDP

RAND 	PROC    NEAR
	PUSH 	CX		
	PUSH 	DX
	PUSH 	AX
	MOV 	AH,0
	INT 	1AH
	MOV 	AX,DX
	AND 	Ax,00ffh
	MOV 	DL,3 
	DIV 	DL
	MOV 	BL,AH 
    dec 	bl
    sub     line_on,bl
	POP 	AX
	POP 	DX
	POP 	CX
	RET
RAND ENDP

DLY_QRTR	PROC	NEAR
	PUSH	CX
	PUSH	DX
	MOV	DX,10000
DL1:	MOV 	CX,6801
DL2:	LOOP	DL2
	DEC	DX
	JNZ	DL1
	POP	DX
	POP	CX
        RET
DLY_QRTR	ENDP
CODE	ENDS
	END	MAIN	

	

⌨️ 快捷键说明

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