郑州航空工业管理学院
微机原理课程设计
12 级 电气工程及其自动化 专业1206071 班级
题 目 比较输入的两个字符串是否相同 姓 名 孙浩东 学号 *********
2014 年 12 月 10 日
摘要:(150字左右)
本程序用来实现比较两个字符串是否完全相同的问题,其中包括了在dos命令窗口里提示用户输入一个字符串,并且可以通过退格键来撤消当前的输入,然后按回车表示当前字符串输入结束并换行提示令一个字符串的输入,然后对比并显示结果,其中包含了int 21h中断的4Ch号,09h号,0Ah号,02h号功来帮助程序的实现,最后把这个功能的程序编写子程序,以保证以后用的时候可以随时被调用。 关键词:(3-8个)
比较字符串,A,B,STR1,STR2,RETURN1,RETURN2,CALL,ZICHENGXU 一、设计方案
我将要实现的功能用子程序编写出来,用主程序来调用子程序,在子程序中包括了提示字符的显示、用户输入字符串并显示、比较字符串、在屏幕上显示比较的结果四部分组成。每一部分的相关设计方案如下: 1、提示字符的显示
这个过程是在屏幕上显示固定的字符,因此我先将提示信息写入数据段中,并设定相关的标号以供执行在屏幕上显示字符串的int 21H 中断例程的09H号功能调用。 2、用户输入字符串并显示
这个过程,是在执行完步骤1之后完成的,因此,我在数据段中开辟相关的内存,然后用中断例程中的0AH、02H号功能先后执行接收用户输入的字符到缓冲区以及在屏幕上的显示
3、完成1、2两步之后 ,将执行比较这个过程,用offset 这个功能来取得相关的地址,比较字符串是否相等分为两步,首先比较长度是否相等,长度不相等则执行不相等的判断结果,长度相等则进一步开始比较内容是否相等,这个过程我用转移指令来执行
4、在屏幕上显示判断的结果这个过程大致跟第一步要在屏幕上显示字符串一样,都是我事先在数据段中写好,然后根据步骤3的结果响应相应的结果,最后返回 二、程序流程框图
开始
结束 显示 YES 提示字符 用户输入 相等 NO
三、源程序清单(程序中关键代码必须有注释,子程序中开头必须是注释部分: 子程序的功能说明,子程序的输入参数和输出参数说明)。
DATAS SEGMENT
A: DB 'Please input string1:$' B: DB 'Please input string2:$' STR1: DB 20H, ,128 DUP(0) STR2: DB 20H, ,128 DUP(0) RETURN1: DB 'YES$' RETURN2: DB 'NO$' DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES, ES:DATAS,DS:DATAS START:
CALL ZICHENGXU ;调用对比字符串的子程序
MOV AX,4C00H INT 21H
;子程序从这里开始,用来实现字符串的输入,显示,比较 ZICHENGXU:
MOV AX,DATAS MOV DS,AX
MOV DX,OFFSET A ;dx是21h号中断9h号功能的参数,用来存放要显示字符串的首地址
MOV AH,09H ;显示提示输入字符串1 INT 21H
MOV DX,OFFSET STR1 ;取得标号str1的起始地址
MOV AH,0AH ;键盘输入到缓冲区 INT 21H
MOV DL,0AH ;DL为显示字符 MOV AH,02H ;显示输出 INT 21H
MOV AX,DATAS MOV DS,AX
MOV DX,OFFSET B ;提示输入字符串2 MOV AH,09H
INT 21H
MOV DX,OFFSET STR2 ;取得标号str2的起始地址
MOV AH,0AH INT 21H
MOV DL,0AH MOV AH,02H INT 21H
MOV AX,DATAS MOV ES,AX
MOV SI,OFFSET STR1 MOV DI,OFFSET STR2 ;比较字符串长度是否相等
MOV AL,ES:[SI+1] ;一个字节,因此用 al MOV BL,DS:[DI+1] CMP AL,BL JNZ NO ;比较字符串的内容是否相等
MOV CL, [SI+1] ;设置CX计数 MOV CH,0
INC SI ;将指针指向后面实际输入的字符 INC DI
CM:
INC SI INC DI
MOV AL,ES:[SI] MOV BL,DS:[DI] CMP AL,BL JNZ NO LOOP CM
MOV DX, OFFSET RETURN1 ;取YES的地址 MOV AH, 09H ;字符串显示 INT 21H
RET ;返回主程序
NO:
MOV DX,OFFSET RETURN2 MOV AH,09H
INT 21H RET
CODES ENDS
END START
设计总结: 在这一次的课程设计里面,我遇到了很多麻烦,比如,如何在屏幕上显示提示字符,由于学习汇编时间不长,对中断例程里面有什么功能也不了解,再一个就是对于那个命令符里面功能的忽视,导致了很多困难的发生,刚开始没有用已有的中断例程,完全自己研究设计一个显示字符串的代码加载到中断例程中,却也总是不成功,后来看到了DOS命令符的那张表格,才得已实现这个函数的编写,不过最后是成功了,体会到了两重天的滋味,也真正的体会了电脑的思维,CPU在执行指令时的各种寄存器的变化,IP的指向,以及各种指令下,内部的变化,从而体会到了,汇编的这种从最底层的控制CPU的能力,相信有了这种思维后,以后如果学习涉及破解,密码学之类的东本的时候,能轻松一些,同时在学习各种高级语言的时候,可以用反编译来深层次的了解个中原理……
指导教师评语: 课程设计成绩: 指导教师签名: 年 月 日
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- sceh.cn 版权所有 湘ICP备2023017654号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务