lab2000p程序s1.asm

 

Block equ 6000h

mov dptr, #Block ; 起始地址

mov r0, #0 ; 清 256 字节

clr a

Loop:

movx @dptr, a

inc dptr ; 指向下一个地址

djnz r0, Loop ; 记数减一

ljmp $

end

 

分析:

1.Block equ 6000h

用Block来表示6000h,equ 下面有解释。

2.mov r0, #0 ; 清 256 字节

把r0置为0,这样用djnz时候就能循环256次。

3,clr a

把累加器置为0,用来清零存储器块,每次清零8位。

4,Loop:

movx @dptr, a

inc dptr ; 指向下一个地址

djnz r0, Loop ; 记数减一

一个256次循环,每次清零8位。

5,ljmp $

 

 

$,代表当前地址。

$ 放在 LJMP 之后,它就代表这条指令本身的地址。

LJMP $,就是转移到该指令的本身地址。

LJMP $,就是原地转移的意思,即 死循环。

一旦有中断发生,就可以去执行中断程序

 

 

用到的知识:

1,equ命令

有时,一个表达式在程序中会多次出现,重复书写可能较为繁杂,易出错。另一方面。如果要对该表达式进行变动,那么必须在程序中找到每一个表达式,一一做出修改,稍有不慎,就会遗漏,引出麻烦。利用EQU伪指令,就可以避免这些问题的发生。

  格式:<符号名> EQU <表达式>

  该伪指令的含义是为EQU后面的<表达式>起一个叫做<符号名>的名字。这样一来,程序中凡是需要用到该表达式的地方,就都可以用这个名字代替了。这里,<表达式>可以是任何有效的数据,可以是能够算出值的表达式,也可以是有效的助记符等。

  例 COUNT EQU 256

  表示赋予数256一个名字,叫做COUNT。

  VAR1 EQU COUNT-2

  表示赋予表达式COUNT-2一个名字,叫做VAR1。如果有“COUNT EQU 256”在先,那么由于COUNT是数值256,所以VAR1就代表数值254。

  PH EQU PUSH

  表示赋予PUSH一个名字PH。由于PUSH是汇编语言的一个助记符,因此,在程序中书写PH AX,就相当于 PUSH AX。

  与EQU伪指令类似的是等号伪指令“=”。它们的区别是:由EQU伪指令定义后的符号名是不能重复再定义的,而“=”伪指令中定义的符号名可重复定义。例如:

  EMP=7

  ┋

  EMP=EMP+2

  这表示,开始把符号名EMP定义为是数值7,后来把符号名EMP重新定义为代表数值9。但是不能写成:

  EMP EQU 7

  ┋

  EMP EQU EMP+2

 

2,MOV,MOVX,MOVC区别和用法

  
  MOV: 单片机内部的寄存器或者存储器之间相互传递数据(内部RAM);
  
  MOVX: 单片机内部的A累加器与片外的数据存储器(片外RAM)传送数据.
  
  MOVC: 单片机内部的A累加器向ROM(程序存储器)读取数据,因为程序存储器是固定的不可以写的,所以,A只能读数据,却不能向它写数据;
  
  换句话说MOVX和 MOVC是针对两种不同的存储器而言,一个是片外数据存储器,另一个却是程序存储器。
  由于内部和外部ROM的地址是连续的,故用MOVC一条指令即可;片内数据存储器与片外数据存储器的地址部分(0000H-00FFH)是重叠的,所以用MOV和MOVX加以区分。
  
  明确MOV,MOVX,MOVC的概念针对他们各自的用法进行调用。 <!--EndFragment-->

3,片内数据存储器与片外数据存储器

 

<!--EndFragment-->

 

早期,片内存储器,还是片外存储器,确实是根据:他们是不是 在同一块 集成电路芯片上,来区分的。

数据存储器的传送指令,也有区别:片内传送,使用MOV,涉及片外了,就要用MOVX指令。

但是,科技发展了,有些单片机芯片,在同一块芯片上,还集成了少量的“片外存储器”,针对这些存储单元操作,就必须使用MOVX指令。

这样看来,片内,还是片外,区分的方法应该是使用什么指令,而不是他们是否分离成两块芯片。

 

4,dptr

通常写作:DPTR(Data Pointer)

  数据指针DPTR是80C51中一个功能比较特殊的寄存器。从结构DPTR是一个16位的特殊功能寄存器, 其高位字节寄存器用DPH表示,低位字节寄存器用DPL表示,DPTR既可以作为一个16位的寄存器来处理,也可以作为两个独立的8位寄存器来使用。主要功能是存放16位地址,作为片外RAM寻址用的地址寄存器(间接寻址),故称数据指针。

  访问片外数据存储器的指令为:

  MOVX A,@DPTR 读

  MOVX @DPTR,A 写

  DPTR的另一个作用是变址寻址,访问程序存储器,做查表指令:如:

  以dptr为基址寄存器,将dptr的内容与累加器a的内容相加得到变址地址

 

  movc a, @a+dptr ; (a)<-----((a)+(dptr))

 

5,clr指令

 

CLR A

  // 累加器A 被赋零值,此时为逻辑运算指令。

CLR C

 

  //程序状态寄存器PSW中的CY位状态清零,此时为位操作指令

 

 

你可能感兴趣的:(ASM)