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

📄 ex61.asm

📁 点阵放大汇编程序 功能强大啊! 可以任意放大倍数(1-12)
💻 ASM
字号:
;
STACK	SEGMENT	PARA STACK 'STACK'
	DB 256 DUP(0)
STACK	ENDS
;;
DATA	SEGMENT PARA PUBLIC 'DATA'
DAT	DB	00H,00H,02H,00H,02H,04H,02H,08H
	DB	02H,10H,02H,20H,02H,40H,02H,80H
	DB	7FH,00H,02H,80H,02H,40H,02H,20H
	DB	02H,10H,02H,0aH,02H,06H,02H,0eH
DAT1	DB	00H,00H,01H,00H,01H,00H,01H,00H
	DB	01H,00H,01H,00H,01H,00H,0FFH,0FEH
	DB	01H,00H,02H,80H,04H,40H,08H,20H
	DB	10H,10H,0A0H,08H,0C0H,04H,0E0H,02H
DAT2	DB	0E0H,80H,0C0H,80H,0A0H,80H,10H,80H
	DB	08H,80H,04H,80H,02H,80H,01H,0FEH
	DB	02H,80H,04H,80H,08H,80H,10H,80H
	DB	20H,80H,40H,80H,80H,80H,00H,00H
DAT3	DB	40H,07H,20H,03H,10H,05H,08H,08H
	DB	04H,10H,02H,20H,01H,40H,00H,80H
	DB	7FH,0FFH,00H,80H,00H,80H,00H,80H
	DB	00H,80H,00H,80H,00H,80H,00H,00H
PARM	DB	10H DUP(0)
LOC	DB	0,0
	DB	0,0
	DB	4,4
TURN	DB	0
	DW	16
DATA	ENDS
;
CODE	SEGMENT PARA PUBLIC 'CODE'
	ASSUME	CS:CODE
	ASSUME	SS:STACK
	ASSUME	ES:DATA
START:	MOV	AX,DATA
	MOV	ES,AX
	MOV	SI,80H
	MOV	DI,OFFSET PARM
	MOVSB
	MOVSB
	MOVSB
;
	ASSUME	DS:DATA
	MOV	DS,AX
	MOV	AL,6
	CALL	SETMODE

LOOP:	CALL	READ
	CALL	CLEAR
	MOV	DI,OFFSET TURN
	MOV	WORD PTR [DI+1],16
	CMP	BYTE PTR [DI],0
	JNZ	SKP1
	MOV	SI,OFFSET DAT
	JMP	DIS
SKP1:	CMP	BYTE PTR [DI],1
	JNZ	SKP2
	MOV	SI,OFFSET DAT1
	ADD	DI,32
	JMP	DIS
SKP2:	CMP	BYTE PTR [DI],2
	JNZ	SKP3
	MOV	SI,OFFSET DAT2
	JMP	DIS
SKP3:	MOV	SI,OFFSET DAT3

DIS:	CALL	DISPLAY
	JMP	LOOP
;

READ	PROC	NEAR		;读参数
	CMP	PARM,2
	JZ	SK1
	MOV	AH,0
	INT	16H
	JMP	SKIP
SK1:	MOV	AL,PARM+2
	MOV	DI,OFFSET PARM
	MOV	BYTE PTR [DI],0
SKIP:	CMP	AH,10H		;Q退出
	JNZ	SKIP1
	MOV	AL,2
	MOV	AH,0
	INT	10H
	MOV	AH,4CH	
	INT	21H

SKIP1:	CMP	AH,0dH		;+放大
	JNZ	SKIP2
	MOV	DI,OFFSET LOC
	INC	BYTE PTR [DI+4]
	JMP	RDEN

SKIP2:	CMP	AH,0CH		;-减小
	JNZ	SKIP3
	MOV	DI,OFFSET LOC
	DEC	BYTE PTR [DI+4]
	JMP	RDEN

SKIP3:	CMP	AH,4DH		;右移
	JNZ	SKIP4
	CALL	RIGHT
	JMP	READ

