1、计算机硬件实验一 熟悉键盘操作及数传指令编程设计一、 实验目的1 熟悉软件模拟调试的环境及键盘操作。2 掌握汇编语言程序设计的方法,加深对指令的理解。3 学会软件模拟调试和察看修改观察项的方法。二、 实验内容印证数据传送指令的功能、寻址方式以及PC指针、SP指针、DPTR指针、Ri指针分别对代码段、堆栈段、外扩数据存储器段、位寻址区等不同存储器的访问方式。 三、实验步骤1 进入调试软件环境,输入源程序;2 汇编源程序;3 用单步方式运行程序;4 检查并记录各寄存器和存储单元内容的变化。四、程序清单1. 内部RAM数据传送1)寄存器寻址与立即寻址,需要查看的数据有A、PSW和不同寄存器区的Rn等
2、单元的内容。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程序运行结果如下:01ORG 0000H02MOV PSW,#00H03MOV R0,#30Hr0=0x3004MOV A,R0a=0x3005MOV R6,Ar6=0x3006MOV PSW,#14Hr0=0x00
3、r6=0x00psw=0x14ov=1rs=207MOV R0,#30Hr0=0x3008MOV A,R009MOV R6,Ar6=0x3010MOV PSW,#10Hpsw=0x10ov=011MOV R0,#30H12MOV A,R013MOV R6,A14MOV PSW,#08Hr0=0x00r6=0x00psw=0x08rs=115MOV R0,#30Hr0=0x3016MOV A,R017MOV R6,Ar6=0x3018SJMP $19END 2) 直接寻址,需查看30H、31H、32H、40H、ACC、PSW等单元的内容。 ORG 0100HMOV 30H,#45H MOV 31
4、H,#46H MOV 02H,31H MOV 0E0H,30H MOV 32H,ACC MOV ACC,PSW MOV 40H,ACC SJMP $ END程序运行结果如下:30H31H32H40HACCPSW01ORG 0100H000000000x000x0002MOV 30H,#45H450000000x000x0003MOV 31H,#46H454600000x000x0004MOV 02H,31H454600000x000x0005MOV 0E0H,30H454600000x450x0106MOV 32H,ACC454645000x450x0107MOV ACC,PSW4546450
5、00x010x0108MOV 40H,ACC454645010x010x0109SJMP $454645010x010x0110END454645010x010x01 3)寄存器间接寻址,需查看R0、RO等的内容。 ORG 0200H MOV 30H,#66H MOV R0,#30H MOV R0,#30H SJMP $ END程序运行结果如下:R0RO01ORG 0200H02MOV 30H,#66H03MOV R0,#30H0x3004MOV R0,#30H3005SJMP $外部数据传送需要查看的数据有外部数据存储器单元2000H,外部程序存储器单元2001H。ORG 0000H MOV
6、 A,#89H MOV DPTR,#2000H MOVX DPTR,A INC DPTRCLR A MOVC A,A+DPTR SJMP $ ORG 2000H DB 44H DB 78H DB 67H END程序运行结果如下:ORG 0000H2000H2001H01MOV A,#89H007802MOV DPTR,#2000H007803MOVX DPTR,A007804INC DPTR897805CLR A897806MOVC A,A+DPTR897807SJMP $897808ORG 2000H897809DB 44H897810DB 78H897811DB 67H897812END8
7、9782、 堆栈操作需要查看的数据有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 $ END50H51H60H61H62H81HASP01ORG 0000H0000000000070x000x0002MOV SP,#5FH00000000005F0x000x5f03MOV 50H,#3B
8、H5B000000005F0x000x5f04MOV 51H,#2FH3B2F0000005F0x000x5f05MOV A,#12H3B2F0000005F0x120x5f06PUSH 50H3B2F3B0000600x120x6007PUSH 51H3B2F3B2F00610x120x6108PUSH ACC3B2F3B2F00620x120x6209POP 0E0H3B2F3B2F12610x120x6110POP 51H3B2F3B2F12600x120x6011POP 50H3B2F3B2F125F0x120x5f12SJMP $3B2F3B2F125F0x120x5f13END3B
9、2F3B2F125F0x120x5f 2)可用于数据交换的程序ORG 0100H MOV SP,#6FHMOV 50H,#3BHMOV 51H,#2FH PUSH 50H PUSH 51H POP 50H POP 51H SJMP $ END50H51H70H71H81HASP01ORG 0100H00000000000x000x0702MOV SP,#6FH000000006F0x000x6f03MOV 50H,#3BH3B0000006F0x000x6f04MOV 51H,#2FH3B2F00006F0x000x6f05PUSH 50H3B2F3B00700x000x7006PUSH 51
10、H3B2F3B2F710x000x7107POP 50H2F2F3B2F700x000x7008POP 51H2F3B3B2F6F0x000x6f4.数据交换 记录每条指令运行后的结果,从而加深对各种不同的交换指令的理解。A01ORG 0000H0002MOV A,#58H5803SWAP A8504MOV 40H,A8505SJMP $8506END85 1)SWAP指令 ORG 0000H MOV A,#58H SWAP A MOV 40H,A SJMP $ ENDSWAP A: 指令的作用是让A中数据的高四位和低四位交换位置 2) XCHD 指令 R0A01ORG 0030H0x000x
11、0002MOV A,#30H0x000x3003MOV R0,#30H0x300x3004MOV R0,#09H0x300x3005XCHD A,R00x300x3906MOV 41H,A0x300x3907SJMP $0x300x3908END 0x300x39 ORG 0030H MOV A,#30H MOV R0,#30H MOV R0,#09H XCHD A,R0 MOV 41H,A SJMP $ ENDXCHD A,R0: 是半字节交换指令,累加器A的低4 位和内存的低4 位交换. 3)XCH 指令 ORG 0100H MOV 50H,#1 MOV A,#89H XCH A,50H
12、MOV R7,#3 XCH A,R7 XCH A,R0 SJMP $ END50HAR0R701ORG 0100H000x000x000x0002MOV 50H,#1010x000x000x0003MOV A,#89H 010x890x000x0004XCH A,50H890x010x000x0005MOV R7,#3890x010x000x0306XCH A,R7890x030x000x0107XCH A,R0890x000x030x0108SJMP $ 09END五、 思考题1、 寄存器寻址与寄存器间接寻址有什么区别? 答:寄存器寻址中寄存器存放操作数;寄存器间接寻址中寄存器存放操作数所在
13、的地址。2、 PC指针与SP指针有什么区别? 答:PC指针是16位存储器,指向即将执行的命令的栈顶;SP指针是8位寄存器,指栈顶。3、 DPTR指针与Ri(R0,R1)指针有什么区别?答:DPTR指片外的64KB数据范围;Ri指针指片内00H7FH数据范围,只有配合P2使用才可寻址片外64KB外围地址。4、 立即寻址与直接寻址有什么区别? 答:立即寻址是指令直接给出操作数;直接寻址是指令中直接给出操作数所在的单元地址或位地址。5、 同一个特殊功能寄存器不同表达形式。答:在直接寻址时,寄存器ACC可以表示为 ACC、OEOH,Cy、0D7H、PSW.7、0D0H.7都可以表示Cy,PSW可以表示
14、为0D0H。6、 三种不同的交换指令的区别是什么? 答:XCH:把A与片内RAM的某单位或SFR中的内容相互交换,影响P标志;XHD:把A的低四位与片内RAM的低4位交换,高四位不变;SWAP:A中低四位与高四位互换,不影响标志位。实验二 数传指令程序设计一、 实验目的1 掌握数据块的传送操作和算术运算指令的应用。2 进一步掌握汇编语言设计和调试方法。3 掌握观察窗口的使用方法。4 学会给存储单元赋初值的方法。二、 实验内容1、把内部RAM 40H4FH置初值0A0H0AFH;2、而后把40H4FH内容传送到外部RAM 9800H980FH中;3、再把 9800H980FH内容传送到 50H5
15、FH中。三、 实验步骤1 分别用单步和连续运行方式,调试上述程序;2 在观察窗口中观察结果。四、 实验程序清单数据块传送参考程序: 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
16、: MOVX A, DPTR MOV R0, A INC DPTR INC R0 DJNZ R2, A3 SJMP $ END 01ORG 0000HR0r2A40H9800HDPTR50H02MOV R0,#40H0x4003MOV R2,#10H0x1004MOV A,#0A0HA005A1: MOV R0, A A006INC R00x4107INC A A108DJNZ R2, A109MOV R0, #40H0x0010MOV DPTR, #9800H980011MOV R2, #10H0x1012A2:MOV A, R00xA013MOVX DPTR, AA014INC R0 0x
17、4115INC DPTR 980116DJNZ R2, A2 17MOV R0, #50H 0x5018MOV DPTR, #9800H 980019MOV R2, #10H0x1020A3:MOVX A, DPTR0xA021MOV R0, A A022INC DPTR 980123INC R00x5124DJNZ R2, A30x0FA1:05-08进行16次循环,每次分别为内部40H4FH置初值0A0H0AFH。第二次循环:R0R2A41H05A1: MOV R0, A0x0f06INC R0A107INC A0x4208DJNZ R2, A1A2第十六次循环:R0R2A4FH05A1:
18、 MOV R0, A0x0106INC R0AF07INC A0x5008DJNZ R2, A1B0达到的结果为:40H41H42H43H44H45H46H47H48H49H4AH4BH4CH4DH4EH4FHA0A1A2A3A4A5A6A7A8A9AAABACADAEAFA2:12-16循环16次,分别把40H4FH内容传送到外部RAM 9800H980FH中第八次循环:R2R0ADPTR9808H12A2: MOV A, R00xA813MOVX DPTR, AA814INC R00x4915INC DPTR980916DJNZ R2, A20x07第十六次循环: R2R0ADPTR980
19、FH12A2: MOV A, R00xAF13MOVX DPTR, AAF14INC R00x5015INC DPTR981016DJNZ R2, A20x00达到的结果:9800H9801H9802H9803H9804H9805H9806H9807HA0A1A2A3A4A5A6A72808H9809H980AH980BH980CH980DH980EH980FHA8A9AAABACADAEAFA3:20-24循环16次,再再把 9800H980FH内容传送到 50H5FH中。第八次循环: R2R0ADPTR58H20A3:MOVX A, DPTR0xa821MOV R0, A A822INC
20、DPTR 980923INC R00X5924DJNZ R2, A30X07第十六次循环: R2R0ADPTR5FH20A3:MOVX A, DPTR0Xaf21MOV R0, A AF22INC DPTR 981023INC R00x6024DJNZ R2, A30x00 达到的结果:50H51H52H53H54H55H56H57HA0A1A2A3A4A5A6A758H59H5AH5BH5CH5DH5EH5FHA8A9AAABACADAEAF五、思考题1) 若两个数据块都在外部数据存储器中,如何实现数据块的传送? 答:选择R0和DPTR两个指针,用MOVX命令经过A累加器进行数据块传输。2)
21、 在调试程序时,若不用程序给40H4FH赋初值,而用键盘在CPU DATA区给40H4FH单元预赋初值,如何做?答:打开“视图”菜单,选择“存储器窗口”,弹出存储器对话框,在MEMORY2地址栏中键入“D:0X00”回车,建立内部数据存储器的观察窗口。找到40H4FH所在位置,分别双击40H4FH所在位置,当有光标出现时,用键盘输入初值。实验三 算数运算指令编程设计一、 实验目的1、 掌握算术运算指令及其应用。2、 进一步掌握汇编语言设计和调试方法。3、 掌握观察窗口的使用方法。4、 学会给存储单元赋初值的方法。二、 实验内容1、求两个无符号数求和及差;2、求两个带符号数求和及差;3、求两个压
22、缩的BCD码数的和及差。三、实验步骤1.分别用单步和连续运行方式,调试上述各个程序;2.在观察窗口中观察结果。四、实验程序清单 1、计算下面各式中两个无符号数的和及差,观察CY,并记录运算结果,并求出结果的真值。(1)计算200+200(2)计算 36589+46542(3)计算 100-200及200-100(4)计算 36589-16542及16542-36589 1)加法的参考程序: (1)计算两个单字节数的和的参考程序: ORG 0000H MAIN: MOV A,#200 ADD A,#200 SJMP $ENDCYA01ORG 0000H02MAIN: MOV A,#20000xc803ADD A,#20010x90结果 0x90的真值为400. (2)计算两个双字节数的和的参考程序: ORG 0100H MAIN: MOV A,#low(36589) ADD A,# low(46542) MOV 30H,A MOV A,
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1