字处理演示程序课程设计_第1页
字处理演示程序课程设计_第2页
字处理演示程序课程设计_第3页
字处理演示程序课程设计_第4页
字处理演示程序课程设计_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程设计任务书学生姓名: 张添 专业班级: 计算机0903 指导教师: 张霞 工作单位:计算机科学与技术学院 题目: 字处理演示程序初始条件:理论:完成了汇编语言程序设计课程,对微机系统结构和80系列指令系统有了较深入的理解,已掌握了汇编语言程序设计的基本方法和技巧。实践:完成了汇编语言程序设计的4个实验,熟悉了汇编语言程序的设计环境并掌握了汇编语言程序的调试方法。要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)进一步理解和掌握较复杂程序的设计方法,掌握子程序结构的设计和友好用户界面的设计。具体的设计任务及要求:1) 清晰且易于操作的用户界面;动态显示光标的当

2、前位置;2) 在文本编辑区接受并保存输入信息;3) 光标上移,下移,左移,右移;4) 允许删除当前光标后的字符;5) 将编辑文本存盘,读出并显示硬盘中的指定文件。(任选)在完成设计任务后,按要求撰写课程设计说明书;对课程设计说明书的具体要求请见课程设计指导书。阅读资料:1)IBMPC汇编语言程序设计实验教程实验2.42)IBMPC汇编语言程序设计(第2版)例6.11时间安排:设计安排一周:周1、周2:完成系统分析及设计。周3、周4:完成程序调试,和验收。周5:撰写课程设计报告。指导教师签名: 年 月 日系主任(或责任教师)签名: 年 月 日字处理演示程序1. 设计内容及要求理解键盘借口的工作原

3、理,掌握BIOS键盘I/O功能,掌握复杂内存结构数据的定义和管理方法。进一步理解和掌握较复杂程序的设计方法,掌握子程序结构的设计和友好用户界面的设计。本实验要求在示范的例3.8字处理程序的基础上,再增加光标上移、光标下移以及删除字符的功能。2. 设计方案2.1总体设计 一 设计中使用的关机技术和方法; 汇编语言中的各种寻址 存储等命令及BIOS中断和DOS中断调用 窗口的建立 功能键的定义 子程序的调用等等二模块层次图三(1)光标垂直上下移时,列指针不变,行指针1。(2)如果光标要移至上一行尾或下一行尾时,可使移动后的光标列指针colpt等于上一行或下一行的字符计数值cntl。(3)缓冲区的头

4、指针bufpt所指示的字符和光标所指示的字符始终要一致,它们的移动也要保持同步。例如,光标垂直上移时,行指针-1,列指针不变,头指针bufpt的修改值为:(当前头指针值)-(上一行字符计数值)-1。光标移至上一行尾时,光标行指针-1,列指针=上一行字符计数值,bufpt的修改值为:(当前头指针值)-(当前光标列号)-1。(4)当删除一个回车符时,上下两行连接在一起成为一行,这新的一行的字符计数值cntl应是原来两行字符数之和,以下各行的字符计数值cntl均前移一个字节,最后一个计数单元补以0值,缓冲区的处理即用前移一字节的办法删去头指针指示的前一个字节的内容,最后一个缓冲区字节要填以“空”2.

5、2具体设计2.2.1上箭头键的设计当按动上箭头键(扫描码为48h)时,光标移到上一行。如果上一行的字符数小于当前光标所在位置的列号,则光标移至上一行行尾,其他情况光标垂直上移;如果光标已在文件的首行,则按动上箭头键不能引起光标移动。设计代码如下:top_k: cmp rowpt,0 jz tret;当该行是0时不移动 mov bl,rowpt dec bl xor bh,bh mov al,cntlbx cmp al,colpt js toend ;转移到上一行的末尾 dec rowpt ;否则垂直上移,行号-1 mov cx,bufpt ;bufpt=(当前头指针值)-(上一行字符计数值)-

