搜索
bottom↓
回复: 24

【已解决】求助:IAR不识别基本的8051汇编指令、

[复制链接]

出0入0汤圆

发表于 2013-1-22 20:56:09 | 显示全部楼层 |阅读模式
本帖最后由 fc23fcevff23 于 2013-1-22 22:55 编辑

我用的是CC2530芯片,内核是增强型8051。
用C语言编程毫无问题,在C语言编程时,插入__asm("MOV A,#88H");也没问题。javascript:;
但是,纯粹用汇编语言编程时,IAR就不认识基本的8051汇编指令了。



解决办法:
按照这样的格式去写:

        public  __program_start

__program_start:
         
        org     0000h
        mov     A,#88H
            
        end

我必须要指出:IAR这家公司的确是吃屎吃坏脑子了。
请大家注意:
public  __program_start、org     0000h、mov     A,#88H、end前面都有一段空白,它是TAB键生成的,而且是必需的。除了程序标号__program_start:前面可不用TAB键生成一段空白外,所有别的程序段都需要TAB键生成一段空白,否则一律当作Error[40]: Bad instruction来处理。


补充1:public  __program_start也可以不用,只要进行如下设置即可:


那么,用IAR编写8051的汇编语言就会同一般的书本里面写的格式一样了,也就是:
        org     0000h
        mov     A,#88H
            
        end


补充2:
迪加的zigbee核心板闪光灯程序:


  #include <ioCC2530.h>   
  ORG 0000H
  MOV P1DIR,#0FFH

FLASH:
  CLR P1_0
  CALL DELAY_1S
  SETB P1_0
  
  CLR P1_1
  CALL DELAY_1S
  SETB P1_1
  JMP FLASH
  
  
  DELAY_1S:
  
  MOV     R1,#8
  DELAY_1S_C_3_1:
  MOV     R2,#244
  DELAY_1S_C_3_2:
  MOV     R3,#254
  DJNZ    R3,$
  DJNZ    R2,DELAY_1S_C_3_2
  DJNZ    R1,DELAY_1S_C_3_1
  
  MOV     R2,#5
  DELAY_1S_C_2:
  MOV     R3,#248
  DJNZ    R3,$
  DJNZ    R2,DELAY_1S_C_2
  
  MOV     R3,#1
  DJNZ    R3,$
  
  RET
  
  END

DELAY_1S已经失效,只对传统8051是1S(分毫不差)
至此,我终于可以将CC2530当成是可以硬件仿真的8051单片机来用了,省去了购买C8051F的钱。


干杯,庆祝!

本帖子中包含更多资源

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

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2013-1-22 20:57:39 | 显示全部楼层
汇编的asm文件和c是有区别的

出0入0汤圆

发表于 2013-1-22 20:59:48 | 显示全部楼层
像org这样的伪指令,每个编译器都是不一样的,老老实实看iar自带的帮助文件吧。

出0入0汤圆

 楼主| 发表于 2013-1-22 21:05:40 | 显示全部楼层
i55x 发表于 2013-1-22 20:59
像org这样的伪指令,每个编译器都是不一样的,老老实实看iar自带的帮助文件吧。 ...

说得到轻松,其实这种无关痛痒的小问题最令人烦恼了。
我看了IAR的例程,就没有TI公司的芯片。
这种问题真的是毫无学习的价值,要是有熟练的人,稍微示范一下就行了,但偏偏网上有IAR的ARM汇编示范,居然就没有这个8051的汇编示范。

出0入0汤圆

 楼主| 发表于 2013-1-22 21:24:50 | 显示全部楼层
这是网上唯一找到的一篇:
http://blog.sina.com.cn/s/blog_86e874d30100vic7.html
他所述的方法中Tutor.r51找不到。

出0入0汤圆

 楼主| 发表于 2013-1-22 22:02:11 | 显示全部楼层
