用reAVR反汇编的汇编程序为什么在AVRSTUDIO 中无法编译通过,请问该如何解决呢
请问,我用avrstudio+winavr写的一个mega64程序(bin文件有40多k bytes),由于现在有特殊的需要,需要对MEGA64的hex文件反汇编,然后在汇编语言的基础上修改指令,然后生成新的hex文件。我用reAVR生成了反汇编文件,然后用它在AVR STUDIO中建立了新的项目,编译的时候,AVR Studio报错如下:C:\asm3\test.asm(421): error: Relative branch out of reach
C:\asm3\test.asm(429): error: Relative branch out of reach
C:\asm3\test.asm(434): error: Relative branch out of reach
C:\asm3\test.asm(436): error: Relative branch out of reach
C:\asm3\test.asm(440): error: Undefined symbol: L018F
C:\asm3\test.asm(4813): error: Relative branch out of reach
这些错误从字面上很好理解,可是,他们是由hex文件反汇编过来,肯定不能随便修改的,所以,我恳请对反汇编有经验的人给我提点建议,应该怎样修改,谢谢。另外,我的hex文件中包含一些数据,而反汇编的时候,reAVR将数据也反汇编成指令。请问这种数据对新的汇编工程的编译有影响吗?
我曾经写了一个小的mega64程序,编译生成的hex文件反汇编成汇编程序,然后建立AVRSTUDIO工程,编译可以通过,新生成的hex文件也可以正常执行,可是为什么我的大程序却不行呢?请高手指点,谢谢。
附件为我的hex文件和反汇编程序,谢谢
mega64的hex文件和反汇编出来的程序ourdev_463516.rar(文件大小:78K) (原文件名:asm2.rar) 反汇编出错了呗
另
LZ明显是想改别人的程序,
自己的程序哪有说放着源码不用的... 1楼】 snoopyzz
积分:1100
派别:
等级:------
来自:
反汇编出错了呗
另
LZ明显是想改别人的程序,
自己的程序哪有说放着源码不用的...
-----------------------------------
同意1楼看法
为什么要"想改别人的程序"?
盗窃吗? 上面两位,我忘了说我要这样做的目的了,我这样不改源代码却要反汇编修改hex文件,确实是因为我有极其特殊的原因。
MEGA64的源程序就是我自己写的,但是因为一些非常特殊的原因,我需要修改生成的hex文件(bin文件)内数据存储的格式,比如,我要在bin文件中,每隔128字节放一个nop指令,不管是code段还是data段,都要放,我的需求太特殊,所以必须通过反汇编来改。如果您非要知道我为什么有这样极其特殊的需求,请您给我发邮件,我会告诉您的。谢谢!
另外,如果您真能解决我的问题,找到问题之所在,那我真要谢谢你。
我的QQ:27577012
email:junhuaven#gmail.com 40多K,转成汇编,可是一个庞大的工程啊。我不会,呵呵。 我知道了,LZ上是次那个升级协议改掉了的那贴吧? 是的,就是上次升级协议那个,还请各路高手帮我出出主意啊,谢谢呀 我转换完成后也是出错 ,上面有很多的
.word 0x005D ; pc=0x000E(0x001C)
.word 0xFFFF ; pc=0x012C(0x0258)
.word 0xFFFF ; pc=0x012D(0x025A)
.word 0xFFFF ; pc=0x012E(0x025C)
.word 0xFFFF ; pc=0x012F(0x025E)
.word 0xFFFF ; pc=0x0130(0x0260)
.word 0xFFFF ; pc=0x0131(0x0262)
.word 0xFFFF ; pc=0x0132(0x0264)
.word 0xFFFF ; pc=0x0133(0x0266)
.word 0xFFFF ; pc=0x0134(0x0268)
.word 0xFFFF ; pc=0x0135(0x026A)
.word 0xFFFF ; pc=0x0136(0x026C)
.word 0xFFFF ; pc=0x0137(0x026E)
.word 0xFFFF ; pc=0x0138(0x0270)
这样的语句,不知道是什么意思,有什么作用。 看了你的“如何实现MEGA64单片机FLASH特殊存储格式?”,你想在“比如0X7F,0XFF,0X17F,0X1FF,0X27F,0X2FF,0X37F,0X3FF…等些个地方分别定义一个无用的字节”是不可能的,因为AVR一条指令至少是两字节,所以至少要定义两个字节,否则程序会出错。 AVRASM: AVR macro assembler 2.1.9 (build 90 Jul5 2006 11:06:16)
Copyright (C) 1995-2006 ATMEL Corporation
F:\disasm\asm2\test.asm(1): Including file 'C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\m64def.inc'
F:\disasm\asm2\test.asm(21802): No EEPROM data, deleting F:\disasm\asm2\test.eep
ATmega64 memory use summary :
Segment Begin End Code Data Used Size Use%
---------------------------------------------------------------
[.cseg] 0x000000 0x00baee46560 129447854 6553673.0%
[.dseg] 0x000100 0x000100 0 0 0 4096 0.0%
[.eseg] 0x000000 0x000000 0 0 0 2048 0.0%
Assembly complete, 0 errors. 0 warnings
点击此处下载 ourdev_490729.rar(文件大小:37K) (原文件名:test.rar) 记号 记号啦{:sad:}{:sad:}{:sad:}{:sad:}
页:
[1]