字符查找及转换课程设计说明书(编辑修改稿)内容摘要:
字符串 mov ah,09h ; 9 号 DOS 调用用于输出制定缓冲区的字符串 lea dx,string ;将输出缓冲区的首地址赋给 dx int 21h endm 字符及字符串的输入 对于字符串的输入我们采用 DOS 调用的 10号调用,用于实现对转换字符串的输入,具体程序如下: lea dx,buffer1 ;设定输入字符串存放位置的偏移地址 mov ah,0ah ; 10 号调用用于输入多字符 int 21h 对于单字符的输入我们采用 DOS 调用的 1 号调用,用于实现对待查询字母的输入,具体程序如下: mov ah,01h ; 1 号调用用于单字符输入,输入字符的 ASCII 码存放于 al 寄存器中 int 21h 选择部分 对于程序中需要选择的部分,如选择大写或小写,选择是否查询,选择是否退出并用 Y/N 进行选择,我们采用以下程序实现: choose macro opr1,opr2 mov ah,01h ; 1 号调用用于输入 Y 或 N 武汉理工大学《微机原理与接口技术》课程设计说明书 6 int 21h cmp al,59h ;将输入的字母的 ASCII 码与 Y 的 ASCII 码比较 jz opr1 ;若输入为 Y 则跳转到 opr1 所指的位置 cmp al,79h ;将输入的字母的 ASCII 码与 y 的 ASCII 码比较 jnz opr2 ;若输入的 不是 y 则跳转到 opr2 所指的位置 endm 大小写转换部分 对于大写小转换部分,存在许多共性,但在个别语句上稍有不同,转换为大写 ASCII码需要减去 20H,而转换为小写 ASCII 码 需要加上 20H, 所以将整个转换部分分为三个小部分,分别为 ready、 conversion conversion2,其结构图如图 31 所示, 其程序具体如下 : 1) ready macro mov ah,00h mov bx,0000h mov cx,0000h mov dx,0000h ; 以上四句语 句用于将 ah,bx,cx,dx 各寄存器清零 lea bx,buffer1+2 ;将缓冲区 buffer1 开始存放字符串的偏移地址赋给 bx endm 2) conversion1 macro opr1,opr2,opr3 mov al,[bx] ;将缓冲区 buffer1 的字符存入 al 寄存器中 mov dl,[bx] ;将缓冲区 buffer1 的字符存入 dl 寄存器中 cmp al,39。 $39。 ;比较输入是否为空字符串 jz result ;若为空字符串则调至输出转换结果部分 cmp al,opr1 jc opr3 cmp al,opr2 ;以上三句用于确认是否为大写或小写字母 endm 武汉理工大学《微机原理与接口技术》课程设计说明书 7 3) conversion2 macro opr1 mov 37h[bx],al ;将转换后的大写或小写字母的 ASCII 码存入另外定义的缓冲区 inc cl ; cl 自加 1,用于计数 inc bl ; bl 自加 1 用于指向下一个存储单位的 偏移地址 jmp opr1 ;调回转换大小写的语句 endm 对于大小写的转换我们通过以下语句来进行 ASCII 码的加减 20H: sub al,20h add al,20h 开 始l e a d x , b u f f e r 1 + 2m o v d l , [ b x ]m o v a l , [ b x ]m o v c x , 0 0 0 0 ha l = ’ $ ’ ?a l 7 b h / 5 b h ?a l 6 0 h / 4 0 h ?s u b / a d d a l , 2 0 hm o v 3 7 h [ b x ] , a li n c c li n c b l输 出 转 换 结 果查 询 模 块i n c c li n c b lYYYNN结 束退 出 D O SN 图 31 大小写转换模块流程图 武汉理工大学《微机原理与接口技术》课程设计说明书 8 查询部分 对于查询部分,我们采用另外定义一个缓冲区来存放查询的结果,最后则一次性全部输出,输出形式为字符出现的字符串位置,如果输入的字符不存在则查询结果显示为空,并且在每次进行下一轮查询时自动清除缓冲区里的内 容,保证下次输出的正确性,其流程图如图 32 所示,其程序如下: part3: lea si,buffer3 ;将缓冲区 buffer3 的偏移地址赋给 si push si ;将 si 的内容推入堆栈段,保护原数据 mov cl,09h ;设置计数 cl 的初值,用于清零寄存器 clear: mov [si],39。 39。 inc si loop clear ;将缓冲区 buffer3 中已存的数据清零,用以继续查询 pop si ;将存入堆栈段的 si 的原值出 栈 mov cl,00h ;计数重新清零 print message5 print message3 choose next2,exit1 next2: print message6 mov ah,01h int 21h ready done5: mov dl,[bx] ;取已存的字符串的字符存入 dl 中 cmp dl,39。 $39。 ;判断是否为空字符串或者是否查询完整个字符串 jz done6 cmp dl,al ;判断是否为待查询的字符 武汉理工大学《微机原理与接口技术》课程设计说明书 9 jz done7 ;若是待查询的字符则进入 done7 指向的相关语 句 inc bl inc cl jmp done5 ;若不是查询字符则进入下一个字符进行下一次查询 done6: print message7 print buffer3 ;输出查询结果 jmp part3 done7: inc cl mov [si],cl ;将统计出现待查询字符出现次数存入 si 中 add [si],30h ;将对应内容转化为十进制数字形式输出 inc si inc si inc bl jmp done5 ;返回进行下一个字符的查询 武汉理工大学《微机原理与接口技术》课程设计说明书 10 N开 始 是 否 查 询。 将 b u f f e r 3数 据 区 清 零m o v d l , [ b x ]输 入查 询 字 母m o v c x , 0 0 0 0 h d l = ’ $ ’。 d l = a l ?i n c c li n c b l输 出查 询 结 果i n c c lM o v [ s i ] , c li n c s ii n c s ii n c b l退 出 D O S结 束YNYYN 图 32 查询模块流程图 武汉理工大学《微机原理与接口技术》课程设计说明书 11。字符查找及转换课程设计说明书(编辑修改稿)
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。
用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。