6、1 mov al,cntlbx xor ah,ah sub cx,ax dec cx mov bufpt,cx curs rowpt,colpt jmp trettoend: push bx;保存上一行的行数 dec rowpt mov cx,bufpt mov bl,colpt xor bh,bh sub cx,bx dec cx mov bufpt,cx pop bx mov al,cntlbx mov colpt,al curs rowpt,colpttret: jmp read_k2.2.2下箭头键的设计当按动下箭头键(扫描码为50h)时,光标移到下一行。如果下一行字符数小于当前光标所

7、在位置的列号,则移至下一行行尾,否则光标垂直下移至下一行。如果光标位置已在文件的最后一行,则按动下箭头键不能引起光标移动。设计代码如下:bottom_k: cmp bl,rowpt xor bh,bh cmp bx,rowmx jz bret mov bl,rowpt inc bl xor bh,bh mov al,cntlbx cmp al,colpt js goend ;光标移动到下一行的末尾 mov cx,bufpt mov bl,rowpt xor bh,bh mov al,cntlbx xor ah,ah add cx,ax inc cx mov bufpt,cx inc rowpt

8、 curs rowpt,colpt jmp bretgoend: mov cx,bufpt xor ah,ah add cx,ax push ax mov bl,rowpt xor bh,bh mov al,cntlbx sub al,colpt add cx,ax inc cx mov bufpt,cx pop ax mov colpt,al inc rowpt curs rowpt,colpt bret:jmp read_k2.2.3删除键DEL的设计当按下删除键DEL(扫描码为53h)时,光标左边的一个字符被删除,本行后续字符均前移一个位置。如果删除的字符是回车符(0dh),则将下一行连

9、接到上一行行尾,以下各行均上移一行,也就是整个文件的总行数少1。设计代码如下:dele_k: mov bx,bufpt mov cx,buftl sub cx,bx cmp cx,0 jz middle ;相等时说明当前光标后已经没有字符了 lea di,kbd_buf mov al,kbd_bufbx add di,bx ;缓冲区字符前移 mov si,di inc si cld rep movsb dec buftl cmp al,0dh ;被删除的字符是否是回车 jnz dn lea di,cntl mov bl,rowpt;上下两行连接,新一行的字符计数值cntl应是原来两行字符数之和

10、 inc bl xor bh,bh mov al,cntlbx mov bl,rowpt add cntlbx,al push bx add bx,1 ;将后面的字符计数值cntl均向前移一个字节 add di,bx mov si,di inc si mov cx,rowmx sub cx,bx cld rep movsb mov bx,rowmx mov cntlbx,0 pop bx jmp dpmiddle:jmp read_kdn: mov bl,rowpt xor bh,bh dec cntlbxdp: mov al,1 mov bh,07 mov ch,bl mov dh,23 m

11、ov cl,0 mov dl,79 mov ah,6 int 10h call dispbf curs rowpt,colpt jmp read_k3. 测试与评估(1) 在cmd窗口下用源代码word.asm编译和连接后生成可执行文件word.exe。(2)运行生成的可执行文件word.exe进行各功能的测试。 开始界面: 输入文本,回车键换行:光标上移测试:光标下移测试:删除键DEL测试:经过以上测试可见,程序能够正确地实现预期的各种功能,包括准确判断了是否移动光标至行尾以及删除的是否为换行符,达到了最初设计的要求。4. 完整源代码源文件word.asm中的内容如下:dseg segmen

12、t ;输入数据段代码 kbd_buf db 96 dup( ) cntl db 16 dup(0) bufpt dw 0 buftl dw 0 colpt db 0 rowpt db 0 rowmx dw 0 dseg endscurs macro row,col ;置光标的宏定义 mov dh,row mov dl,col mov bh,0 mov ah,2 int 10h endmcseg segmentmain proc farassume cs:cseg,ds:dseg,es:dsegstart: push ds sub ax,ax push ax mov ax,dseg mov ds

13、,ax mov es,ax mov buftl,0;初始化指针 mov colpt,0 mov rowpt,0 mov bufpt,0 mov rowmx,0 mov cx,length cntl;初始化cntl域 mov al,0 lea di,cntl cld rep stosb mov ah,6;清屏 mov al,0 mov cx,0 mov dh,24 mov dl,79 mov bh,07 int 10h curs 0,0read_k: mov ah,0 int 16h cmp al,1bh jnz arrow retarrow: cmp ah,4bh jz left cmp ah

