MCS51软件部分上机实验报告.docx

上传人:b****7 文档编号:23842997 上传时间:2023-05-21 格式:DOCX 页数:48 大小:116.62KB
下载 相关 举报
MCS51软件部分上机实验报告.docx_第1页
第1页 / 共48页
MCS51软件部分上机实验报告.docx_第2页
第2页 / 共48页
MCS51软件部分上机实验报告.docx_第3页
第3页 / 共48页
MCS51软件部分上机实验报告.docx_第4页
第4页 / 共48页
MCS51软件部分上机实验报告.docx_第5页
第5页 / 共48页
点击查看更多>>
下载资源
资源描述

MCS51软件部分上机实验报告.docx

《MCS51软件部分上机实验报告.docx》由会员分享,可在线阅读,更多相关《MCS51软件部分上机实验报告.docx(48页珍藏版)》请在冰豆网上搜索。

MCS51软件部分上机实验报告.docx

MCS51软件部分上机实验报告

指令系统和汇编语言程序设计实验报告

实验一熟悉键盘操作及数传指令编程设计

一、实验目的

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

数据记录:

2)直接寻址,需查看30H、31H、32H、40H、ACC、PSW等单元的内容。

ORG0100H

MOV30H,#45H

MOV31H,#46H

MOV02H,31H

MOV0E0H,30H

MOV32H,ACC

MOVACC,PSW

MOV40H,ACC

SJMP$

END

数据记录:

3)寄存器间接寻址,需查看@R0、RO等的内容。

ORG0200H

MOV30H,#66H

MOVR0,#30H

MOV@R0,#30H

SJMP$

END

数据记录:

2.外部数据传送

需要查看的数据有外部数据存储器单元2000H,外部程序存储器单元2001H。

ORG0000H

MOVA,#89H

MOVDPTR,#2000H

MOVX@DPTR,A

INCDPTR

CLRA

MOVCA,@A+DPTR

SJMP$

ORG2000H

DB44H

DB78H

DB67H

END

数据记录:

3.堆栈操作

需要查看的数据有50H、51H、A及SP指针和堆栈区中数据随PUSH和POP指令执行后的变化情况和数据的存放次序等。

1)可用于保护现场和恢复现场的程序

ORG0000H

MOVSP,#5FH

MOV50H,#3BH

MOV51H,#2FH

MOVA,#12H

PUSH50H

PUSH51H

PUSHACC

POP0E0H

POP51H

POP50H

SJMP$

END

数据记录:

2)可用于数据交换的程序

ORG0100H

MOVSP,#6FH

MOV50H,#3BH

MOV51H,#2FH

PUSH50H

PUSH51H

POP50H

POP51H

SJMP$

END

数据记录:

4.数据交换

记录每条指令运行后的结果,从而加深对各种不同的交换指令的理解。

1)SWAP指令

ORG0000H

MOVA,#58H

SWAPA

MOV40H,A

SJMP$

END

数据记录:

2)XCHD指令

ORG0030H

MOVA,#30H

MOVR0,#30H

MOV@R0,#09H

XCHDA,@R0

MOV41H,A

SJMP$

END

数据记录:

3)XCH指令

ORG0100H

MOV50H,#1

MOVA,#89H

XCHA,50H

MOVR7,#3

XCHA,R7

XCHA,@R0

SJMP$

END

数据记录:

五、思考题

1、寄存器寻址与寄存器间接寻址有什么区别?

答:

寄存器寻址所需操作数放在寄存器中,确定了寄存器就得到了操作数,存放操作数的寄存器地址内含或隐含在指令的操作码字节中;而寄存器间接寻址是将指令指定的寄存器内容作为操作数的地址,该地址所指定的单元内容作为被寻找的操作数。

2、PC指针与SP指针有什么区别?

答:

PC指针是一个16位的程序地址寄存器,其内容是当前执行指令的下一条指令在程序内存中的地址,具有自动加1的功能,从而保证程序能够自动顺序执行,寻址范围达64KB,但是PC单元本身没有地址,是不可寻址的;而SP指针为堆栈指针,其内容是堆栈栈顶的存储单元地址,S可以初始化为不同的值,因此堆栈位置是浮动的。

进栈操作时,SP先加1,后写入数据,出栈操作时,先读出数据,再减1。