SKIP4:	CMP	AH,4BH		;左移
	JNZ	SKIP5
	CALL	LEFT
	JMP	READ

SKIP5:	CMP	AH,48H		;上移
	JNZ	SKIP6
	CALL	UP
	JMP	READ

SKIP6:	CMP	AH,50H		;下移
	JNZ	SKIP7
	CALL	DWN
	JMP	READ

SKIP7:	CMP	AH,2BH		;旋转
	JNZ	SK2
	MOV	DI,OFFSET TURN
	INC	BYTE PTR [DI]
	CMP	BYTE PTR [DI],4
	JC	SKIP8
	SUB	BYTE PTR [DI],4
SKIP8:	JMP	RDEN

SK2:	CMP	AL,31H		;0到9
	JNC	NEXT
	JMP	READ
NEXT:	CMP	AL,3AH
	JNC	SK3
	AND	AL,0FH
	JMP	SK4

SK3:	CMP	AL,41H		;A到C
	JNC	NEXT1
	JMP	READ
NEXT1:	CMP	AL,44H
	JC	NEXT2
	JMP	READ
NEXT2:	SUB	AL,37H
SK4:	MOV	DI,OFFSET LOC
	MOV	[DI+4],AL

RDEN:	RET
READ	ENDP
;
DISPLAY:
	MOV	CX,0
	MOV	DX,0
	MOV	DI,OFFSET LOC
	MOV	[DI],CX
	MOV	[DI+2],DX

LP:	MOV	CX,[DI]
	MOV	DX,[DI+2]
	MOV	BL,[DI+4]
	CMP	BL,01
	JNC	LPS1
	MOV	BL,01
	MOV	[DI+4],BL
	JMP	LPS2
LPS1:	CMP	BL,0DH
	JC	LPS2
	MOV	BL,0CH
	MOV	[DI+4],BL

LPS2:	MOV	[DI+5],BL
	INC	SI
LPA:	MOV	CX,[DI]
	DEC	SI
	MOV	AH,[SI]
	MOV	BH,8

	LP1:	ROL	AH,1
		MOV	AL,0
		ADC	AL,0
		MOV	BL,[DI+4]

			LP1B:	CALL	SETXY
				INC	CX
				CALL	SETXY
				INC	CX
				DEC	BL
				JNZ	LP1B
		DEC	BH
		JNZ	LP1

	INC	SI
	MOV	AH,[SI]
	MOV	BH,8

	LP2:	ROL	AH,1
		MOV	AL,0
		ADC	AL,0
		MOV	BL,[DI+4]

			LP2B:	CALL	SETXY
				INC	CX
				CALL	SETXY
				INC	CX
				DEC	BL
				JNZ	LP2B			
		DEC	BH
		JNZ	LP2
	
	INC	DX
	MOV	[DI+2],DX
	DEC	BYTE PTR [DI+5]
	JNZ	LPA

	INC	SI
	DEC	WORD PTR [DI+7]
	JNZ	LP

DISEND:	RET
;
CLEAR:	MOV	AL,6		;清屏
	CALL	SETMODE
	RET
;
SETMODE	PROC	NEAR
	PUSH	AX
	MOV	AH,0
	INT	10H
	POP	AX
	RET
SETMODE	ENDP
;
SETXY	PROC	NEAR		;写像点
	PUSH	AX
	MOV	AH,0CH
	INT	10H
	POP	AX
	RET
SETXY	ENDP
;
RIGHT:	PUSH	DI
	PUSH	CX
	MOV	AX,0B800H
	MOV	ES,AX
	MOV	DI,004FH
	MOV	CH,100
RILP1:	MOV	CL,4FH
	MOV	BX,ES:[DI]
RILP2:	MOV	AX,ES:[DI-1]
	MOV	ES:[DI],AX
	DEC	DI
	DEC	CL
	JNZ	RILP2
	MOV	ES:[DI],BX
	ADD	DI,009FH
	DEC	CH
	JNZ	RILP1
	
	MOV	AX,0BA00H
	MOV	ES,AX
	MOV	DI,004FH
	MOV	CH,100
