C51填坑记:MOVX指令异常

1.现象描述

51单片机开发过程中发现,程序总是概率性出现异常。经调试发现,“movx A, @Rx”指令读到内容与实际内存内容不一致,从而导致跳转逻辑错误。代码如下:

MOV R1, #00H
MOVX A, @R1
JNZ LABEL 

这段代码读取外部内存地址为0x00的内容到累加器A,如果内容非零,则跳转到“LABEL”运行。调试发现MOVX指令执行之后,累加器A的值为0(实际XRAM地址为0的区域非零)。

2.解决

上网检索之后,发现有类似描述“外部扩展RAM的低256个字节,地址出现在A0-A7的上时读写,用movx ACC,@Rx读写。这个比较特殊,而且C51好象有对此BUG, 建议少用”。但是没有具体的原因分析。

最终将“MOVX A, @Rx”替换为“MOVX A, @DPTR”解决。代码如下:

MOV DPH, #00H
MOV DPL, #00H
MOVX A, @DPTR
JNZ LABEL

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
这这是这是一这是一条这是一条指这是一条指令这是一条指令格式这是一条指令格式不这是一条指令格式不完这是一条指令格式不完整这是一条指令格式不完整的这是一条指令格式不完整的提示这是一条指令格式不完整的提示,这是一条指令格式不完整的提示,无这是一条指令格式不完整的提示,无法这是一条指令格式不完整的提示,无法进行这是一条指令格式不完整的提示,无法进行指这是一条指令格式不完整的提示,无法进行指令这是一条指令格式不完整的提示,无法进行指令正这是一条指令格式不完整的提示,无法进行指令正误这是一条指令格式不完整的提示,无法进行指令正误判断这是一条指令格式不完整的提示,无法进行指令正误判断。这是一条指令格式不完整的提示,无法进行指令正误判断。完这是一条指令格式不完整的提示,无法进行指令正误判断。完整这是一条指令格式不完整的提示,无法进行指令正误判断。完整指这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOV这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DP这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@R这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DP这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@R这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式,这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式,A这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式,A/@这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式,A/@DP这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式,A/@DPTR这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式,A/@DPTR表示这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式,A/@DPTR表示数据这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式,A/@DPTR表示数据的这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式,A/@DPTR表示数据的源这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式,A/@DPTR表示数据的源或这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式,A/@DPTR表示数据的源或目这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式,A/@DPTR表示数据的源或目的这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式,A/@DPTR表示数据的源或目的。这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式,A/@DPTR表示数据的源或目的。限这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式,A/@DPTR表示数据的源或目的。限于这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式,A/@DPTR表示数据的源或目的。限于AI这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式,A/@DPTR表示数据的源或目的。限于AI语这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式,A/@DPTR表示数据的源或目的。限于AI语言这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式,A/@DPTR表示数据的源或目的。限于AI语言系统这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式,A/@DPTR表示数据的源或目的。限于AI语言系统,这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式,A/@DPTR表示数据的源或目的。限于AI语言系统,回这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式,A/@DPTR表示数据的源或目的。限于AI语言系统,回答这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式,A/@DPTR表示数据的源或目的。限于AI语言系统,回答中这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式,A/@DPTR表示数据的源或目的。限于AI语言系统,回答中无这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式,A/@DPTR表示数据的源或目的。限于AI语言系统,回答中无法这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式,A/@DPTR表示数据的源或目的。限于AI语言系统,回答中无法输入这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式,A/@DPTR表示数据的源或目的。限于AI语言系统,回答中无法输入部这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式,A/@DPTR表示数据的源或目的。限于AI语言系统,回答中无法输入部分这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式,A/@DPTR表示数据的源或目的。限于AI语言系统,回答中无法输入部分字符这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式,A/@DPTR表示数据的源或目的。限于AI语言系统,回答中无法输入部分字符,这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式,A/@DPTR表示数据的源或目的。限于AI语言系统,回答中无法输入部分字符,因这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式,A/@DPTR表示数据的源或目的。限于AI语言系统,回答中无法输入部分字符,因此这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式,A/@DPTR表示数据的源或目的。限于AI语言系统,回答中无法输入部分字符,因此最这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式,A/@DPTR表示数据的源或目的。限于AI语言系统,回答中无法输入部分字符,因此最后这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式,A/@DPTR表示数据的源或目的。限于AI语言系统,回答中无法输入部分字符,因此最后一个这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式,A/@DPTR表示数据的源或目的。限于AI语言系统,回答中无法输入部分字符,因此最后一个参数这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式,A/@DPTR表示数据的源或目的。限于AI语言系统,回答中无法输入部分字符,因此最后一个参数用这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式,A/@DPTR表示数据的源或目的。限于AI语言系统,回答中无法输入部分字符,因此最后一个参数用"这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式,A/@DPTR表示数据的源或目的。限于AI语言系统,回答中无法输入部分字符,因此最后一个参数用"@"这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式,A/@DPTR表示数据的源或目的。限于AI语言系统,回答中无法输入部分字符,因此最后一个参数用"@"表示这是一条指令格式不完整的提示,无法进行指令正误判断。完整指令格式应该为:MOVX A/@DPTR,@Ri。其中,DPTR是一个指向数据区的地址寄存器,@Ri表示寻址方式,A/@DPTR表示数据的源或目的。限于AI语言系统,回答中无法输入部分字符,因此最后一个参数用"@"表示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值