3、DPTR指针与Ri(R0,R1)指针有什么区别?

答:

数据指针DPTR为16位寄存器,存放16位地址,作为访问外部程序内存ROM、外部数据存储器RAM和扩展I/O接口时的地址;而Ri(i=0,1)可寻址片内RAM低128B(00H~7FH),与P2口配合使用,用Ri指示低8位地址(00H~0FFH),P2口输出高8位地址,可寻址片外数据存储器或I/O的64KB区域。

4、立即寻址与直接寻址有什么区别?

答:

立即寻址中,操作数直接由指令给出,通常紧跟指令操作码之后的一个或两个字节就是所需的操作数;而直接寻址则直接给出操作数所在的单元地址或位地址。

5、同一个特殊功能寄存器不同表达形式。

答:

书写时既可以使用寄存器符号,也可以使用寄存器单元地址,通常有四种表达形式。

例如:

Cy可以表示为Cy/0D7H/PSW.7/0D0H.7,但A累加器比较特殊,有三种表示方法:

A/ACC/0E0H。

6、三种不同的交换指令的区别是什么?

答:

三种不同的交换指令分别是:

整字节交换指令、低半字节交换指令、累加器高低半字节交换指令。

整字节交换指令,XCH,把累加器A的内容与内部RAM及SFR中的内容互相交换,影响P标志;低半字节交换指令,XCHD,累加器A低四位与片内RAM某单元低四位交换,高四位不变;累加器高低半字节交换指令,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

数据记录:

五、思考题

1)若两个数据块都在外部数据存储器中,如何实现数据块的传送?

答:

在外部数据存储器中的两个数据块不能直接传送数据,可将外部数据存储器中的数据块先送到片内,完成操作后再送回片外即可完成数据块的传送。

2)在调试程序时,若不用程序给40H~4FH赋初值,而用键盘在CPUDATA区给40H~4FH单元预赋初值,如何做?

答:

在输出窗口中对应的地址直接输入初值即可。

 

实验三算数运算指令编程设计

一、实验内容

1、求两个无符号数求和及差;

2、求两个带符号数求和及差;

3、求两个压缩的BCD码数的和及差。

二、实验程序清单及数据记录

1、计算下面各式中两个无符号数的和及差,观察CY,并记录运算结果,并求出结果的真值。

(1)计算200+200

(2)计算36589+46542

(3)计算100-200及200-100

(4)计算36589-16542及16542-36589

1)加法的参考程序:

(1)计算两个单字节数的和的参考程序:

states

PC$

A

PSW

CY

AC

ORG0000H

0

C:

0x0000

0x00

0x00

0

0

MOVA,#200

1

C:

0x0002

0xc8

0x01

0

0

ADDA,#200

2

C:

0x0004

0x90

0xc0

1

1

SJMP$

END

 

执行结果:

cy=1ac=1,所以计算结果(A)=100H+90H=190H=400

(2)计算两个双字节数的和的参考程序:

states

PC$

A

PSW

CY

AC

OV

ORG0100H

0

C:

0x0100

0x00

0x00

0

0

0

MOVA,#LOW(36589)

1

C:

0x0102

0xed

0x00

0

0

0

ADDA,#LOW(46542)

2

C:

0x0104

0xbb

0xc0

1

1

0

MOV30H,A

3

C:

0x0106

0xbb

0xc0

1

1

0

MOVA,#HIGH(36589)

4

C:

0x0108

0x8e

0xc0

1

1

0

ADDCA,#HIGH(46542)

5

C:

0x010A

0x44

0xc4

1

1

1

MOV31H,A

6

C:

0x010C

0x44

0xc4

1

1

1

MOVA,#0

7

C:

0x010E

0x00

0xc4

1

1

1

ADDCA,#0

8

C:

0x0110

0x01

0x01

0

0

0

MOV32H,A

9

C:

0x0112

0x01

0x01

0

0

0

SJMP$

END

执行结果:

计算结果为0144BBH,ac=0,cy=0,故为真值,0144BBH=83131

2)减法的参考程序

(1)两个单字节数的减法程序

 

states

PC$

A

PSW

CY

AC

OV

ORG0000H

0

C:

0x0000

0x00

0x00

0

0

0

CLRC

1

C:

0x0001

0x00

0x00

0

0

0

