《北理工 自动化 微机原理实验一.docx》由会员分享,可在线阅读,更多相关《北理工 自动化 微机原理实验一.docx(11页珍藏版)》请在第一文库网上搜索。
1、微型计算机原理与接口技术软件实验报告(一)班级:学号:姓名:2012.11一、实验题目1、学习并掌握IDE86集成开发环境的使用;2、参考书例4-8,以单步形式观察程序的执行过程;3、修改该程序,求出10个数中的最大值和最小值。以单步形式观察如何求出最大值、最小值。二、实验目的1、熟悉IDE86集成开发环境的使用。2、通过编程、上机调试,进一步理解汇编语言的设计思路与执行过程。3、锻炼动手编程,独立思考的能力。三、实验内容3.1 题目2设计思路及流程图3.1.1 设计思路为实现求和的功能,首先将十个数存入内存中,设定AX为计算结果存储单元,CX为计数器,随后建立循环,将每个数依次加到AX上,直
2、至CX=O,最后将AX中存储的结果移动到SUM存储单元中,结束程序。3.1.2 程序流程图题目2的程序流程图如图1所示:图1题目2的程序流程图3.2 题目3设计思路及流程图3.2.1 设计思路为实现求取最大值最小值的功能,首先将十个数存入内存中,设定CX为计数器,将第一个数分别存入到MAX与M1N储存单元中,随后建立循环,将每个数依次与MAX(MIN)相比较,如果有大于(小于)MAX(MIN)中的,移入相应存储单元,直至CX=0。最后将MAX和MIN中存储的数据打印在屏幕上,返回DoS系统,结束程序。3.2.2 程序流程图题目3的程序流程图如图2所示:图2题目3的程序流程图四、实验源程序4.1
3、题目2源程序DATASEGMENT;定义数据段TAB1EDB12H,23H,34h,45h,56h;10个加数DB67H,78Hz89Hz9AHz0FDHSUMDW?DATAENDSCODESEGMENT;定义代码段ASSUMECS:CoDE,DS:DATA,ES:DATASTART:MOVAXzDATAMOVDS,AX;初始化DSMOVES,AX;初始化ES1EASUAB1E;SI指向TAB1EMOVCX,10;循环计数器XORAXzAX;AX为中间结果NEXT:ADDA1zSI;把一个数加到A1中ADCAHzO;若有进位,则加到AH中INCSI;指向下一个数1OOPNEXT;若未加完,继续
4、循环MOVSUMzAX;若结束,存结果于SUMH1T;结束CODEENDS;代码段结束ENDSTART;汇编结束4.2题目3源程序DATASEGMENT;定义数据段TAB1EDB12H,23H,34h,45h,56hDB67H,78H,89H,9AH,0FDH;十个待比较数MAXDB?MINDB?ADB,MaxOS;屏幕提示字符串BDBoDH,0AHMin:,SDATAENDSCODESEGMENTASSUMECS:CoDE,DS:DATA,ES:DATA;定义代码段START:MOVAXzDATAMOVDS,A;初始化DSMOVES,AX;初始化ES1EASIJAB1E;SI指向TAB1EM
5、OVCXzIO;循环计数器XORAXzAX;清空AXC1D;清方向标志DF1ODSB;A1存入一个8位数MOVMAXzA1;将该数送MAXMOVMINzA1;将该数送MINDECCX;计数器减一NEXT:1ODSB;取下一个数CMPA1zMAX;与MAX比较JA1ARGERCMPA1zMINjbsma11erjmpgoon1ARGER:M0VMAX,A1JMPGOONSMA11ER:MOVMINzA1GOON:1OOPNEXT1EADX,AMOVAHz09HINT21HMOVA1zMAXCA11DISP1AY1EADX,BMOVAHz09HINT21HMOVA1zMINCA11DISP1AYM
6、OVAHz4CHINT21HDISP1AYPROCPUSHBXPUSHCX;若大于转1ARGER;否则与MIN比较;若小于转SMA11ER;否则转GOON;A1的值存入MAX;转到GOON;A1的值存入MIN;CX-1,若CXWO转NEXT;获取A的首地址;调用字符串显示功能;MAX值存入A1;调用显示子程序;获取B的首地址;调用字符串显示功能;MIN值存入A1;调用显示子程序;调用返回DoS功能;十六进制显示子程序;保持BX内容;保持CX内容MOVBHzA1MOVCH,2;设置循环计数器ROT:MOVC1,4;移位次数RO1BXzC1MOVA1B1ANDA1zOFH;清空A1高四位ADDA1
7、,30H;0-9转换ASCII码CMPA1z3AHJ1PRITADDA1,7H;A-F转换ASCII码PRIT:MOVD1,A1MOVAH,2;调用字符显不功能INT21HDECCH;计数器-1JNZROT;CHW0,继续循环POPCX丁恢复CX内容POPBX丁恢复BX内容RET;返回Disp1ayendpcodeENDS;代码段结束ENDSTART;结束五、实验运行结果5.1题目2运行结果前五个数运算结束后寄存器状态:axc=1bZ二0CXH86s=0d80-0si4p=0di0000a=1Ibp8i二1SPd=0ds67E0es67E0SS67E0CS67E1pSS24534SS00002
8、312图3前五个数计算后寄存器状态其中ax值为a0104b0000图4前五个数计算后AX的值故此时前五个数之和为0104Ho前八个数运算结束后寄存器状态:其中ax值为ax016Cb0000cdsi000300000700000000RRRR67E67E067E067E10011C=1o=1=1a=0i=1d=0图5前八个数计算后寄存器状态a026C0000图6前八个数计算后AX的值故此时前八个数之和为026CHo全部运算结束后,ax的值为:a0403图7计算结束后AX的值故十个数的和为0403H。以TAB1E开始的存储器单元中的内容如图8:=D11Mpds:80081223344556B778
9、89t4EUgeds:88889AFD008000888889U2图8TAB1E开始的存储器单元中内容5.2题目3运行结果ax:FDin:12图9题目3的运行结果六、实验中遇到的问题及解决方法1、由于是第一次使用IDE86集成开发环境,在编译、连接和调试程序时,操作不熟练,造成了一些误操作。经过几次摸索之后,慢慢熟悉了该开发环境。2、在题目3中,最开始时直接使用了DOS功能的2号功能,但输出结果错误。经过分析,该功能将16进制数直接当做ASC11码输出,导致错误。故专门编写了在屏幕上显示16进制的子程序,得到了正确的结果。七、心得体会通过这次上机实验,我熟悉了IDE86集成开发环境,对其编辑、编译、连接和调试的过程得到了初步的提高。与此同时,通过单步运行、单步跟踪、观察寄存器和标志寄存器的变化,对汇编程序的理解加深了一步。与此同时,在题目3中,我熟悉了汇编语言中子程序的编写与调用。可以说,这次实验达到了其应有的效果。