14、,4dh jz right cmp ah,48h jz top cmp ah,50h jz bottom cmp ah,53h jz deleinst:jmp ins_kleft:jmp left_kright:jmp right_ktop:jmp top_kbottom:jmp bottom_kdele:jmp dele_kins_k: mov bx,bufpt mov cx,buftl cmp bx,cx je km lea di,kbd_buf add di,cx mov si,di dec si sub cx,bx std rep movsbkm: mov kbd_bufbx,al i

15、nc bufpt inc buftl cmp al,0dh jnz kn lea si,cntl add si,rowmx inc si mov di,si inc di mov cx,rowmx sub cl,rowpt std rep movsb mov bl,rowpt xor bh,bh mov cl,colpt mov ch,cntlbx sub ch,colpt mov cntlbx,cl mov cntlbx+1,ch mov ax,rowmx mov bh,07 mov ch,rowpt mov dh,23 mov cl,0 mov dl,79 mov ah,6 int 10h

16、 inc rowpt inc rowmx mov colpt,0 jmp short kpkn: mov bl,rowpt xor bh,bh inc cntlbx inc colptkp: call dispbf curs rowpt,colpt jmp read_kleft_k: cmp colpt,0 jnz k2 cmp rowpt,0 jz lret dec rowpt mov al,rowpt lea bx,cntl xlat cntl mov colpt,al jmp k3k2: dec colptk3: dec bufpt curs rowpt,colptlret:jmp re

17、ad_kright_k: mov bx,bufpt cmp bx,buftl je rret inc colpt cmp kbd_bufbx,0dh jnz k4 inc rowpt mov colpt,0k4: inc bufpt curs rowpt,colptrret: jmp read_ktop_k: cmp rowpt,0 jz tret;当该行是0时不移动 mov bl,rowpt dec bl xor bh,bh mov al,cntlbx cmp al,colpt js toend ;转移到上一行的末尾 dec rowpt ;否则垂直上移,行号-1 mov cx,bufpt ;

18、bufpt=(当前头指针值)-(上一行字符计数值)-1 mov al,cntlbx xor ah,ah sub cx,ax dec cx mov bufpt,cx curs rowpt,colpt jmp trettoend: push bx;保存上一行的行数 dec rowpt mov cx,bufpt mov bl,colpt xor bh,bh sub cx,bx dec cx mov bufpt,cx pop bx mov al,cntlbx mov colpt,al curs rowpt,colpttret: jmp read_kbottom_k: cmp bl,rowpt xor

19、bh,bh cmp bx,rowmx jz bret mov bl,rowpt inc bl xor bh,bh mov al,cntlbx cmp al,colpt js goend;光标移动到下一行的末尾 ;否则垂直下移一行 mov cx,bufpt mov bl,rowpt xor bh,bh mov al,cntlbx xor ah,ah add cx,ax inc cx mov bufpt,cx inc rowpt curs rowpt,colpt jmp bretgoend: mov cx,bufpt xor ah,ah add cx,ax push ax mov bl,rowpt

20、 xor bh,bh mov al,cntlbx sub al,colpt add cx,ax inc cx mov bufpt,cx pop ax mov colpt,al inc rowpt curs rowpt,colpt bret:jmp read_kdele_k: mov bx,bufpt mov cx,buftl sub cx,bx cmp cx,0 jz middle;相等时说明当前光标后已经没有字符了 lea di,kbd_buf mov al,kbd_bufbx add di,bx;缓冲区字符前移 mov si,di inc si cld rep movsb dec buft

21、l cmp al,0dh;被删除的字符是否是回车 jnz dn lea di,cntl mov bl,rowpt;上下两行连接,新一行的字符计数值cntl应是原来两行字符数之和 inc bl xor bh,bh mov al,cntlbx mov bl,rowpt add cntlbx,al push bx add bx,1 ;将后面的字符计数值cntl均向前移一个字节 add di,bx mov si,di inc si mov cx,rowmx sub cx,bx cld rep movsb mov bx,rowmx mov cntlbx,0 pop bx jmp dpmiddle:jmp read_kdn: mov bl,ro

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论