收藏 分销(赏)

微型计算机原理及应用课程设计.doc

上传人:仙人****88 文档编号:8744185 上传时间:2025-02-28 格式:DOC 页数:29 大小:264KB 下载积分:10 金币
下载 相关 举报
微型计算机原理及应用课程设计.doc_第1页
第1页 / 共29页
微型计算机原理及应用课程设计.doc_第2页
第2页 / 共29页


点击查看更多>>
资源描述
目录 1. 课程设计目的…………………………………2 2. 课程设计内容…………………………………2 2-1 设计要求……………………………………………2 2-2 设计题目……………………………………………2 3、设计思想………………………………………3 4、数据结构设计…………………………………3 4-1 数据段………………………………………………3 4-2 宏定义………………………………………………3 4-3 代码段………………………………………………3 5、详细的算法描述………………………………4 5-1 宏定义详细描述……………………………………4 5-2 实现流程图…………………………………………6 5-3 算法描述……………………………………………6 6、源程序…………………………………………7 7、程序运行结果…………………………………25 8、设计心得与程序不足…………………………29 9、参考文献………………………………………29 摘要 设计一个具有输入输出以及对文本进行编辑的简易文本编辑器,该编辑器具有可利用Del键、BackSpace键、Home键、End键 上下左右光标键对文本进行全屏编辑的功能,并且能够打开、新建、保存文件。 1、课程设计目的 本课程设计的目的和任务: 1. 巩固和加深学生对汇编语言课程的基本知识的理解和掌握。 2. 掌握汇编语言编程和程序调试的基本技能。 3. 利用汇编语言进行基本程序设计。 4. 提高运用汇编语言解决实际问题的能力。 2、课程设计的内容 2-1设计要求 1) 分析课程设计题目的要求 2) 写出详细设计说明 3) 编写程序代码,调试程序使其能正确运行 4) 设计完成的软件要便于操作和使用 5) 设计完成后提交课程设计报告 2-2设计题目 简单的文本编辑器 基本功能: 0 运行可执行文件wbbjq.exe,在出现的界面中输入任意文本内容,利用DEL键、BACKSPACE键、HOME键、END键、上下左右光标键对文本进行全屏幕编辑。 1 按F1键激活菜单file,下移光标,通过选择New;Open;Save As;Save;Exit子菜单实现文件的新建;打开;另存;保存和退出等功能。按F10激活帮助,给出帮助信息;按ESC键退出帮助。 3、设计思想 该程序主要是设计一个简易文本编辑器,达到可以可利用Del键、BackSpace键、Home键、End键 上下左右光标键对文本进行全屏编辑的目的。用BIOS功能调用中的10H中断类型,调用06号功能,设置窗口背景;调用DOS功能中的09号功能,实现显示菜单信息字符串;调用BIOS中的键盘I/O中断调用中的0号功能;从键盘读取字符,通过对上,下,左,右,光标间以及DEL,INS,BACKSPACE,END,HOME键的扫描码的判断,结合10H中中断的02号,03号功能确定光标的相应移动,从而实现对输入文本的全屏幕编辑;利用DOS系统功能调用中的文件管理功能,如建立文件,打开文件,读文件,写文件,实现对文件的操作。 4、数据结构设计 4-1 数据段 handle dw ? ;文件代号暂存区 path db 50 dup(0),'$' ;路径暂存区 buffer db 2000 dup(?) ;数据缓存区 bak db 3850 dup(0) ;保存文本中的内容 line db ? ;列号 row db ? ;行号 4-2 宏定义 red_chr macro ;读取字符 string macro p1 ; 显示字符串 win macro opr1,opr2,opr3,opr4,opr5,opr6 ;新建窗口,设置大小和颜色 pos_curse macro op1,op2,op3 ;设置光标位置 pos_get macro ;读取光标信息 4-3 代码段 main proc far ;主程序 window proc near ;创建窗口子程序 edit proc near ;编辑功能子程序 5、详细的算法描述 5-1 宏定义详细描述 1.字符宏定义 red_chr macro ;读取字符 mov ah,0 ; 读键盘。出口AH=键盘的扫描码,AL=字符的ASCII码 int 16h endm 2.输入字符串宏定义 string macro p1 ;输入字符光标 mov ah,9 ;显示字符串 lea dx,p1 ;DS:DX=串地址,'$'结束字符串 int 21h endm 3.建立窗口宏定义 win macro opr1,opr2,opr3,opr4,opr5,opr6 ;建立窗口 mov ah,06h ;向上滚屏 mov al,opr1 ;AL=滚动行数(0——清窗口) mov bh,opr2 ;BH=空白区域的缺省属性, mov ch,opr3 ;(CH,CL)=窗口的左上角位置(Y坐标,X坐标) mov cl,opr4 mov dh,opr5 ;(DH,DL)=窗口的右下角位置(Y坐标,X坐标) mov dl,opr6 int 10h endm 4.光标位置宏定义 pos_curse macro op1,op2,op3 ;定义光标位置 mov ah,2 ;用文本坐标下设置光标位置 mov bh,op1 ;BH=显示页码 mov dh,op2 ;DH=行(Y坐标) mov dl,op3 ;DL=列(X坐标) int 10h endm 5.显示光标宏定义 pos_get macro ;显示光标位置 mov ah,03h ;读取光标信息。 ;出口CH=光标的起始行,CL=光标的终止行,DH=行(Y坐标),DL=列(X坐标) mov bh,0 ;BH=显示页码 int 10h endm 5-2 程序结构图 5-3 实现流程图 是否为菜单功能键 键盘输入 开始 否 是 结束 显示帮助信息 Esc ? 显示帮助信息 帮助页面 文件操作 各项编辑功能 进入编辑 功能菜单 F1010 F1 F1orF10 否 是 第 28 页 共 29 页 6、源程序 red_chr macro ;读取字符宏定义 mov ah,0 ; 读键盘。出口AH=键盘的扫描码,AL=字符的ASCII码 int 16h endm string macro p1 ;输入字符光标 mov ah,9 ;显示字符串 lea dx,p1 ;DS:DX=串地址,'$'结束字符串 int 21h endm win macro opr1,opr2,opr3,opr4,opr5,opr6 ;建立窗口 mov ah,06h ;向上滚屏 mov al,opr1 ;AL=滚动行数(0——清窗口) mov bh,opr2 ;BH=空白区域的缺省属性 mov ch,opr3 ;(CH,CL)=窗口的左上角位置(Y坐标,X坐标) mov cl,opr4 mov dh,opr5 ;(DH,DL)=窗口的右下角位置(Y坐标,X坐标) mov dl,opr6 int 10h endm pos_curse macro op1,op2,op3 ;定义光标位置 mov ah,2 ;用文本坐标下设置光标位置 mov bh,op1 ;BH=显示页码 mov dh,op2 ;DH=行(Y坐标) mov dl,op3 ;DL=列(X坐标) int 10h endm pos_get macro ;显示光标位置 mov ah,03h ;读取光标信息。出口CH=光标的起始行,CL=光标的终止行,DH=行(Y坐标),DL=列(X坐标) mov bh,0 ;BH=显示页码 int 10h endm ;-------------------------------------------------------------------- data segment ;定义数据段 menu db 'File Help $' mass_1 db 'Press F1 To File Press F10 To Help','$' manu_1 db ' New ',13,10,'$' manu_2 db ' Open ',13,10,'$' manu_3 db ' Save ',13,10,'$' manu_4 db ' Save as ',13,10,'$' manu_5 db ' Exit ','$' handle dw ? message1 db ' Enter The New File Name:','$' message2 db ' Enter The Name To Be Saved:','$' message3 db ' Enter The Name To Be Opened:','$' message4 db ' <The file is not saved! Save it now?> (Y/N): ','$' path db 50 dup(0),'$' buffer db 2000 dup(?) bak db 3850 dup(0) line db ? row db ? char db ? hanglie db '???//???','$' ;行//列 help_mas1 db ' Help Text $' ;帮助内容 help_mas2 db ' Welcome To Use Editor! $' help_mas3 db '------------------------------------------- $' help_mas4 db '1,Press F1 to begin a new file. $' help_mas5 db '2,Press F10 to SHOW the HELP massage.$' help_mas6 db '3,Use DOWN cursor key to choose the fuction $' help_mas7 db '4,Press Esc To Quit .' ,0DH,0AH,0DH,0AH,'$' data ends ;-------------------------------------------------------------------- code segment main proc far ;主程序 assume cs:code,ds:data start: push ds sub ax,ax push ax mov ax,data mov ds,ax call wind call edit ret main endp ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ wind proc near ;创建窗口子程序 win 0,3eh,1,0,24,79 ;定义窗口背景 win 1,1fh,0,0,0,79 ;定义菜单项背景 win 0,1fh,24,0,24,79 ;定义状态栏背景 show: ;显示菜单位置及内容 pos_curse 0,0,1 mov ah,9 lea dx,menu int 21h show_2: ;显示状态栏位置及内容 pos_curse 0,24,1 ;命令提示符共25行 mov ah,9 lea dx,mass_1 ;状态栏提示信息显示 int 21h call win4 pos_curse 0,1,0 ;置光标位置 mov row,dh mov line,dl wind endp ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ edit proc near char_get: ;读字符 call com ;.................................................................... com proc near ;定义光标功能键 pos_get mov row,dh mov line,dl first: pos_curse 0,row,line j00: mov ah,0 int 16h ;从键盘读字符 ah=扫描码 al=字符码 push ax lea dx,buffer mov buffer[bx],al inc bx cmp ah,48h ;上 jz up_1 cmp ah,50h ;下 jz down_1 cmp ah,4bh ;左 jz left cmp ah,4dh ;右 jz right cmp ah,1ch ;回车 jz enter_1 call fuc_key mov ah,2 mov dl,al int 21h pop ax call menu_show jmp j6 down_1: jmp down enter_1: jmp enter_2 up_1: jmp up left: ;光标左移 pos_get mov row,dh mov line,dl cmp line,0 ;每行共80列。当line=0时,令line=79,row--, jnz direct mov line,79 dec row cmp row,0 ;当行号减为0时,再令row=1 je stop2 jmp first stop2: mov row,1 jmp first direct: dec line call win4 ;显示光标位置 jmp first right: ;光标右移 pos_get mov row,dh mov line,dl cmp line,79 ;当line=79时,令line=0,row++ jnz direct2 mov line,0 inc row cmp row,24 ;当行号增到24时,再令row=23 je returns1 jmp first direct2: inc line ;call win4 jmp first enter_2: jmp enter up: ;上移光标 pos_get mov row,dh mov line,dl dec row cmp row,0 je stop1 call win4 jmp first stop1: mov row,1 jmp first down: ;下移光标 pos_get mov row,dh mov line,dl inc row cmp row,24 je stop3 call win4 jmp first stop3: mov row,23 jmp first returns1: jmp returns enter: ;回车换行 pos_get mov row,dh mov line,dl inc row cmp row,24 je returns mov line,0 call win4 jmp first returns: mov row,23 mov line,0 jmp first j6: ret com endp ;.................................................................... fuc_key proc near ;功能键子程序 next: cmp ah,47h ;home jz home cmp ah,4fh ;end jz _end cmp ah,0eh ;backspace jz bak_sp cmp ah,53h ;del jz del cmp ah,44h ;F10 jz help_0 ret help_0: call help home: ;HOME键的功能 pos_get mov row,dh mov line,0 ;置列为第0列 call win4 jmp first _end: ;END键的功能 pos_get mov row,dh mov line,79 ;此处有错 call win4 jmp first bak_sp: ;退格键的功能 pos_get mov row,dh mov line,dl cmp line,0 je stop dec line jmp ab stop: mov line,0 ab: pos_curse 0,row,line mov ah,2 mov dl,' ' int 21h call win4 jmp first del: ;DEL删除 此功能有问题 pos_get mov row,dh mov line,dl dec line pos_curse 0,row,line mov ah,2 mov dl,' ' int 21h inc line call win4 jmp first cm: cmp line,00 jz pos_cm pos_cm: pos_curse 0,0,0 jmp first ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: help proc near ;显示帮助信息 call savedisplay ;显示帮助信息每行的位置 pos_get push dx win 0,57h,4,5,21,70 pos_curse 0,6,25 string help_mas1 pos_curse 0,8,11 string help_mas2 pos_curse 0,10,11 string help_mas3 pos_curse 0,12,11 string help_mas4 pos_curse 0,14,11 string help_mas5 pos_curse 0,16,11 string help_mas6 pos_curse 0,18,11 string help_mas7 pop dx pos_curse 0,dh,dl mov ah,0 int 16h cmp ah,36h ;F10 active help jnz cls call help cls: win 0,1eh,9,10,13,70 ;清屏 call backdisplay help endp ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: fuc_key endp ;.................................................................... menu_show proc near ;显示菜单 call savedisplay push cx cmp ah,3bh ;F1功能 jz menu_sh jmp char_get menu_sh: ;定义菜单的背景字体颜色 pos_get push dx win 0,06h,2,1,7,11 win 0,65h,1,0,6,10 pos_curse 0,1,0 string manu_1 string manu_2 string manu_3 string manu_4 string manu_5 pop dx dec dl ;列减1 pos_curse 0,dh,dl copmar: red_chr cmp ah,50h ;当按向下方向键时,指向下一个选项 jz manu_n ;当按其他键时,隐藏菜单 jmp manu_hid manu_hid: ;菜单隐藏 win 0,1eh,1,1,7,11 call backdisplay jmp char_get manu_n: ;开始定义各个菜单项 win 0,65h,5,1,5,8 pos_curse 0,5,0 ;EXIT项 string manu_5 win 0,15h,1,1,1,8 pos_curse 0,1,0 ;NEW项 string manu_1 red_chr ;读取字符 cmp ah,48h ;当按向上方向键时 je manu_n cmp al,0dh jz new_1 cmp ah,50h ;当按向下方向键时 je manu_o jmp manu_hid manu_n0: jmp manu_n manu_o: win 0,65h,1,1,1,8 pos_curse 0,1,0 string manu_1 win 0,15h,2,1,2,8 pos_curse 0,2,0 string manu_2 red_chr cmp ah,48h je manu_o cmp al,0dh jz open_1 cmp ah,50h je manu_s jmp manu_hid new_1: jmp new_2 manu_s: win 0,65h,2,1,2,8 pos_curse 0,2,0 string manu_2 ;OPEN项 win 0,15h,3,1,3,8 pos_curse 0,3,0 string manu_3 ;SAVE项 red_chr cmp al,0dh jz save_1 cmp ah,48h je manu_s cmp ah,50h je manu_a jmp manu_hid open_1: jmp open_2 manu_n1: jmp manu_n manu_a: win 0,65h,3,1,3,8 pos_curse 0,3,0 stri
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服