微机实验一.doc
《微机实验一.doc》由会员分享,可在线阅读,更多相关《微机实验一.doc(14页珍藏版)》请在文库网上搜索。
1、单片微型计算机实验第一次实验姓名: Elliott班级: xxxxxx学号: xxxxxxxxx电话: xxxxxxxxxx一、 任务要求1. 调试例程,观察相关寄存器和单元的内容。2. 编写两个十六位数的加法程序。有两个十六位无符号数,分别存放在从20H和30H开始的数据区中,低八位先存,高八位在后,和存于R3(高八位)和R4(低八位),进位位存于R2。3. 编写两个双字节BCD码的加法程序。有两个双字节BCD码,分别存放在从20H和30H开始的数据区中,低八位先存,高八位在后,和存于R3(高八位)和R4(低八位),进位位存于R2。4. 编写程序,使之实现从片外RAM的7020H单元开始,连
2、续填充10个字节的数据的功能。5. 编写程序,实现对片外RAM按递减1规律填充数据块的功能。二、 设计思路1. 无符号十六位数加法对于无符号十六位加法,低八位使用不带标志位的加法,相加后存放。由于此处可能有进位,所以下一次加法时要用带进位标志位的加法。为了避免程序最初时CY标志位的随机取值影响带高八位运算的结果,最好在做第一加法的之前将CY置零。获取最高位进位位时,还是采用ADDC指令,所以两个加数应该都是0。为了程序的扩展性能,读取加数时,采用R0和R1做指针,这样只要把加数的初始位置赋给R0和R1后,便可以通过R0和R1的自加实现自动取下一位值。这样有利于多位数相加时的循环实现,同时程序的
3、移植性也得到提高。2. 双字节BCD码加法本程序的实现方式和无符号十六位加法的实现方式没有本质上的区别,不同之处在于通过加法获得相加的结果后,要用DA指令将数据调整为BCD码,然后再存储数据。3. 顺序填充数据对于片外RAM的数据访问,只有通过MOVX DPTR,A这条指令实现,所以要写入的数据得先存放在A当中,DPTR中存放地址。每次写入数据后,将DPTR的数据加一,指针向下移一位。由于要写入大量的数据,所以要采用循环,采用工作寄存器R0来计数,用CJNE指令来实现循环的控制。4. 逆序填充数据逆序填充的程序和顺序填充的程序并没有太大的区别,但是由于DPTR没有自减一的指令,所以需要换一种方
4、式来实现。DPTR实际上是DPH和DPL两个字节组成的,而DPH和DPL都具有自减一的指令,通过对DPH和DPL的修改便可以实现逆序填充。三、 资源分配1. 无符号十六位加法20H、21H、30H、31H:存放加数R0、R1:用做数据指针R2、R3、R4:存放结果2. 双字节BCD码加法20H、21H、30H、31H:存放加数R0、R1:用做数据指针R2、R3、R4:存放结果3. 顺序填充片外RAM的7020H至702AH:存放数据R0:存放数据用于循环控制累加器A:存放要写入片外RAM的数据4. 逆序填充片外RAM的7020H至702AH:存放数据R0:存放数据用于循环控制R1:用于保护累加
5、器A中的内容累加器A:存放要写入片外RAM的数据四、 流程图1. 无符号十六位数加法2. 双字节BCD码加法3. 顺序填充4. 逆序填充五、 源代码1. 无符号十六位加法 ORG 0000HLJMP MAINORG 0200HMAIN:MOV 20H, #0A0HMOV 21H, #11HMOV 30H, #0A0HMOV 31H, #23HMOV R0, #20H ;R0指向加数1首地址MOV R1 , #30H ;R1指向加数2首地址CLR CMOV A , R0ADD A , R1MOV R4 , A ;不带标志位相加,结果存放于R4INC R0 INC R1 ;修正指针MOV A ,
6、R0ADDC A , R1 ;带符号相加MOV R3 , A ;存放MOV R2 , #00H ;R2置零MOV A , #00H ;A清零ADDC A , R2 MOV R2 , A ;存放进位位SJMP $END2. 双字节BCD码加法ORG 0000HLJMP MAINORG 0200HMAIN:MOV 20H, #55H MOV 21H, #11H MOV 30H, #50H MOV 31H, #23H ;赋值 MOV R0,#20H ;R0指向加数1首地址 MOV R1,#30H ;R1指向加数2首地址 CLR C MOV A , R0 ADD A , R1 DA A ;修正结果 M
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 实验