五、操作练习
修改程序,将CPU内部存储区30h~3Fh单元的16个数据复制到40h~4F单元,通过单步、断点等调试手段验证程序功能,查看40h~4Fh单元的数据是否传送正确。
ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV R1,#30H MOV R0,#40H ;片内RAM首地址 MOV A,#80H ;写入数据初值 MOV R7,#16 ;循环变量 LOOP1: MOV A,@R1 MOV @R0,A INC R1
INC R0 ;地址增量 DJNZ R7,LOOP1 ;循环变量-1,不为0继续 SJMP $ ;结束 END 六、实验心得
通过第一次的上机实验,我初步接触到了Dais软件,并对其有了一定的熟悉,能顺利完成程序的单步运行,连续运行,设置断点,查看存储器等操作,并掌握了该软件程序编写的操作步骤及调试方法,这对我接下来的实验很有帮助。
实验二 数码转换实验
一、实验目的
掌握不同进制数及编码相互转换的程序设计方法,加深对数制转换的理解。
二、实验设备
PC计算机一台,Dais-52PRO+或Dais-PRO163C实验系统一套。
三、实验内容及步骤
1. BCD整数转换为二进制整数
将BCD 码整数0~255存入片内RAM的20h、21h、22h中,然后转换为二进制整数00h~FFh,保存到寄存器R4中。
参考程序(A51\\2_2_1.ASM):
ORG 0000H LJMP MAIN ORG 0100H
MAIN: MOV R0,#20H ;BCD存放高位地址
MOV R7,#3 ;BCD码0~255,最多3位 CLR A MOV R4,A MOV B,#10
MUL AB ;乘10 ADD A,@R0 ;加下一位的值 INC R0 ;指向下一单元 MOV R4,A ;结果存入R4 DJNZ R7,LP1 ;转换未结束则继续
SJMP MAIN ;设置断点,观察实验结果R4中的内容 END
LP1: MOV A,R4
实验步骤:
1) 编写程序,经编译、链接无误后装载到实验系统;
2) 修改CPU内部存储器20h、21h、22h单元的内容,如:00h,05h,08h; 3) 在SJMPMAIN语句行设置断点,然后运行程序;
4) 程序遇到断点后暂停,此时查看寄存器R4的内容,应为3Ah;
5) 重新修改20h、21h、22h单元的内容,再次运行程序,验证程序的正确性。
2. 二进制整数转换为十进制整数
将16位二进制整数存入R3、R4寄存器中,转换为十进制整数,以组合BCD形式存储在CPU内部RAM的20h、21h、22h单元中。
参考程序(A51\\2_2_2.ASM):
ORG 0000H LJMP MAIN ORG 0100H
MAIN: MOV R0,#22H MOV A,R0
PUSH ACC ;A累加器压栈 MOV R7,#3 CLR A
LP1: MOV @R0,A ;结果存储地址清零 DEC R0 DJNZ R7,LP1 POP ACC MOV R0,A MOV R7,#16 LP2: PUSH ACC CLR C
MOV A,R4 ;R4中为二进制数的低位 RLC A MOV R4,A
MOV A,R3 ;R3中为二进制数的高位 RLC A MOV R3,A MOV B,#3
LP3: MOV A,@R0
ADDC A,@R0 ;执行乘2操作 DA A ;十进制调整 MOV @R0,A ;结果保存 DEC R0 DJNZ B,LP3 POP ACC MOV R0,A DJNZ R7,LP2 SJMP MAIN END
;设置断点观察结果, 可进行下一次转换
;A累加器出栈
;转换结果低位地址
开始R0←转换结果起始地址结果存储单元清零循环计数器R7←16R3 R4左移1位B←3A←(R0)×2+C十进制调整R0←R0-1R0←R0-1否B-1=0?是R0←转换结果起始地址R7-1=0?是结束图2-2-1 程序流程图否
实验步骤:
1) 编写程序,程序流程图如图2-2-1所示,经编译、链接无误后装载到实验系统; 2) 修改R3、R4寄存器,例如分别为A2h、FCh; 3) 在SJMPMAIN语句行设置断点,然后运行程序;
4) 程序遇到断点后暂停,此时查看CPU内部存储器20h的内容,应为:04h、17h、
24h;
5) 反复修改R3、R4寄存器的值,验证程序的正确性。
四、实验心得
在这次实验中,我通过运行既定程序后对程序经行了分析,掌握了将BCD整数转换为二进制整数和二进制整数转换为十进制整数的程序设计方法,对数制的转换有了一个更深刻的认识,并自己编程实现了二进制数和BCD整数的转换,受益匪浅。
实验三 运算程序设计实验
一、实验目的
了解运算类指令以及运算类程序的设计方法。
二、实验设备
PC计算机一台,Dais-52PRO+或Dais-PRO163C实验系统一套。
三、实验内容及步骤
1. 多字节加法程序
多字节十进制加法程序,被加数存放于20h起始的RAM空间,加数存放于28h起始的RAM空间,将两数相加,结果存放于20h起始的RAM空间。
参考程序(A51\\2_3_1.ASM):
ORG 0000H LJMP MAIN
ORG 0100H ;执行程序前先修改R7的值 MAIN: MOV R0,#20H ;被加数起始地址 MOV R1,#28H ;加数起始地址 CLR C
LP1: MOV A,@R0
ADDC A,@R1 ;带进位加法运算 DA A ;十进制调整 MOV @R0,A ;保存运算结果 INC R0 ;指向下一单元 INC R1 DJNZ R7,LP1 CLR A MOV ACC.0,C MOV @R0,A NOP END
SJMP MAIN
;最高位有进位时此地址中为1 ;设置断点查看运算结果
;若需继续运算, 改变加数, 被加数及R7
开始R0←被加数起始地址R1←加数起始地址取出被加数加上加数进行十进制调整保存结果R0←R0+1R1←R1+1运算结束?是设置最高位否实验步骤:
结束1) 编写程序,程序流程图如图2-3-1所示,经编译、链接无误
图2-3-1 程序流程图后装载到实验系统;
2) 为被加数及加数赋值:修改内存单元20h为1234h、28h为1111h,寄存器R7为
02h;
3) 在SJMPMAIN语句行设置断点,然后运行程序;
4) 程序遇到断点后暂停,此时查看内存单元20h起始的内容,应为:2345h; 5) 反复修改被加数、加数及字节数R7的值,验证程序的正确性。