微机原理课程设计报告-字符串分类统计

合集下载

微机原理课设报告

微机原理课设报告

中南大学微机原理课程设计报告一、课程设计目的通过本次课程设计要掌握8088,8255,0809,0832,8279 等多种芯片使用的方法,灵活运用课本知识,加深所学的知识,对所学的相关芯片的原理、内部结构、使用方法等有更加深刻的了解,学会利用课本知识联系实际应用及编程。

同时并了解综合问题的程序设计掌握实时处理程序的编制和调试方法,掌握一般的设计步骤和流程,使我们以后搞设计时逻辑更加清晰。

二、课程设计任务本次课设选题为“模拟电压采集,直流电机控制”。

根据我自己对这个课题的理解,我认为这个课题应该实现以下的要求:基本要求:1、对模拟电压进行采集转换为数字信号,并实时显示。

2、用转换的到的数字信号再经数模转换,对直流电机进行控制。

拓展要求:1、通过发光二极管作为信号指示灯,实时的指示直流电机的工作状态是否正常。

2、建立报警电路,对电机非正常工作情况以及反转工作情况下进行报警。

三、设计思想与原理1、设计思想本次课设选题为“模拟电压采集,直流电机控制”,基本分为两大部分:模拟量采集的模数转换部分,以及电机控制中的数模转换部分。

而为了让模拟量的采集结果更加明显可察,将加入数码管显示模块,实时显示模拟量采集的大小情况。

与此同时,在选题基础上添加了直流电机工作状态指示灯电路和报警电路。

2、设计原理根据试验箱相关配置,取电位器0~5V 可调电压为模拟量输出模块,可线性调节输出。

取芯片ADC 0809 对采集到的模拟信号进行模数转换,将0~5V 的电压信号转为00~FF 的数字信号,并通过8279 键盘扫描输出模块进行相应的显示输出。

得到转换后的数字量之后,使用DAC0832 数模转换芯片进行数模转换,并将所得模拟量输出到直流电机控制端,进行电机驱动。

对于添加的模块,主要通过8255 芯片来实现,取8255 的PA0 口作为输出端口,连接试验箱上的开关量输入显示区的发光二极管。

对A口分别赋值01H (直流电机正向非正常工作)、02H(直流电机正常工作)、04H(直流电机反向非正常工作)并输入给开关量输入显示区的发光二极管,驱动前三个二极管在电机的三种工作状态下分别发光,从而实现指示灯电路。

字符串操作课程设计报告

字符串操作课程设计报告

字符串操作课程设计报告
一、设计目的
本课程设计旨在让学生掌握字符串操作的基本概念、常用函数及应用,使其具备基本的字符串操作能力,为其今后的学习和工作打下坚实的基础。

二、教学内容及安排
1. 字符串基本概念
•字符串的定义
•字符串的表示方法
•字符串的属性和特点
2. 字符串常用函数
•字符串长度函数
•字符串连接函数
•字符串切片函数
•字符串查找与替换函数
•字符串大小写转换函数
3. 字符串应用
•字符串的格式化输出
•字符串的读写操作
•字符串的文本处理
•字符串的正则表达式
4. 实践操作
•字符串的基本练习
•字符串的应用练习
三、教学方法
本课程设计采用课堂讲解、案例讲解和实践操作相结合的教学方法,通过理论和实践相结合的方式,提高学生的学习兴趣和实践能力。

四、教学材料
•电脑
•Python编程软件
•相关教学资料
五、课程评价
本课程设计通过理论与实践相结合的方式,提高了学生的学习效果和实践能力。

学生可以通过实践操作,深入了解字符串操作相关的知识和应用,从而进一步提高自己的编程能力。

六、
本课程设计重点讲解了字符串操作的基本概念、常用函数及应用,让学生熟悉
掌握字符串的基本要素和常用操作,为今后的编程实践打下了坚实的基础。

同时,该课程设计注重实践操作,真正做到理论与实践的有机结合,为学生培养独立思考和自主学习的能力,为其今后的发展打下坚实的基石。

汇编语言实验报告2分类统计字符个数

汇编语言实验报告2分类统计字符个数

汇编语言实验报告2分类统计字符个数一、实验内容:经过分支程序设计实现字母、数字及其他字符的分类统计计数。

二、实验要求:程序接受用户键入的一行字符(字符个数不高出 80 个,该字符串用回车符结束),并按字母、数字及其他字符分类计数,尔后将结果存入以letter 、digit 和 other 为名的储藏单元中。

输出可以用十六进制数形式。

可以进一步考虑更细节的统计分类。

说明:数据变量的定义,单个字符的输入、字符串的输出、结果数字的输出,都是需要考虑的问题。

分类主若是数字:’0’~’9’,字母’A’~’Z’和’a’~’z’,其他。

对应的 ASCII码为 30H~39H, 41H~5AH, 61H~7AH,...1、单个字符的输入,可以使用DOS中断功能 01:MOV AH,01HINT 21H; 输入符号的 ASCII代码在 AL 寄存器中2、字符串的输出,可以使用DOS中断功能 09:LEA DX, message ; message需要早先定义好,必定是以’结$’尾的字符串 MOV AH, 09HINT21H3、字符串的输入,可以使用DOS中断功能在数据段中有string DB 80, , 80 DUP()0AH,但需要早先定义空间string,LEA DX, stringMOV AH, 0AHINT21H4、计数获取的是二进制数值,在输出时要考虑变换成哪一种进制形式的字符来显示。

