打印

51汇编中变量定义的问题

[复制链接]
2333|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huzhiyang|  楼主 | 2015-10-26 10:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在定义变量时又以下变量:
n1stIdleTm        XDATA        $
_nLstTimer        XDATA        $               


        CLR     A
        MOV     R0,A

ClrZnInf:
        CJNE    R0,#n1stIdleTm,ClrZnInf0 ;
        MOV     R0,#ZSTAT1
ClrZnInf0:                              
        MOVX    @R0,A                   ;
        INC     R0
        CJNE    R0,#(ZSTAT1+vMaxZnInfo),ClrZnInf
        CPL     A
        MOV     R0,#n1stIdleTm


我现在不明白的是变量定义成$,那不是指令调用处的地址吗,为什么要这么做呢,
CJNE    R0,#n1stIdleTm,ClrZnInf0 ;   这句应该肯定不成立吧?
而且代码里面只是INC R0 那不是相当于把0地址的内容清零吗?
百思不得其解!还请高手指教下,感激不尽!

相关帖子

沙发
ayb_ice| | 2015-10-26 17:16 | 只看该作者
你这都啥汇编器,

keil肯定是汇编不通过的

使用特权

评论回复
板凳
wh6ic| | 2015-10-26 17:38 | 只看该作者
本帖最后由 wh6ic 于 2015-10-26 17:40 编辑

$表示当前地址, 前面紧跟的段定义应该是XSEG 或者RSEG 的 XDATA,是XRAM地址
有 CJNE R0, #xx, yy 指令
inc r0 哪里清零了?  代码中是把一段 XRAM 内容清零。

Keil 完全可以编译通过

使用特权

评论回复
地板
huzhiyang|  楼主 | 2015-10-26 18:48 | 只看该作者
ayb_ice 发表于 2015-10-26 17:16
你这都啥汇编器,

keil肯定是汇编不通过的

我就是用keil编译的,可以通过啊,程序运行都正常呢

使用特权

评论回复
5
huzhiyang|  楼主 | 2015-10-26 18:55 | 只看该作者
wh6ic 发表于 2015-10-26 17:38
$表示当前地址, 前面紧跟的段定义应该是XSEG 或者RSEG 的 XDATA,是XRAM地址
有 CJNE R0, #xx, yy 指令
...

说实话,我看不懂,这样吧,顺着看,刚开始R0=0,跟#n1stIdleTm肯定不相等,于是执行ClrZnInf0,这样不是相当于把xdata的0地址清零,怎么看的话,那不是在将xdata域的0,1,2,3,4。。。等地址处内容清零啊,我觉得这样不符合逻辑,也不会有人这么去做,我根据业务逻辑看,应该是R0=ZSTA1才符合逻辑,但单从代码分析,执行不到这里,老外写的东西真是让人看不懂,有没仿真器。

使用特权

评论回复
6
huzhiyang|  楼主 | 2015-10-26 18:57 | 只看该作者
ayb_ice 发表于 2015-10-26 17:16
你这都啥汇编器,

keil肯定是汇编不通过的

你有没有sourceinsight中51asm的文件啊,我想看source-insight中看代码跟看c代码一样,单击调用的函数,就能看到这个函数的原型,网上说要去source-insight官网下一个asm的文件,但是我没找到

使用特权

评论回复
7
ayb_ice| | 2015-10-27 07:58 | 只看该作者
huzhiyang 发表于 2015-10-26 18:57
你有没有sourceinsight中51asm的文件啊,我想看source-insight中看代码跟看c代码一样,单击调用的函数, ...

没有
我用NP++的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

32

主题

190

帖子

2

粉丝