计算机硬件技术基础软件实验讲义.docx

上传人:b****6 文档编号:13055122 上传时间:2023-06-10 格式:DOCX 页数:54 大小:203.62KB
下载 相关 举报
计算机硬件技术基础软件实验讲义.docx_第1页
第1页 / 共54页
计算机硬件技术基础软件实验讲义.docx_第2页
第2页 / 共54页
计算机硬件技术基础软件实验讲义.docx_第3页
第3页 / 共54页
计算机硬件技术基础软件实验讲义.docx_第4页
第4页 / 共54页
计算机硬件技术基础软件实验讲义.docx_第5页
第5页 / 共54页
计算机硬件技术基础软件实验讲义.docx_第6页
第6页 / 共54页
计算机硬件技术基础软件实验讲义.docx_第7页
第7页 / 共54页
计算机硬件技术基础软件实验讲义.docx_第8页
第8页 / 共54页
计算机硬件技术基础软件实验讲义.docx_第9页
第9页 / 共54页
计算机硬件技术基础软件实验讲义.docx_第10页
第10页 / 共54页
计算机硬件技术基础软件实验讲义.docx_第11页
第11页 / 共54页
计算机硬件技术基础软件实验讲义.docx_第12页
第12页 / 共54页
计算机硬件技术基础软件实验讲义.docx_第13页
第13页 / 共54页
计算机硬件技术基础软件实验讲义.docx_第14页
第14页 / 共54页
计算机硬件技术基础软件实验讲义.docx_第15页
第15页 / 共54页
计算机硬件技术基础软件实验讲义.docx_第16页
第16页 / 共54页
计算机硬件技术基础软件实验讲义.docx_第17页
第17页 / 共54页
计算机硬件技术基础软件实验讲义.docx_第18页
第18页 / 共54页
计算机硬件技术基础软件实验讲义.docx_第19页
第19页 / 共54页
计算机硬件技术基础软件实验讲义.docx_第20页
第20页 / 共54页
亲,该文档总共54页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

计算机硬件技术基础软件实验讲义.docx

《计算机硬件技术基础软件实验讲义.docx》由会员分享,可在线阅读,更多相关《计算机硬件技术基础软件实验讲义.docx(54页珍藏版)》请在冰点文库上搜索。

计算机硬件技术基础软件实验讲义.docx

计算机硬件技术基础软件实验讲义

第二章指令系统和汇编语言程序设计实验

本章实验主要包括指令系统和汇编语言程序设计两部分。

采用软件模拟调试的方法,目的在于通过这些实验可以使学生巩固所学知识,加深对MCS-51单片机内部结构、指令系统的理解,更进一步掌握汇编语言程序设计的方法和技巧。

第一节指令系统实验

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

一、实验目的

1.熟悉软件模拟调试的环境及键盘操作。

2.掌握汇编语言程序设计的方法,加深对指令的理解。

3.学会软件模拟调试和察看修改观察项的方法。

二、实验内容

印证数据传送指令的功能、寻址方式以及PC指针、SP指针、DPTR指针、Ri指针分别对代码段、堆栈段、外扩数据存储器段、位寻址区等不同存储器的访问方式。

三、实验步骤

1.进入调试软件环境,输入源程序;

2.汇编源程序;

3.用单步方式运行程序;

4.检查并记录各寄存器和存储单元内容的变化。

四、程序清单

1.内部RAM数据传送

需要查看的数据有30H,31H,A,R0等。

ORG0000H;起始地址

MOVR0,#30H;30H-(R0)

MOV30H,#45H;45H-(30H)

MOV31H,#46H;46H-(31H)

MOVR2,30H;(30H)-(R2)

MOV02H,31H;31H-(02H)

MOVA,#87H;87H-(A)

MOV0E0H,30H;(30H)-(0E0H)

MOV30H,A;(A)-(30H)

MOV31H,@R0;((R0))-(31H)

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.数据交换

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

ORG0000H

MOVA,#58H

SWAPA

MOV40H,A

MOVA,#30H

MOVR0,#30H

MOV@R0,#09H

XCHDA,@R0

MOV50H,#1

MOVA,#89H

XCHA,50H

MOVR7,#3

XCHA,R7

XCHA,@R0

SJMP$

END

五、思考题

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

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

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

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

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

 

实验二数传指令和算数运算指令编程设计

一、实验目的

1.掌握数据块的传送操作和算术运算指令的应用。

