实验四 子程序设计实验

实验四子程序设计实验

专业班级光信息科学与技术姓名刘欣学号 012005025116

联系方式 134********

一、任务要求

1. 调试程序dmove.asm,观察片外数据区7000H、A000H开始的单元内容变化规律。

2. 修改程序将7010H-7073H单元内容传送至B000H开始的存储区中。

3. 设计一个子程序,统计片外数据区从2000H开始的256个符号数中偶

数的个数,低位存入R3,高位存入R2。

二、设计思路

内容一:

1. 调试程序dmove.asm,观察片外数据区7000H、A000H开始的单元内容变

化规律。

2.将7010H-7073H单元内容传送至B000H开始的存储区中。修改程序,未

修改过的“dmove.asm”程序的思路是,设置循环,依次赋值,所以只需要修

改相应的地址就可以了,需要注意的是,要求的是有结束的地址7073H,所以:

CJNE R3, #74H, DMVE1(跳转)来判断是否到达结束地址。

内容二:

1. 统计片外数据区从2000H开始的256个符号数中偶数的个数。

2. 采用循环,从2000H开始,判断JB ACC.0 ,NCOUNTDUB (跳转),则可以说

明是奇偶数。

三、资源分配

1.调试程序

在该程序中R0作为计数器,DPTR为片外数据指针R2,R3分别为源地址R4,R5为

目的地址,R6,R7 为传送字节数.

2.修改程序

在该程序中R0作为计数器,DPTR为片外数据指针, R2, R3 作为源地址 R4,R5

是目的地址;R6作为传送字节数.

3.子程序

该程序中R0设为循环计数器 ;R1 作为写入片外RAM的符号数;DPTR 为数据指针;R2 设为统计结果高八位;R3 设为统计结果低八位.

四、流程图

五、源代码(含文件头说明、资源使用说明、语句行注释)

1.调试程序

Resource used: R0: 计数器

; DPTR: 片外数据指针

; R2, R3 源地址

;R4, R5 目的地址

;R6, R7 传送字节数

ORG 0090H

START: ;初始化7000H开始的片外RAM空间

MOV R0, #00H ;设循环计数器

MOV DPTR, #7000H ;设数据指针

MOV R1, #00H

LOOP1:

MOV A, R1

MOVX @DPTR, A ;传送到片外RAM

INC DPTR ;修改数据指针

INC R0 ;修改循环计数器

INC R1

CJNE R0, #00H, LOOP1 ;判断是否结束

;给R2,R3,R4,R5,R6,R7赋初值

MOV R2, #70H

MOV R3, #00H

MOV R6, #01H

MOV R7, #00H

MOV R4, #0A0H

MOV R5, #00H

;数据串传送

DMVE: MOV SP, #70H ;设栈底

MOV DPL, R3

MOV DPH, R2

MOVX A, @DPTR ;取一个字节

MOV DPL, R5

MOV DPH, R4

MOVX @DPTR, A ;传送一个字节

CJNE R3, #0FFH, DMVE1

INC R2 ;源地址加1 DMVE1: INC R3

CJNE R5, #0FFH, DMVE2

INC R4 ;目的地址加1 DMVE2: INC R5

CJNE R7, #00H, DMVE3

CJNE R6, #00H, DMVE4 ;数据传送结束?

SJMP $ ;原地踏步

DMVE3: DEC R7 ;字节数减1 SJMP DMVE

DMVE4: DEC R7

DEC R6

SJMP DMVE

2.修改后的程序

Resource used: R0: 计数器

;DPTR: 片外数据指针

; R2, R3 源地址

; R4, R5 目的地址

;R6, 传送字节数

ORG 0090H

START: ;初始化7000H开始的片外RAM空间

MOV R0, #00H ;设循环计数器

MOV DPTR, #7010H ;设数据指针

MOV R1, #00H

LOOP1:

MOV A, R1

MOVX @DPTR, A ;传送到片外RAM

INC DPTR ;修改数据指针

INC R0 ;修改循环计数器

INC R1

CJNE R0, #63H, LOOP1 ;判断是否结束

;给R2,R3,R4,R5,R6,赋初值

MOV R2, #70H

MOV R3, #10H

MOV R6, #63H

