全球旧事资料 分类
是一个变量地址,它只是一个简单的符号和数字替换而已,其意义必须和具体的指令结合才能确定,如下例307中对符号w_temp的理解。w_tempequ0x20符号名w_temp等于0x20movlw0x55W0x55movwfw_temp把W的值送给变量w_temp,(0x20单元内容=0x55)movfw_tempw把w_temp单元内容送W,(W0x55)movwfFSR把W的内容送FSR,(FSR0x55)movlww_temp把w_temp所代表的立即数即地址值送给W,(W0x20)movwfFSR让FSR指针指向w_temp,(FSR0x20而不是0x55)
cblocke
dc用equ伪指令可以给一个符号变量分配一个地址。但在一个程序设计过程中往往需要定义很多变量,你当然可以给每一个变量逐个用equ的方法分配一个地址空间。但如果变量很多,这样做就显得非常麻烦,你必须自己安排每个变量的地址,小心不能出现地址重叠;若要在已定义分配好的变量间插入新的变量,那就必须重新逐个安排随后变量的地址等等。cblocke
dc伪指令可以轻松解决有很多变量定义的场合出现的这些问题,我们把它叫作变量块连续定义。具体用法如下:cblock伪指令声明变量
f块的起始地址,e
dc伪指令声明变量块定义结束,cblocke
dc中间可以插入任意多的变量声明。其地址编排由编译器自动计算:第一个变量地址分配从起始地址开始,然后按所声明变量保留的字节数自动分配后面变量的地址,变量所需保留的字节数用“”加后面的数字表示,如果只有一个字节“1”可以省略不写。以例308来说明:cblock0x20w_tempstatus_tempbuffer8var1var2e
dc变量定义起始地址为0x20w_temp地址为0x20,占一个字节status_temp地址为0x21,占一个字节buffer的起始地址为0x22,并保留8个字节单元var1的地址为0x2a,占一个字节var2的地址为0x2b,占一个字节结束变量连续定义
用cblock方式定义的变量和用equ方式定义的变量一样在汇编后可以生成相关的调试信息,可以通过各种变量观察的方式显示此符号所代表的内存地址和其中的数据内容,所以实际编程时一般无需关心计算每个变量的具体地址。程序员要注意的用这种方式连续定义很多变量时不要让变量块跨越所处ba
k的边界。你可以在cblock中随意插入新定义的变量,或通过改变起始地址的方式使变量块整个挪到其它内存地址处,地址的更新由编译器代劳。
Orgorg用以定义程序代码的起始地址,通过此伪指令你可以把程序定位到任何可用的程序空间,它实现的是程序代码绝对定位,如例:org0x0000定义复位入口地址,以下指令从地址0x0000开始gotomai
org0x0004定义中断入口地址,以下指令从地址0x0004开始movwfw_tr
好听全球资料 返回顶部