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位状态清零,此时为位操作指令
分享到:
相关推荐
LAB_4_KEYPAD.asm
asm字节码jar包,仅需要一个就可以。具体使用,可以参考http://blog.csdn.net/gaoshan12345678910/article/details/78131784
《深入解析Spring ASM库:org.springframework.asm-3.0.5.RELEASE.jar》 Spring框架是Java开发领域中不可或缺的一部分,而org.springframework.asm-3.0.5.RELEASE.jar是Spring框架中的一个关键组件,主要涉及到字节...
org.springframework.asm-sources-3.0.5.release.jar
hello.asm 汇编程序 Data SEGMENT string DB "HELLO WORLD! $" data ENDS CODE SEGMENT ASSUME CS:code,DS:data start: MOV AX,data MOV DS,AX MOV DX,OFFSET string MOV AH,9 INT 21H MOV AH,4CH INT 21H...
E158255MatrixKey.asm.asm.asm
严重: Exception sending context initialized event to listener instance ... nested exception is java.lang.NoClassDefFoundError: org/objectweb/asm/Type ssh 框架的java web项目部署到tomcat报上面错误 添加此包
程序2.asm
IO.ASM就是用来编写这些低级别I/O操作的程序。 IO.ASM的编写通常包括以下部分: 1. **初始化**:在程序开始时,可能需要设置某些寄存器或者端口,以便后续的I/O操作。例如,设置中断向量或配置设备的工作模式。 2...
rg.springframework.asm-3.0.1.RELEASE-A.jar
jar包,官方版本,自测可用
汇编\示例\Sample.asm汇编\示例\Sample.asm汇编\示例\Sample.asm汇编\示例\Sample.asm
5.5.5菜单程序设计.asm
实验七程序讲解.asm
《深入理解DSP源码:以SINX.ASM为例》 在数字信号处理(DSP,Digital Signal Processing)领域,源代码是实现算法的核心。这里提到的"DSP_examples.rar"压缩包,内含"DSP_examples"文件夹,以及一个名为"SINX.ASM...
jar包,官方版本,自测可用
在提供的文件名"Mader.C.ASM"中,我们可以推测这可能是一个使用Mader.C.ASM编码器编写的汇编程序源文件。打开这个文件,我们可以看到一系列的汇编指令,以及可能的宏定义和数据结构,这些都是为了实现特定的功能。...
本文将深入探讨一份名为“lcd.asm.rar_lcd.asm”的液晶显示屏应用源程序,分析其在嵌入式系统中的作用及其技术细节。 首先,我们需了解汇编语言对于硬件操作的重要性。汇编语言是计算机编程的基础语言之一,它将...
标题中的"written_mult.asm.rar_Mult.asm_space"表明这是一个关于汇编语言编程的资源,特别是与多重(Mult)操作和空间控制(space control)相关的。这个压缩包可能包含一个名为"Mult.asm"的源代码文件,该文件是用...
lxt.ASM.asm