2.进一步掌握汇编语言设计和调试方法。

3.掌握观察窗口的使用方法。

4.学会给存储单元赋初值的方法。

二、实验内容

1.数据区传送

(1)把内部RAM40H~4FH置初值0A0H~0AFH;

(2)而后把40H~4FH内容传送到外部RAM9800H~980FH中;

(3)再把9800H~980FH内容传送到50H~5FH中。

2.多字节十进制加法

加数放在30H开始的单元中(最低位放在30H,按从小到大的顺序存放),被加数和结果存放在20H开始的单元(最低位在20H中),字节数放在2FH中,最高进位位放在位地址7FH单元中。

三、实验步骤

1.分别用单步和连续运行方式,调试上述两个程序;

2.在执行第二个程序之前,给被加数和加数单元赋初值;

3.在观察窗口中观察结果。

四、实验程序清单

1.数据块传送程序:

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

2.多字节十进制加法:

ORG0000H

MAIN:

MOVR0,#30H

MOVR1,#20H

MOV2FH,#04H

CLRC

DA1:

MOVA,@R0

ADDCA,@R1

DAA

MOV@R1,A

INCR0

INCR1

DJNZ2FH,DA1

MOV7FH,C

SJMP$

END

五、思考题

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

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

3.若把第二个程序改为无符号数的减法,怎样修改程序?

4.在第二个程序中,若两数的和存放到从40H开始的单元,如何修改程序?

 

实验三逻辑运算及位操作指令编程设计

一、实验目的

(1)熟悉字节逻辑运算指令功能。

(2)熟悉位操作指令运算功能。

(3)从而更深入的掌握汇编语言程序设计。

(4)学会观察CPU窗口中BIT区的变化。

二、实验内容

1.字节逻辑运算程序

在片内RAM的FIRST和SECOND单元中各有一符号数X和Y,要求按下列条件算出Z,存入RESULT单元中(设运算结果仍为8位数)。

 

FIRSTEQU30H

SECONDEQU31H

RESULTEQU32H

ORG0000H

START:

MOVR0,FIRST

MOVA,R0

JBACC.7,NEG

MOVB,#2

DIVAB

MOVA,B

JZTEMP1

MOVA,R0

ADDA,SECOND

SJMPRES

TEMP1:

MOVA,R0

ANLA,SECOND

SJMPRES

NEG:

CPLACC.7

MOVB,#2

DIVAB

MOVA,B

JZTEMP2

MOVA,R0

ORLA,SECOND

SJMPRES

TEMP2:

MOVA,R0

XRLA,SECOND

RES:

MOVRESULT,A

SJMP$

END

2.位操作程序

布尔电路图如下:

XBIT00H

YBIT01H

ZBIT02H

FBIT03H

ORG0000H

START:

MOVC,Z

ANLC,/Y

MOVF,C

MOVC,Y

ANLC,/Z

ORLC,F

MOVF,C

MOVC,X

ANLC,Y

ORLC,/F

MOVF,C

SJMP$

END

3.拆字程序

把外部数据存储器2000H单元的内容拆开,其高四位送2001H低四位,低四位送2002H低四位,2001H、2002H高四位清零。

需要检查2000H、2001H和2002H单元的内容。

程序清单

ORG0000H

MOVDPTR,#2000H

MOVXA,@DPTR

MOVB,A

SWAPA

ANLA,#0FH

INCDPTR

MOVX@DPTR,A

INCDPTR

MOVA,B

ANLA,#0FH

MOVX@DPTR,A

SJMP$

END

程序框图

4.拼字程序

把外部数据存储器2000H、2001H单元的低四位分别送2002H高低四位。

需要察看2000H、2001H和2002H单元内容。

程序框图:

程序清单

ORG0000H

MOVDPTR,#2000H

MOVXA,@DPTR

ANLA,#0FH

SWAPA

MOVB,A

INCDPTR

MOVXA,@DPTR

ANLA,#0FH

ORLA,B

INCDPTR

MOVX@DPTR,A

SJMP$

END

5.自选程序设计

三、思考题

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两个单元中。

ORG0000H

MOVSP,#2FH

MOVA,#08H

ADDA,#30H

PUSHACC

MOVA,#0CH

ADDA,#37H

PUSHACC

MOVA,30H

INCA

CLRC

SUBBA,#30H

MOV40H,A

POPACC

INCA

SUBBA,#37H

