97计算机硬件技术基础软件实验讲义

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

14第二章指令系统和汇编语言程序设计实验本章实验主要包括指令系统和汇编语言程序设计两部分。采用软件模拟调试的方法,目的在于通过这些实验可以使学生巩固所学知识,加深对MCS-51单片机内部结构、指令系统的理解,更进一步掌握汇编语言程序设计的方法和技巧。第一节指令系统实验实验一熟悉键盘操作及数传指令编程设计一、实验目的1.熟悉软件模拟调试的环境及键盘操作。2.掌握汇编语言程序设计的方法,加深对指令的理解。3.学会软件模拟调试和察看修改观察项的方法。二、实验内容印证数据传送指令的功能、寻址方式以及PC指针、SP指针、DPTR指针、Ri指针分别对代码段、堆栈段、外扩数据存储器段、位寻址区等不同存储器的访问方式。三、实验步骤1.进入调试软件环境,输入源程序;2.汇编源程序;3.用单步方式运行程序;4.检查并记录各寄存器和存储单元内容的变化。四、程序清单1.内部RAM数据传送需要查看的数据有30H,31H,A,R0等。ORG0000HMOVR0,#30HMOV30H,#45HMOV31H,#46HMOVR2,30HMOV02H,31HMOVA,#87HMOV0E0H,30HMOV30H,AMOV31H,@R0SJMP$END152.外部数据传送需要查看的数据有外部数据存储器单元2000H,外部程序存储器单元2001H。ORG0000HMOVA,#89HMOVDPTR,#2000HMOVX@DPTR,AINCDPTRCLRAMOVCA,@A+DPTRSJMP$ORG2000HDB44HDB78HDB67HEND3.堆栈操作需要查看的数据有50H、51H、A及SP指针和堆栈区中数据随PUSH和POP指令执行后的变化情况和数据的存放次序等。1)可用于保护现场和恢复现场的程序ORG0000HMOVSP,#5FHMOV50H,#3BHMOV51H,#2FHMOVA,#12HPUSH50HPUSH51HPUSHACCPOP0E0HPOP51HPOP50HSJMP$END2)可用于数据交换的程序ORG0100HMOVSP,#6FHMOV50H,#3BHMOV51H,#2FHPUSH50H16PUSH51HPOP50HPOP51HSJMP$END4.数据交换记录每条指令运行后的结果,从而加深对各种不同的交换指令的理解。ORG0000HMOVA,#58HSWAPAMOV40H,AMOVA,#30HMOVR0,#30HMOV@R0,#09HXCHDA,@R0MOV50H,#1MOVA,#89HXCHA,50HMOVR7,#3XCHA,R7XCHA,@R0SJMP$END五、思考题1.寄存器寻址与寄存器间接寻址有什么区别?2.PC指针与SP指针有什么区别?3.DPTR指针与Ri(R0,R1)指针有什么区别?4.立即寻址与直接寻址有什么区别?4.同一个特殊功能寄存器不同表达形式。17实验二数传指令和算数运算指令编程设计一、实验目的1.掌握数据块的传送操作和算术运算指令的应用。2.进一步掌握汇编语言设计和调试方法。3.掌握观察窗口的使用方法。4.学会给存储单元赋初值的方法。二、实验内容1.数据区传送(1)把内部RAM40H~4FH置初值0A0H~0AFH;(2)而后把40H~4FH内容传送到外部RAM9800H~980FH中;(3)再把9800H~980FH内容传送到50H~5FH中。2.多字节十进制加法加数放在30H开始的单元中(最低位放在30H,按从小到大的顺序存放),被加数和结果存放在20H开始的单元(最低位在20H中),字节数放在2FH中,最高进位位放在位地址7FH单元中。三、实验步骤1.分别用单步和连续运行方式,调试上述两个程序;2.在执行第二个程序之前,给被加数和加数单元赋初值;3.在观察窗口中观察结果。四、实验程序清单1.数据块传送程序:ORG0000HMAIN:MOVR0,#40HMOVR2,#10HMOVA,#0A0HA1:MOV@R0,AINCR0INCADJNZR2,A1MOVR0,#40HMOVDPTR,#9800HMOVR2,#10HA2:MOVA,@R0MOVX@DPTR,AINCR0INCDPTRDJNZR2,A218MOVR0,#50HMOVDPTR,#9800HMOVR2,#10HA3:MOVXA,@DPTRMOV@R0,AINCDPTRINCR0DJNZR2,A3SJMP$END2.多字节十进制加法:ORG0000HMAIN:MOVR0,#30HMOVR1,#20HMOV2FH,#04HCLRCDA1:MOVA,@R0ADDCA,@R1DAAMOV@R1,AINCR0INCR1DJNZ2FH,DA1MOV7FH,CSJMP$END五、思考题1.若两个数据块都在外部数据存储器中,如何实现数据块的传送?2.在调试第一个程序时,若不用程序给40H~4FH赋初值,而用键盘在CPUDATA区给40H~4FH单元预赋初值,如何做?3.若把第二个程序改为无符号数的减法,怎样修改程序?4.在第二个程序中,若两数的和存放到从40H开始的单元,如何修改程序?19实验三逻辑运算及位操作指令编程设计一、实验目的(1)熟悉字节逻辑运算指令功能。(2)熟悉位操作指令运算功能。(3)从而更深入的掌握汇编语言程序设计。(4)学会观察CPU窗口中BIT区的变化。二、实验内容1.字节逻辑运算程序在片内RAM的FIRST和SECOND单元中各有一符号数X和Y,要求按下列条件算出Z,存入RESULT单元中(设运算结果仍为8位数)。FIRSTEQU30HSECONDEQU31HRESULTEQU32HORG0000HSTART:MOVR0,FIRSTMOVA,R0JBACC.7,NEGMOVB,#2DIVABMOVA,BJZTEMP1MOVA,R0ADDA,SECONDSJMPRESTEMP1:MOVA,R0ANLA,SECONDSJMPRESNEG:CPLACC.7X+YX为正奇数X∧YX为正偶数X∨YX为负奇数Z=X∨YX为负偶数20MOVB,#2DIVABMOVA,BJZTEMP2MOVA,R0ORLA,SECONDSJMPRESTEMP2:MOVA,R0XRLA,SECONDRES:MOVRESULT,ASJMP$END2.位操作程序布尔电路图如下:XBIT00HYBIT01HZBIT02HFBIT03HORG0000HSTART:MOVC,ZANLC,/YMOVF,CMOVC,YANLC,/ZORLC,FMOVF,CMOVC,XANLC,YORLC,/F21MOVF,CSJMP$END3.拆字程序把外部数据存储器2000H单元的内容拆开,其高四位送2001H低四位,低四位送2002H低四位,2001H、2002H高四位清零。需要检查2000H、2001H和2002H单元的内容。程序清单ORG0000HMOVDPTR,#2000HMOVXA,@DPTRMOVB,ASWAPAANLA,#0FHINCDPTRMOVX@DPTR,AINCDPTRMOVA,BANLA,#0FHMOVX@DPTR,ASJMP$END程序框图4.拼字程序开始结束2000H内容送A高低位交换,屏蔽高位后送2001H2000H内容送A屏蔽高位后送2002H22把外部数据存储器2000H、2001H单元的低四位分别送2002H高低四位。需要察看2000H、2001H和2002H单元内容。程序框图:程序清单ORG0000HMOVDPTR,#2000HMOVXA,@DPTRANLA,#0FHSWAPAMOVB,AINCDPTRMOVXA,@DPTRANLA,#0FHORLA,BINCDPTRMOVX@DPTR,ASJMP$END5.自选程序设计三、思考题1.字节与位逻辑运算指令在编程上什么区别?应注意什么?2.若把两位十六进制数转换成对应的ASCII码,应如何编写程序?3.采用其它方法设计第一个程序。4.如何用断点方式调试本程序?2001H内容送A,屏蔽高位开始结束高低位交换,送BA和B或后送2002H2000H内容送A,屏蔽高位23实验四代码转换一、实验目的1.掌握各种代码转换的算法,加深对各种数据编码的理解。2.学会软件模拟调试和察看修改观察项的方法来观察转换结果。三、实验内容1.分析清楚个程序的功能。2.调试各种代码转换的程序。三、实验步骤1.进入调试软件环境,输入源程序;2.汇编源程序;3.用单步或全速方式运行程序;4.查看最终结果。四、程序清单1.十六进制数ASCII码将十六进制数据08H,0CH转换成ASCII码,转换结果存入30H,31H两个单元中,再将30H,31H两个单元中的数据分别增1,然后转换成十六进制数存入40H,41H两个单元中。ORG0000HMOVSP,#2FHMOVA,#08HADDA,#30HPUSHACCMOVA,#0CHADDA,#37HPUSHACCMOVA,30HINCACLRCSUBBA,#30HMOV40H,APOPACCINCASUBBA,#37HMOV41H,APOPACCSJMP$END242.二进制数BCD码将二进制数10011011B转换成BCD码数,存入30H和31H单元中;再将30H单元中的数据加16H后,转换成二进制数据,存入40H单元中。ORG0000HMOVA,#10011011BMOVB,#100DIVABMOV30H,AMOVA,BMOVB,#10DIVABSWAPAORLA,BMOV31H,AMOVA,30HADDA,#16HDAAPUSHACCANLA,#00001111BMOV40H,APOPACCANLA,#11110000BSWAPAMOVB,#10MULABADDA,40HMOV40H,ASJMP$END3.BCD码ASCII码将20H单元中压缩的BCD码数78H转换成ASCII码,转换结果存入30H,31H两个单元中,再将30H,31H两个单元中的数据分别增1,然后转换成压缩BCD码数存入21H单元中。ORG0000HMOVA,20HANLA,#00001111BADDA,#30HMOV30H,A25PUSHACCMOVA,20HANLA,#11110000BSWAPAADDA,#30HMOV31H,AINCACLRCSUBBA,#30HMOVR2,APOPACCINCACLRCSUBBA,#30HSWAPAORLA,R2MOV21H,ASJMP$END5.自选程序设计六、思考题1.如何查看上面三个程序的结果。2.在程序1中,如果十六进制数未指定是否包含A~F数码,程序应如何修改?3.在程序2中,如果要转换的二进制数是十六位的,程序应如何编写?4.十六进制数转换成ASCII码与BCD码数转换成ASCII码有何区别?26实验五移位操作一、实验目的:掌握移位操作的方法,并理解左移或右移与乘除法运算的关系。二、实验内容:1.双字节二进制数左移一位将两个内部RAM31H和30H单元中的内容组成的双字节数通过Cy左移一位。功能示意图程序清单ORG0000HCLRCMOVA,30HRLCAMOV30H,AMOVA,31HRLCAMOV31H,ASJMP$END2.多字节二进制数右移一位将三个内部RAM32H、31H和30H单元中的内容组成的三字节数通过Cy右移一位。功能示意图程序清单Cy31H30H32H31HCy30H27ORG0000HCLRCMOVA,32HRRCAMOV32H,AMOVA,31HRRCAMOV31H,AMOVA,30HRRCAMOV30H,ASJMP$END三、思考题1.多于三个字节的移位操作如何进行?2.如果不通过Cy如何移位?实现的功能有何不同?第二节汇编语言程序设计实验实验六分支程序设计一、实验目的1.进一步熟悉MCS-51指令系统,了解汇编语言程序设计的基本结构。2.掌握分支结构程序设计的方法。3.学会用条件转移指令、CJNE、JMP及其配合使用来编写二分支、三分支和多分支程序。二、实验内容1.二分支的条件转移程序设变量X存放于R0,函数值Y存放在R1,其中X、Y均为二进制数。试

1 / 39
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功