实验三 简单程序调试
一、实验目的
初步掌握汇编语言程序设计及调试的方法 二、实验仪器
1、 DVCC-598JH 单片开发机一台;
2、 WD-5 型直流稳压源一台。 三、实验预习
1、认真阅读实验指导书有关内容,明确实验目的、内容和操作步骤;
2、对实验中的程序进行手工汇编;
3、复习实验中相关指令的功能;
4、复习顺序结构程序设计思想。 四、实验内容
程序一: BCD 码数的加法运算
设有两个4位压缩的BCD 码数,一个数存放在片内RAM31H (千位、百位) 和30H (十位、个位)单元,另一个数高位存在 33H 单元,低位存在32H 单元, 求两数之和,其结果存30H 和31H 单元。
参考程序:
地址
目标程序 源程序
ORG 1000H
1000 7830 MOV R0,
#30H
1002 7932 MOV R1,
#32H
1004 E6 MOV A , @R0 1005 27 ADD A , @R1 1006 D4 DA
A
1007 F6 MOV @R0, A
1008
08
INC R0
100909INC R1
100A E6MOV A,@R0
100B 37 ADDC A ,
@R1
100C D4 DA A
100D F6 MOV @R0,
A 100E
80FE
SJMP $
END
程序二: 拆字程序
设有一个 8 位二进制数存放在片内 RAM40H 单元,将其拆为两个 4 位二进
制数,高 4 位存于 41H 单元,
低 4 位存于 42H 单元。
参考程序:
ORG
1000H
START :
MOV A , 40H ; 取数
ANL A , #0FH ;屏蔽高四位
MOV
42H , A ; 存低四位数
MOV
A , 40H ; 重新取数
SWAP
A ;高低四位互换
ANL
A , #0FH ;屏蔽低四位
MOV
41H , A ; 存高四位数
SJMP
$
END
程序三: 负数求补程序
已知一个16位二进制负数存放在R1R0中,试求其补码,并将结果存在R3R2 中。
提示:二进制负数的求补方法可归纳为“求反加 1”。即可利用CPL 指令实 现求反,而 16 位加 1,则应是低 8位先加 1 ,高8位再加上低位的进行位。 注意, 这里不能用 INC 指令,因 INC 指令不影响标志位。
参考程序:
ORG 1000H START : MOV
A , R0 ;读低 8 位
CPL
A
;取反
ADD A ,#01H;加1
MOV R2,A;存低8 位
MOV A ,R1;读高8 位
CPL A;取反
ADDC A ,#00H;加进位
MOV20H,R1;高8位一位寻址区
MOV
C,
07H;
符号位-C
MOV
ACC.7 ,
C;恢复符号
MOV R3,A;存高8 位
SJMP$
END
五、实验步骤
1、认真阅读实验参考程序并分析程序运行后的理论结果;
2、输入程序并检查输入是否正确;
3、根据已知条件输入程序执行前的原始数据;
4、执行程序,检查并记录结果;
六、练习
1、试编写计算6655H+11FFH 的程序。
提示:被加数和加数是16 位数,需分两步完成计算,首先将两数的低位相加,若有进位,保存在C Y中;然后再将两数的高8位连同进位位相加,结果存入
50H、51H 单元中。
2、编写程序,将片内41H 和42H 单元的两个4 位二进制数进行组合,存放于40H单元。41H单元的数作为低4位,42H单元的数作为高4位。
七、实验报告
1 、整理记录结果,并与理论结果进行比较;
2、调试过程及体会;
3、思考BCD 码相减的实现方法;
4、思考有符号数的求补方法。