汇编语言文本编辑器.docx

上传人:b****7 文档编号:9244561 上传时间:2023-02-03 格式:DOCX 页数:64 大小:28.82KB
下载 相关 举报
汇编语言文本编辑器.docx_第1页
第1页 / 共64页
汇编语言文本编辑器.docx_第2页
第2页 / 共64页
汇编语言文本编辑器.docx_第3页
第3页 / 共64页
汇编语言文本编辑器.docx_第4页
第4页 / 共64页
汇编语言文本编辑器.docx_第5页
第5页 / 共64页
点击查看更多>>
下载资源
资源描述

汇编语言文本编辑器.docx

《汇编语言文本编辑器.docx》由会员分享,可在线阅读,更多相关《汇编语言文本编辑器.docx(64页珍藏版)》请在冰豆网上搜索。

汇编语言文本编辑器.docx

汇编语言文本编辑器

;滚动窗体宏定义

winMACROlux,luy,rdx,rdy,attr

MOVAH,6

MOVAL,0

MOVBH,attr;前景背景属性

MOVCH,lux

MOVCL,luy

MOVDH,rdx

MOVDL,rdy

INT10h

ENDM

;滚动窗体宏定义2

saveEMACRO

PUSHAX

PUSHBX

PUSHCX

PUSHDX

PUSHDS

PUSHSI

ENDM

recoverMACRO

POPSI

POPDS

POPDX

POPCX

POPBX

POPAX

ENDM

fileIOMACROX,Y

LEADX,X

MOVAH,Y

INT21H

ENDM

showMMACROmessM

poscur24,0

LEADX,messM

MOVAH,09H

INT21H

ENDM

;------------------------------------

;字符串显示宏定义

showMACROmess

LEADX,mess

MOVAH,09h

INT21h

ENDM

;-------------------------------------

;光标定位宏定义

posgetMACRO;读光标位置

MOVAH,03h

MOVBH,0

INT10h

ENDM

posgetSMACRO

saveE

MOVAH,03h

MOVBH,0

INT10h

MOVrow,DH

MOVcolumn,DL

recover

ENDM

poscurMACROx,y

MOVAH,2

MOVDH,x

MOVDL,y

MOVBH,0

INT10h

ENDM

;-------------------------------------

;读取键盘

readCharMACRO

MOVBH,0

MOVAH,8h

INT10h

ENDM

putcharMACROx

MOVDL,x

MOVAH,02H

INT21H

ENDM

getcharMACRO

MOVAH,0

INT16h

ENDM

;********************************************************

;数据段定义

;.386

data_segSEGMENT

totalCharsDB0;字符总数,以此来控制数据缓冲区,

CHar1DB0b3h;常量,是一个竖线

tempcharDB?

;临时字节变量

musicIntDB0;文件数量

musicIndexDB30h;默认文件名的最后一个字符,随新建打开而增1,关闭减1

SaveAsFlagDB0;已调用过filesaveas函数

modifyFlagDB0;为0时已做修改

AsOrIfFlagDB0;为0时是saveas调用

saveActiveDB78h;根据musicInt来判断是否激活save,saveAs菜单

copyActiveDB78h;根据copyFlag来判断是否激活copy,cut菜单

pasteActiveDB78h;根据paste来判断是否激活paste菜单

CLearFlagDB0;clearFlag为0时表示不需要处理选择文本,如将反色显示还原

pasteFlagDB0;pasteFlag为0时为不能粘贴,

copyFlagDB0;copyFlag为0时为不能复制与剪切,

pasteNumDB0;粘贴缓冲区中字符个数.

PasteBufferDB25DUP(0)

DB'$'

;复制粘贴缓冲区

INsertNumDB1;insertNum为插入字符的个数

saveDB0;

pathDB30DUP(0);文件名存放缓冲区

DB'$'

bufferDB2000DUP(?

);buffer为数据缓冲区

bakDB3850DUP(0);视频缓冲区的备份

rowDB2;保存行号,

columnDB1;保存列号.

rowBakDB2

columnbakDB1

peakDB0Dah,78DUP(0C4h),0BFh,13,10,'$';顶端横线

errormess1DB'cannotcreatthefile,pathiswrong!

','$'

errormess2DB'cannotwritetothefile!

','$'

errormess3DB'thefilenameistoolong!

','$'

errormess4DB'cannotopenthefile,filenameiswrong','$'

errormess5DB'cannotreadthefile!

','$'

mess1DB'Pleaseinputsavefilename:

','$'

mess2DB'Pleaseinputopenfilename:

','$'

mess3DB'***Thefileisnotsave!

Saveitnow?

(Y/N)***:

','$'

mess4DB'pleaseinputthefilenameagain','$'

mess5DB'yourputiswrong!

pleaseinputY/Nagain','$'

mess6DB0b3H,'row:

column:

','$'

mess7DB'Creatanewfile','$'

