计算机硬件.docx
《计算机硬件.docx》由会员分享,可在线阅读,更多相关《计算机硬件.docx(69页珍藏版)》请在冰豆网上搜索。
计算机硬件
实验一熟悉键盘操作及数传指令编程设计
一、实验目的
1.熟悉软件模拟调试的环境及键盘操作。
2.掌握汇编语言程序设计的方法,加深对指令的理解。
3.学会软件模拟调试和察看修改观察项的方法。
二、实验内容
印证数据传送指令的功能、寻址方式以及PC指针、SP指针、DPTR指针、Ri指针分别对代码段、堆栈段、外扩数据存储器段、位寻址区等不同存储器的访问方式。
三、实验步骤
1.进入调试软件环境,输入源程序;
2.汇编源程序;
3.用单步方式运行程序;
4.检查并记录各寄存器和存储单元内容的变化。
四、程序清单
1.内部RAM数据传送
1)寄存器寻址与立即寻址,需要查看的数据有A、PSW和不同寄存器区的Rn等单元的内容。
ORG0000H
MOVPSW,#00H
MOVR0,#30H
MOVA,R0
MOVR6,A
MOVPSW,#14H
MOVR0,#30H
MOVA,R0
MOVR6,A
MOVPSW,#10H
MOVR0,#30H
MOVA,R0
MOVR6,A
MOVPSW,#08H
MOVR0,#30H
MOVA,R0
MOVR6,A
SJMP$
END
程序运行结果如下:
01
ORG0000H
02
MOVPSW,#00H
03
MOVR0,#30H
r0=0x30
04
MOVA,R0
a=0x30
05
MOVR6,A
r6=0x30
06
MOVPSW,#14H
r0=0x00
r6=0x00
psw=0x14
ov=1
rs=2
07
MOVR0,#30H
r0=0x30
08
MOVA,R0
09
MOVR6,A
r6=0x30
10
MOVPSW,#10H
psw=0x10
ov=0
11
MOVR0,#30H
12
MOVA,R0
13
MOVR6,A
14
MOVPSW,#08H
r0=0x00
r6=0x00
psw=0x08
rs=1
15
MOVR0,#30H
r0=0x30
16
MOVA,R0
17
MOVR6,A
r6=0x30
18
SJMP$
19
END
2)直接寻址,需查看30H、31H、32H、40H、ACC、PSW等单元的内容。
ORG0100H
MOV30H,#45H
MOV31H,#46H
MOV02H,31H
MOV0E0H,30H
MOV32H,ACC
MOVACC,PSW
MOV40H,ACC
SJMP$
END
程序运行结果如下:
30H
31H
32H
40H
ACC
PSW
01
ORG0100H
00
00
00
00
0x00
0x00
02
MOV30H,#45H
45
00
00
00
0x00
0x00
03
MOV31H,#46H
45
46
00
00
0x00
0x00
04
MOV02H,31H
45
46
00
00
0x00
0x00
05
MOV0E0H,30H
45
46
00
00
0x45
0x01
06
MOV32H,ACC
45
46
45
00
0x45
0x01
07
MOVACC,PSW
45
46
45
00
0x01
0x01
08
MOV40H,ACC
45
46
45
01
0x01
0x01
09
SJMP$
45
46
45
01
0x01
0x01
10
END
45
46
45
01
0x01
0x01
3)寄存器间接寻址,需查看@R0、RO等的内容。
ORG0200H
MOV30H,#66H
MOVR0,#30H
MOV@R0,#30H
SJMP$
END
程序运行结果如下:
@R0
RO
01
ORG0200H
02
MOV30H,#66H
03
MOVR0,#30H
0x30
04
MOV@R0,#30H
30
05
SJMP$
外部数据传送
需要查看的数据有外部数据存储器单元2000H,外部程序存储器单元2001H。
ORG0000H
MOVA,#89H
MOVDPTR,#2000H
MOVX@DPTR,A
INCDPTR
CLRA
MOVCA,@A+DPTR
SJMP$
ORG2000H
DB44H
DB78H
DB67H
END
程序运行结果如下:
ORG0000H
2000H
2001H
01
MOVA,#89H
00
78
02
MOVDPTR,#2000H
00
78
03
MOVX@DPTR,A
00
78
04
INCDPTR
89
78
05
CLRA
89
78
06
MOVCA,@A+DPTR
89
78
07
SJMP$
89
78
08
ORG2000H
89
78
09
DB44H
89
78
10
DB78H
89
78
11
DB67H
89
78
12
END
89
78
2、堆栈操作
需要查看的数据有50H、51H、A及SP指针和堆栈区中数据随PUSH和POP指令执行后的变化情况和数据的存放次序等。
1)可用于保护现场和恢复现场的程序
ORG0000H
MOVSP,#5FH
MOV50H,#3BH
MOV51H,#2FH
MOVA,#12H
PUSH50H
PUSH51H
PUSHACC
POP0E0H
POP51H
POP50H
SJMP$
END
50H
51H
60H
61H
62H
81H
A
SP
01
ORG0000H
00
00
00
00
00
07
0x00
0x00
02
MOVSP,#5FH
00
00
00
00
00
5F
0x00
0x5f
03
MOV50H,#3BH
5B
00
00
00
00
5F
0x00
0x5f
04
MOV51H,#2FH
3B
2F
00
00
00
5F
0x00
0x5f
05
MOVA,#12H
3B
2F
00
00
00
5F
0x12
0x5f
06
PUSH50H
3B
2F
3B
00
00
60
0x12
0x60
07
PUSH51H
3B
2F
3B
2F
00
61
0x12
0x61
08
PUSHACC
3B
2F
3B
2F
00
62
0x12
0x62
09
POP0E0H
3B
2F
3B
2F
12
61
0x12
0x61
10
POP51H
3B
2F
3B
2F
12
60
0x12
0x60
11
POP50H
3B
2F
3B
2F
12
5F
0x12
0x5f
12
SJMP$
3B
2F
3B
2F
12
5F
0x12
0x5f
13
END
3B
2F
3B
2F
12
5F
0x12
0x5f
2)可用于数据交换的程序
ORG0100H
MOVSP,#6FH
MOV50H,#3BH
MOV51H,#2FH
PUSH50H
PUSH51H
POP50H
POP51H
SJMP$
END
50H
51H
70H
71H
81H
A
SP
01
ORG0100H
00
00
00
00
00
0x00
0x07
02
MOVSP,#6FH
00
00
00
00
6F
0x00
0x6f
03
MOV50H,#3BH
3B
00
00
00
6F
0x00
0x6f
04
MOV51H,#2FH
3B
2F
00
00
6F
0x00
0x6f
05
PUSH50H
3B
2F
3B
00
70
0x00
0x70
06
PUSH51H
3B
2F
3B
2F
71
0x00
0x71
07
POP50H
2F
2F
3B
2F
70
0x00
0x70
08
POP51H
2F
3B
3B
2F
6F
0x00
0x6f
4.数据交换
记录每条指令运行后的结果,从而加深对各种不同的交换指令的理解。
A
01
ORG0000H
00
02
MOVA,#58H
58
03
SWAPA
85
04
MOV40H,A
85
05
SJMP$
85
06
END
85
1)SWAP指令
ORG0000H
MOVA,#58H
SWAPA
MOV40H,A
SJMP$
END
SWAPA:
指令的作用是让A中数
据的高四位和低四位交换位置
2)XCHD指令
R0
A
01
ORG0030H
0x00
0x00
02
MOVA,#30H
0x00
0x30
03
MOVR0,#30H
0x30
0x30
04
MOV@R0,#09H
0x30
0x30
05
XCHDA,@R0
0x30
0x39
06
MOV41H,A
0x30
0x39
07
SJMP$
0x30
0x39
08
END
0x30
0x39
ORG0030H
MOVA,#30H
MOVR0,#30H
MOV@R0,#09H
XCHDA,@R0
MOV41H,A
SJMP$
END
XCHDA,@R0:
是半
字节交换指令,累加
器A的低4位和内存的低4位交换.
3)XCH指令
ORG0100H
MOV50H,#1
MOVA,#89H
XCHA,50H
MOVR7,#3
XCHA,R7
XCHA,@R0
SJMP$
END
50H
A
R0
R7
01
ORG0100H
00
0x00
0x00
0x00
02
MOV50H,#1
01
0x00
0x00
0x00
03
MOVA,#89H
01
0x89
0x00
0x00
04
XCHA,50H
89
0x01
0x00
0x00
05
MOVR7,#3
89
0x01
0x00
0x03
06
XCHA,R7
89
0x03
0x00
0x01
07
XCHA,@R0
89
0x00
0x03
0x01
08
SJMP$
09
END
五、思考题
1、寄存器寻址与寄存器间接寻址有什么区别?
答:
寄存器寻址中寄存器存放操作数;寄存器间接寻址中寄存器存放操作数所在的地址。
2、PC指针与SP指针有什么区别?
答:
PC指针是16位存储器,指向即将执行的命令的栈顶;SP指针是8位寄存器,指栈顶。
3、DPTR指针与Ri(R0,R1)指针有什么区别?
答:
DPTR指片外的64KB数据范围;Ri指针指片内00H—7FH数据范围,只有配合P2使用才可寻址片外64KB外围地址。
4、立即寻址与直接寻址有什么区别?
答:
立即寻址是指令直接给出操作数;直接寻址是指令中直接给出操作数所在的单元地址或位地址。
5、同一个特殊功能寄存器不同表达形式。
答:
在直接寻址时,寄存器ACC可以表示为ACC、OEOH,Cy、0D7H、PSW.7、0D0H.7都可以表示Cy,PSW可以表示为0D0H。
6、三种不同的交换指令的区别是什么?
答:
XCH:
把A与片内RAM的某单位或SFR中的内容相互交换,影响P标志;
XHD:
把A的低四位与片内RAM的低4位交换,高四位不变;
SWAP:
A中低四位与高四位互换,不影响标志位。
实验二数传指令程序设计
一、实验目的
1.掌握数据块的传送操作和算术运算指令的应用。
2.进一步掌握汇编语言设计和调试方法。
3.掌握观察窗口的使用方法。
4.学会给存储单元赋初值的方法。
二、实验内容
1、把内部RAM40H~4FH置初值0A0H~0AFH;
2、而后把40H~4FH内容传送到外部RAM9800H~980FH中;
3、再把9800H~980FH内容传送到50H~5FH中。
三、实验步骤
1.分别用单步和连续运行方式,调试上述程序;
2.在观察窗口中观察结果。
四、实验程序清单
数据块传送参考程序:
ORG0000H
MAIN:
MOVR0,#40H
MOVR2,#10H
MOVA,#0A0H
A1:
MOV@R0,A
INCR0
INCA
DJNZR2,A1
MOVR0,#40H
MOVDPTR,#9800H
MOVR2,#10H
A2:
MOVA,@R0
MOVX@DPTR,A
INCR0
INCDPTR
DJNZR2,A2
MOVR0,#50H
MOVDPTR,#9800H
MOVR2,#10H
A3:
MOVXA,@DPTR
MOV@R0,A
INCDPTR
INCR0
DJNZR2,A3
SJMP$
END
01
ORG0000H
R0
r2
A
40H
9800H
DPTR
50H
02
MOVR0,#40H
0x40
03
MOVR2,#10H
0x10
04
MOVA,#0A0H
A0
05
A1:
MOV@R0,A
A0
06
INCR0
0x41
07
INCA
A1
08
DJNZR2,A1
09
MOVR0,#40H
0x00
10
MOVDPTR,#9800H
9800
11
MOVR2,#10H
0x10
12
A2:
MOVA,@R0
0xA0
13
MOVX@DPTR,A
A0
14
INCR0
0x41
15
INCDPTR
9801
16
DJNZR2,A2
17
MOVR0,#50H
0x50
18
MOVDPTR,#9800H
9800
19
MOVR2,#10H
0x10
20
A3:
MOVXA,@DPTR
0xA0
21
MOV@R0,A
A0
22
INCDPTR
9801
23
INCR0
0x51
24
DJNZR2,A3
0x0F
A1:
05-08进行16次循环,每次分别为内部40H~4FH置初值0A0H~0AFH。
第二次循环:
R0
R2
A
41H
05
A1:
MOV@R0,A
0x0f
06
INCR0
A1
07
INCA
0x42
08
DJNZR2,A1
A2
第十六次循环:
R0
R2
A
4FH
05
A1:
MOV@R0,A
0x01
06
INCR0
AF
07
INCA
0x50
08
DJNZR2,A1
B0
达到的结果为:
40H
41H
42H
43H
44H
45H
46H
47H
48H
49H
4AH
4BH
4CH
4DH
4EH
4FH
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
AA
AB
AC
AD
AE
AF
A2:
12-16循环16次,分别把40H~4FH内容传送到外部RAM9800H~980FH中
第八次循环:
R2
R0
A
DPTR
9808H
12
A2:
MOVA,@R0
0xA8
13
MOVX@DPTR,A
A8
14
INCR0
0x49
15
INCDPTR
9809
16
DJNZR2,A2
0x07
第十六次循环:
R2
R0
A
DPTR
980FH
12
A2:
MOVA,@R0
0xAF
13
MOVX@DPTR,A
AF
14
INCR0
0x50
15
INCDPTR
9810
16
DJNZR2,A2
0x00
达到的结果:
9800H
9801H
9802H
9803H
9804H
9805H
9806H
9807H
A0
A1
A2
A3
A4
A5
A6
A7
2808H
9809H
980AH
980BH
980CH
980DH
980EH
980FH
A8
A9
AA
AB
AC
AD
AE
AF
A3:
20--24循环16次,再再把9800H~980FH内容传送到50H~5FH中。
第八次循环:
R2
R0
A
DPTR
58H
20
A3:
MOVXA,@DPTR
0xa8
21
MOV@R0,A
A8
22
INCDPTR
9809
23
INCR0
0X59
24
DJNZR2,A3
0X07
第十六次循环:
R2
R0
A
DPTR
5FH
20
A3:
MOVXA,@DPTR
0Xaf
21
MOV@R0,A
AF
22
INCDPTR
9810
23
INCR0
0x60
24
DJNZR2,A3
0x00
达到的结果:
50H
51H
52H
53H
54H
55H
56H
57H
A0
A1
A2
A3
A4
A5
A6
A7
58H
59H
5AH
5BH
5CH
5DH
5EH
5FH
A8
A9
AA
AB
AC
AD
AE
AF
五、思考题
1)若两个数据块都在外部数据存储器中,如何实现数据块的传送?
答:
选择R0和DPTR两个指针,用MOVX命令经过A累加器进行数据块传输。
2)在调试程序时,若不用程序给40H~4FH赋初值,而用键盘在CPUDATA区给40H~4FH单元预赋初值,如何做?
答:
打开“视图”菜单,选择“存储器窗口”,弹出存储器对话框,在MEMORY2地址栏中键入“D:
0X00”回车,建立内部数据存储器的观察窗口。
找到40H—4FH所在位置,分别双击40H—4FH所在位置,当有光标出现时,用键盘输入初值。
实验三算数运算指令编程设计
一、实验目的
1、掌握算术运算指令及其应用。
2、进一步掌握汇编语言设计和调试方法。
3、掌握观察窗口的使用方法。
4、学会给存储单元赋初值的方法。
二、实验内容
1、求两个无符号数求和及差;
2、求两个带符号数求和及差;
3、求两个压缩的BCD码数的和及差。
三、实验步骤
1.分别用单步和连续运行方式,调试上述各个程序;
2.在观察窗口中观察结果。
四、实验程序清单
1、计算下面各式中两个无符号数的和及差,观察CY,并记录运算结果,并求出结果的真值。
(1)计算200+200
(2)计算36589+46542
(3)计算100-200及200-100
(4)计算36589-16542及16542-36589
1)加法的参考程序:
(1)计算两个单字节数的和的参考程序:
ORG0000H
MAIN:
MOVA,#200
ADDA,#200
SJMP$
END
CY
A
01
ORG0000H
02
MAIN:
MOVA,#200
0
0xc8
03
ADDA,#200
1
0x90
结果0x90的真值为400.
(2)计算两个双字节数的和的参考程序:
ORG0100H
MAIN:
MOVA,#low(36589)
ADDA,#low(46542)
MOV30H,A
MOVA,