微机实验心得体会【篇一:微机原理实验报告】一、实验目的1.掌握qtspim的调试技术2.了解mips汇编语言与机器语言之间的对应关系3.掌握mips汇编程序设计4.了解c语言语句与汇编指令之间的关系5.熟悉常见的mips汇编指令6.掌握程序的内存映像二、实验任务用汇编程序实现以下伪代码:要求采用移位指令实现乘除法运算。
int main(){ int k, y ;int z[50] ;y = 56;for(k=0;k50;k++)z[k] = y - 16 * ( k / 4 + 210) ;}三、实验要求1.完成汇编语言程序设计、调试、测试全过程2.指出用户程序的内存映像,包括代码段和数据段3.完成软件实验报告四、实验过程程序源代码:.data #定义用户数据段z:.space 200.textmain:la $s0,z #$s0=addrzli $t0,0 #$s1=k=0li $t1,56 #$s2=y=56loop:slti $t2,$t0,50 #判断k是否小于50beq $t2,$0,done #当k大于等于50时跳转srl $t3,$t0,2 #k/4addi $t3,$t3,210 #k/4+210sll $t3,$t3,4 #16*(k/4+210)sub $t3,$t1,$t3 #y-16*(k/4+210)sw $t3,0($s0) #写进z[k]addi $s0,$s0,4 #地址移一位addi $t0,$t0,1 #k加1j loop #循环done:li $v0 10syscall五、实验总结通过这次实验,加深了我对理论学习的代码书写规范的理解,练习了qtspim软件的使用,对以后的学习有很大的帮助。
这次实验的内容相对比较简单,原理容易理解,编译的过程中遇到了一点困难,不过在同学的帮助下顺利解决了。
【篇二:微机原理与接口技术实验总结】微机原理与接口技术实验总结11107108徐寒黎一、实验内容以及设计思路1、①试编写一程序,比较两个字符串string1、 string2 所含字符是否相同,若相同输出“match”,若不相同输出“no match”。
设计思路:定义一个数据段,在数据段中定义两个字符串作为string1、 string2以及几个用于输入提示的和输出所需内容的字符串,定义一个堆栈段用于存放,定义代码段。
关键步骤以及少量语句:第一步将string1和string2都实现用键盘输入,方法是mov dx,offset string2mov ah,0ah并且显示在显示器上,显示方法将0ah改成09h,语句与上面类似。
然后进行比较第一个单元,mov al,[string1+1]cmp al,[string2+1]jnz nomatch若字符串长度不等,则直接跳转,输出输出“no match”;若长度相等再逐个比较lea si,[string1+2]lea di,[string2+2]mov cl,[string1+1]mov ch,0cldrepe cmpsbjcxz match,意思是全部相同就跳转match,输出“match”;不然进入下面的nomatch。
退出。
②试编写求级数1^3+2^3 +3^3 …..前几项和刚大于10000的程序。
设计思路:原先编写的程序,设定和为10000,结果是14。
但要求高一点的话,可以自己设置,实现用键盘输入和的值。
一个难点是将输入的ascii码字符串,转换成与之相同的十进制数的数值。
关键的思路部分是:从1开始求级数,将和的值存在ax里,要加下一项级数前,比如这时已经加到4,push一下ax,然后将5乘三遍,将乘积mov到bx里,再pop ax,然后将bx的值加到ax 里,然后将ax与n比较,如果比n小就继续上述步骤,知道刚比n大就输出数字。
③试编写一程序,完成字符串中各字符出现频度的统计,统计结果在屏幕上输出。
设计思路:因为这个程序需要统计所有的字符,所以首先要定义一个存储区,用来存放26个字符以及每个字符出现的个数。
用键盘控制输入字符串以后,将字符串的第一个字符与这二十六个字符逐个比较,若有相同,在存放相应次数的存储单元的值上加1。
然后比较第二个字符,依次类推,将字符串里的字符全部比较完。
将个数大于1的字符以及字符的个数都输出到屏幕上。
退出语句。
缺点和不足:这样需要定义一个非常繁的存储区。
可以根据输入的字符,然后进行比较和统计。
④设计一个动画程序。
设计思路:这个程序参考了网上的资料,没有什么新意,是小鸟的图形,可以用上下左右键进行移动,可以退出。
步骤:首先设置堆栈段,数据段,代码段,设置显示方式等一些属性,设置背景色,设置小鸟的初始位置以及写出小鸟图形的像素的点。
功能性的语句是,用键盘接受一个输入,将其与1bh比较,用jz语句跳转到退出。
若不是便与48h比较,看是否为向上,是则跳转到相应语句,不是则继续与50h比较;,看是否向下,是则跳转到关于向下移动的相关语句,否则再与4bh比较,看是否向左,依次类推,根据键盘输入的上下左右跳转到不同的语句。
再将小鸟的位置进行与上下左右键的输入相应的移动。
最后编写好退出语句。
2、硬件接口主要是了解8255与8253的功能,以及控制字。
①i/o地址译码只要对硬件概念清晰,很简单的。
基本上没有什么创造性。
收获:熟悉实验箱结构,了解每部分元件和标注的意义。
掌握i/o地址译码电路的工作原理。
②可编程定时器82531,对照实验电路图,将计数器0设置为方式0,即数初值设为n(n0fh),用手动逐个输入单脉冲,编程使计数值在屏幕上显示,并用逻辑笔观察out0点平变化。
2,将计数器0、计数器1分别设置为方式3,计数初值设为1000用逻辑笔观察out1输出电平的变化。
收获:掌握8253的基本工作原理和编程方法③并行接口82551,试验电路如图所示,8255c口接逻辑电平开关k0~k7,a口接led显示电路l0~l7。
3,数码管静态显示:按下图接好电路,将8255a口pa0~pa6分别与七段数码管的段码驱动输入端a~g相连,位码驱动输入端s1接5v(选中),s0和dp接地(关闭)。
编程从键盘输入一位十进制数(0-9),在七段数码管上显示。
4,数码管动态显示:按下图接好电路,七段数码管的连接不变,位码驱动输入端s1、s0接8255 c口的pc1和pc0。
编程在两个数码管上显示“56”。
动态显示时,先送“5”的段码送a口,再送02h到c口为位码;经一定延时后,送“6”的段码送a口,再送01h到c口为位码。
循环完成,可以显示数码。
5,数码管动态显示(选做):同图接好电路,编程在两个数码管上显示循环显示“00-99”。
只要搞清楚各个口的地址,以及选择适当的控制字,其实很简单的。
收获:掌握8255的基本工作原理和编程方法,对方式0的认识加深了。
二、试验中遇到的问题1在编写程序时,我深深体会到,画程序框图的重要性,每一步跳转的条件一定要搞清楚,y和n不能搞反了,否则就错了。
2实验2,里面涉及的寄存器很多,很容易就会用乱了,还是很需要注意的。
3比如那个小鸟动画的题目,当时在控制左右移动的时候,选择的起始位置的语句没写对位置,每次按一个移位的键以后,都从最初的初始位置向某个方向移动。
4硬件方面的,一开始没搞懂地址什么意思,所以连线时很懵懂,后来清楚了,发现就没什么了。
三、心得感受微机原理与接口技术的课程实验历时大半个学期,通过自己编写、运行程序,不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
以前对于编程工具的使用还处于一知半解的状态上,但是经过一段上机的实践,对于怎么去排错、查错,怎么去看每一步的运行结果,怎么去了解每个寄存器的内容以确保程序的正确性上都有了很大程度的提高。
前四个简单程序设计,加深了我们对初学的汇编语言指令的熟悉和理解,汇编语言直接描述机器指令,比机器指令容易记忆和理解。
通过学习和使用汇编语言,向上为理解各种软件系统的原理,打下技术理论基础;向下为掌握硬件系统的原理,打下实践应用基础。
不仅巩固了书本所学的知识,还具有一定的灵活性,发挥了我们的创造才能。
后面几个实验是并行输入输出接口8255和计数器8253的功能的操作,加深了我们对硬件的熟悉,锻炼了动手能力,发挥创造才能。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在自己的思考以及和同学的讨论中,终于迎刃而解。
【篇三:汇编语言实验心得】一.实验内容1.debug的启动及其基本命令的使用2.内存操作数与寻址方式1)利用debug程序中的“e”命令,将两个多字节数“12345678h”和“fedcba98h”分别送入起始地址为ds:0200h和ds:0204h两个单元中。
2)分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将ds:0200h单元和ds:0204h单元中的数据相加,并将运算结果存放在ds:0208h单元中。
3.顺序程序设计x、y、z、v均为字变量,在x、y、z、v字单元中存放是16位带符号数。
试编写汇编语言程序完成以下功能:①计算表达式值(v–(x*y+z-720))/x;②将上述表达式运算结果整数放在sum1单元,余数放在sum2单元。
4.分支程序设计1)设x,y为字变量,假定不溢出,计算x=|x-y|。
2)将num单元中的一位十六进制数(0~9,a~f),转换为对应的ascii码值存入asc单元。
3)已知字节变量x,编程求下列表达式即:当x0当x=0当x05.循环程序设计1)定义10个字节型带符号数,求其和。
2)在内存单元data中定义一个16位数,统计其16位中1的个数,存入内存的字单元count。
3)定义10个字型无符号数,编写程序求其最小值。
6.子程序设计1)设计一个子程序,计算1+2+?+n,其中n为给定的正整数,且n 小于100。
2)定义10个字型带符号数,编写子程序求其最大值和统计正数的个数。
3)从键盘接收4位十进制数,将其转换为十六进制数并显示。
二.实验心得上学期学习计算机组成原理的时候就对汇编有所了解,但通过这学期的学习,使我更加深入了解了其知识体系和计算机组成及内部程序执行的原理。
对于各命令的熟练掌握后,自己亲自动手实验更是体会到了各命令的用途及执行的方法。
通过各个基本命令可以轻松更改计算机内部寄存器的值和读写内存,磁盘,i/o端口的值,通过更改观察其对计算机的影响变化。