MOV41H,A

POPACC

SJMP$

END

2.二进制数BCD码

将二进制数10011011B转换成BCD码数,存入30H和31H单元中;再将30H单元中的数据加16H后,转换成二进制数据,存入40H单元中。

ORG0000H

MOVA,#10011011B

MOVB,#100

DIVAB

MOV30H,A

MOVA,B

MOVB,#10

DIVAB

SWAPA

ORLA,B

MOV31H,A

MOVA,30H

ADDA,#16H

DAA

PUSHACC

ANLA,#00001111B

MOV40H,A

POPACC

ANLA,#11110000B

SWAPA

MOVB,#10

MULAB

ADDA,40H

MOV40H,A

SJMP$

END

3.BCD码ASCII码

将20H单元中压缩的BCD码数78H转换成ASCII码,转换结果存入30H,31H两个单元中,再将30H,31H两个单元中的数据分别增1,然后转换成压缩BCD码数存入21H单元中。

ORG0000H

MOVA,20H

ANLA,#00001111B

ADDA,#30H

MOV30H,A

PUSHACC

MOVA,20H

ANLA,#11110000B

SWAPA

ADDA,#30H

MOV31H,A

INCA

CLRC

SUBBA,#30H

MOVR2,A

POPACC

INCA

CLRC

SUBBA,#30H

SWAPA

ORLA,R2

MOV21H,A

SJMP$

END

5.自选程序设计

六、思考题

1.如何查看上面三个程序的结果。

2.在程序1中,如果十六进制数未指定是否包含A~F数码,程序应如何修改?

3.在程序2中,如果要转换的二进制数是十六位的,程序应如何编写?

4.十六进制数转换成ASCII码与BCD码数转换成ASCII码有何区别?

 

实验五移位操作

一、实验目的:

掌握移位操作的方法,并理解左移或右移与乘除法运算的关系。

二、实验内容:

1.双字节二进制数左移一位

将两个内部RAM31H和30H单元中的内容组成的双字节数通过Cy左移一位。

功能示意图

 

程序清单

ORG0000H

CLRC

MOVA,30H

RLCA

MOV30H,A

MOVA,31H

RLCA

MOV31H,A

SJMP$

END

2.多字节二进制数右移一位

将三个内部RAM32H、31H和30H单元中的内容组成的三字节数通过Cy右移一位。

功能示意图

 

程序清单

ORG0000H

CLRC

MOVA,32H

RRCA

MOV32H,A

MOVA,31H

RRCA

MOV31H,A

MOVA,30H

RRCA

MOV30H,A

SJMP$

END

三、思考题

1.多于三个字节的移位操作如何进行?

2.如果不通过Cy如何移位?

实现的功能有何不同?

 

第二节汇编语言程序设计实验

实验六分支程序设计

一、实验目的

1.进一步熟悉MCS-51指令系统,了解汇编语言程序设计的基本结构。

2.掌握分支结构程序设计的方法。

3.学会用条件转移指令、CJNE、JMP及其配合使用来编写二分支、三分支和多分支程序。

二、实验内容

1.二分支的条件转移程序

设变量X存放于R0,函数值Y存放在R1,其中X、Y均为二进制数。

试按照下式的要求给Y赋值:

Y=

1

X>0

0

X=0

-1

X<0

程序框图2-1如下

:

N

图2-1二、三分支结构程序流程图

2.自选题目设计

三、实验步骤

1.根据实验内容和参考程序流程图,编出相应的分支结构程序。

2.输入程序,汇编成功;

3.用F4(执行到光标处)、F7(跟踪执行)、F8(单步执行)或断点运行等方式调试程序;

4.观察程序的流程,记录运行结果。

四、思考题

1.CJNE指令对CY有影响吗?

用CJNE和JC/JNC指令配合应注意什么?

在用JMP指令前,若变址255怎么办?

2.用什么指令可以实现多分支之间的隔离?

五、实验报告要求

写出题目运行结果。

六、参考程序清单

1、二分支的条件转移程序

1)用二分支结构程序实现:

ORG0000H

MOVA,R0

JZLOAD;等于零转LOAD

JNBACC.7,GO;大于零转GO

MOVA,#0FFH

SJMPLOAD

GO:

MOVA,#01H

LOAD:

MOVR1,A

SJMP$

END

2)用三分支结构程序实现:

ORG0000H

MOVA,R0

JNZCOMP;不等于零转COMP