顶上去,让所有人知道IAR公司吃屎吃坏脑子了。这种问题居然能用掉我一天,这真是举世无双的大奇葩。

按照这样的格式去写:

        public  __program_start

__program_start:
         
        org     0000h
        mov     A,#88H
            
        end

我必须要指出:IAR这家公司的确是吃屎吃坏脑子了。
请大家注意:
public  __program_start、org     0000h、mov     A,#88H、end前面都有一段空白,它是TAB键生成的,而且是必需的。除了程序标号__program_start:前面可不用TAB键生成一段空白外,所有别的程序段都需要TAB键生成一段空白,否则一律当作Error[40]: Bad instruction来处理。

出0入0汤圆

发表于 2013-1-23 08:50:30 | 显示全部楼层
语法问题,很正常的。
看GNU的很多规范里面,也是必须用Tab间隔!

解决就好

出0入0汤圆

 楼主| 发表于 2013-1-23 09:31:11 | 显示全部楼层
chinabn 发表于 2013-1-23 08:50
语法问题,很正常的。
看GNU的很多规范里面,也是必须用Tab间隔!

哪个GNU规范?

出0入0汤圆

发表于 2013-1-23 13:32:53 | 显示全部楼层
不是官方规范。
是一些特定的文件格式,必须用Tab

例如 Font的转换表等等

出0入0汤圆

 楼主| 发表于 2013-1-23 21:10:32 | 显示全部楼层
chinabn 发表于 2013-1-23 13:32
不是官方规范。
是一些特定的文件格式,必须用Tab

能讲一讲什么是GNU吗?我在网上搜了搜,还是不太懂。平时也看见很多人的文章后面写着“遵循GNU规范”之类的话,不清楚具体是什么意思。

出0入0汤圆

发表于 2013-1-23 21:24:58 | 显示全部楼层
fc23fcevff23 发表于 2013-1-23 21:10
能讲一讲什么是GNU吗?我在网上搜了搜,还是不太懂。平时也看见很多人的文章后面写着“遵循GNU规范”之类 ...

GNU is Not UNIX,软件界传奇的组织,对软件业贡献巨大,IAR向它的规格致敬是因为用了它贡献的GCC了。

出0入0汤圆

发表于 2013-1-23 21:28:11 | 显示全部楼层
chinabn 发表于 2013-1-23 08:50
语法问题,很正常的。
看GNU的很多规范里面,也是必须用Tab间隔!

嗯,请尊重前人所作的贡献。

出0入0汤圆

 楼主| 发表于 2013-1-23 23:05:02 | 显示全部楼层
netawater 发表于 2013-1-23 21:24
GNU is Not UNIX,软件界传奇的组织,对软件业贡献巨大,IAR向它的规格致敬是因为用了它贡献的GCC了。 ...

根据你的意思,我推测你想说:IAR用了GCC,而GCC又是GNU下的产物,所以IAR也部分的遵循GNU的某些规则。

不过,我觉得IAR既然作为商业软件,就应该要服从于用户方便。这种TAB缺失,报一个WARNING还行,报ERROR就过头了!

出0入0汤圆

发表于 2013-1-24 07:17:17 | 显示全部楼层
fc23fcevff23 发表于 2013-1-23 23:05
根据你的意思,我推测你想说:IAR用了GCC,而GCC又是GNU下的产物,所以IAR也部分的遵循GNU的某些规则。

...

如果你是它的收费客户,请联系客服反应问题。

出0入0汤圆

发表于 2013-1-24 08:47:12 | 显示全部楼层
fc23fcevff23 发表于 2013-1-23 23:05
根据你的意思,我推测你想说:IAR用了GCC,而GCC又是GNU下的产物,所以IAR也部分的遵循GNU的某些规则。

...

并不是这个意思!
IAR为闭源,有自己的一套规则。
如果为付费用户。 请联系,IAR客服解决。

