




已阅读5页,还剩34页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二章 指令系统和汇编语言程序设计实验 本章实验主要包括指令系统和汇编语言程序设计两部分。采用软件模拟调试的方法,目的在于通过这些实验可以使学生巩固所学知识,加深对MCS-51单片机内部结构、指令系统的理解,更进一步掌握汇编语言程序设计的方法和技巧。第一节 指令系统实验实验一 熟悉键盘操作及数传指令编程设计一、 实验目的1 熟悉软件模拟调试的环境及键盘操作。2 掌握汇编语言程序设计的方法,加深对指令的理解。3 学会软件模拟调试和察看修改观察项的方法。二、 实验内容印证数据传送指令的功能、寻址方式以及PC指针、SP指针、DPTR指针、Ri指针分别对代码段、堆栈段、外扩数据存储器段、位寻址区等不同存储器的访问方式。 三、实验步骤1 进入调试软件环境,输入源程序;2 汇编源程序;3 用单步方式运行程序;4 检查并记录各寄存器和存储单元内容的变化。四、程序清单1. 内部RAM数据传送需要查看的数据有30H,31H,A,R0等。ORG 0000H MOV R0,#30HMOV 30H,#45H MOV 31H,#46H MOV R2,30H MOV 02H,31H MOV A,#87H MOV 0E0H,30H MOV 30H,A MOV 31H,R0 SJMP $ END2. 外部数据传送需要查看的数据有外部数据存储器单元2000H,外部程序存储器单元2001H。ORG 0000H MOV A,#89H MOV DPTR,#2000H MOVX DPTR,A INC DPTRCLR A MOVC A,A+DPTR SJMP $ ORG 2000H DB 44H DB 78H DB 67H END3. 堆栈操作需要查看的数据有50H、51H、A及SP指针和堆栈区中数据随PUSH和POP指令执行后的变化情况和数据的存放次序等。1)可用于保护现场和恢复现场的程序ORG 0000H MOV SP,#5FHMOV 50H,#3BHMOV 51H,#2FHMOV A,#12H PUSH 50H PUSH 51H PUSH ACCPOP 0E0H POP 51H POP 50H SJMP $ END 2)可用于数据交换的程序ORG 0100H MOV SP,#6FHMOV 50H,#3BHMOV 51H,#2FH PUSH 50H PUSH 51H POP 50H POP 51H SJMP $ END4.数据交换 记录每条指令运行后的结果,从而加深对各种不同的交换指令的理解。 ORG 0000H MOV A,#58H SWAP A MOV 40H,A MOV A,#30H MOV R0,#30H MOV R0,#09H XCHD A,R0 MOV 50H,#1 MOV A,#89H XCH A,50H MOV R7,#3 XCH A,R7 XCH A,R0 SJMP $ END五、 思考题1 寄存器寻址与寄存器间接寻址有什么区别?2 PC指针与SP指针有什么区别?3 DPTR指针与Ri(R0,R1)指针有什么区别?4 立即寻址与直接寻址有什么区别?4. 同一个特殊功能寄存器不同表达形式。实验二 数传指令和算数运算指令编程设计一、 实验目的1 掌握数据块的传送操作和算术运算指令的应用。2 进一步掌握汇编语言设计和调试方法。3 掌握观察窗口的使用方法。4 学会给存储单元赋初值的方法。二、 实验内容1 数据区传送(1)把内部RAM 40H4FH置初值0A0H0AFH;(2)而后把40H4FH内容传送到外部RAM 9800H980FH中;(3)再把 9800H980FH内容传送到 50H5FH中。 2多字节十进制加法加数放在30H开始的单元中(最低位放在30H,按从小到大的顺序存放),被加数和结果存放在20H开始的单元(最低位在20H中),字节数放在2FH中,最高进位位放在位地址7FH单元中。三、 实验步骤1 分别用单步和连续运行方式,调试上述两个程序;2 在执行第二个程序之前,给被加数和加数单元赋初值;3 在观察窗口中观察结果。四、 实验程序清单1 数据块传送程序: ORG 0000H MAIN: MOV R0,#40H MOV R2,#10H MOV A,#0A0H A1: MOV R0, A INC R0 INC A DJNZ R2, A1 MOV R0, #40H MOV DPTR, #9800H MOV R2, #10H A2: MOV A, R0 MOVX DPTR, A INC R0 INC DPTR DJNZ R2, A2 MOV R0, #50H MOV DPTR, #9800H MOV R2, #10H A3: MOVX A, DPTR MOV R0, A INC DPTR INC R0 DJNZ R2, A3 SJMP $ END 2 多字节十进制加法: ORG 0000HMAIN: MOV R0, #30H MOV R1, #20H MOV 2FH,#04H CLR C DA1: MOV A,R0ADDC A, R1 DA A MOV R1, A INC R0 INC R1 DJNZ 2FH, DA1 MOV 7FH, C SJMP $ END 五、 思考题1 若两个数据块都在外部数据存储器中,如何实现数据块的传送?2 在调试第一个程序时,若不用程序给40H4FH赋初值,而用键盘在CPU DATA区给40H4FH单元预赋初值,如何做?3 若把第二个程序改为无符号数的减法,怎样修改程序?4 在第二个程序中,若两数的和存放到从40H开始的单元,如何修改程序?实验三 逻辑运算及位操作指令编程设计一、 实验目的(1) 熟悉字节逻辑运算指令功能。(2) 熟悉位操作指令运算功能。 (3)从而更深入的掌握汇编语言程序设计。 (4)学会观察CPU窗口中BIT区的变化。二、 实验内容1 字节逻辑运算程序在片内RAM的FIRST和SECOND单元中各有一符号数X和Y,要求按下列条件算出Z,存入RESULT单元中(设运算结果仍为8位数)。X + Y X为正奇数XY X为正偶数XY X为负奇数Z=XY X为负偶数 FIRST EQU 30H SECOND EQU 31H RESULT EQU 32H ORG 0000H START:MOV R0,FIRST MOV A, R0 JB ACC.7, NEG MOV B, #2 DIV AB MOV A, B JZ TEMP1 MOV A,R0 ADD A, SECOND SJMP RES TEMP1: MOV A, R0 ANL A, SECOND SJMP RES NEG: CPL ACC.7 MOV B, #2 DIV AB MOV A, B JZ TEMP2 MOV A, R0 ORL A, SECOND SJMP RES TEMP2: MOV A, R0 XRL A, SECOND RES: MOV RESULT, ASJMP $END 2位操作程序 布尔电路图如下: X BIT 00H Y BIT 01H Z BIT 02H F BIT 03H ORG 0000H START: MOV C, Z ANL C, /Y MOV F, C MOV C, Y ANL C, /Z ORL C, F MOV F, C MOV C, X ANL C, Y ORL C, /F MOV F, C SJMP $ END 3拆字程序把外部数据存储器2000H单元的内容拆开,其高四位送2001H低四位,低四位送2002H低四位,2001H、2002H高四位清零。 需要检查2000H、 2001H和2002H单元的内容。程序清单ORG 0000HMOV DPTR,#2000HMOVX A,DPTRMOV B,ASWAP AANL A,#0FHINC DPTRMOVX DPTR,AINC DPTRMOV A,BANL A,#0FHMOVX DPTR,ASJMP $END开 始结 束2000H内容送A高低位交换,屏蔽高位后送2001H2000H内容送A屏蔽高位后送2002H程序框图 4拼字程序2001H内容送A,屏蔽高位开 始结 束高低位交换,送BA和B或后送2002H2000H内容送A,屏蔽高位把外部数据存储器2000H、2001H单元的低四位分别送2002H高低四位。需要察看2000H、2001H和2002H单元内容。程序框图:程序清单ORG 0000HMOV DPTR,#2000HMOVX A,DPTRANL A,#0FHSWAP AMOV B,AINC DPTRMOVX A,DPTRANL A,#0FHORL A,BINC DPTRMOVX DPTR,ASJMP $END5自选程序设计 三、 思考题1 字节与位逻辑运算指令在编程上什么区别?应注意什么?2 若把两位十六进制数转换成对应的ASCII码,应如何编写程序?3 采用其它方法设计第一个程序。4 如何用断点方式调试本程序?实验四 代码转换一、实验目的1掌握各种代码转换的算法,加深对各种数据编码的理解。2学会软件模拟调试和察看修改观察项的方法来观察转换结果。三、 实验内容1分析清楚个程序的功能。2调试各种代码转换的程序。三、实验步骤1进入调试软件环境,输入源程序;2汇编源程序;3用单步或全速方式运行程序;4查看最终结果。四、程序清单1十六进制数 ASCII码 将十六进制数据08H,0CH转换成ASCII码,转换结果存入30H,31H两个单元中,再将30H,31H两个单元中的数据分别增1,然后转换成十六进制数存入40H,41H两个单元中。ORG 0000HMOV SP,#2FHMOV A,#08HADD A,#30HPUSH ACCMOV A,#0CHADD A,#37HPUSH ACCMOV A,30HINC ACLR CSUBB A,#30HMOV 40H,APOP ACCINC ASUBB A,#37HMOV 41H,APOP ACCSJMP $END2二进制数 BCD码将二进制数10011011B转换成BCD码数,存入30H和31H单元中;再将30H单元中的数据加16H后,转换成二进制数据,存入40H单元中。ORG 0000HMOV A,#10011011BMOV B,#100DIV ABMOV 30H,AMOV A,BMOV B,#10DIV ABSWAP AORL A,BMOV 31H,AMOV A,30HADD A,#16HDA APUSH ACCANL A,#00001111BMOV 40H,APOP ACCANL A,#11110000BSWAP AMOV B,#10MUL ABADD A,40HMOV 40H,ASJMP $END3BCD码 ASCII码 将20H单元中压缩的BCD码数78H转换成ASCII码,转换结果存入30H,31H两个单元中,再将30H,31H两个单元中的数据分别增1,然后转换成压缩BCD码数存入21H单元中。 ORG 0000H MOV A,20H ANL A,#00001111B ADD A,#30H MOV 30H,A PUSH ACC MOV A,20H ANL A,#11110000B SWAP A ADD A,#30H MOV 31H,A INC A CLR C SUBB A,#30H MOV R2,A POP ACC INC A CLR C SUBB A,#30H SWAP A ORL A,R2 MOV 21H,A SJMP $ END5 自选程序设计六、 思考题1. 如何查看上面三个程序的结果。2. 在程序1中,如果十六进制数未指定是否包含AF数码,程序应如何修改?3. 在程序2中,如果要转换的二进制数是十六位的,程序应如何编写?4. 十六进制数转换成ASCII码与BCD码数转换成ASCII码有何区别?实验五 移位操作一、 实验目的:掌握移位操作的方法,并理解左移或右移与乘除法运算的关系。二、 实验内容:1双字节二进制数左移一位将两个内部RAM 31H和30H单元中的内容组成的双字节数通过Cy左移一位。功能示意图Cy31H30H程序清单 ORG 0000HCLR CMOV A ,30HRLC AMOV 30H, AMOV A,31HRLC AMOV 31H, ASJMP$END2多字节二进制数右移一位将三个内部RAM 32H、31H和30H单元中的内容组成的三字节数通过Cy右移一位。功能示意图32H31HCy30H程序清单 ORG 0000HCLR CMOV A,32HRRC AMOV 32H,AMOV A,31HRRC AMOV 31H,AMOV A,30HRRC AMOV 30H,ASJMP $END三、 思考题1 多于三个字节的移位操作如何进行?2 如果不通过Cy如何移位?实现的功能有何不同?第二节 汇编语言程序设计实验实验六 分支程序设计一、 实验目的1. 进一步熟悉MCS-51指令系统,了解汇编语言程序设计的基本结构。2. 掌握分支结构程序设计的方法。3. 学会用条件转移指令、CJNE、JMP及其配合使用来编写二分支、三分支和多分支程序。二、 实验内容 1. 二分支的条件转移程序设变量X存放于R0,函数值Y存放在R1,其中X、Y均为二进制数。试按照下式的要求给Y赋值:Y=1X00X=0-1X 0?(A) = 0?A(R0)(A) = -1(A) = 1(A)(R1)结束 N 图2-1 二、三分支结构程序流程图2. 自选题目设计 三、实验步骤1 根据实验内容和参考程序流程图,编出相应的分支结构程序。2 输入程序,汇编成功;3 用F4(执行到光标处)、F7(跟踪执行)、F8(单步执行)或断点运行等方式调试程序;4 观察程序的流程,记录运行结果。四、思考题1 CJNE指令对CY 有影响吗?用CJNE 和JC/JNC指令配合应注意什么?在用JMP 指令前,若变址255怎么办? 2用什么指令可以实现多分支之间的隔离?五、实验报告要求写出题目运行结果。六、参考程序清单1、二分支的条件转移程序1) 用二分支结构程序实现:ORG 0000H MOV A, R0 JZ LOAD ;等于零转LOAD JNB ACC.7,GO ;大于零转GO MOV A, #0FFH SJMP LOAD GO: MOV A, #01H LOAD: MOV R1, A SJMP $ END 2)用三分支结构程序实现: ORG 0000H MOV A, R0 JNZ COMP ;不等于零转COMP MOV R1,#00H ;等于零,则0 (R1) SJMP MP3 COMP: CJNE R0,#80H,MP1 ;(R0)中数与80H比较,不相等则转移到MP1 MOV R1,#0FFH ;若比较相等,则-1 (R1) LJMP MP3 MP1: JC MP2 ;两数不相等,(R0) 0转MP2 MOV R1,#0FFH ;(R0) 0,1 (R1) MP3: SJMP $ END实验七 循环程序设计 一、实验目的1 进一步熟悉MCS-51指令系统,了解汇编语言程序设计的基本结构。2 掌握循环结构程序设计的方法,弄清单重及多重循环控制过程。3 通过设计软件延时程序,学会计算内外循环次数以及循环体的循环时间。二、 实验内容1 设计一个循环程序具体要求:将内部RAM中30H至32H的内容右移四位,程序流程图如图2-3所示。2 设计循环程序:冒泡法排序。具体要求:设单片机8031外部RAM从3600H单元开始存放10个无符号数,试编写程序能使它们按从大到小的顺序排列(最大数存放在3600H单元)。程序流程图如图2-4所示。 3 自选题目设计。三、 实验步骤1 输入预先编好的程序,汇编成功;2 用自动单步方式执行程序,观察循环计数器的变化情况。3 用断点运行方式调试排序程序,记录排序过程。四、实验报告要求1 编出相应的循环结构程序,列出程序清单,并且会计算循环体的循环时间。2 写出自选题目的设计内容、程序清单及运行结果。五、思考题1 程序中循环时间由什么来控制?2 若用DJNZ或CJNE指令来控制循环,编写程序有什么不同?六、参考流程图开始 4(R7) 3(R6) 0CY 30H(R0) (R0)(A) 右移(A) 一次 (A)(R0) (R0)+1(R0) N (R6)-1=0? Y N (R7)-1=0? Y 结束图2-3 循环结构程序流程图七、循环结构程序参考清单: 1三个字节右移四位: ORG 0000H MOV R7,#4 RR30: MOV R6,#3 CLR C MOV R0,#30H RR31: MOV A,R0 RRC A MOV R0,A INC R0 DJNZ R6,RR31 DJNZ R7,RR30 SJMP $ END2. 冒泡法排序:ORG 0000HMOV PSW,#00HMOV P2,#36HMOV R2,#10-1 LOOP0: MOV R0,#00H MOV R1,#01H MOV 03H,R2 CLR 7FH LOOP1: MOVX A,R0 MOV 30H,A MOVX A,R1 CJNE A,30H,LOOP2 SJMP L1 LOOP2: JC L1 MOVX R0,A XCH A,30H MOVX R1,A SETB 7FH L1: INC R0 INC R1 DJNZ R3,LOOP1 JNB 7FH,LOOP3 DJNZ R2,LOOP0 LOOP3: SJMP $ END开始置地址指针,置外循环计数器置内循环地址指针,置内循环计数器 清零交换标志位(7FH)0取两操作数前数后数交换两数,置1交换标志位(7FH)1内循环结束(7FH)=1?外循环结束结束 Y N N N Y N Y N Y 图2-4 循环结构程序流程图实验八 查表程序设计一、实验目的1进一步熟悉MCS-51指令系统和汇编语言程序设计。2学会用MOVC指令编写查表程序。 二、实验内容 1设计并调试一个查平方表的程序,其功能为应用查表指令MOVC A,A+PC,求累加器A中数的平方值,结果平方值送A。要求待查的(A)15。2设计并调试一个根据电压值查与其对应的温度值的查表程序,其功能为应用查表指令MOVC A,A+DPTR,求(A)中电压值对应的温度值,将温度值送R2R3(温度值为二字节的压缩BCD码),电压值的范围为(A)0FFH。实验程序参考框图如2-5所示。三、 实验步骤 1 敲入程序和预定表后;2 通过修改自变量参数启动并调试程序,直至正确为止。3 边调试边体会用PC或DPTR作指针查表的区别。开始 表首地址(DPTR) (A)+(A)+(DPTR)(DPTR) 0(A) 查表取第一个字节(R2) 0(A) (DPTR)+1(DPTR) 查表取第二个字节(R3) 结束 图2-5 查表程序框图四、 实验报告要求根据实验内容和程序参考流程,编出所需查表程序,列出实验程序清单。五、思考题1 当表的长度255个字节时应选哪一条指令查表?2 用PC指针查表编程时应注意什么? 六、参考程序清单1 求平方值查表程序: ORG 0000HADD A,#02H MOVC A,A+PCSJMP $DB 0,1,4,9,16,25DB 36 225END2 测量温度查表程序: ORG 0000HMOV DPTR,#TABCLR CMOV R0,AADD A,R0MOV F0,CADD A,DPLMOV DPL,ACLR AADDC A,DPHMOV C,F0ADDC A,#0MOV DPH,ACLR AMOVC A,A+DPTR ; 查第一个字节MOV R2,ACLR AINC DPTRMOVC A,A+DPTR ; 查第二个字节MOV R3,ASJMP $TAB:DW ;温度表值(自己设定一组数) END实验九 散转程序设计一、 实验目的1进一步熟悉MCS-51指令系统和汇编语言程序设计。 2学会用三种不同的方法设计散转程序,并掌握它们的区别。 二、 实验内容设计并调试一个程序,其功能为根据(20H)的值i (i7)取相应的处理程序Pi的入口地址并转移到程序Pi ,Pi的处理程序的功能为(Ri)+1(Ri),(20H)+17(20H),再重复地根据(20H)散转。参考程序框图如图2-6所示:三、实验步骤1 输入编好的程序,汇编成功;2调试程序,使用修改寄存器的方法,使R0R7初值为0,然后启动系统,带断点运行,运行一个循环后检查运行结果,观察R0R7是否依次计数,排除程序中错误,直至R0R7同步计数为止。四、实验报告要求1 列出根据流程图编写的程序清单,写出程序执行的结果。2 采用另外两种不同的方法编写程序,列出调试通过的程序清单。0 ( 2 0H)根据(20H)查转移地址 (DPTR)0(A)( (A)( 根据(DPTR)散转(20H)+1 (20H)(20H)7 (20H)(R0)+1(R0)(R7)+1(R7)(R1)+1(R1) 开始 0 1 7 图2-6 散转程序框图五、参考程序清单散转程序清单:请将程序补充完整后运行。 ORG 0000H MOV 20H,#00H TB0: MOV DPTR,#TABL MOV A, #00H JMP A+DPTR TABL: PR0: INC R0 LJMP PR PR1: INC R1 LJMP PR PR2: INC R2 LJMP PR PR3: INC R3 LJMP PR PR4: INC R4 LJMP PR PR5: INC R5 LJMP PR PR6: INC R6 LJMP PR PR7: INC R7 PR: MOV A, 20H INC A ANL A,# 07H MOV 20H,A LJMP TB0 SJMP $ END实验十 子程序设计一、实验目的 1进一步熟悉MCS-51指令系统和汇编语言程序设计。 2掌握子程序设计及参数传递的方法。 3掌握子程序调用与返回时堆栈的变化与作用。二、实验内容 1根据参考流程框图2-7,使用工作寄存器或累加器来传递参数的方法把入口参数放到累加器A中,然后将累加器中的一个十六进制数的ASC字符转换为一位十六进制数存放于A。 2用指针寄存器来传递参数,将(R0)和(R1)指出的内部RAM两个3字节无符号整数相加,结果送(R0)指出的内部RAM中,入口时,(R0)(R1)分别指向加数和被加数的低位字节,出口时(R0)指向结果的高位字节。 3用堆栈传递参数,把一位十六进制
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 宁夏教育数学试卷
- 淘宝店铺直播活动策划方案(3篇)
- 河道栏杆基础施工方案(3篇)
- 澳门废气处理施工方案(3篇)
- 临时保安考试题库及答案
- 北京市门头沟区2023-2024学年八年级下学期第一次月考语文考点及答案
- 安徽省宿州市灵璧县2024-2025学年高一上学期期末考试历史试卷及答案
- 放鞭炮初一作文700字14篇
- 客户服务热线接听规范及问题解决流程模板
- 时政知识培训方案策划课件
- 酒店楼层分租协议书
- 血液肿瘤科知识培训课件
- 网络安全产品代理销售合同
- 单位对个人教育教学情况定性综合分析
- 《2025年CSCO HR阳性晚期乳腺癌治疗指南》解读
- 广播工程系统施工方案
- 新能源汽车概论 课件 5.1新能源汽车高压安全与防护
- 浙江省温州市鹿城区2025年小升初总复习数学测试卷含解析
- 带状疱疹护理查房
- 2025福建德化闽投抽水蓄能有限公司招聘15人笔试参考题库附带答案详解
- 电力服务收费标准
评论
0/150
提交评论