RILP3:	MOV	CL,4FH
	MOV	BX,ES:[DI]
RILP4:	MOV	AX,ES:[DI-1]
	MOV	ES:[DI],AX
	DEC	DI
	DEC	CL
	JNZ	RILP4
	MOV	ES:[DI],BX
	ADD	DI,009FH
	DEC	CH
	JNZ	RILP3
	POP	CX
	POP	DI
	RET
;
LEFT:	PUSH	DI
	PUSH	CX
	PUSH	BX
	MOV	AX,0B800H
	MOV	ES,AX
	MOV	DI,0000H
	MOV	CH,100
LELP1:	MOV	CL,4EH
	MOV	BX,ES:[DI]
LELP2:	MOV	AX,ES:[DI+1]
	MOV	ES:[DI],AX
	INC	DI
	DEC	CL
	JNZ	LELP2
	MOV	ES:[DI+1],BX
	ADD	DI,2
	DEC	CH
	JNZ	LELP1
	
	MOV	AX,0BA00H
	MOV	ES,AX
	MOV	DI,0000H
	MOV	CH,100
LELP3:	MOV	CL,4EH
	MOV	BX,ES:[DI]
LELP4:	MOV	AX,ES:[DI+1]
	MOV	ES:[DI],AX
	INC	DI
	DEC	CL
	JNZ	LELP4
	MOV	ES:[DI+1],BX
	ADD	DI,2
	DEC	CH
	JNZ	LELP3
	POP	BX
	POP	CX
	POP	DI
	RET
;
DWN:	PUSH	DI
	PUSH	CX
	PUSH	BX
	MOV	AX,0B800H
	MOV	ES,AX
	MOV	DI,7920
	MOV	CH,50H
DWLP1:	MOV	CL,99
	MOV	DX,ES:[DI]
DWLP2:	MOV	AX,ES:[DI-50H]
	MOV	ES:[DI],AX
	SUB	DI,50H
	DEC	CL
	JNZ	DWLP2
	MOV	ES:[DI],DX
	ADD	DI,7921
	DEC	CH
	JNZ	DWLP1
	
	MOV	AX,0BA00H
	MOV	ES,AX
	MOV	DI,7920
	MOV	CH,50H
DWLP3:	MOV	CL,99
	MOV	DX,ES:[DI]
DWLP4:	MOV	AX,ES:[DI-50H]
	MOV	ES:[DI],AX
	SUB	DI,50H
	DEC	CL
	JNZ	DWLP4
	MOV	ES:[DI],DX
	ADD	DI,7921
	DEC	CH
	JNZ	DWLP3
	POP	BX
	POP	CX
	POP	DI
	RET
;
UP:	PUSH	DI
	PUSH	CX
	PUSH	BX
	PUSH	DX
	MOV	AX,0B800H
	MOV	ES,AX
	MOV	DI,0000H
	MOV	BX,00H
UPLP1:	MOV	CL,100
	MOV	DX,ES:[DI]
UPLP2:	MOV	AX,ES:[DI+50H]
	MOV	ES:[DI],AX
	ADD	DI,50H
	DEC	CL
	JNZ	UPLP2
	MOV	ES:[DI],DX
	INC	BX
	MOV	DI,BX
	CMP	BX,50H
	JNZ	UPLP1
	
	MOV	AX,0BA00H
	MOV	ES,AX
	MOV	DI,0000H
	MOV	BX,00H
UPLP3:	MOV	CL,100
	MOV	DX,ES:[DI]
UPLP4:	MOV	AX,ES:[DI+50H]
	MOV	ES:[DI],AX
	ADD	DI,50H
	DEC	CL
	JNZ	UPLP4
	MOV	ES:[DI],DX
	INC	BX
	MOV	DI,BX
	CMP	BX,50H
	JNZ	UPLP3
	POP	DX
	POP	BX
	POP	CX
	POP	DI
	RET

;
CODE	ENDS
	END	START

⌨️ 快捷键说明

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