出0入0汤圆

 楼主| 发表于 2013-1-24 10:26:12 | 显示全部楼层
netawater 发表于 2013-1-24 07:17
如果你是它的收费客户,请联系客服反应问题。

付了费,可以在程序段前面不加TAB?

出0入0汤圆

 楼主| 发表于 2013-1-24 10:32:06 | 显示全部楼层
chinabn 发表于 2013-1-24 08:47
并不是这个意思!
IAR为闭源,有自己的一套规则。
如果为付费用户。 请联系,IAR客服解决。

哦。怪不得我在网上搜索IAR和GCC的关系,发现都是比较它们的编译效果,而没有说它们之间的继承性的。
根据你的意思,也就是说:
1、IAR已经闭源,成为完完全全的商业软件了;
2、程序段之前加TAB也是IAR自己定的规则;
3、IAR之前可能借用过某些GNU制度下的软件(可能有GCC),这是造成IAR定下在程序段之前加TAB的规则的可能原因。
是这样吗?

出0入0汤圆

发表于 2013-1-24 12:59:32 | 显示全部楼层
fc23fcevff23 发表于 2013-1-24 10:26
付了费,可以在程序段前面不加TAB?

。。。

商业公司不会为一个人的市场去改变行为,除非是大多数客户都这样。

出0入0汤圆

发表于 2013-1-24 13:23:27 | 显示全部楼层
netawater 发表于 2013-1-24 12:59
。。。

商业公司不会为一个人的市场去改变行为,除非是大多数客户都这样。 ...

把这个商业公司买下来,想怎么改就怎么改~

出0入0汤圆

发表于 2013-1-24 15:30:11 | 显示全部楼层
javabean 发表于 2013-1-24 13:23
把这个商业公司买下来,想怎么改就怎么改~

牛人辈出啊!

出0入0汤圆

发表于 2013-1-24 22:55:42 | 显示全部楼层
Makefile也是要一段TAB的空白。
Python对缩进的要求也很严格啊,TAB必须是占4个空格啊。

出0入0汤圆

 楼主| 发表于 2013-1-25 00:31:26 | 显示全部楼层
netawater 发表于 2013-1-24 12:59
。。。

商业公司不会为一个人的市场去改变行为,除非是大多数客户都这样。 ...

我推测你想说:因为大多数写汇编的人在程序段前面使用了TAB,所以IAR所在的公司就顺从着这个习惯,定下了程序段前面必须加TAB的习惯,是这样吧?

出0入0汤圆

 楼主| 发表于 2013-1-25 00:41:14 | 显示全部楼层
笑笑我笑了 发表于 2013-1-24 22:55
Makefile也是要一段TAB的空白。
Python对缩进的要求也很严格啊,TAB必须是占4个空格啊。 ...

我对Makefile和Python不太熟悉,你所提到的Makefile和Python也是必须加TAB,不加TAB一律报错的吗?还是只是很严格?
我查了下网络,Python是高级语言,那是不是所有的关于Python、makefile的编译器都要加TAB?
大家都来讲一讲TAB,我想更多的了解一下这种细节,这种细节往往让不熟悉的人摸不着头脑。

出0入0汤圆

发表于 2013-1-25 08:31:16 | 显示全部楼层
fc23fcevff23 发表于 2013-1-25 00:31
我推测你想说:因为大多数写汇编的人在程序段前面使用了TAB,所以IAR所在的公司就顺从着这个习惯,定下了 ...

我觉得在这里集中讨论技术问题吧,那些与商务相关的细节没必要研究了。

出0入0汤圆

发表于 2013-1-25 22:29:56 | 显示全部楼层
fc23fcevff23 发表于 2013-1-25 00:41
我对Makefile和Python不太熟悉,你所提到的Makefile和Python也是必须加TAB,不加TAB一律报错的吗?还是只 ...

Python是为了格式规范才要求强制缩进,TAB4个空格之类的吧
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-18 09:33

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表