[转][汇编] 汇编语言实现简易文本编辑器(光标移动、上卷和退格删除)
汇编实现的一个简易的文本编辑器,代码中有详细的注释。
思路和细节:
(1) 在屏幕中央初始化一片面积,并且定位光标,利用16号中断0号功能分别在ah,al中存储扫描码和ascii码,由此进行功能键的判断。
(2) 实现对光标的操作,通过对dh,dl的变化和10号中断的2号功能进行光标的设置,上下左右分别改变dh,dl的值即可。
(3)退格键的操作实现是 光标左移,然后利用21号中断输出空格即可实现删除操作。
(4)下界超过某一个设定的值后就进行上卷一行的操作,此时当前光标位置随之上移。
(5)注意边界的处理,左移到行首就贴边上移,右移到行末贴边下移,上下移动注意边界,退格要一行行向上依次删除,输出字符的过程中
超过宽度自动换行,这些都是要处理的细节问题。
(6)注意保护dx和ax的值(压入栈中)
; by Tach
data segment
Esc_key equ 1bh ;退出
win_ulc equ 30 ;左列
win_ulr equ 8 ;上行
win_lrc equ 50 ;右列
win_lrr equ 16 ;下行
win_width equ 20 ;宽度
board_shift equ 48h ;光标上移
board_down equ 50h ;光标下移
board_left equ 4Bh ;光标左移
board_right equ 4Dh ;光标右移
board_back equ 08h ;退格键
string db "Tach's notepad!$"
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
;----------输出标题------------------
mov ah,2
mov dh,win_ulr-1
mov dl,win_ulc+2
mov bh,0
int 10h
lea dx, string
mov ah, 9
int 21h ; output string at ds:dx
;-------------------------------------
locate:
;-----设置光标初始位置-----------
mov ah,2
mov dh,win_ulr
mov dl,win_ulc
push dx
mov bh,0
int 10h
;--------------------------------
;----初始化屏幕------------------
mov ah,6
mov ch,win_ulr
mov cl,win_ulc
mov dh,win_lrr
mov dl,win_lrc
mov bh,0F4h ;白底红字
int 10h
pop dx
;----------------------------
get_char:
mov ah,0 ;16h 0号功能,ah中放扫描码,al中放ascii码
int 16h
cmp al,0 ;if 功能键 then al=0
je K
;-----利用ascii码判断-----------------------
cmp al,Esc_key
je exit
cmp al,0dh
je enter
cmp al,board_back
je back
;---读取当前光标位置---------------
mov ah,3
mov bh,0
int 10h
;---------------------
push dx ;保护变量
cmp dl,win_lrc ;输入字符时是否越过右列值
jge NK
jmp N
NK:
inc dh
mov dl,win_ulc
push dx
;--------------------
mov bh,0 ;重新设置光标位置
mov ah,2
int 10h
;-------------------
N:
cmp dh,win_lrr
jge roll ;是否越过下界,上卷
Next:
mov dl,al ;输出输入的字符
mov ah,2
int 21h
pop dx
jmp get_char
;-------对功能键(扫描码)的处理---------------
K:
cmp ah,board_shift
jz shift
cmp ah,board_down
je down
cmp ah,board_left
je left
cmp ah,board_right
je right
jmp get_char
;-------------上卷一行---------------------
roll:
mov ah,6
push ax
mov al,1
mov ch,win_ulr
mov cl,win_ulc
mov dh,win_lrr
mov dl,win_lrc
mov bh,0F4h
int 10h
pop ax
pop dx
cmp dh,win_lrr
jbe KK
dec dh
KK:
dec dh ;上卷之后,dh随之自减
mov bh,0
mov ah,2
int 10h
push dx
jmp Next
;---------------------------------
;---------处理换行--------------------
enter:
mov ah,3
mov bh,0
int 10h
inc dh
mov dl,win_ulc
mov bh,0
mov ah,2
int 10h
jmp get_char
;--------------------------------
;---------光标上移-----------------------
shift:
mov ah,3
mov bh,0
int 10h
dec dh
cmp dh,win_ulr
jge S
inc dh
S:
mov bh,0
mov ah,2
int 10h
jmp get_char
;------------光标下移------------------------
down:
mov ah,3
mov bh,0
int 10h
inc dh
cmp dh,win_lrr
jbe D
dec dh
D:
mov bh,0
mov ah,2
int 10h
jmp get_char
;------------------------------------
;-------------光标左移--------------------
left:
mov ah,3
mov bh,0
int 10h
dec dl
cmp dl,win_ulc
jge L
inc dl
dec dh
cmp dh,win_ulr
jge L
inc dh
L:
mov bh,0
mov ah,2
int 10h
jmp get_char
;-----------------------------
;------------光标右移-----------------
right:
mov ah,3
mov bh,0
int 10h
inc dl
cmp dl,win_lrc
jbe R
dec dl
inc dh
cmp dh,win_lrr
jbe R
dec dh
R:
mov bh,0
mov ah,2
int 10h
jmp get_char
;-------------------------
;---------退格键---------------
back:
mov ah,3
mov bh,0
int 10h
dec dl
cmp dl,win_ulc
jge B
mov dl,win_lrc
dec dh
cmp dh,win_ulr
jge B
inc dh
B:
mov bh,0
mov ah,2
int 10h
push dx
mov dl,20h
mov ah,2
int 21h
pop dx
mov bh,0
mov ah,2
int 10h
jmp get_char
;-----------退出程序------------------------
exit:
mov ax, 4c00h ; exit to operating system.
int 21h
ends
end start ; set entry point and stop the assembler.
---------------------
作者:NK_test
来源:CSDN
原文:https://blog.csdn.net/nk_test/article/details/46045201
版权声明:本文为作者原创文章,转载请附上博文链接!
[转][汇编] 汇编语言实现简易文本编辑器(光标移动、上卷和退格删除)相关推荐
- [汇编] 汇编语言实现简易文本编辑器(光标移动、上卷和退格删除)
https://blog.csdn.net/NK_test/article/details/46045201 汇编实现的一个简易的文本编辑器,代码中有详细的注释. 思路和细节: (1) 在屏幕中央初始 ...
- android 编辑标签,在一个文本框输入标签回车添加退格删除
先上图: 最近产品需要一个编辑标签的页面如图所示. 需要实现可以输入标签,按回车键或逗号生成标签.并且可以移动光标删除标签,和插入标签. 并且单个标签有字符限制(英文算一个中文算两个字 ...
- java简单文本编译器_java -简易文本编辑器
import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; /** * Title:java ...
- C语言程序设计-简易文本编辑器
第一部分:引言 简易文本编辑器是一个面向用户的系统服务程序,广泛用于源程序的输入.删除.替换.查找.修改等一系列操作,甚至用于报刊和书籍的编辑排版以及办公室的公文书信的起草和润色,是一个比较实用的应用 ...
- VB顺序文件案例:简易文本编辑器
文章目录 一.顺序文件概述 二.案例演示 - 简易文本编辑器 (一)运行效果 (二)实现步骤 1.用户界面设计 (1)创建标准EXE工程 (2)添加一个文本框 (3)添加四个按钮 (4)添加一个公用对 ...
- c语言课程设计文本编辑器实验报告6,C课程设计简易文本编辑器.doc
C课程设计简易文本编辑器 目录 第一章 课程设计目的和要求1 1.1课程设计的目1 1.2 基本要求1 第二章 课程设计任务内容2 2.1 设计背景2 2.2简易文本编辑器设计内容2 第三章 详细设计 ...
- Java swing 简易文本编辑器
1.介绍几个相关的网址 精通Java Swing程序设计 BeautyEye社区 2.主要功能 tab页能够关闭(快捷键:ctrl+w,鼠标点击x) JMuneItem和Button快键键的几种绑定 ...
- c语言实现简易文本编辑器
本程序要求完成一个简易文本编辑器,能够完成文本的录入.编辑.删除.查找,并能够完成文件的存取. 在文本编辑软件中把用户输入的所有文本内容作为一个字符串.虽然各种文本编辑软件的功能有强弱差别,但是基本操 ...
- python基础项目实战-简易文本编辑器
在这里我简单编写了文本编辑器的部分功能,还有一些没有完善,感兴趣的友友们可以自己尝试完善后面的功能.文本编辑器的基本设计: 一.界面设计 1.标题 2.菜单栏 3.文本编辑区 4.滚动条 5.鼠标快右 ...
最新文章
- 关于“习惯”的精彩分析
- 用python读取股票价格_使用Python写一个量化股票提醒系统
- python教程:读取.dcm文件,并转化为.jpg格式
- C++之链表中头指针、头节点、首元结点的
- 提取网页里面全部所有链接的方法
- [CODEVS1258]关路灯
- oracle下载安装教程
- 毕业论文课题研究背景怎么写?
- 电脑上如何快速将图片压缩变小?
- 2023年天津仁爱学院专升本化学工程与工艺对口专业限制目录
- 三菱Q系列PLC数据采集随笔
- 逐点插入法-delaunay三角剖分
- fabric 部署测试网络
- Tomcat安装、配置、优化及负载均衡详解
- SQL——分组统计查询
- Android解析xml文件获取数据练习
- JavaScript 数组之every
- 2020-12-6 CCF201803-2 碰撞的小球
- 小学生有必要学机器人编程吗
- 进销存设计与分析_应收汇总表(15)
热门文章
- 物料科目组设置和分配-OVK5/SM30(V_TVKM)/VKOA
- 科技交流英语(2022秋)Unit1-Unit8题干速查
- 手游冷知识丨为什么绝大多数手游不开放自由交易系统?
- 快速定位线上慢 SQL 问题,掌握这几个性能排查工具可助你一臂之力
- 迅捷画图中套用流程图模板编辑方法介绍
- creo二次开发python_使用C#/.net语言进行ProE/Creo二次开发
- 车机蓝牙通话流程分析的流程分析
- PPT这样学就对了之首页制作
- Java文本控件型号_小博老师解析Java核心技术 ——JSwing文本型控件
- 滚动截屏APP—Faststone Capture破解版注册码