三、实验源代码以下:DATAS SEGMENTSTRING1 DB'Please input a string:$'STRING2 DB'Number of chars:$STRING3 DB'Number of digits:$'STRING4 DB'Number of others:$'CHARS DB 0 ;字母DIGIT DB 0;数字OTHERS DB 0其;他DATAS ENDS ;输入提示信息'; 各样字符提示信息STACKS SEGMENT;此处输入货仓段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXLEA DX,STRING1 ;显示输入提示信息 Please input a string MOV AH,09HINT 21HMOV CX,100;设置循环次数足够大L1:MOV AH,01H INT 21H ;中断调用,单字符输入; 输入符号的ASCII代码在AL 寄存器中CMP AL,0DH;若输入回车符则结束JZ OVER2CMP AL,30H;若<30H(0),OTHERS++JB OTHERCMP AL,39H;若>39H(9),跳转进一步比较JA HIGHER1JMP DIGITAL;DIGIT++HIGHER1:CMP AL,41H;若IF<41H(A),OTHERS++ JB OTHERCMP AL,5AH;若IF>5AH(Z),跳转连续比较JA HIGHER2JMP CHAR;ALPHAU++HIGHER2:CMP AL,61H;若IF<61H(a),OTHERS++ JB OTHERCMP AL,7AH;若IF>7AH(z),OTHERS++JA OTHERJMP CHAR;ALPHAU++JMP OVER;比较结束OTHER: INC OTHERSJMP OVER CHAR: INC CHARSJMP OVER DIGITAL:INC DIGITJMP OVER ;OTHERS++ ;比较结束;ALPHAL++ ;比较结束;DIGIT++;比较结束JMP OVER;比较结束OVER:NOPLOOP L1;循环,输入下一字符OVER2:CALL ENDLINE;回车换行LEA DX,STRING2;字符串的输出Number of charsMOV AH,09HINT 21HXOR AX,AXMOV AL,CHARS;将统计的数字送AXCALL DISPLAY;调用输出两位数字的子程序CALL ENDLINELEA DX,STRING3;字符串的输出Number of digitsMOV AH,09HINT 21HXOR AX,AXMOV AL,DIGIT;将统计的数字送AXCALL DISPLAY;调用输出两位数字的子程序CALL ENDLINELEA DX,STRING4;字符串的输出Number of others MOV AH,09HINT 21HXOR AX,AXMOV AL,OTHERS;将统计的数字送AXCALL DISPLAY;调用输出两位数字的子程序MOV AH,4CHINT 21HENDLINE PROC NEAR;控制输出格式,输出回车换行子程序MOV AH,02HMOV DL,0AHINT 21H;输出换行符MOV AH,02HMOV DL,0DHINT 21H;输出回车符RETENDLINE ENDPDISPLAY PROC NEAR;输出两位数字的子程序(输出两位数字为十进制)MOV BL,10DIV BL;AX/BL,AL=商, AH=余数PUSH AX;保存 AX 中的信息MOV DL,ALADD DL,30HMOV AH,02HINT 21H;输出十位数POP AX;出栈送AXMOV DL,AHADD DL,30HMOV AH,02HINT 21H;输出个位数RETDISPLAY ENDPCODES ENDSEND START四、实验运行结果以下:(附截图)注:两位数为十进制。

微机原理实验报告(江苏大学)

微机原理实验报告(江苏大学)

微机原理课程设计报告专业:学号:姓名:一:课程设计目的结合微型计算机原理课程的学习,进一步巩固已学的知识,同时针对微型计算机原理知识的具体应用,学会对系统中DOS和BIOS的使用。

学会使用命令调用DOS观察程序运行结果,学会使用汇编语言编写程序,弄懂汇编程序的执行过程,弄懂汇编程序的上机过程以及如何运用MASM软件进行汇编程序的调试。

二:设计内容1.字符串匹配设计为掌握提示信息的设置方法及读取键入信息的方法,编写程序实现两个字符串比较,如相同则显示“MATCH”,否则显示“NO MATCH”。

