微机原理及接口技术实验报告课程(项目)名称:微机原理与接口技术学院:自动化专业:自控姓名:学号:指导教师:成绩:2014年11月26日实验一认识实验及多字节加减法程序一、任务与目的1.实验任务:(1)熟悉和掌握MASM汇编程序及TD调试软件的使用;(2)熟悉代码段、数据段、堆栈段的结构;(3)掌握8086/8088汇编程序的结构;(4)掌握多字节加减法程序的编写。2.实验目的:(1).掌握8086/8088汇编程序及调试程序的基本使用方法;(2)熟悉8086/8088汇编语言编写的基本结构;(3)熟悉多字节加减算术运算的基本方法。二、原理(条件)1.相关知识:(1)MASM汇编程序及TD调试软件的使用方法;(2)8086/8088汇编程序结构及算术运算等相关指令。2.实验条件:MASM汇编程序及TD调试软件。三、内容步骤1.启动TD(TurboDebugger)输入程序段,观察执行情况并分析结果:(1)MOVBL,08HMOVCL,BLMOVAX,03FFHMOVBX,AXMOV[0200H],BXMOVES:[0300H],AX(2)MOVAX,0A268HMOVSI,9D1CHADDAX,SIAX=3F84HCF=1AF=1ZF=0PF=1OF=1SF=0ADDAL,30HAX=3FB4HCF=0AF=0ZF=0PF=1OF=0SF=1ADCAX,0FFFFHAX=3FB3HCF=1AF=1ZF=0PF=0OF=0SF=0分析:第一个是两个字相加,第二个是两个字节相加,第三个是两个字带进位相加,AX内结果改变的同时,FLAGS标志位也相应发生变化。(3)输入程序段,分步运行:MOVAX,0102HMOVBX,0304HMOVCX,0506HMOVDX,0708HPUSHAXPUSHBXPUSHCXPUSHDXPOPDXPOPCXPOPBXPOPAX分析:该段程序是对栈的操作,将AX,BX,CX,DX先后栈之后再出栈,观察到进栈出栈时栈内变化及SP指针值的变化。2.编写多字节加/减汇编程序,观察执行情况并分析结果利用MASM宏汇编程序及TD程序进行调试。(1)编写多字节加法汇编程序:DATASEGMENTBUFFER1DB4FH,0B6H,7CH,34H,56H,1FHBUFFER2DB13H,24H,57H,68H,0FDH,9AHSUMDB6DUP(?)CONTDB3DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVSI,OFFSETBUFFER1MOVDI,OFFSETBUFFER2MOVBX,OFFSETSUMMOVCL,CONTMOVCH,0CLCGOON:MOVAX,[SI]SBBAX,[DI]INCSIINCSIINCDIINCDIMOV[BX],AXINCBXINCBXLOOPGOONMOVAH,4CHINT21HCODEENDSENDSTART(2)编写多字节减法汇编程序:(3)3.编写多字节加/减汇编程序时,考虑最高字节相加或相减时产生进位或借位程序应如何编写?请思考。四、数据处理(现象分析)1、使用TD输入程序结果(1)分析:通过TD观察到执行一段程序相应的单元就跟着改变,将AX单元的值给BX单元,再将BX单元的值送入DS段中的[0200H]单元,最后将AX单元内容送入到ES段中偏移地址是[0300H]单元内。(2)MOVAX,0A268HMOVSI,9D1CHADDAX,SIAX=3F84HCF=1AF=1ZF=0PF=1OF=1SF=0ADDAL,30HAX=3FB4HCF=0AF=0ZF=0PF=1OF=0SF=1ADCAX,0FFFFHAX=3FB3HCF=1AF=1ZF=0PF=0OF=0SF=0分析:第一个是两个字相加,第二个是两个字节相加,第三个是两个字带进位相加,AX内结果改变的同时,FLAGS标志位也相应发生变化。(3)输入程序段,分步运行:MOVAX,0102HMOVBX,0304HMOVCX,0506HMOVDX,0708HPUSHAXPUSHBXPUSHCXPUSHDXPOPDXPOPCXPOPBXPOPAX分析:该段程序是对栈的操作,将AX,BX,CX,DX先后栈之后再出栈,观察到进栈出栈时栈内变化及SP指针值的变化。2、利用MASM宏汇编程序及TD程序进行调试结果:(4)编写多字节加法汇编程序:DATASEGMENTBUFFER1DB4FH,0B6H,7CH,34H,56H,1FHBUFFER2DB13H,24H,57H,68H,0FDH,9AHSUMDB6DUP(?)CONTDB3DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVSI,OFFSETBUFFER1MOVDI,OFFSETBUFFER2MOVBX,OFFSETSUMMOVCL,CONTMOVCH,0CLCGOON:MOVAX,[SI]SBBAX,[DI]INCSIINCSIINCDIINCDIMOV[BX],AXINCBXINCBXLOOPGOONMOVAH,4CHINT21HCODEENDSENDSTART实验过程:将程序另存为.ASM文件放在根目录MASM所在文件夹中,在命令符运行窗口输入CD\--CD\MASM\--文件名.ASM--生成.OBJ文件,如无错误,则继续执行指令LINK,生产.EXE可执行文件,在TD内找到生成的可执行文件,设置中断之后运行,观察结果。加法:(5)编写多字节减法汇编程序:将上述程序中的ADDAX,[DI]改为SBBAX,[DI]即可完成减法运算。减法:3、编写多字节加/减汇编程序时,考虑最高字节相加或相减时产生进位或借位程序应如何编写?加法:在ADDAX,[DI]后加ADCAH,0减法:在SBBAX,[DI]后加SBBAH,1五、结论简单的字母和数字组合成的代码变成了计算机可以认识的机器语言,汇编语言是计算机最低层同时也是最难的语言。通过TD和MASM将代码变成计算机可执行的文件,模拟计算机内部的运行过程,达到目标结果。六、参考资料《微机与接口技术》实验指导书七、评语实验二屏幕字符显示程序一、任务与目的1.实验任务:(1)熟悉和掌握利用DOS调用进行屏幕显示的方法;(2)掌握屏幕字符显示程序的编写。2.实验目的:(1)熟悉字符串表示的语法结构;(2)熟悉利用DOS调用编写字符屏幕显示的基本程序。二、原理(条件)2.相关知识:(1)字符串显示格式;(2)熟悉DOS调用使用方法。2.实验条件:MASM汇编程序及TD调试软件。三、内容步骤1.编写程序在屏幕上显示“姓名拼音+学号”,观察执行情况并分析结果。2、编写程序从键盘输入一字符串,在字符串尾插入“$”,并显示该字符,观察执行情况并分析结果。四、数据处理(现象分析)实验程序及结果如下:DATASEGMENTSTRINGDB'liuyuying,2012100329055,haveaniceday!',0DH,0AH,'$'DATAENDCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEADX,STRINGMOVAH,09H;显示字符串功能号INT21H;系统功能调用MOVAH,4CH;终止当前程序,返回调用程序INT21HCODEENDSENDSTART分析:通过调用功能号09H显示字符串DATASEGMENTBUFSIZEDB40ACTLENDB?CHARSDB40DUP(20H)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVDX,OFFSETBUFSIZEMOVAH,0AHINT21HXORCX,CXMOVCL,ACTLENMOVDX,OFFSETCHARSMOVBX,DXADDBX,CXMOVBYTEPTR[BX+2],'$'MOVAH,09HINT21HMOVAH,4CHINT21HCODEENDSENDSTART分析:定义字节类型变量BUFSIZE,占40个字节单元,定义字节型变量ACTLEN为任意值存放实际输入字符数,定义字节型变量CHARS存放输入的字符串,占40个字节单元,初始值为20H,DX指向BUFSIZE的偏移地址,调用功能号0AH获得从键盘输入的字符串,将CX内容清零后将ACTLEN中的内容给CL得到字符串中字符的个数,将DX内容给BX,BX与CX内容相加存入BX得到字符串尾地址,在BX+2处插入字符’$’,调用功能号显示从键盘输入的字符串。五、结论要在显示器上显示字符串,调用DOS功能的09H功能号,要实现调用还必须以’$’字符作为结束符。显示时在字符串结束前加上回车换行的ASCII码的0DH和0AH,在第二个实验中结果显示的第一个是所占字节单元的数所对应的ASCII码对应的字符,第二个是加上’$’在内的字符串中的字符数所对应的ASCII码,之后才是从键盘输入的字符串。六、参考资料《微机原理与接口技术》实验指导书七、评语实验三数据比较及排序程序一、任务与目的1.实验任务:(1)熟悉和掌握数据比较指令的用法;(2)掌握多字节有符号数及无符号数排序程序的编写方法。2.实验目的(1).掌握数据比较指令的使用方法;(2)熟悉数据排序实现的基本方法。二、原理(条件)3.相关知识:(1)数据比较指令的使用方法;(2)8086/8088汇编程序数据排序的基本算法。2.实验条件:MASM汇编程序及TD调试软件。三、内容步骤1.启动TD(TurboDebugger)输入程序段,观察执行情况、标志位变化并分析结果。然后,AX和BX互换一下数据再运行一遍,并观察结果。(1)无符号的比较MOVAX,2C76HMOVBX,0FF80HCMPAX,BXJAEABOVE;注意ABOVE由具体地址替代,下同。XCHGAX,BXABOVE:HLT(2)带符号数的比较MOVAX,0FF80HMOVBX,2C76HCMPAX,BXJLEABOVEJMPSTOPABOVE:XCHGAX,BXSTOP:HLT2.编写10个双字节(字)无符号及从小到大排序程序,观察执行情况并分析结果:利用MASM宏汇编程序及TD程序进行调试。无符号数排序参考程序如下,请在参考程序之上改写。DSEGSEGMENTBUFFERDW0AAFEH,3768H,5CD9H,2227H,0BDC1H,725AH,0C236HDW66FFH,0E23H,8577HDSEGENDSCSEGSEGMENTASSUMECS:CSEG,DS:DSEGSTART:MOVAX,DSEGMOVDS,AXLEADI,BUFFERMOVBL,9NEXT1:MOVSI,DIMOVCL,BLNEXT2:MOVAX,[SI]INCSIINCSICMPAX,[SI]JCNEXT3;小于则不交换MOVDX,[SI]MOV[SI-2],DXMOV[SI],AX借助DX将大的数和小的数进行互换NEXT3:DECCLJNZNEXT2DECBLJNZNEXT1MOVAH,4CHINT21HCSEGENDSENDSTART3.编写10个双字节(字)有符号数从小到大排序程序,观察执行情况并分析结果。DSEGSEGMENTBUFFERDW0AAFEH,3768H,5CD9H,2227H,0BDC1H,725AH,0C236H,DW66FFH,0E23H,8577HDSEGENDS四、数据处理(现象分析)1.启动TD(TurboDebugger)输入程序段(1)无符号的比较MOVAX,2C76HMOVBX,0FF80HCMPAX,BXJAEABOVE;注意ABOVE由具体地址替代,下同。XCHGAX,BX图1排序程序参考框图ABOVE:HLT执行结果:AX与BX值互换之后的结果:(2)带符号数的比较MOVAX,0FF80HMOVBX,2C76HCMPAX,BXJLEABOVEJM