MOVR1,#00H;等于零,则0(R1)

SJMPMP3

COMP:

CJNER0,#80H,MP1;(R0)中数与80H比较,不相等则转移到MP1

MOVR1,#0FFH;若比较相等,则-1(R1)

LJMPMP3

MP1:

JCMP2;两数不相等,(R0)>0转MP2

MOVR1,#0FFH;(R0)<0,-1(R1)

LJMPMP3

MP2:

MOVR1,#01H;(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.三个字节右移四位:

ORG0000H

MOVR7,#4

RR30:

MOVR6,#3

CLRC

MOVR0,#30H

RR31:

MOVA,@R0

RRCA

MOV@R0,A

INCR0

DJNZR6,RR31

DJNZR7,RR30

SJMP$

END

2.冒泡法排序:

ORG0000H

MOVPSW,#00H

MOVP2,#36H

MOVR2,#10-1

LOOP0:

MOVR0,#00H

MOVR1,#01H

MOV03H,R2

CLR7FH

LOOP1:

MOVXA,@R0

MOV30H,A

MOVXA,@R1

CJNEA,30H,LOOP2

SJMPL1

LOOP2:

JCL1

MOVX@R0,A

XCHA,30H

MOVX@R1,A

SETB7FH

L1:

INCR0

INCR1

DJNZR3,LOOP1

JNB7FH,LOOP3

DJNZR2,LOOP0

LOOP3:

SJMP$

END

 

 

Y

N

N

N

Y

N

Y

N

Y

 

图2-4循环结构程序流程图

 

实验八查表程序设计

一、实验目的

1.进一步熟悉MCS-51指令系统和汇编语言程序设计。

2.学会用MOVC指令编写查表程序。

二、实验内容

1.设计并调试一个查平方表的程序,其功能为应用查表指令MOVCA,@A+PC,求累加器A中数的平方值,结果平方值送A。

要求待查的(A)≤15。

2.设计并调试一个根据电压值查与其对应的温度值的查表程序,其功能为应用查表指令MOVCA,@A+DPTR,求(A)中电压值对应的温度值,将温度值送R2R3(温度值为二字节的压缩BCD码),电压值的范围为(A)≤0FFH。

实验程序参考框图如2-5所示。

三、实验步骤

1.敲入程序和预定表后;

2.通过修改自变量参数启动并调试程序,直至正确为止。

3.边调试边体会用PC或DPTR作指针查表的区别。

开始

表首地址(DPTR)

0(A)

0(A)

结束

图2-5查表程序框图

四、实验报告要求

根据实验内容和程序参考流程,编出所需查表程序,列出实验程序清单。

五、思考题

1.当表的长度〉255个字节时应选哪一条指令查表?

2.用PC指针查表编程时应注意什么?

六、参考程序清单

1.求平方值查表程序:

ORG0000H

ADDA,#02H

MOVCA,@A+PC

SJMP$

DB0,1,4,9,16,25

DB36······225

END

2.测量温度查表程序:

ORG0000H

MOVDPTR,#TAB

CLRC

MOVR0,A

ADDA,R0

MOVF0,C

ADDA,DPL

MOVDPL,A

CLRA

ADDCA,DPH

MOVC,F0

ADDCA,#0

MOVDPH,A

CLRA

MOVCA,@A+DPTR;查第一个字节

MOVR2,A

CLRA

INCDPTR

MOVCA,@A+DPTR;查第二个字节

MOVR3,A

SJMP$

TAB:

DW……;温度表值(自己设定一组数)

END

实验九散转程序设计

一、实验目的

1.进一步熟悉MCS-51指令系统和汇编语言程序设计。

2.学会用三种不同的方法设计散转程序,并掌握它们的区别。

二、实验内容

设计并调试一个程序,其功能为根据(20H)的值i(i≤7)取相应的处理程序Pi的入口地址并转移到程序Pi,Pi的处理程序的功能为(Ri)+1→(Ri),[(20H)+1]^7(20H),再重复地根据(20H)散转。

参考程序框图如图2-6所示:

三、实验步骤

1.输入编好的程序,汇编成功;

2.调试程序,使用修改寄存器的方法,使R0—R7初值为0,然后启动系统,带断点运行,运行一个循环后检查运行结果,观察R0—R7是否依次计数,排除程序中错误,直至R0—R7同步计数为止。

四、实验报告要求

1.列出根

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

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2