您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 市场营销 > 交通C133班08组第3次实验报告
微型计算机硬件技术基础实验报告刘强、刘一帆第1页2020-1-8实验三分支程序和循环程序设计班级:交通C133组号:08学号:137063姓名:刘强同组人:刘一帆(137065)1.实验目的掌握分支结构程序设计的方法;学会用条件转移指令来编写二分支、三分支和多分支程序。掌握KEIL与PROTEUS联机调试的方法。掌握单片机试验仪的使用方法。掌握循环结构程序设计的方法以及单循环及多重循环控制过程。掌握循环程序退出的方法和循环控制的方法。2.实验设备PC机一台,DP-51PROC单片机综合仿真实验仪器一台或DICE-598H+增强型单片机开发实验仪器一台3.实验内容(1)三分支程序。用汇编语言实现c语言中的sign(VB中叫SGN)函数y=sign(x),当x取值为正、负、零时,函数返回值分别为1,-1,0。(2)多分支程序(用转移指令表的实现散转)。根据R2的取值不同,分别转向不同的分支执行。R2取值有效范围为8-15。(3)编写汇编语言程序,计算16个无符号数的均值。要求:无符号数放在内部RAM30H~3FH中,结果存入R4。(4)对外部RAM3600H~3609H中的10个无符号数按照降序排序。4.实验参考程序1.三分支结构程序实现:;根据R0中的值(正、负、零),设置R1;需要执行三次,在R0中分别置入正数、负数和零ORG0000HMOVA,R0JZZEROCJNER0,#80H,MP1SJMPMP2ZERO:MOVR1,#00HLJMPMP3MP1:JNCMP2MOVR1,#01HLJMPMP3MP2:MOVR1,#0FFHMP3:SJMP$END2.多分支结构程序实现:ORG0000H微型计算机硬件技术基础实验报告刘强、刘一帆第2页2020-1-8;需要事先给R2赋值(范围:8-15),然后再去跟踪程序执行到了哪个分支,不同的分支会将不同的单元(30H-37H)中的数值加1;这个程序用的是LJMP跳转表,完成后可以按实验书中的程序,建立一个AJMP跳转表,并实现多分支MOVDPTR,#TM;将DPTR指向跳转表头MOVA,R2CJNEA,#8,$+3;注:$+3就是转到下条指令!;;=8JCERRCJNEA,#16,$+3;注意一下是如何判断数值要界于[8,16)之间的。;;16JNCERRCLRCSUBBA,#8MOVB,#3MULAB;因为LJMP是三字节指令,所以要乘3JMP@A+DPTRTM:LJMPPCM8LJMPPCM9LJMPPCMALJMPPCMBLJMPPCMCLJMPPCMDLJMPPCMELJMPPCMFERR:LJMPPERRPCM8:INC30HLJMPTENDPCM9:INC31HLJMPTENDPCMA:INC32HLJMPTENDPCMB:INC33HLJMPTENDPCMC:INC34HLJMPTENDPCMD:INC35HLJMPTENDPCME:INC36HLJMPTEND微型计算机硬件技术基础实验报告刘强、刘一帆第3页2020-1-8PCMF:INC37HLJMPTENDPERR:TEND:SJMP$END3、16个无符号数的均值Org0hStart:movR0,#30HmovR7,#10HclrAmovR6,AmovR5,AclrCLoop:MOVa,r5addcA,@R0movR5,AclrAaddcA,R6movR6,AincR0djnzR7,LoopmovA,R5anlA,#0F0HswapAmovR4,AmovA,R6anlA,#0FHswapAorlA,R4movR4,Asjmp$END4、3600H~3609H中的10个无符号数按照降序排序;分析程序,看一下数据应该放入内存中的什么地方,共10个数。程序完成后记录原始数据和排序后的结果。;程序单步执行比较麻烦,可以试一下执行到断点的功能,可在最外层循环结尾处设置断点SFlagBIT7FHORG0000H微型计算机硬件技术基础实验报告刘强、刘一帆第4页2020-1-8MOVPSW,#00H;确保使用第一组工作寄存器,即:R3=03HMOVP2,#36H;指定外部地址的高8位,即数据存放于XDATA区3600H开始的地方MOVR2,#10-1;共10个数,循环9次LOOP0:MOVR0,#0MOVR1,#1MOV03H,R2;R3=R2CLRSFlag;排好序标志清0,假设没有交换LOOP1:MOVXA,@R0MOV30H,AMOVXA,@R1CJNEA,30H,LOOP2SJMPL1;相等,不用交换LOOP2:JCL1;JNC小到大,JC大到小MOVX@R0,A;顺序不对,交换XCHA,30HMOVX@R1,ASETBSFlag;有交换,说明还没排好序,标志置1L1:INCR0INCR1DJNZR3,LOOP1JNB7FH,SORTOK;排好序标志为0说明本轮没有发生交换,完成DJNZR2,LOOP0SORTOK:SJMP$END实验过程及结果分析安装好KEIL软件后,新建工程,设备选取8051CPU,新建一文件,另存成ASM类型,并将文件加入到工程的源代码组中。对源程序和内存窗口的字体进行适当设置,适合机器配置和个人习惯后:输入实验用的程序,进行编译,无错。创建目标,成功!微型计算机硬件技术基础实验报告刘强、刘一帆第5页2020-1-81、在寄存器分别输入正数与负数和零,观察输出结果2、给r2赋值8-f数与之外的数观察30H-37H结果输入5时,结果为1输入0时,结果为0输入时-5,结果为-1微型计算机硬件技术基础实验报告刘强、刘一帆第6页2020-1-83、在30H-3FH输入16个数字,运行程序观察r4数值给r2输入a时,跳转指向32H给r2输入f时,跳转指向38H给r2输入ad时,没有跳转指向任何地址微型计算机硬件技术基础实验报告刘强、刘一帆第7页2020-1-84、在外存x:3600H处输入10个任意数字降序排序循环内观察一组数的变换运行到结束加入语句MOVA,R5,在30H-3FH输入数值在R4输出结果进行一次内循环R0,R1指向数进行排序并交换微型计算机硬件技术基础实验报告刘强、刘一帆第8页2020-1-8思考题⑴如何把上面的三分支程序转变为子程序的形式?ORG0000HMOVA,R0JZZEROacallsfzLJMPMP3ZERO:MOVR1,#00HMP3:SJMP$sfz:CJNER0,#80H,MP1SJMPMP2MP1:JNCMP2MOVR1,#01HretMP2:MOVR1,#0FFHretEND⑵上面的多分支程序中,如果转移指令表使用AJMP指令,程序应该如何修改,试实现之。将LJMP改为AJMP,将MOVB,#3改为MOVB,#2(3)在实验5的排序程序中,如果是带符号数排序,怎样修改程序?修改程序并通过实验验证。(80-FF为负数,也可以直接输入负数,会自动变成补码表示,用命令行赋值的时候使用类似这样的命令:“ECharX:3600H=1,2,3,4,-5,-6,7,-8,9,10”)SFlagBIT7FHORG0000HmovPSW,#00H通过内循环好外循环,所有程序进行交换,降序排序微型计算机硬件技术基础实验报告刘强、刘一帆第9页2020-1-8movp2,#36hmovR2,#10-1Loop0:movR0,#0movR1,#1mov03H,R2clrSFlagMAIN:MOV30H,@R0MOV31H,@R1MOVA,30HCJNEA,31H,CMPTSJMPL0;两个数相同,不用交换CMPT:JBACC.7,CMPT1;(R1)0,跳到CMPT1MOVA,31H;(R0)0,判断(R1)正负JNBACC.7,CMPT2;(R0)0,(R1)0,跳到CMPT2MOV@R1,30H;(R0)0,(R1)0,(R0)(R1),则交换MOV@R0,ASJMPL0CMPT1:MOVA,31HJBACC.7,CMPT1_1;(R1)0,则跳到CMPT1_1SJMPL0;(R0)0,(R1)0,则(R0)(R1),不用交换CMPT1_1:CPLA;(R0)0,(R1)0,则要把他们数值位取反加1,得到数值位的真实值ADDA,#1MOVR5,AMOVA,30HCPLAADDA,#1SUBBA,R5JCEXCHANGE1;C=1,即R0中数值位小于R1的数值位,所以(R0)(R1),故交换.SJMPL0;C=0,即R0中数值位大于R1的数值位,所以(R0)(R1),不用交换EXCHANGE1:MOVA,30HMOV@R0,31HMOV@R1,ASJMPL0CMPT2:SUBBA,30H;(R1)-(R0)JCEXCHANGE2;C=1则跳,即(R0)(R1)时跳SJMPL0;C=0时,即(R0)(R1)时不用交换EXCHANGE2:MOVA,30HMOV@R0,31HMOV@R1,ASJMPL0L0:setbSFlag;有数据交换,置位标志L1:INCR0INCR1微型计算机硬件技术基础实验报告刘强、刘一帆第10页2020-1-8DJNZR3,MAINJNBSFlag,Loop3;没有数据交换,结束排序DJNZR2,Loop0Loop3:SJMP$END
本文标题:交通C133班08组第3次实验报告
链接地址:https://www.777doc.com/doc-2743522 .html