单片机第四次作业
时间:11-25
来源:互联网
点击:
作业:多字节无符号数加法运算程序
入口:R0=被加数低位地址指针
R1=加数低位地址指针
出口:R0=和数高位地址指针
1、先fileànew 建asm文件18.asm
CLR C
LOOP1:MOV A,@R0
ADDC A,@R1
MOV @R0,A
INC R0
INC R1
DJNZ R2,LOOP1
JNC LOOP2
MOV @R0,#01H
RET
LOOP2:DEC R0
RET
END
为了调试时看数据,预先赋值,所以程序前加:
MOV 30H,#78H
MOV 31H,#56H
MOV 32H,#34H
MOV 33H,#12H
MOV 40H,#0F0H
MOV 41H,#0DEH
MOV 42H,#0BCH
MOV 43H,#9AH
MOV R0,#30H
MOV R1,#40H
MOV R2,#4
2、建新工程,Projectànew project ,选AtemlàAT89C51 ,导入文件18.asm。
注意,对初学者,一个工程里只能有本程序18.asm,无关的程序要删除,新试验一个程序最好重新建工程,以保证一个工程里只有你要试验的那一个程序。
3、可见程序:
![](../img/eep/emb/emb-60618n2uf3m5xhqf.jpg)
![](../img/eep/emb/emb-60619kcd2m3f3nx1.jpg)
4、编译通过后,点debug下的start/stop开始调试, step 和step over都是单步调试,step是遇到子程序或中断也要进入进行单步调试,step over是遇到子程序或中断当一句一次执行完。本程序物子程序,二者是一样的。我们执行赋值语句得到:
点view àmemory windows,再输入D:30h回车,得到:
![](../img/eep/emb/emb-60620sgjko13olxc.jpg)
接着执行:可见R0,R1,R2值的改变:
![](../img/eep/emb/emb-60621oyrdfvlttsa.jpg)
继续执行:
![](../img/eep/emb/emb-606220f1v0an1zmj.jpg)
下一步:
![](../img/eep/emb/emb-606235mhoixe1qfp.jpg)
下一步:
![](../img/eep/emb/emb-60624jmwldxlxxls.jpg)
可见:30H内容变为68H.
下一步:
![](../img/eep/emb/emb-60625b2khenyv4kr.jpg)
R0,R1值都加一,继续:
![](../img/eep/emb/emb-60626vgfrigb4nqk.jpg)
可见R2值减1,但不为0,所以跳转到LOOP1.继续:经过几次循环之后,直到R2变为0,此时不再循环,可看到:
![](../img/eep/emb/emb-60627qfbm4gvrw04.jpg)
30H,31H,32,,3H值都已改变。继续执行:
![](../img/eep/emb/emb-60628qlky12hrj5a.jpg)
此时CY不为0,所以跳转到LOOP2。
![](../img/eep/emb/emb-60629h5rpbrayoik.jpg)
可看到r0减1,变为33H,即为和数高位地址指针,指向33h处。
入口:R0=被加数低位地址指针
R1=加数低位地址指针
出口:R0=和数高位地址指针
1、先fileànew
CLR C
LOOP1:MOV A,@R0
LOOP2:DEC R0
END
为了调试时看数据,预先赋值,所以程序前加:
MOV 30H,#78H
MOV 31H,#56H
MOV 32H,#34H
MOV 33H,#12H
MOV 40H,#0F0H
MOV 41H,#0DEH
MOV 42H,#0BCH
MOV 43H,#9AH
MOV R0,#30H
MOV R1,#40H
MOV R2,#4
2、建新工程,Projectànew
3、可见程序:
![](../img/eep/emb/emb-60618n2uf3m5xhqf.jpg)
![](../img/eep/emb/emb-60619kcd2m3f3nx1.jpg)
4、编译通过后,点debug下的start/stop开始调试,
点view
![](../img/eep/emb/emb-60620sgjko13olxc.jpg)
接着执行:可见R0,R1,R2值的改变:
![](../img/eep/emb/emb-60621oyrdfvlttsa.jpg)
继续执行:
![](../img/eep/emb/emb-606220f1v0an1zmj.jpg)
下一步:
![](../img/eep/emb/emb-606235mhoixe1qfp.jpg)
下一步:
![](../img/eep/emb/emb-60624jmwldxlxxls.jpg)
可见:30H内容变为68H.
下一步:
![](../img/eep/emb/emb-60625b2khenyv4kr.jpg)
R0,R1值都加一,继续:
![](../img/eep/emb/emb-60626vgfrigb4nqk.jpg)
可见R2值减1,但不为0,所以跳转到LOOP1.继续:经过几次循环之后,直到R2变为0,此时不再循环,可看到:
![](../img/eep/emb/emb-60627qfbm4gvrw04.jpg)
30H,31H,32,,3H值都已改变。继续执行:
![](../img/eep/emb/emb-60628qlky12hrj5a.jpg)
此时CY不为0,所以跳转到LOOP2。
![](../img/eep/emb/emb-60629h5rpbrayoik.jpg)
可看到r0减1,变为33H,即为和数高位地址指针,指向33h处。
单片机地址指 相关文章:
- C51单片机地址指针及其应用(11-22)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)