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

📄 97_editerindos_v0.1.asm

📁 汇编语言 参考书 包含作业与答案 从入门到精通 通俗易懂
💻 ASM
字号:
	.model 	small
	
	stack	segment	stack
		WORD	100 DUP(?)
	STACK 	ENDS

	DATA	SEGMENT	PARA
		LEFT_INDENT	EQU	1
		UP_INDENT	EQU	2
		DOWN_INDENT	EQU	29
		RIGHT_INDENT	EQU	79
		DATALEN		WORD	205
		ROW		BYTE	2
		COL		BYTE	0
		DATA_BUFFER	BYTE	'You have a multitude of source files spread out all over the place. You have to deal with functions that somebody else wrote. You have to figure out how some piece of code works and see all of its clients!','$'		;,1024 DUP(?),'$'		
		;DATA_TEMP	BYTE	0DH,0AH,' You didn’t write the code, or you wrote it in a past life.','$'	
		data	ENDS

	CODE	SEGMENT	PARA
		ASSUME	CS:CODE,DS:DATA,SS:STACK
	MAIN	PROC	FAR
		MOV	AX,DATA		;初始化DS,ES
		MOV	DS,AX
		MOV	ES,AX

		CALL	CLEAR_SCREEN
		CALL	SET_CURSOR
		CALL	DISP_DATA
	NEXT:
		CALL	SET_CURSOR
		CALL	DEAL_KEYBRD
		CMP	AH,01H
		JNE	NEXT
		CALL	CLEAR_SCREEN

		CALL	RETURN

	MAIN	ENDP
;********************************************************
	CLEAR_SCREEN	PROC	NEAR
		MOV	AX,0600H
		MOV	BH,10H
		MOV	CX,0201H
		MOV	DX,1A4EH	;30*80
		INT 10H

		RET
	CLEAR_SCREEN	ENDP
;********************************************************
	SET_CURSOR	PROC	NEAR
		MOV	AH,2H
		XOR	BH,BH
		MOV	DH,ROW
		MOV	DL,COL
		;ADD	DL,INDENT	;可用来设置左缩进
		INT 10H

		RET
	SET_CURSOR	ENDP
;*******************************************************
	DISP_DATA	PROC	NEAR
		MOV	AX,1301H	;
		MOV	BX,0016H
		LEA	BP,DATA_BUFFER
		MOV	CX,DATALEN
		MOV	DH,ROW
		MOV	DL,COL
		;ADD	DL,LEFT_INDENT
		INT 10H

		RET
	DISP_DATA	ENDP
;*******************************************************
	DISP_CHAR	PROC	NEAR
		LEA	BP,DATA_BUFFER
		ADD	BP,BX
		MOV	CX,DATALEN
		SUB	CX,BX
		MOV	AX,1301H	;
		MOV	BX,0016H
		MOV	DH,ROW
		MOV	DL,COL
		;ADD	DL,LEFT_INDENT
		INT 10H

		RET
	DISP_CHAR	ENDP
;********************************************************
	DEAL_KEYBRD	PROC	FAR
		MOV	AH,10H
		INT 16H

		CMP	AL,00H
		JE	LEFT
		CMP	AL,0E0H
		JE	LEFT

		;CALL	ASCIICHAR
		JMP	DEALOK
	LEFT:		
		CMP	AH,4BH		;左箭头
		JNE 	RIGHT
		CALL	DEAL_KEY_LEFT
		JMP	DEALOK
	RIGHT:
		CMP	AH,4DH		;右箭头
		JNE	UP
		CALL	DEAL_KEY_RIGHT
		JMP	DEALOK
	UP:
		CMP	AH,48H
		JNE	DOWN
		CALL	DEAL_KEY_UP
		JMP	DEALOK	
	DOWN:
		CMP	AH,50H
		JNE	DELETE
		CALL	DEAL_KEY_DOWN
		JMP	DEALOK
	DELETE:
		CMP	AH,53H
		JNE	BACK
		CALL	DEAL_KEY_DELETE
		JMP	DEALOK
	BACK:
		CMP	AH,0EH
		JNE	HOME
		CALL	DEAL_KEY_BACK
		JMP	DEALOK
	HOME:
		CMP	AH,47H
		JNE	ENDER
		CALL	DEAL_KEY_HOME
		JMP	DEALOK
	ENDER:
		CMP	AH,4FH
		JNE	DEALOK
		CALL	DEAL_KEY_END
		JMP	DEALOK
	DEALOK:
	
		RET	
	DEAL_KEYBRD 	ENDP