mess8DB'loadsanexitingfilefromdisk','$'

mess9DB'savecurrentfile','$'

mess10DB'savecurrentfilewithnewname','$'

mess11DB'Exitstheeditor','$'

mess12DB'F1:

filemenuF4:

help','$'

mess21DB'Copyselectedtexttobuffer','$'

mess22DB'Deletesselectedtextandcopysit','$'

mess23DB'Insertsbuffercontentshere','$'

;mess13DB0b3H,'modified','$'

;mess14DB0b3h,'NoModified','$'

mess15DB'editing...pressEsccanescape','$'

mess16DB'IBMPCAssembleLanguageCourseDesign',13,10,'$'

mess17DB'Edit1.0',13,10,'$'

mess18DB'Madebyhaozhiqiangmatenglixiaopengcaipengchenetc.',13,10,'$'

mess19DB'Dec,20,2013',13,10,'$'

mess20DB'Pressanykeystoreturn','$'

wennameDB'd:

\wenjian',0,13,10,'$'

;文件相关数据定义

handlerDW0

;菜单数据定义

str_menuDB'File(F1)Edit(F3)Help(F4)',13,10,'$'

file_0DB0dah,11DUP(0C4H),0BFH,13,10,'$'

file_1DB0B3H,'New',0B3H,13,10,'$'

file_2DB0B3H,'Open',0B3H,13,10,'$'

file_3DB0B3H,'Save',0B3H,13,10,'$'

file_4DB0B3H,'Saveas',0B3H,13,10,'$'

file_5DB0B3H,'Exit',0B3H,13,10,'$'

file_6DB0c0H,11DUP(0c4h),0d9H,13,10,'$'

edit_0DB0dah,10DUP(0C4H),0BFH,13,10,'$'

edit_1DB0B3H,'Copy',0B3H,13,10,'$'

edit_2DB0B3H,'cut',0B3H,13,10,'$'

edit_3DB0B3H,'Paste',0B3H,13,10,'$'

edit_4DB0c0H,10DUP(0c4h),0d9H,13,10,'$'

error0DB'OpenFilefailed',13,10,'$'

error1DB'thefilehaveillegalcharacter',13,10,'$'

error2DB'thefilehaveillegalcharacter2',13,10,'$'

datedb0B3H,'2013','$'

data_segENDS

;*********************代码段*************8

code_segSEGMENT

ASSUMECS:

code_seg,DS:

data_seg

;************主过程开始**************

start:

MOVAX,data_seg

MOVDS,AX

CALLwelcome

INit:

CALLINitwin

callwin3

GEtchar;读键盘

CMPAH,3bh;F1

JZshowFile

;CMPAH,3ch;F2

;JZshowPlay

CMPAH,3dh;F3

JZshowE

CMPAH,3Eh;F4

JZshowh

CMPAH,01h

JZexitf

JMPINit

showFile:

CALLshowmenuF

JMPINit

;showPlay:

CALLshowMenuP

;JMPINit

showE:

CALLshowMenuE

JMPINit

showh:

CALLshowmenuh

JMPINit

exitf:

MOVAH,4ch

INT21h

;主执行代码结束,下面都是要调用的函数定义.

;***********************************

;**********欢迎模块*****************

welcomePROC

saveE

recover

RET

welcomeENDP

;----------------------------

;***********初始化模块*******

;功能:

初始化屏幕,显示菜单,提示信息,设置工作模式为3号字符模式

;****************************

INitwinPROC

saveE

MOVAH,01h

MOVCH,03h

INT10h;设置为字符模式03

win0,0,24,79,70h;清屏

win1,0,23,79,07h

win2,1,23,78,27H

poscur0,0

showstr_menu

poscur1,0

showpeak;显示上面的横线

;两个循环是画左右两条线的.

MOVCL,23

LOOPf:

poscurCL,0

putcharCHar1

DECCL

CMPCL,1

JNZLOOPf

LOOPf2:

INCCL

poscurCL,79

putcharCHar1

CMPCL,23

JNZLOOPf2

poscur2,1

posgets

CALLshowRC

poscur24,1

showmess12

poscur2,1

recover

RET

INitwinENDP

;*************************************

;蔡鹏程

;************************************

;********文件菜单模块*****************

;功能:

当在主过程或编辑状态检测到F1而被激活的.根据用户的选择来

;执行相应的菜单命令

;入口参数有musicInt:

文件数量,以此来判断是激活save,saveas菜单

;先保存视频缓冲区的内容,再获取键盘输入,按照输入跳到不同的分支,

;每个分支都调用相应的函数来处理.

;to*为当前选中项*的处理分支

;to*&,其中&是数字,为了解决汇编中的一些跳转指令分几次跳的问题,

showmenuFPROC

saveE

CALLsavedisplay

CMPmusicInt,0

JZNOTactive

MOVsaveActive,79h

JMPactiveOK

notactive:

MOVsaveActive,78h

activeOK:

win0,3,0,11,07h

poscur0,0

showstr_menu

win2,3,8,15,saveActive;菜单不选中的颜色(白底黑字)

win9,4,9,16,07h;菜单的阴影

win3,16,9,16,07h;菜单的阴影

;显示各个菜单,并设置第一个菜单为默认项,

poscur2,3

showfile_0

poscur3,3

showfile_1

poscur4,3

showfile_2

poscur5,3

showfile_3

poscur6,3

showfile_4

poscur7,3

showfile_5

poscur8,3

showfile_6

;to*为当前选中项*的处理分支

tonew:

win7,4,7,14,79h;

poscur7,3

showfile_5

win4,4,4,14,79h

poscur4,3

showfile_2

win3,4,3,14,67h

poscur3,3

showfile_1

showMmess7

GEtchar

CMPAH,50h;若按下键下方向键

JZtoOpen

CMPAH,48H

JZtoexit1

CMPAH,1ch;若按了Enter键

JZNEwfile1

JMPexitfile;其他就返回

toexit1:

JMPtoexit

NEwfile1:

JMPNEwfile

toOpen:

win3,4,3,14,79h

poscur3,3

showfile_1

win5,4,5,14,saveActive

poscur5,3

showfile_3

win4,4,4,14,67h

poscur4,3

showfile_2

showMmess8

GEtchar

CMPAH,50h

JZtoSave

CMPAH,48H

JZtonew1

JMPtonew3

tonew1:

JMPtonew

tonew3:

CMPAH,1ch

JZopenfile1

JMPexitfile

openfile1:

JMPopenfile

toSave:

win4,4,4,14,79h

poscur4,3

showfile_2

win6,4,6,14,saveActive

poscur6,3

showfile_4

win5,4,5,14,67h

poscur5,3

showfile_3

showMmess9

GEtchar

CMPAH,50h

JZtoSaveas

CMPAH,48H

JZtoOpen1

JMPtoopen3

toopen1:

JMPtoopen

toopen3:

CMPAH,1ch

JZsavefile1

JMPexitfile

savefile1:

JMPsavefile

toSaveas:

win5,4,5,14,saveActive

poscur5,3

showfile_3

win7,4,7,14,79h

poscur7,3

showfile_5

win6,4,6,14,67h

poscur6,3

showfile_4

showMmess10

GEtchar

CMPAH,50h

JZtoExit

CMPAH,48h

JZtosave1

JMPtosave3

tosave1:

JMPtosave

tosave3:

CMPAH,1ch

JZsaveasfile1

JMPexitfile

saveasfile1:

JMPsaveasfile

tosaveas1:

JMPtosaveas

toExit:

win6,4,6,14,saveActive

poscur6,3

showfile_4

win3,4,3,14,79h

poscur3,3

showfile_1

win7,4,7,14,67h

poscur7,3

showfile_5

showMmess11

GEtchar

CMPAH,50h

JZtonew2

JMPtonew4

tonew2:

JMPtonew

tonew4:

CMPAH,48h

JZtosaveas3

CMPAH,1ch

JZEXITMusic

JMPexitfile

tosaveas3:

JMPtosaveas1

;****处理不同的分支所调用的不同的函数.****/

NEwfile:

CALLfilenew

JMPexitfile

;播放完毕跳到初始位置

openfile:

CALLfileopen

JMPexitfile

savefile:

CALLfilesave

JMPexitfile

saveasfile:

CALLfilesaveas

JMPexitfile

EXITMusic:

CMPmodifyFlag,0

JNZexitfile20

CALLIFsave

JMPexitMusic

exitfile20:

MOVAX,4C00h

INT21h

exitfile:

CALLmenuHide

CALLBackDisplay

recover

poscurrow,column

RET

showmenuFENDP

;*********按下新建菜单时的处理函数******

;入口参数有:

musicInt:

文件数量,一进入即增加1

;先隐藏菜单,并用默认名创建文件,文件名根据musicInt来自动判断并更改

;最后调用函数:

editFile进入编辑状态.

filenewPROC

saveE

MOVmodifyFlag,0

CALLmenuHide

win1,28,1,56,70h;写文件名

MOVSI,8

INCmusicInt

INCwenname[SI]

poscur1,35

showwenname

win2,1,23,78,017h;工作区为蓝底白字

MOVrow,2

MOVcolumn,1

poscurrow,column

CALLEDItfile

recover

RET

filenewENDP

;************文件打开函数*********

;文件操作:

有打开,读取调用

;先提示用户正确输入文件名称,错误时要特殊处理

;

fileopenPROC

saveE

MOVmodifyFlag,1

CALLmenuHide

CALLBackDisplay

CALLsavedisplay

win10,15,12,73,00h

win9,14,11,72,0A4H

poscur10,15

showmess2

CALLCLspath

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 畜牧兽医

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1