`
decentway
  • 浏览: 157874 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

lab2000p程序s4.asm

 
阅读更多

;移动3000h--->>4000h,256字节

 

    mov r0,#30h    ;给r0,r1,r2,r3,r7赋值

    mov r1,#00h

    mov r2,#40h

    mov r3,#00h

 

    mov r7,#0

Loop:

     mov dph,r0     

     mov dpl,r1

     movx a,@dptr

     mov dph,r2

     mov dpl,r3

     movx @dptr,a

 

     cjne r1,#0ffh,Goon1

     inc r0

Goon1:

      inc r1

 

      cjne r3,#0ffh,Goon2

      inc r2

Goon2:

      inc r3

      djnz r7,Loop

 

      ljmp $

 

      end

解释程序

     1,mov dph,r0     
     mov dpl,r1
DPTR数据指针,是16位的,分为两个字节,DPH,DPL
这组指令把DPTR的数据提出来,处理后放回去,下面一般会用于对处理后的外部数据地址进行操作
2,mov dph,r0     

     mov dpl,r1

     movx a,@dptr

     mov dph,r2

     mov dpl,r3

     movx @dptr,a

<!--EndFragment-->
把3000h的内容赋给a累加器
再把a值赋给4000h中。
3,cjne r1,#0ffh,Goon1
 cjne r1,#0ffh,Goon1
     inc r0
Goon1:
      inc r1

      cjne r3,#0ffh,Goon2
      inc r2
Goon2:
      inc r3
这部分写的相当精髓。实现的功能是,把r1,r3逐渐加一,当遇到进位时,r0,r2加1
4,djnz r7,Loop
循环256次

知识点:
1,累加器和寄存器区别
累加器是通用寄存器之一,但累加器和其它通用寄存器相比又有其独特之处。累加器除了可用做通用寄存器存放数据外,对某些操作,一般操作前累加器用于存放一个操作数,操作后,累加器用于存放结果
<!--EndFragment-->
2.djnz 
DJNZ指令有两种格式:DJNZ Rn,rel和DJNZ direct,rel,前者为双字节指令,其中第二个字节存储rel的相对地址,范围是-128~+127,所以转移范围很窄,所以转移的位置为指令的当前PC值加上rel;第二条指令的第三个字节也是存储rel的,和第一条指令的转移方式相同,都是PC+rel
  DJNZ RN,REL 是一条件转移指令,先将工作寄存器Rn中的数减“1”,判断结果是否为“0”,不为“0”程序就跳转到行标为REL的地方执行,否则,为“0”就不转移,继续执行下一条指令。 <!--EndFragment-->
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics