我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 1274|回复: 5

[技术文章] 汇编语言常见错误分析

[复制链接]
  • TA的每日心情

    昨天 18:16
  • 签到天数: 99 天

    [LV.6]常住居民II

    3万

    主题

    8253

    回帖

    8万

    积分

    三级逆天

    积分
    81480

    终身成就奖特殊贡献奖原创先锋奖金点子奖优秀斑竹奖宣传大使奖

    发表于 2018-1-15 07:58:34 | 显示全部楼层 |阅读模式

    马上注册,结交更多好友,享用更多功能,让你轻松玩转社区

    您需要 登录 才可以下载或查看,没有账号?立即注册

    ×
    一、汇编软件汇编失败原因分析
    这里采用Keil C51软件包中的宏汇编器A51作为编绎器,单片机的汇编语言编写时要注意一定的语法,详细介绍可以参考相关参考书,语法错误会造成汇编失败,常见的汇编错误如下:
      [li]标号重复:
      常见于复制、粘贴程序时忘记修改标号,造成出现多个相同的标号,标号是不允许重复的。[/li]
    2.标点符号以全角方式输入:
    汇编程序要求标点符号为半角方式,否则汇编失败。可以在输入:,;时切换到半角方式,或者在大写状态输入标点符号,这也是很容易犯而且不容易发觉的错误。

    3.数值#FFH 前遗漏0:
    根据要求应该在a~f前加0,写成#0FFH

    4.字母O和数字0搞混:
    有时候这两个字看上去完全相同,要注意哦~~

    5.标号后边遗漏":"
    6.标号使用了特殊字符:
    标号不能用指令助记符、伪指令、特殊功能寄存器名和8051在指令系统中用的“#”、“@”等,长度以2~6字符为宜,第一字母必须是英文字母。比如:T1、T2、A、B这些字符有特定的含义,不允许用于标号。
    7.AJMP跳转超过2K地址:
    AJMP属于短跳转命令,有2K地址范围的限制。
    8.超过地址范围:
    JB P3.2,EXIT跳转超过-128~127个地址范围。这个是最容易出现的错误!你有可能程序刚才还能汇编编译成功,你加了一段程序后程序就提示出错了,你可以把
    JB P3.2,EXIT
    转换成
    JNB P3.2,LD01
    AJMP EXIT
    LD01: AJMP EXIT
    ……
    9.字母I和数字1混淆:
    冒失鬼的常见问题。
    10.创造发明不存在的汇编语言指令:
    在编写程序程序的过程中可不欢迎这种创新,这种指令汇编程序不支持,芯片也不认可。
    11.符号“:”“;”最好用半角书写。
    二、程序出错
    1.寄存器重复调用:
    比如主程序中设定了R4=5,表示主程序循环执行5次,而其中的一个延时子程序又用到R4,使R4的值发生紊乱,造成程序无法正常执行。
    2.硬件不熟悉:
    单片机一般采用下拉输出,往往端口输出0驱动外设工作,和常见的正逻辑相反,容易搞错。
    三、指令系统常用符号和含义
    (1)Ri:工作寄存器0和工作寄存器1,i=0或1。即R0~R1。
    (2)Rn:工作寄存器R0~R7,n=0~7。
    (3)@Ri:寄存器Ri间接寻址8位存储器单元00H~FFH。
    (4)direct:8位直接地址,它可以是内RAM 00H~7FH或SFR的80H~FFH。
    (5)#data:8位立即数。
    (6)#data16:16位立即数。
    (7)addr16:16位目的地址。用于LCALL和LJMP指令,能调用或转移到64K程序存储器空间的任何地方。
    (8)addr11:11位目的地址。用于ACALL和AJMP指令,可在下条指令地址所在的2K字节页面内调用或转移。
    (9)rel:带符号的8位偏移地址,用于SJMP和所有的条件转移指令。其范围是相对于下一条指令第1字节地址的-128~+127个字节。
    (10)DPTR:数据指针,可用作16位的地址寄存器。
    (11)bit:位地址。片内RAM中的可位寻址及SFR中的可寻址位。
    (12)A:累加器Acc。
    (13)B:通用寄存器,主要用于乘法MUL和除法DIV指令中。
    (14)Cy:进位标志位或布尔处理器中的累加器。
    (15)@:间接寄存器或基址寄存器的前缀。如@Ri,@DPTR,@A+PC,@A+DPTR。
    编写汇编语言的忠告
    要养成良好的程序书写习惯,比如标号对齐、参数对齐、注释对齐,这样看起来赏心悦目,也不容易出错。标号最好采用有意义的英文,这样比较直观,注释尽量详细准确,便于以后读懂,而且有利于其它程序中作为子程序模块的调用。还有要注意典型程序模块的积累,再复杂的程序也是由一个个小程序模块组成的,在初学阶段可以对典型程序比如:延时子程序、查表子程序、按键消抖子程序等编写实践一次,这样印象深刻,便于以后引用。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-5-29 20:33
  • 签到天数: 1 天

    [LV.1]初来乍到

    112

    主题

    6493

    回帖

    7867

    积分

    二级逆天

    积分
    7867

    终身成就奖特殊贡献奖原创先锋奖优秀斑竹奖

    QQ
    发表于 2018-1-15 08:17:56 | 显示全部楼层
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    1620

    回帖

    745

    积分

    二级逆天

    积分
    745

    终身成就奖优秀斑竹奖

    QQ
    发表于 2018-1-15 09:14:20 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情
    开心
    3 小时前
  • 签到天数: 186 天

    [LV.7]常住居民III

    2

    主题

    8897

    回帖

    1万

    积分

    三级逆天

    积分
    10354

    社区居民终身成就奖特殊贡献奖原创先锋奖

    QQ
    发表于 2021-8-24 07:33:07 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    3 天前
  • 签到天数: 28 天

    [LV.4]偶尔看看III

    5

    主题

    3867

    回帖

    3869

    积分

    PADS20220105初级班

    积分
    3869

    终身成就奖特殊贡献奖原创先锋奖优秀斑竹奖

    发表于 2021-8-26 08:22:39 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情
    开心
    半小时前
  • 签到天数: 178 天

    [LV.7]常住居民III

    11

    主题

    8038

    回帖

    5698

    积分

    二级逆天

    积分
    5698

    终身成就奖特殊贡献奖原创先锋奖优秀斑竹奖

    发表于 2024-5-6 08:08:11 | 显示全部楼层
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    每日签到,有金币领取。


    Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

    本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

    ( 闽ICP备2024076463号-1 ) 论坛技术支持QQ群171867948 ,论坛问题,充值问题请联系QQ1308068381

    平平安安
    TOP
    快速回复 返回顶部 返回列表