;********************************************************
	DEAL_KEY_LEFT	PROC	NEAR
		CMP	COL,LEFT_INDENT
		JBE	OUTLINE
		DEC	COL
		JMP	DEALOK
	OUTLINE:
		CALL	DEAL_KEY_UP
		CALL	DEAL_KEY_END
	DEALOK:
				
		RET
	DEAL_KEY_LEFT	ENDP
;********************************************************
	DEAL_KEY_RIGHT	PROC	NEAR
		CMP	COL,RIGHT_INDENT
		JAE	OUTLINE
		INC	COL
		JMP	DEALOK
	OUTLINE:
		CALL	DEAL_KEY_DOWN
		CALL	DEAL_KEY_HOME
	DEALOK:	
	
		RET
	DEAL_KEY_RIGHT	ENDP
;********************************************************
	DEAL_KEY_UP	PROC	NEAR
		CMP	ROW,UP_INDENT
		JBE	OUTLINE
		DEC	ROW
		JMP	DEALOK
	OUTLINE:
		
	DEALOK:	
		RET
	DEAL_KEY_UP	ENDP
;********************************************************
	DEAL_KEY_DOWN	PROC	NEAR
		CMP	ROW,DOWN_INDENT
		JAE	OUTLINE
		INC	ROW
		JMP	DEALOK
	OUTLINE:
		
	DEALOK:	
		RET
	DEAL_KEY_DOWN	ENDP
;********************************************************
	DEAL_KEY_DELETE	PROC	NEAR
		MOV	BL,COL
		XOR	BH,BH
		PUSH	BX
		MOV	BL,ROW
		PUSH	BX
;--------------		
		MOV	AL,ROW
		SUB	AL,2H
		MOV	BL,4FH
		MUL	BL

		MOV	BL,COL
		ADD	BX,AX
		DEC	DATALEN

		MOV	CX,DATALEN
		SUB	CX,BX
		LEA	DI,[DATA_BUFFER+BX]
		LEA	SI,[DATA_BUFFER+BX+1]
	NEXT:
		LODSB
		STOSB
		LOOP	NEXT
		
		MOV	ROW,2
		MOV	COL,0
		CALL	DISP_DATA
		;INC	COL
		;CALL	SET_CURSOR
;---------------------
		POP	BX
		MOV	ROW,BL
		POP	BX
		MOV	COL,BL
		CALL	SET_CURSOR
		
		
		RET
	DEAL_KEY_DELETE	ENDP
;*******************************************************
	DEAL_KEY_BACK	PROC	NEAR
		RET
	DEAL_KEY_BACK	ENDP
;*******************************************************
	DEAL_KEY_HOME	PROC	NEAR
		MOV	COL,LEFT_INDENT
		CALL	SET_CURSOR
		
		RET
	DEAL_KEY_HOME	ENDP
;*******************************************************
	DEAL_KEY_END	PROC	NEAR
		MOV	COL,RIGHT_INDENT
		CALL	SET_CURSOR
		
		RET
	DEAL_KEY_END	ENDP
;*******************************************************
;********************************************************
	RETURN	PROC	NEAR
		MOV	AX,4C00H
		INT 21H
		
		RET
	RETURN	ENDP
;*******************************************************	
	CODE	ENDS
		END	MAIN

⌨️ 快捷键说明

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