详细源程序如下:CRLF MACROMOV AH,02HMOV DL,0DHINT 21HMOV AH,02HMOV DL,0AHINT 21HENDMDATA SEGMENTS1 DB'MATCH',0DH,0AH,'$'S2 DB'NO MATCH',0DH,0AH,'$'S3 DB'INPUT STRING1:',0DH,0AH,'$'S4 DB'INPUT STRING2:',0DH,0AH,'$'MAXLEN1 DB 81ACTLEN1 DB?STRING1 DB 81 DUP (?)MAXLEN2 DB 81ACTLEN2 DB?STRING2 DB 81 DUP (?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV ES,AXMOV AH,09HMOV DX,OFFSET S3INT 21HMOV AH,0AHMOV DX,OFFSET MAXLEN1INT 21HCRLFMOV AH,09HMOV DX,OFFSET S4INT 21HMOV AH,0AHMOV DX,OFFSET MAXLEN2INT 21HCRLFMOV SI,OFFSET STRING1MOV AH,[SI-1]MOV DI,OFFSET STRING2MOV AL, [DI-1]CMP AH,ALJGE GE1MOV CL,ALGE1: MOV CL,AHKKK: MOV AL,[SI]mov AH,[DI]CMP aH,ALJNZ NE1INC SIINC DILOOP KKKMOV AH,09HMOV DX,OFFSET S1INT 21HJMP EXITNE1: MOV AH,09HMOV DX,OFFSET S2INT 21HEXIT: MOV AX,4CHINT 21HCODE ENDSEND START以下是程序运行结果:2.从键盘输入数据并显示的设计为掌握键盘接受数据的方法,并了解将键盘数据显示时必须转换为ASCII 码的原理,编写程序,将键盘接受到的四位十六进制数据转换为等值的二进制数显示。

微机原理课程设计报告-字符串分类统计

微机原理课程设计报告-字符串分类统计

安徽新华学院《微机原理与接口技术》课程设计字符串分类统计组长:成员:指导教师:班级:2008年12月4日目录一、摘要 (3)二、系统设计 (4)1、内容 (4)2、思路 (4)3、程序设计 (6)4、调试结果 (12)三、系统总结 (13)四、人员分工 (14)五、参考文献 (15)一、摘要本程序主要用于,把输入的一串字符分类统计,分别统计出数字、大写字符、小写字符和其他字符的个数。

本程序采用汇编语言编程,定义了宏、比较判断、循环调用、统计等等,非常人性化的把统计的结果显示出来。

比如你输入一串数字“12345”,它会显示出你输入的这串数字,并显示数字的个数为5,同时显示其他相应类字符为空。

二、系统设计1、内容从键盘输入任意一个字符串,以回车作为结束符并显示,分别统计并显示出其中数字字符、大写字符、小写字符以及其它字符的个数。

2、思路(1).首先定义两个宏,一个用于输出统计各字符的个数,另一个用于输出字符串。

(2).在数据段中定义各种字符提示信息以便程序清晰明白。

(3).定义数据缓冲区用于存放输入的字符串,定义NUM区用于存放统计的大写字符、小写字符、数字以及其它字符的个数。

定义OTHERCHAR、BIGCHAR、SMALLCHAR以及堆栈用于存放统计的相应字符保存,以便后来输出。

(4).首先调用DOS 10号功能用DX指定BUF区,将输入的字符串保存到BUF区中。

(5).将BUF+1的内容取出来,判断是否为0,如果为0表示没有输入任何字符,则程序跳到NEXTLAP(输出提示信息You do not input any string!),然后显示字符串(Do you want to input a string again(Y/N)?)然后调用DOS 1号功能获取您从键盘输入的数,判断是否为Y或y如果是则将程序跳到刚开始处重新执行,如果不是这两个字符则程序结束。

(6).如果输入了字符串,则调用DOS 2号功能将BUF里的内容输出来(2号功能可以输出$符号而9号功能遇到$符号就终止)。

微机原理实验报告

微机原理实验报告

软件实验四:统计显示输入的各类字符实验内容从键盘键入字母数字串,统计各类字符个数并以十进制形式在显示器上显示出来。

显示格式要求1、在显示器上显示提示信息:Pleace input any digital and letter string2、在显示器上显示The string you inputed is:XXXXXXXXXX3、在显示器上分行显示十进制统计结果The Nembers of Digital is:XXThe Nembers of Capital Letters is:XXThe Nembers of Small Letters is:XX4、在显示器上显示提示信息Are you continue?(Y/N)按Y继续1~3的统计显示过程,按N或其它字符均退出统计返回DOS。

这里建议:不区分输入Y或N的大小写,均为有效。

程序要求:1、提示字符串的显示功能用宏指令INOUT实现2、回车换行用CRLF宏指令实现3、单个字符输入用INPUT宏指令实现4、分类统计功能由子程序TONGJI实现5、二进制转十进制并显示功能由子程序BTOD 实现流程图:统计等过程与前面的实验相同,总的流程图及二、十进制的数转化流程图如下:实验程序:CRLF MACRO ;回车宏定义MOV DL,0DHMOV AH,2INT 21HMOV DL,0AHMOV AH,2INT 21HENDMINOUT MACRO ADDRESS ;字符串显示的宏定义LEA DX,ADDRESSMOV AH,9INT 21HENDMOUTPUT MACRO ;字符显示的宏定义MOV DL,LABMOV AH,2INT 21HENDMINPUT MACRO ;单个字符输入的宏定义MOV AH,1INT 21HENDMDATA SEGMENT ;数据段定义常用的字符和存储单元SHUZI DB 0DAXIE DB 0XIAOXIE DB 0BUFSIZE DB 50 ;为键入的字符串定义存储地址ACTCHAR DB ? ;统计输入字符串的字符个数CHARTEXT DB 50 DUP(?)DB '$'MESG1 DB 'The Nubers of Digital is:$' ;常用的几个字符串MESG2 DB 'The Nubers of Capital Letters is:$'MESG3 DB 'The Nubers of Small Letters is:$'TISHIYU1 DB 'Please input any digital and letter string!$'SHUCHU DB 'The string you input is:$'TISHIYU2 DB 'Are you continue?(Y/N)$'LAB DB 'H$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:PUSH DX ;初始化MOV AX,0PUSH AXMOV AX,DATAMOV DS,AXINOUT TISHIYU1 ;提示键入字符串CRLFMOV DX,OFFSET BUFSIZE ;存储键入字符串的首地址MOV AH,0AHINT 21HINOUT SHUCHU ;输出定义的提示的字符串MOV BH,0MOV BL,ACTCHARMOV CHARTEXT[BX],'$'MOV DX,OFFSET CHARTEXTMOV AH,09H ;显示所键入的字符串INT 21HCRLFCALL TONGJI ;调用子过程,统计各类字符MOV DI,0745HMOV AL,SHUZIMOV [DI],ALMOV AL,DAXIEINC DIMOV [DI],ALMOV AL,XIAOXIEINC DIMOV [DI],ALMOV DI,0745HCRLFINOUT MESG1 ;将统计结果按要求的格式显示在DOSMOV BL,[DI]CALL BTOD ;调用子过程实现二进制到十进制的转化及显示CRLFINC DIINOUT MESG2MOV BL,[DI]CALL BTODCRLFINC DIINOUT MESG3MOV BL,[DI]CALL BTODCRLFINOUT TISHIYU2 ;输出提示语是否继续CRLFINPUTCRLFCMP AL,'Y' ;不区分大小写的识别是否继续JNE NT1JMP STARTNT1:CMP AL,'y'JNE K2 ;不能响应的字符需重新输入JMP START ;继续则重复运行上述程序K2: MOV AH,4CH ;不继续则返回DOSINT 21HTONGJI PROC ;定义子过程,实现各类字符的统计MOV AX,DATAMOV DS,AXXOR AX,AXMOV SHUZI,0MOV DAXIE,0MOV XIAOXIE,0LEA SI,CHARTEXTMOV CL,ACTCHAR ;ACTCHAR即键入字符串的长度CLDNEXT: LODSBCMP AL,39HJNC LOOP1INC SHUZIJMP AGINLOOP1: CMP AL,61HJNC LOOP2INC DAXIEJMP AGINLOOP2: INC XIAOXIEAGIN: LOOP NEXTTONGJI ENDPBTOD PROC ;子过程实现二、十进制的转换即显示MOV BH,0L0:CMP BL,0AHJAE L1JMP L2L1:SUB BL,0AH ;是否大于九INC BH ;大于的时候向高位进一JMP L0L2:ADD BL,30H ;小于九则直接显示ADD BH,30HMOV DL,BHMOV AH,02HINT 21HMOV DL,BLMOV AH,02HINT 21HRETBTOD ENDPCODE ENDSEND STARTEND START实验结果:。

自-微机原理实验_字符串处理程序

实验课程名称微机原理实验实验项目名称字符串处理程序实验指导老师学生姓名学院理学院专业电子信息科学与技术年级2008级(一)班学号实验时间2010年12月20日总成绩ﻩﻩ①INT21HPOP AXMOVDL, ALORDL,30HMOV AH,2INT 21HMOV AH,4CHINT 21HCODEﻩENDSEND START编译源程序:如下,发现地29行有错误。

用EDIT命令找到错误地方,并进行修改,如下图所示:修改后保存程序,重新编译:重新编译后程序没有错误,用反汇编查看指令代码:如下图所示:运行程序,验证程序设计结果的正确性。

从键盘上输入字符串“ADKJjkdjfljdeowekdjg”,共二十个字符,其中小写字母十六个,显示结果如下:由运行结果可知,程序运行正确,实现了设计要求。

②实验2课参考教材第五章练习10的解法,但要编写一个在同一个字符串中删除字符,并将其余字符向前递补。

删除字符串中重复字符的源程序清单:;DELD.ASMDATA SEGMENTSTRN DB 80 DUP(?)LEN DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATAMOV DS,AXMOV ES,AXLEA SI,STRN①MOV CL,0 AGAIN: MOV AH,1 ①INT 21HCMP AL,0DHJZ DONEMOV [SI],ALINC SIINC CLJMP AGAINDONE: MOV CH, 0MOV LEN,CLDEC SI②MOV BYTE PTR [SI+1],'$'源程序在27行有错误,有提示的消息可知,此处需要用到变址或基址寄存器,用EDIT命令找到错误的地方,并改正:此处是寄存器直接寻址,把cl的值送给标号为LEN存储单元,所以应去掉”[]”修改程序保存再编译以检查是否还有错误:有上图编译可知,程序修改正确,接下来连接成目标程序:生成的目标程序名为DELD.EXE用反汇编命令查看程序代码:运行程序,检验程序设计的正确性:执行程序,输入字符串”DKJKLDKEIOWEJDLJAHNVL”,根据编写要求,显示的结果为“KIOWEDJAHNVL“,既删除字符串中重复的字符。

字符串分类课程设计

字符串分类课程设计一、课程目标知识目标:1. 让学生掌握字符串的基本概念,理解字符串在计算机科学中的重要性;2. 学会运用不同的方法对字符串进行分类,并能解释分类的原理;3. 掌握字符串比较、查找和替换等基本操作,并了解其在实际问题中的应用。

技能目标:1. 培养学生运用计算机编程语言对字符串进行分类和处理的能力;2. 培养学生运用所学知识解决实际问题的能力,提高逻辑思维和编程技巧;3. 培养学生团队协作和沟通交流能力,通过小组讨论和实践,共同完成字符串分类任务。

情感态度价值观目标:1. 激发学生对计算机科学的兴趣,培养积极的学习态度和探索精神;2. 培养学生认真细致的工作作风,严谨的科学态度,对编程过程中出现的问题能积极面对并解决;3. 培养学生遵守道德规范,尊重他人成果,养成良好的学术道德和团队协作精神。

课程性质:本课程为计算机科学与技术学科的基础课程,旨在使学生掌握字符串的基本概念和操作,培养编程思维和实际应用能力。

学生特点:学生为初中生,具备一定的计算机操作基础,对编程有一定了解,但尚未系统学习字符串相关知识。

教学要求:结合学生特点,课程设计应注重理论与实践相结合,注重启发式教学,引导学生主动探索和解决问题,提高学生的动手实践能力。

教学过程中,注重分层教学,关注每个学生的学习进度,确保课程目标的达成。

二、教学内容1. 字符串基本概念:介绍字符串的定义、性质和表示方法,使学生了解字符串在计算机科学中的重要作用。

教学内容:教材第3章“字符串及其表示方法”。

2. 字符串分类方法:讲解字符串分类的原理,包括基于字符、长度、出现频率等不同分类方法。

教学内容:教材第4章“字符串操作与处理”,第1-2节。

3. 字符串基本操作:介绍字符串比较、查找、替换等基本操作,并通过实例讲解其在实际问题中的应用。

教学内容:教材第4章“字符串操作与处理”,第3-4节。

4. 编程实践:组织学生进行小组合作,运用所学知识编写程序,实现对字符串的分类和操作。

《微机原理》课程设计报告

《微机原理》课程设计报告班级:姓名:学号:一、目的结合微机原理课程的学习,进一步巩固所学只是,掌握汇编语言的编程要领,熟悉汇编程序上机过程以及进行程序调试。

二、设计任务,程序清单,流程图任务1(具体题目要求):字符串匹配设计为掌握提示信息的设置方法及读取键入信息的方法。

编写程序实现两个字符串比较。

如相同,则显示:“MATCH”,否则,则显示“NO MATCH”程序清单:DA TA SEGMENTINPUT1 DB 'INPUT STRING1!',0DH,0AH,'$'INPUT2 DB 'INPUT STRING2!',0DH,0AH,'$'MAT DB 0DH,0AH,'MATCH!$'MISMAT DB 0DH,0AH,'NO MA TCH!$'LEN1 DB 20STRING1 DB 20 DUP(?)LEN2 DB 20STRING2 DB 20 DUP(?)DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA,ES:DATAMAIN PROC FARMOV AX,DA TAMOV DS,AXMOV ES,AXMOV AH,09HMOV DX,OFFSET INPUT1INT 21HMOV AL,LEN1MOV BX,OFFSET STRING1MOV [BX],ALMOV AH,0AHMOV DX,OFFSET STRING1INT 21HCALL CRLFMOV AH,09HMOV DX,OFFSET INPUT2INT 21HMOV AL,LEN2MOV BX,OFFSET STRING2MOV [BX],ALMOV AH,0AHMOV DX,OFFSET STRING2INT 21HCALL CRLFCLDLEA SI,STRING1LEA DI,STRING2MOV CX,5REPE CMPSBJNE NOMATMOV AH,9MOV DX,OFFSET MATINT 21HJMP EXITNOMA T:MOV AH,9LEA DX,MISMA TINT 21HEXIT: MOV AH,4CHINT 21HCRLF PROC NEARMOV DL,0DHMOV AH,2INT 21HMOV DL,0AHMOV AH,2INT 21HRETCRLF ENDPMAIN ENDPCODE ENDSEND MAIN流程图:…….任务2(具体题目要求)将键盘输入的小写字母转换为大写字母的设计为了解小写字母和大写字母在计算机内的表示方法,并学习如何进行转换。

微机原理课程设计报告

微机原理课程设计报告班级:电信科技0801姓名:学号: 3080504016一、目的结合微型计算机原理课程的学习,进一步巩固已学的知识,同时针对微型计算机原理知识的具体应用,学会对系统中DOS和BIOS的使用,学会使用EDIT软件,弄懂汇编程序的上机过程以及如何运用DEBUG软件进行汇编程序的调试。

二、内容1.字符串匹配设计为掌握提示信息的设置方法及读取键入信息的方法。

编写程序实现两个字符串比较。

如相同,则显示“MATCH”,否则,显示“NO MATCH”。

2.接收年、月、日信息并显示的设计为掌握响铃的使用方法。

并掌握年月日输入方法,编写程序,先显示“Input the data(xxxx/xx/xx):”并响铃一次,然后接收键盘输入的信息,最后显示出来。

3.响铃设计为掌握响铃的使用方法。

编写程序,从键盘接收输入字符,如是数字N,则响N次;如不是数字,则不响。

4.计算机钢琴的设计为掌握pc机扬声器发出不同频率声音的方法和进一步掌握利用系统功能调用从键盘上读取字符的方法。

编写程序,在程序运行时使PC机成为一架可弹奏的“钢琴”。

当按下数字键1-9时,会依次发出1,2,3,4,5,6,7,高音1,高音2九个音调,按回车后退出。

5.排序设计为掌握用汇编语言编写排序程序的思路和方法。

编写程序,从首地址为1000H开始存放35个数,要求设计程序将这些数由小到大排序,排序后的数,仍放在该区域中。

6.计算N的阶乘的设计为了解高级语言中的数学函数是怎样在汇编语言一级上实现的。

编写计算N!的程序。

数值由键盘输入,结果在屏幕上输出。

N的范围是0~FFFFH,即刚好能被一个16位寄存器容纳。

三、重点内容:本次课程设计中,我做的重点内容是计算机钢琴和N的阶乘设计,计算机钢琴是我感觉比较有趣,而N的阶乘设计花的时间做多,因此此处主要介绍N的阶乘的设计内容。

(1)流程图主程序的流程图如下:开始显示请输入数字N调用get 子程序,得到的N 放入BPSI 指向结果数据缓存区ANS初始化检测是否输入错误BP=0或1?BP 值放入ANS 首地址,默认长度放入L 中BP=BP-1BP=1?CY=0,BX=0结果缓存长度L 放入CX[SI+BX]*BPAX+C(上次相乘的进位数据)DX 加1有进位?AX 放入[SI+BX]中DX 放入进位缓存C 中BX=BX+2指向ANS 的下一个数据位置CX=CX-1CX=0?DX=0?结果长度L 加1DX 放入[SI+BX]单元内ANS 结果放1显示‘the result is ’调用显示子程序返回dos 结束YesNoYesNoNoYes YesNoYes No(2)源程序代码DATA SEGMENTANS DW 5000 DUP(?) ;运算结果缓存区 SS1 DB 'Please INPUT the number(END WITH H):','$' SS2 DB 'WRONG INPUT!','$' SS3 DB 'THE RESULT IS:','$'L DW 1 ;存结果长度C DW 0 ;存上次运算进位数据ZIXING DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,41H,42H,43H,44H,45H,46H ;显示时的字形码 DATA ENDS;---------------------------------------------------------------------------- CODE SEGMENTASSUME CS:CODE,DS:DATASTART PROC FARMOV AX,DATAMOV DS,AXMOV DX,OFFSET SS1MOV AH,9INT 21H ;输出'Please INPUT the number(END WITH H):' MOV BP,00HCALL GET ;调用取数据N子程序MOV DL,0AhMOV AH,02HINT 21HMOV DI,LCMP DI,0JE ENDD ;判断是否输入错误CMP BP,01HJNA ANSWER1 ;BP=0/1MOV SI,OFFSET ANSMOV [SI],BPMNEXT: DEC BP ;N不断减1直到N=1CMP BP,1JE ANSWERNMOV C,0XOR BX,BXMOV CX,L ;长度放CXM1: MOV AX,[SI+BX]MUL BP ;上次运算结果与BP相乘ADD AX,CADC DX,0HMOV [SI+BX],AXMOV C,DXINC BXINC BX ;指向下一单元DEC CX ;目前长度减1JNZ M1CMP DX,0JZ MNEXTMOV AX,LINC AXMOV L,AX ;长度加1MOV [SI+BX],DXJMP MNEXTANSWER1:MOV SI,OFFSET ANS ;如果N=1、0,结果为1 MOV AX,1MOV [SI],AXANSWERN:MOV AH,2 ;回车MOV DL,0DHINT 21HMOV DX,OFFSET SS3MOV AH,9INT 21HCALL DISPLAY ;显示结果MOV DL,48H ;最后加一个H表示是16进制MOV AH,2INT 21HENDD: MOV AH,4CH ;返回DOSINT 21HRETSTART ENDP;----------------------------------------------------------------- GET PROC NEARNE1: MOV AH,01HINT 21HCMP AL,29H ;先判断是否输入正确0~FJNA WRONGCMP AL,39HJA N1SUB AL,30HJMP ADN1: CMP AL,40HJNA WRONGCMP AL,46HJA WRONGSUB AL,37HAD: MOV AH,00HMOV CL,4SHL BP,CLADD AX,BP ;将取到的值放入BP中MOV BP,AXJMP NE1WRONG: CMP AL,48H ;判断结束标志JNE TWRONGRETTWRONG: MOV DX,OFFSET SS2 ;判断为错误输入MOV AH,09HINT 21HMOV AX,0MOV L,AXRETGET ENDP;------------------------------------------------------------DISPLAY PROC NEARMOV BX,L ;结果长度放入BXSHL BX,1AG1: SUB BX,2 ;运算得到正确的偏移值MOV DX,[BX+SI]MOV CH,4 ;每次输出4位AG2: MOV AX,DXAND AH,0F0HPUSH BXMOV BX,OFFSET ZIXINGMOV AL,AHMOV CL,4SHR AX,CLXLAT ;查表得到输出字形POP BXPUSH DXMOV DL,ALMOV AH,02HINT 21HPOP DXSHL DX,CLDEC CHJNZ AG2CMP BX,0 ;判断是否输完JNE AG1RETDISPLAY ENDP;---------------------------------------------------------------------CODE ENDSEND START四、心得体会经过了为期一周的微机原理课程设计,我又重新掌握了微机原理汇编这门语言。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

安徽新华学院《微机原理与接口技术》课程设计字符串分类统计组长:成员:指导教师:班级:2008年12月4日目录一、摘要 (3)二、系统设计 (4)1、内容 (4)2、思路 (4)3、程序设计 (6)4、调试结果 (12)三、系统总结 (13)四、人员分工 (14)五、参考文献 (15)一、摘要本程序主要用于,把输入的一串字符分类统计,分别统计出数字、大写字符、小写字符和其他字符的个数。

本程序采用汇编语言编程,定义了宏、比较判断、循环调用、统计等等,非常人性化的把统计的结果显示出来。

比如你输入一串数字“12345”,它会显示出你输入的这串数字,并显示数字的个数为5,同时显示其他相应类字符为空。

二、系统设计1、内容从键盘输入任意一个字符串,以回车作为结束符并显示,分别统计并显示出其中数字字符、大写字符、小写字符以及其它字符的个数。

2、思路(1).首先定义两个宏,一个用于输出统计各字符的个数,另一个用于输出字符串。

(2).在数据段中定义各种字符提示信息以便程序清晰明白。

(3).定义数据缓冲区用于存放输入的字符串,定义NUM区用于存放统计的大写字符、小写字符、数字以及其它字符的个数。

定义OTHERCHAR、BIGCHAR、SMALLCHAR以及堆栈用于存放统计的相应字符保存,以便后来输出。

(4).首先调用DOS 10号功能用DX指定BUF区,将输入的字符串保存到BUF区中。

(5).将BUF+1的内容取出来,判断是否为0,如果为0表示没有输入任何字符,则程序跳到NEXTLAP(输出提示信息You do not input any string!),然后显示字符串(Do you want to input a string again(Y/N)?)然后调用DOS 1号功能获取您从键盘输入的数,判断是否为Y或y如果是则将程序跳到刚开始处重新执行,如果不是这两个字符则程序结束。

(6).如果输入了字符串,则调用DOS 2号功能将BUF里的内容输出来(2号功能可以输出$符号而9号功能遇到$符号就终止)。

(7).取字符出来进行比较统计,如果它比30H大且比39H小则为数字,如果比41H大且比5AH小则为大写字符,如果比61H大且比7AH小则为小写字符,如果不是这三种情况则为其它字符。

注:DX存数字个数,BX存小写字母个数,DI存大写字母个数,BP存其它字符个数。

(8).将数字个数、大写字母个数、小写字母个数、其它字符个数依次放入NUM区。

(9).依次输出各字符:a.判断数字个数是否为0,如果为0则输出提示没有此类数据,否则输出数字个数以及有哪些数字。

b.判断大写字符个数是否为0,如果为0则输出提示没有此类数据,否则输出大写字符的个数以及输入的哪些大写字符。

c.判断小写字符个数是否为0,如果为0则输出提示没有此类数据,否则输出小写字符的个数以及输入的哪些小写字符。

d.判断其它字符个数是否为0,如果为0则输出提示没有此类数据,否则输出其它字符的个数以及输入的哪些其它字符。

(10).然后将程序跳到NEXTLAP继续执行,依次下去。

流程图:3、程序设计shuchu MACRO ;定义宏,用来输出统计其它字符、数字、大小写个数LOCAL NEXTMOV AH,0MOV BL,10DIV BLMOV DL,ALMOV BH,AH ;将余数暂时存放在BH中CMP AL,0JZ NEXTOR DL,30hMOV AH,2INT 21HNEXT:MOV DL,BHOR DL,'0';输出余数MOV AH,2INT 21Hdismsg CRLF ;回车换行ENDMdismsg MACRO message ;输出字符串LEA DX,messageMOV AH,9INT 21HENDMDATAS SEGMENTSTR DB'The input string is:$'STR1 DB'Please input a string:$'STR2 DB'The integer is:$'STR3 DB'The bigchar is:$'STR4 DB'The smallchar is:$'STR5 DB'The otherchar is:$'STR6 DB'The date of integer is null!$'STR7 DB'The date of otherchar is null!$'STR8 DB'The data of bigchar is null!$'STR9 DB'The data of smallchar is null!$'NUM2 DB'The number of integer is:$'NUM3 DB'The number of bigchar is:$'NUM4 DB'The number of smallchar is:$'NUM5 DB'The number of otherchar is:$'NUM6 DB'Do you want to input a string again?(Y/N):$' NUM7 DB'You do not input any string!$'NUM8 DB'Please input correct command!$'BUF DB 100 ;定义缓冲区用来存放输入的字符串DB?DB 100 DUP (24H)CRLF DB 0AH,0DH,'$'NUM DB 4 DUP(?)BIGCHAR DB 100 DUP(24H),0AH,0DH,'$'SMALLCHAR DB 100 DUP(24H),0AH,0DH,'$'OTHERCHAR DB 100 DUP(24H),0AH,0DH,'$'TAIL DB?;用来存放其它字符的个数DATAS ENDSSTACKS SEGMENTSTACK1 DW 100 DUP(24H)TOP LABEL WORDSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:AGAIN1:MOV AX,STACKSMOV SS,AXMOV SP,OFFSET TOPMOV AX,DATASMOV DS,AXMOV CX,100AGAIN2:LEA SI,BIGCHARMOV [SI],24HLEA DI,SMALLCHARMOV [DI],24HLEA BX,OTHERCHARMOV [BX],24HINC SIINC DIINC BXLOOP AGAIN2dismsg STR1 ;显示输入提示信息MOV AH,10 ;输入字符串LEA DX,BUFINT 21Hdismsg CRLF ;回车换行CMP BUF+1,0JZ NEXTLAPdismsg STR ;提示输入字符串MOV CL,BUF+1LEA SI,BUF+2ABC:MOV DL,[SI] ;用于输出缓冲区里的输入字符串MOV AH,2INT 21HINC SILOOP ABCdismsg CRLF ;回车换行MOV CL,BUF+1 ;将字符串的个数放入CLLEA SI,BUF+2 ;取字符串的首地址MOV DX,0 ;DX统计数字个数MOV BX,0 ;BX统计小写字母个数MOV DI,0 ;DI统计大写字母个数MOV BP,0 ;BP统计其他字符的个数MOV AH,0L1: MOV AL,[SI]CMP AL,30HJL NEXT1CMP AL,39HJG L2PUSH AXINC DX ;统计数字字符的个数JMP NEXTL2: CMP AL,41H ;统计大写字符的个数JL NEXT1CMP AL,5AHJG L3MOV BIGCHAR[DI],ALINC DIJMP NEXTL3: CMP AL,61H ;统计小写字符的个数CMP AL,7AHJG NEXT1MOV SMALLCHAR[BX],ALINC BXJMP NEXTNEXT1: MOV OTHERCHAR[BP],ALINC BP ;统计其它字符的个数NEXT: INC SIDEC CLJNZ L1MOV NUM,DL ;将统计的个数存放在NUM的存储区MOV AX,DI ;数字个数放在NUM,大写字符个数放在NUM+1MOV NUM+1,AL ;小写字符个数放在NUM+2,其他字符的个数放在NUM+3MOV NUM+2,BLMOV AX,BPMOV TAIL,AL ;将其它字符的个数送入TAIL保存,以便后来输出(否则9号功能输出遇$则退出)MOV NUM+3,ALCMP NUM,0 ;判断数字个数如果为0则输出提示符,否则循环输出 JZ NNULLdismsg STR2 ;输出数字字符的提示符MOV CL,NUMMOV BP,OFFSET TOPSUB BP,2OK:MOV DX,STACK1[BP]MOV AH,2INT 21HSUB BP,2LOOP OKdismsg CRLFdismsg NUM2 ;输出数字字符数字的提示符MOV AL,NUM ;输出数字字符的个数shuchuNNULL:dismsg STR6NNULL1:dismsg CRLFCMP NUM+1,0 ;判断大写字符的个数如果为0则输出提示符,否则以字符串形式输出JZ BNULLdismsg STR3 ;输出大写字符的提示符dismsg BIGCHARdismsg CRLFdismsg NUM3 ;输出大写字符数字个数提示符MOV AL,NUM+1 ;输出大写字符的个数shuchuJMP BNULL1BNULL:dismsg STR8BNULL1:dismsg CRLFCMP NUM+2,0 ;判断小写个数,如果为0则输出提示符,否则以字符串形式输出JZ SNULLdismsg STR4 ;输出小写字符的提示符dismsg SMALLCHARdismsg CRLFdismsg NUM4 ;输出小写字符数字个数的提示符MOV AL,NUM+2 ;输出小写字符的个数shuchuJMP SNULL1SNULL:dismsg STR9SNULL1:dismsg CRLFCMP TAIL,0 ;判断其他字符的个数如果为0则输出提示符,否则循环输出JZ ONULLdismsg STR5 ;输出其它字符的提示符MOV CL,TAILMOV SI,OFFSET OTHERCHARL4: ;输出其它字符MOV DL,[SI]MOV AH,2INT 21HINC SILOOP L4dismsg CRLFdismsg NUM5 ;输出其它字符个数的提示符MOV AL,NUM+3 ;输出其它字符的个数shuchuJMP AGAINONULL:dismsg STR7JMP AGAINNEXTLAP:dismsg NUM7AGAIN:dismsg CRLFdismsg NUM6MOV AH,01HINT 21HMOV BL,ALdismsg CRLFCMP BL,'Y'JZ AGAIN1CMP BL,'y'JZ AGAIN1CMP BL,'N'JZ ONULL2CMP BL,'n'JZ ONULL2dismsg NUM8JMP AGAINONULL2:MOV AH,4CHINT 21HCODES ENDSEND START调试结果:1)所有字符都有的时候:2)其中有字符类型缺少的时候:3)什么字符都不输入的时候:三、系统总结刚抽到这个题目时,老师就说我们的题目是所有题目中最简单的,于是非常庆幸。

相关文档
最新文档