-1-微机实验考试样题汇总与程序模板说明:微机原理实验考试不以纯硬件或纯软件的形式考试,不偏重于学生的软件算法和硬件的完全功能使用,而以简单的软硬件结合的方式检测学生的掌握能力。每年考试的题目样式不会有太大变化,但是细节之处可以有千变幻化,因此通过样题,掌握核心思维方法便能举一反三,迎刃而解,纯粹背答案的侥幸心理是不可取的。声明:本套样题程序已经在实验室硬件上调试通过!仅供学习参考之用!请不要直接打印或者完全照抄程序来企图侥幸通过考试,因为验收时老师肯定会考核你的,希望您真正看懂程序看懂思路掌握方法,以不变应万变!考试样题汇总如下:卷I:从键盘输入两个数字A,B,求A+B,将结果显示在屏幕上,并用8255驱动LED灯显示结果。卷II:输入两个字符,相同的话用8255驱动二极管显示它的ASCII码,不同的话显示‘NOMATCH’卷IV:输入一串字符然后用8255显示第一个字母的ASSII码用开关来控制显示和不显示卷V:比较两个字符串,判断是否相符。若相符,则用8253产生一个2秒的方波,用逻辑笔观察;若不符,则逻辑笔显示恒为绿灯。卷VI:键盘输入两个数字,比较大小,小的再屏幕显示,大的通过8255用发光二极管显示。注意:AD0809的题目本站目前还没有收录,希望大家别漏了复习这个东西!考试程序样式:题目:用键盘输入两个字符XY,若XY,则通过8255点亮一盏LED,否则熄灭LED。某考生作答如下:CODESEGMENTASSUMECS:CODEMAIN:MOVDX,28BH;8255初始化MOVAL,80HOUTDX,ALMOVAH,01H;输入第一个字符INT21HMOVBL,AL;暂存第一个字符在BLMOVAH,01H;输入第二个字符INT21HCMPBL,AL;比较第一个字符和第二个字符的大小JBBELOW;如果小于,则跳转MOVAL,00H;如果大于,则熄灭LEDMOVDX,288H-2-OUTDX,ALJMPEXITBELOW:MOVAL,01H;点亮LEDMOVDX,288HOUTDX,ALEXIT:MOVAH,4CHINT21HCODEENDSENDMAIN老师检查后,要求考生点亮两个LED,则程序可改成:(注意噢!此处简单现场考核了一下!!!)CODESEGMENTASSUMECS:CODEMAIN:MOVDX,0C40BH;8255初始化MOVAL,80HOUTDX,ALMOVDX,0C408H;事先存入A口地址MOVAH,1;输入第一个字符INT21HMOVBL,AL;暂存第一个字符在BLMOVAH,1;输入第二个字符INT21HCMPBL,AL;比较第一个字符和第二个字符的大小JBBELOW;如果小于,则跳转MOVAL,00H;如果大于,则熄灭LEDOUTDX,ALJMPEXITBELOW:MOVAL,03H;点亮LEDOUTDX,ALEXIT:MOVAH,4CHINT21HCODEENDS-3-ENDMAIN卷I:*功能实现:从键盘输入两个数字A,B,求A+B,将结果显示在屏幕上,并用8255驱动LED灯显示结果*;8255并行接口芯片片选CS接IO地址:288H-28FH控制寄存器地址:0C40BHA口地址:0C408HC口地址:0C40AHCODESEGMENTASSUMECS:CODESTART:MOVDX,0C40BH;8255控制寄存器设置MOVAL,80H;配置为A口C口均为方式0的输出模式,实验中你用哪个口都OKOUTDX,AL;实现配置MOVAH,01H;DOS01号功能输入数字1INT21HSUBAL,30H;ASCII码转成实际数字MOVBL,AL;将输入结果暂存在BL中,因为后面输入还用到ALMOVAH,01H;输入数字2INT21HSUBAL,30HADDBL,AL;两数相加结果存放在BL中MOVDX,0C408H;A口地址MOVAL,BLOUTDX,AL;数据送到8255A口进行显示MOVAH,02H;输出回车MOVDL,0DHINT21HMOVAH,02H;换行,为屏幕输出结果准备下MOVDL,0AHINT21HCMPBL,10;判断和是否大于10JBDISPSUBBL,10;大于10的数减去10就只剩下了个位MOVAH,02H;02号功能输出十位1MOVDL,1+30HINT21H-4-DISP:ADDBL,30HMOVAH,02H;02号功能输出个位MOVDL,BLINT21HMOVAX,4C00HINT21H;返回到DOSCODEENDSENDSTART*卷II:输入两个字符,相同的话用8255驱动二极管显示它的ASCII码,不同的话显示‘NOMATCH’;8255并行接口芯片片选CS接IO地址:288H-28FH控制寄存器地址:0C40BHA口地址:0C408HC口地址:0C40AHDATASEGMENTSTRIDB0DH,0AH,’NOMATCH$'DATAENDSCODESEGMENTASSUMEDS:DATA,CS:CODESTART:MOVAX,DATAMOVDS,AXMOVDX,0C40BH;8255控制寄存器设置MOVAL,80H;A口、C口均为方式0的输出模式,实验中你用哪个口都OKOUTDX,AL;实现配置MOVAH,01H;输入第一个字符INT21HMOVBL,AL;结果暂存在BL中MOVAH,01H;输入第二个字符INT21HCMPBL,AL;两个字符相比较JZMATCH;相等则用8255输出到LED;如果不相等则输出下面的字符串MOVDX,OFFSETSTRI;获取NOMATCH字符的偏移地址MOVAH,09H;调用09号功能输出字符串INT21HJMPENDC-5-MATCH:MOVDX,0C408HMOVAL,BLOUTDX,AL;使用8255A口输出ENDC:MOVAX,4C00HINT21HCODEENDSENDSTART*卷IV:输入一串字符然后用8255显示第一个字母的ASSII码用开关来控制显示和不显示*编程思路:8255A口作为输出用来显示ASCII码,C口作为输入,接逻辑电平开关来判断是否用A口显示(8255输入口悬空时默认为低电平!我只接了一个口到一个开关上)8255并行接口芯片片选CS接IO地址:288H-28FH控制寄存器地址:0C40BHA口地址:0C408HC口地址:0C40AHDATASEGMENTBUFDB20;最大输入字符串字符数DB?;实际输入字符数DB20DUP(?);字符缓存,从这里开始存放输入的字符串,偏移地址为2DATAENDSCODESEGMENTASSUMEDS:DATA,CS:CODESTART:MOVAX,DATAMOVDS,AXMOVDX,0C40BH;8255配置MOVAL,89H;方式0,A口输出,C口输入OUTDX,AL;配置成功MOVDX,OFFSETBUFMOVAH,0AH;0A号功能输入一串字符INT21HMOVDX,0C40AHINAL,DX;将C口数据读入CMPAL,0HJNZENDC;有开关打下,则不显示返回DOS-6-;没有开关打下,则默认用8255输出ASCII码MOVBX,0HMOVDX,0C408HMOVAL,[BX+2];前面说了第一个字符的偏移地址为2OUTDX,ALENDC:MOVAX,4C00HINT21HCODEENDSENDSTART*卷V:比较两个字符串,判断是否相符。若相符,则用8253产生一个2秒的方波,用逻辑笔观察;若不符,则逻辑笔显示恒为绿灯。电路连接:这个程序我用到了8255和8253联合使用,用8255的一个输出口控制gata1,其它的与我们实验的没啥区别。当然我相信方法肯定不止一种,但我只能想到这个了,如果您有更好的方法也是可以。编程思路:2s的方波是周期?我暂定为周期吧,则频率是0.5Hz,用试验箱的1MHz频率进行分频率,则需要2,000,000分频,即可写为1000*2000,用计数器0和计数器1的模式3进行级连即可完成任务。要逻辑笔恒为绿色,则OUT恒为低电平,这里只需要控制计数器1的gate1为低电平,然后让计数器1工作在模式0下,随便给一个初始值就可以了。计数器0就可以不用管了,因为最终的输出口是out1。如果觉得不太清楚,请看微机理论课本的280页。8255并行接口芯片片选CS接IO地址:288H-28FH8255控制寄存器地址:0C40BHA口地址:0C408HC口地址:0C40AH8253可编程定时计数器片选CS接IO地址:280H-287H8253控制寄存器地址:0C403H计数器0地址:0C400H计数器1地址:0C401HDATASEGMENTSTR1DB'这里你不会这么傻照抄我的吧,哈哈STR2DB':DATA,CS:CODESTART:MOVAX,DATAMOVDS,AXMOVDX,0C40BH;8255配置MOVAL,80H;A口和C口都输出,你随便用OUTDX,AL;配置成功MOVSI,OFFSETSTR1;获取STR1字符串的偏移地址-7-MOVDI,OFFSETSTR2;获取STR2字符串偏移地址CMPA:MOVBX,0MOVCX,16;已经知道字符是16,注意与你的字符串字符数对应!MOVAL,[BX+SI]CMPAL,[BX+DI];一个字符一个字符进行比较JNZNOMATCH;只要发现有不相等的,立刻跳出INCSI;指针右移,以便下个字符的比较INCDILOOPCMPA;如果顺利完成了这个循环,说明两个字符串相等MOVDX,0C408H;个人习惯用A口MOVAL,0FFH;让GATA1为高电平,让它正常工作在分频模式OUTDX,ALMOVDX,0C403H;配置8253寄存器MOVAL,36H;选择计数器0,先读写低8位,工作模式三,二进制格式OUTDX,AL;配置完成MOVDX,0C400H;给计数器0设置初值1000MOVAX,1000;注意1000是十进制数!!OUTDX,AL;先送低八位MOVAL,AHOUTDX,AL;送高八位MOVDX,0C403H;配置8253寄存器MOVAL,76H;选择计数器1,先读写低8位,工作模式三,二进制格式OUTDX,AL;配置完成MOVDX,0C401H;计数器1初值设置2000MOVAX,2000OUTDX,ALMOVAL,AHOUTDX,AL;完成2000000分频,可以返回DOS了JMPENDC;不相等的时候的配置NOMATCH:MOVDX,0C408H;8255A口MOVAL,00H;让GATE1为0OUTDX,ALMOVDX,0C403H;配置8253寄存器MOVAL,70H;选择计数器1,先读写低8位,工作模式0,二进制格式-8-OUTDX,AL;配置完成MOVDX,0C401H;计数器1初值设置0MOVAX,0OUTDX,ALMOVAL,AHOUTDX,ALENDC:MOVAX,4C00HINT21HCODEENDSENDSTART-9-*卷VI:键盘输入两个数字,比较大小,小的再屏幕显示,大的通过8255用发光二极管显示。8255并行接口芯片片选CS接IO地址:288H-28FH控制寄存器地址:0C40BHA口地址:0C408HC口地址:0C40AHCODESEGMENTASSUMECS:CODESTART:MOVDX,0C40BH;8255配置MOVAL,80H;A口输出模式OUTDX,AL;配置完成MOVAH,01H;01号功能输入第一个数字INT21HMOVBH,AL;结果暂存MOVAH,01H;输入第二个数字INT21HMOVBL,AL;结果暂存CMPBL,BH;两数比较JBBELOW;如果BL不小于BH,则BL,BH交换MOVAL,BLMOVBL,BHMOVBH,ALBELOW:MOVAH,02H;显示回车换行为输出结果准备MOVDL,0DHINT21HMOVAH,02HMOVDL,0AHINT21