MOVA,#100

2

C:

0x0003

0x64

0x01

0

0

0

SUBBA,#200

3

C:

0x0005

0x9c

0xc4

1

1

1

SJMP$

END

执行结果:

cy=1,ac=1,ov=1,计算结果-100

(2)两个双字节数的减法程序

states

PC$

A

PSW

CY

AC

OV

ORG0100H

0

C:

0x0100

0x00

0x00

0

0

0

CLRC

1

C:

0x0101

0x00

0x00

0

0

0

MOVA,#LOW(36589)

2

C:

0x0103

0xed

0x00

0

0

0

SUBBA,#LOW(16542)

3

C:

0x0105

0x4f

0x41

0

1

0

MOV30H,A

4

C:

0x0107

0x4f

0x41

0

1

0

MOVA,#HIGH(36589)

5

C:

0x0109

0x8e

0x40

0

1

0

SUBBA,#HIGH(16542)

6

C:

0x010B

0x4e

0x04

0

0

1

MOV31H,A

7

C:

0x010D

0x4e

0x04

0

0

1

MOVA,#0

8

C:

0x010F

0x00

0x04

0

0

1

SUBBA,#0

9

C:

0x0111

0x00

0x00

0

0

0

MOV32H,A

10

C:

0x0113

0x00

0x00

0

0

0

SJMP$

END

执行结果:

计算结果为4E4FH,ac=0、cy=0,故为真值。

4E4FH=20047

计算16542-36589:

states

PC$

A

PSW

CY

AC

OV

ORG0100H

0

C:

0x0100

0x00

0x00

0

0

0

CLRC

1

C:

0x0101

0x00

0x00

0

0

0

MOVA,#LOW(16542)

2

C:

0x0103

0x9e

0x01

0

0

0

SUBBA,#LOW(36589)

3

C:

0x0105

0xb1

0x80

1

0

0

MOV30H,A

4

C:

0x0107

0xb1

0x80

1

0

0

MOVA,#HIGH(16542)

5

C:

0x0109

0x40

0x81

1

0

0

SUBBA,#HIGH(36589)

6

C:

0x010B

0xb1

0xc4

1

1

1

MOV31H,A

7

C:

0x010D

0xb1

0xc4

1

1

1

MOVA,#0

8

C:

0x010F

0x00

0xc4

1

1

1

SUBBA,#0

9

C:

0x0111

0xff

0xc0

1

1

0

MOV32H,A

10

C:

0x0113

0xff

0xc0

1

1

0

SJMP$

END

执行结果:

cy=1,计算结果为-(0FFFFFFH+1-0FFB1B1H)=-4E4FH=-20047

 

2、计算下面各式中两个带符号数的和及差,观察OV,并记录运算结果,并求出结果的真值。

(1)计算56+78

states

PC$

A

PSW

OV

AC

CY

ORG0000H

0

C:

0x0000

0x00

0x00

0

0

0

MOVA,#56

1

C:

0x0002

0x38

0x01

0

0

0

ADDA,#78

2

C:

0x0004

0x86

0x45

1

1

0

SJMP$

4

C:

0x0004

0x86

0x45

1

1

0

END

执行结果:

ov=1,溢出,结果无意义。

(2)计算120+120

states

PC$

A

PSW

OV

AC

CY

ORG0000H

0

C:

0x0000

0x00

0x00

0

0

0

MOVA,#120

1

C:

0x0002

0x78

0x00

0

0

0

ADDA,#120

2

C:

0x0004

0xf0

0x44

1

1

0

SJMP$

4

C:

0x0004

0xf0

0x44

1

1

0

END

执行结果:

ov=1,溢出,结果无意义。

(3)计算-56-78

states

PC$

A

PSW

OV

AC

CY

ORG0000H

0

C:

0x0000

0x00

0x00

0

0

0

CLRC

1

C:

0x0001

0x00

0x00

0

0

0

MOVA,#-56

2

C:

0x0003

0xc8

0x01

0

0

0

SUBBA,#78

3

C:

0x0005

0x7a

0x45

1

1

0

SJMP$

5

C:

0x0005

0x7a

0x45

1

1

0

END

执行结果:

ov=1,溢出,结果无意义

(4)计算-120-123

states

PC$

A

PSW

OV

AC

CY

ORG0000H

