1、MCS51软件部分上机实验报告指令系统和汇编语言程序设计实验报告实验一 熟悉键盘操作及数传指令编程设计一、 实验目的1 熟悉软件模拟调试的环境及键盘操作。2 掌握汇编语言程序设计的方法,加深对指令的理解。3 学会软件模拟调试和察看修改观察项的方法。二、 实验内容印证数据传送指令的功能、寻址方式以及PC指针、SP指针、DPTR指针、Ri指针分别对代码段、堆栈段、外扩数据存储器段、位寻址区等不同存储器的访问方式。 三、实验步骤1 进入调试软件环境,输入源程序;2 汇编源程序;3 用单步方式运行程序;4 检查并记录各寄存器和存储单元内容的变化。四、程序清单及实验结果1. 内部RAM数据传送1)寄存器
2、寻址与立即寻址,需要查看的数据有A、PSW和不同寄存器区的Rn等单元的内容。ORG 0000HMOV PSW,#00H MOV R0,#30H MOV A,R0 MOV R6,A MOV PSW,#14HMOV R0,#30H MOV A,R0 MOV R6,AMOV PSW,#10HMOV R0,#30H MOV A,R0 MOV R6,AMOV PSW,#08HMOV R0,#30H MOV A,R0 MOV R6,A SJMP $ END数据记录: 2) 直接寻址,需查看30H、31H、32H、40H、ACC、PSW等单元的内容。 ORG 0100HMOV 30H,#45H MOV 31
3、H,#46H MOV 02H,31H MOV 0E0H,30H MOV 32H,ACC MOV ACC,PSW MOV 40H,ACC SJMP $ END数据记录: 3)寄存器间接寻址,需查看R0、RO等的内容。 ORG 0200H MOV 30H,#66H MOV R0,#30H MOV R0,#30H SJMP $ END数据记录:2. 外部数据传送需要查看的数据有外部数据存储器单元2000H,外部程序存储器单元2001H。ORG 0000H MOV A,#89H MOV DPTR,#2000H MOVX DPTR,A INC DPTRCLR A MOVC A,A+DPTR SJMP $
4、 ORG 2000H DB 44H DB 78H DB 67H END数据记录:3. 堆栈操作需要查看的数据有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,#2
5、FH PUSH 50H PUSH 51H POP 50H POP 51H SJMP $ END数据记录:4.数据交换 记录每条指令运行后的结果,从而加深对各种不同的交换指令的理解。 1)SWAP指令 ORG 0000H MOV A,#58H SWAP A MOV 40H,A SJMP $ END数据记录: 2) XCHD 指令 ORG 0030H MOV A,#30H MOV R0,#30H MOV R0,#09H XCHD A,R0 MOV 41H,A SJMP $ END数据记录: 3)XCH 指令 ORG 0100H MOV 50H,#1 MOV A,#89H XCH A,50H MOV
6、 R7,#3 XCH A,R7 XCH A,R0 SJMP $ END数据记录:五、 思考题1、 寄存器寻址与寄存器间接寻址有什么区别?答:寄存器寻址所需操作数放在寄存器中,确定了寄存器就得到了操作数,存放操作数的寄存器地址内含或隐含在指令的操作码字节中;而寄存器间接寻址是将指令指定的寄存器内容作为操作数的地址,该地址所指定的单元内容作为被寻找的操作数。2、 PC指针与SP指针有什么区别?答:PC指针是一个16位的程序地址寄存器,其内容是当前执行指令的下一条指令在程序内存中的地址,具有自动加1的功能,从而保证程序能够自动顺序执行,寻址范围达64KB,但是PC单元本身没有地址,是不可寻址的;而S
7、P指针为堆栈指针,其内容是堆栈栈顶的存储单元地址,S可以初始化为不同的值,因此堆栈位置是浮动的。进栈操作时,SP先加1,后写入数据,出栈操作时,先读出数据,再减1。3、 DPTR指针与Ri(R0,R1)指针有什么区别?答:数据指针DPTR为16位寄存器,存放16位地址,作为访问外部程序内存ROM、外部数据存储器RAM和扩展I/O接口时的地址;而Ri(i=0,1)可寻址片内RAM低128B(00H7FH),与P2口配合使用,用Ri指示低8位地址(00H0FFH),P2口输出高8位地址,可寻址片外数据存储器或I/O的64KB区域。4、 立即寻址与直接寻址有什么区别?答:立即寻址中,操作数直接由指令
8、给出,通常紧跟指令操作码之后的一个或两个字节就是所需的操作数;而直接寻址则直接给出操作数所在的单元地址或位地址。5、 同一个特殊功能寄存器不同表达形式。答:书写时既可以使用寄存器符号,也可以使用寄存器单元地址,通常有四种表达形式。例如:Cy 可以表示为Cy/0D7H/PSW.7/0D0H.7,但A累加器比较特殊,有三种表示方法:A/ACC/0E0H。6、 三种不同的交换指令的区别是什么?答:三种不同的交换指令分别是:整字节交换指令、低半字节交换指令、累加器高低半字节交换指令。整字节交换指令,XCH,把累加器A的内容与内部RAM及SFR中的内容互相交换,影响P标志;低半字节交换指令,XCHD,累
9、加器A低四位与片内RAM某单元低四位交换,高四位不变;累加器高低半字节交换指令,SWAP,将累加器中的高四位与低四位内容交换,不影响标志位。实验二 数传指令程序设计一、实验目的1 掌握数据块的传送操作和算术运算指令的应用。2 进一步掌握汇编语言设计和调试方法。3 掌握观察窗口的使用方法。4 学会给存储单元赋初值的方法。二、实验内容1、把内部RAM 40H4FH置初值0A0H0AFH;2、而后把40H4FH内容传送到外部RAM 9800H980FH中;3、再把 9800H980FH内容传送到 50H5FH中。三、实验步骤1 分别用单步和连续运行方式,调试上述程序;2 在观察窗口中观察结果。四、实
10、验程序清单数据块传送参考程序: 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,
11、A3 SJMP $ END 数据记录:五、思考题1) 若两个数据块都在外部数据存储器中,如何实现数据块的传送?答:在外部数据存储器中的两个数据块不能直接传送数据,可将外部数据存储器中的数据块先送到片内,完成操作后再送回片外即可完成数据块的传送。2) 在调试程序时,若不用程序给40H4FH赋初值,而用键盘在CPU DATA区给40H4FH单元预赋初值,如何做?答:在输出窗口中对应的地址直接输入初值即可。实验三 算数运算指令编程设计一、实验内容1、求两个无符号数求和及差;2、求两个带符号数求和及差;3、求两个压缩的BCD码数的和及差。二、实验程序清单及数据记录 1、计算下面各式中两个无符号数的和及
12、差,观察CY,并记录运算结果,并求出结果的真值。(1)计算200+200(2)计算 36589+46542(3)计算 100-200及200-100(4)计算 36589-16542及16542-36589 1)加法的参考程序: (1)计算两个单字节数的和的参考程序: statesPC $APSWCYACORG 0000H0C:0x00000x000x0000MOV A,#2001C:0x00020xc80x0100ADD A,#2002C:0x00040x900xc011SJMP $END执行结果:cy=1 ac=1,所以计算结果(A)=100H+90H=190H=400(2)计算两个双字节
13、数的和的参考程序: statesPC $APSWCYACOVORG 0100H0C:0x01000x000x00000MOV A,#LOW(36589)1C:0x01020xed0x00000ADD A,#LOW(46542)2C:0x01040xbb0xc0110MOV 30H,A3C:0x01060xbb0xc0110MOV A,#HIGH(36589)4C:0x01080x8e0xc0110ADDC A,#HIGH(46542)5C:0x010A0x440xc4111MOV 31H,A6C:0x010C0x440xc4111MOV A,#07C:0x010E0x000xc4111ADDC
14、 A,#08C:0x01100x010x01000MOV 32H,A9C:0x01120x010x01000SJMP $END执行结果:计算结果为0144BBH,ac=0,cy=0,故为真值,0144BBH=831312)减法的参考程序 (1)两个单字节数的减法程序statesPC $APSWCYACOVORG 0000H0C:0x00000x000x00000CLR C1C:0x00010x000x00000MOV A,#1002C:0x00030x640x01000SUBB A,#2003C:0x00050x9c0xc4111SJMP $END执行结果:cy=1,ac=1,ov=1,计算结
15、果-100(2)两个双字节数的减法程序statesPC $APSWCYACOVORG 0100H0C:0x01000x000x00000CLR C1C:0x01010x000x00000MOV A,#LOW(36589)2C:0x01030xed0x00000SUBB A,#LOW(16542)3C:0x01050x4f0x41010MOV 30H,A4C:0x01070x4f0x41010MOV A,#HIGH(36589)5C:0x01090x8e0x40010SUBB A,#HIGH(16542)6C:0x010B0x4e0x04001MOV 31H,A7C:0x010D0x4e0x04
16、001MOV A,#08C:0x010F0x000x04001SUBB A,#09C:0x01110x000x00000MOV 32H,A10C:0x01130x000x00000SJMP $END执行结果:计算结果为4E4FH, ac=0、cy=0,故为真值。4E4FH=20047计算16542-36589 :statesPC $APSWCYACOVORG 0100H0C:0x01000x000x00000CLR C1C:0x01010x000x00000MOV A,#LOW(16542)2C:0x01030x9e0x01000SUBB A,#LOW(36589)3C:0x01050xb10
17、x80100MOV 30H,A4C:0x01070xb10x80100MOV A,#HIGH(16542)5C:0x01090x400x81100SUBB A,#HIGH(36589)6C:0x010B0xb10xc4111MOV 31H,A7C:0x010D0xb10xc4111MOV A,#08C:0x010F0x000xc4111SUBB A,#09C:0x01110xff0xc0110MOV 32H,A10C:0x01130xff0xc0110SJMP $END执行结果:cy=1,计算结果为-(0FFFFFFH+1-0FFB1B1H)=-4E4FH=-200472、计算下面各式中两个带
18、符号数的和及差,观察OV,并记录运算结果,并求出结果的真值。(1)计算 56+78statesPC $APSWOVACCYORG 0000H0C:0x00000x000x00000MOV A,#561C:0x00020x380x01000ADD A,#782C:0x00040x860x45110SJMP $4C:0x00040x860x45110END执行结果:ov=1,溢出,结果无意义。(2)计算 120+120statesPC $APSWOVACCYORG 0000H0C:0x00000x000x00000MOV A,#1201C:0x00020x780x00000ADD A,#1202C
19、:0x00040xf00x44110SJMP $4C:0x00040xf00x44110END执行结果:ov=1,溢出,结果无意义。(3)计算 -56-78statesPC $APSWOVACCYORG 0000H0C:0x00000x000x00000CLR C1C:0x00010x000x00000MOV A,#-562C:0x00030xc80x01000SUBB A,#783C:0x00050x7a0x45110SJMP $5C:0x00050x7a0x45110END执行结果:ov=1,溢出,结果无意义(4)计算 -120-123statesPC $APSWOVACCYORG 000
20、0H0C:0x00000x000x00000CLR C1C:0x00010x000x00000MOV A,#-1202C:0x00030x880x00000SUBB A,#1233C:0x00050x0d0x45110SJMP $5C:0x00050x0d0x45110END执行结果:ov=1,溢出,结果无意义。3.BCD码运算,观察CY、AC,并记录运行结果,求出结果的真值。1)计算 56+99ststesPC $APSWACCYORG 0000H0C:0x00000x000x0000MOV A,#56H1C:0x00020x560x0000ADD A,#99H2C:0x00040xef0x
21、0100DA A3C:0x00050xee0x8001MOV 30H,A4C:0x00070xee0x8001SJMP $5C:0x00070xee0x8001END执行结果:cy=1,有借位,故计算结果为100+55=1552) 计算 56-99ststesPC $APSWACCYORG 0000H0C:0x00000x000x0000CLR C1C:0x00010x000x0000MOV A,#9AH2C:0x00030x9a0x0000SUBB A,#99H3C:0x00050x010x0100ADD A,#56H4C:0x00070x570x0100DA A5C:0x00080x570
22、x0100MOV 30H,A6C:0x000A0x570x0100CPL C7C:0x000B0x570x8101SJMP $9C:0x000B0x570x8101END执行结果:cy=1,有借位,故计算结果为-100+57=-43。3)计算36826529+29541265statesPC $APSWR0R12iHovaccyORG 0000H0C:0x00000x000x000x000x000x65(20H)000MOV R0,#30H1C:0x00020x000x000x300x000x65(20H)000MOV R1,#20H2C:0x00040x000x000x300x200x65(
23、20H)000MOV 2FH,#04H4C:0x00070x000x000x300x200x65(20H)000CLR C5C:0x00080x000x000x300x200x65(20H)000DA1:MOV A,R06C:0x00090x290x010x300x200x65(20H)000ADDC A,R17C:0x000A0x8e0x040x300x200x65(20H)100DA A8C:0x000B0x940x050x300x200x65(20H)100MOV R1,A9C:0x000C0x940x050x300x200x94(20H)100INC R010C:0x000D0x940
24、x050x310x200x94(20H)100INC R111C:0x000E0x940x050x310x210x94(20H)100DJNZ 2FH,DA113C:0x00080x940x050x310x210x94(20H)100总计循环DA1程序4次,states:13-28,结果为:(21H)=77H,(22H)=36H,(23H)=66H29C:0x00080x360x800x330x230x29(23H)00130C:0x00090x360x800x330x230x29(23H)00131C:0x000A0x600x400x330x230x29(23H)01032C:0x000B0x660x400x330x230x29(23H)01033C:0x000C0x660x400x330x230x66(23H)01034C:0x000D0x660x400x340x230x6
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1