MOV R4, #0B0H

MOV R5, #00H

;数据串传送

DMVE: MOV SP, #70H ;设栈底

MOV DPL, R3

MOV DPH, R2

MOVX A, @DPTR ;取一个字节

MOV DPL, R5

MOV DPH, R4

MOVX @DPTR, A ;传送一个字节

CJNE R3, #073H, DMVE1

INC R2 ;源地址加1

DMVE1: INC R3

CJNE R5, #063H, DMVE2

INC R4 ;目的地址加1 DMVE2: INC R5

CJNE R6, #00H, DMVE3 ;数据传送结束?

SJMP $ ;原地踏步

DMVE3: DEC R6 ;字节数减1

SJMP DMVE

END

4.子程序

RESOURCE USED;R0 设循环计数器

;DPTR 数据指针

;R2 统计结果高八位

;R3 统计结果低八位

;R1 写入片外RAM的符号数

ORG 0090H

START: ;初始化7000H开始的片外RAM空间

MOV R0, #00H ;设循环计数器

MOV DPTR, #2000H ;设数据指针

MOV R2, #00H

MOV R3,#00H

MOV R1,#02H;

LOOP1:

MOV A, R1

MOVX @DPTR, A ;传送到片外RAM

INC DPTR ;修改数据指针 INC R0 ;修改循环计数器 ;INC R1

CJNE R0, #00H, LOOP1 ;判断是否结束

MOV DPTR,#2000H

MOV R0,#00H

LP: MOVX A,@DPTR

INC R0

INC DPTR;

CJNE R0,#00H,LP1;

JB ACC.0,LP2;

INC R3

CJNE R3,#00H,LP2;

INC R2;

LP2: SJMP $ ;RET

LP1: JB ACC.0 , LP;

INC R3

CJNE R3,#00H,LP;

INC R2;

CJNE R0,#00H,LP;

RET

六、程序测试方法与结果、软件性能分析

内容一:结果正确。修改如上所述,直接运行,停止后可以得到5 4 3 2 1从大到小排序,R5=3,R4=3.正确。

内容二:结果正确。设置从2000H开始的256个符号数,然后运行程序,可以得到偶数个数的低位存入了R3,高位存入了R2。

七思考题

1.从2000H单元开始的外部RAM中存有100个数,要求把它传送到自2500H

单元开始的存贮区中去,但在传递过程中要检查数的值,遇到第一个

零就停止传送。应如何编写程序?

答:Resource used:

;DPTR: 片外数据指针

; R2, R3 源地址

; R4, R5 目的地址

;R6, 传送字节数

ORG 0090H

START:

;给R2,R3,R4,R5,R6,赋初值

MOV R2, #20H

MOV R3, #00H

MOV R6, #64H

MOV R4, #25H

MOV R5, #00H

;数据串传送

DMVE: MOV SP, #70H ;设栈底

MOV DPL, R3

MOV DPH, R2

MOVX A, @DPTR ;取一个字节

MOV DPL, R5

MOV DPH, R4

MOVX @DPTR, A ;传送一个字节

CJNE R3, #064H, DMVE1;源地址加1

INC R2

MOV R3,#00H

DMVE1: INC R3

JNZ LP;

SJMP $;

LP : CJNE R5, #064H, DMVE2

INC R4 ;目的地址加1

MOV R5,#00H;

DMVE2: INC R5

CJNE R6, #00H, DMVE3 ;数据传送结束?

SJMP $ ;原地踏步

DMVE3: DEC R6 ;字节数减1 SJMP DMVE

END

八、选做题

程序代码:

ORG 1000H

MOV DPTR ,#2000H

START: MOVX A,@DPTR

MOV R2,23H

MOV R0,#00H

MOV 10H,A ;地址数里面的数放在10H

MOVX A,@DPTR

CJNE A,10H,HUAI

INC DPTR

SJMP START

HUAI: INC R0 ;坏地址数目

CPL P1.0 ;产生坏地址信号

INC DPTR ;坏地址在DPTR

SJMP START

九,心得体会

这次微机试验上机中,我体会到细心看程序的重要性,特别是心要安静下来看,这样才能体会的深入。本实验基本完成了此次上机的教学目的。

相关文档
最新文档