0

C:

0x0000

0x00

0x00

0

0

0

CLRC

1

C:

0x0001

0x00

0x00

0

0

0

MOVA,#-120

2

C:

0x0003

0x88

0x00

0

0

0

SUBBA,#123

3

C:

0x0005

0x0d

0x45

1

1

0

SJMP$

5

C:

0x0005

0x0d

0x45

1

1

0

END

执行结果:

ov=1,溢出,结果无意义。

 

3.BCD码运算,观察CY、AC,并记录运行结果,求出结果的真值。

1)计算56+99

 

ststes

PC$

A

PSW

AC

CY

ORG0000H

0

C:

0x0000

0x00

0x00

0

0

MOVA,#56H

1

C:

0x0002

0x56

0x00

0

0

ADDA,#99H

2

C:

0x0004

0xef

0x01

0

0

DAA

3

C:

0x0005

0xee

0x80

0

1

MOV30H,A

4

C:

0x0007

0xee

0x80

0

1

SJMP$

5

C:

0x0007

0xee

0x80

0

1

END

执行结果:

cy=1,有借位,故计算结果为100+55=155

2)计算56-99

ststes

PC$

A

PSW

AC

CY

ORG0000H

0

C:

0x0000

0x00

0x00

0

0

CLRC

1

C:

0x0001

0x00

0x00

0

0

MOVA,#9AH

2

C:

0x0003

0x9a

0x00

0

0

SUBBA,#99H

3

C:

0x0005

0x01

0x01

0

0

ADDA,#56H

4

C:

0x0007

0x57

0x01

0

0

DAA

5

C:

0x0008

0x57

0x01

0

0

MOV30H,A

6

C:

0x000A

0x57

0x01

0

0

CPLC

7

C:

0x000B

0x57

0x81

0

1

SJMP$

9

C:

0x000B

0x57

0x81

0

1

END

执行结果:

cy=1,有借位,故计算结果为-100+57=-43。

3)计算36826529+29541265

states

PC$

A

PSW

R0

R1

2iH

ov

ac

cy

ORG0000H

0

C:

0x0000

0x00

0x00

0x00

0x00

0x65

(20H)

0

0

0

MOVR0,#30H

1

C:

0x0002

0x00

0x00

0x30

0x00

0x65

(20H)

0

0

0

MOVR1,#20H

2

C:

0x0004

0x00

0x00

0x30

0x20

0x65

(20H)

0

0

0

MOV2FH,#04H

4

C:

0x0007

0x00

0x00

0x30

0x20

0x65

(20H)

0

0

0

CLRC

5

C:

0x0008

0x00

0x00

0x30

0x20

0x65

(20H)

0

0

0

DA1:

MOVA,@R0

6

C:

0x0009

0x29

0x01

0x30

0x20

0x65

(20H)

0

0

0

ADDCA,@R1

7

C:

0x000A

0x8e

0x04

0x30

0x20

0x65

(20H)

1

0

0

DAA

8

C:

0x000B

0x94

0x05

0x30

0x20

0x65

(20H)

1

0

0

MOV@R1,A

9

C:

0x000C

0x94

0x05

0x30

0x20

0x94

(20H)

1

0

0

INCR0

10

C:

0x000D

0x94

0x05

0x31

0x20

0x94

(20H)

1

0

0

INCR1

11

C:

0x000E

0x94

0x05

0x31

0x21

0x94

(20H)

1

0

0

DJNZ2FH,DA1

13

C:

0x0008

0x94

0x05

0x31

0x21

0x94

(20H)

1

0

0

总计循环DA1程序4次,states:

13-28,结果为:

(21H)=77H,(22H)=36H,(23H)=66H

29

C:

0x0008

0x36

0x80

0x33

0x23

0x29

(23H)

0

0

1

30

C:

0x0009

0x36

0x80

0x33

0x23

0x29

(23H)

0

0

1

31

C:

0x000A

0x60

0x40

0x33

0x23

0x29

(23H)

0

1

0

32

C:

0x000B

0x66

0x40

0x33

0x23

0x29

(23H)

0

1

0

33

C:

0x000C

0x66

0x40

0x33

0x23

0x66

(23H)

0

1

0

34

C:

0x000D

0x66

0x40

0x34

0x23

0x6

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 公务员考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1