easteast 发表于 2009-7-22 16:16:38

用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)

snoopyzz 发表于 2009-7-22 16:22:35

反汇编出错了呗

LZ明显是想改别人的程序,
自己的程序哪有说放着源码不用的...

suzhwt 发表于 2009-7-22 17:19:46

1楼】 snoopyzz
积分:1100
派别:
等级:------
来自:
反汇编出错了呗

LZ明显是想改别人的程序,
自己的程序哪有说放着源码不用的...
-----------------------------------
同意1楼看法

为什么要"想改别人的程序"?
盗窃吗?

easteast 发表于 2009-7-22 17:51:07

上面两位,我忘了说我要这样做的目的了,我这样不改源代码却要反汇编修改hex文件,确实是因为我有极其特殊的原因。
    MEGA64的源程序就是我自己写的,但是因为一些非常特殊的原因,我需要修改生成的hex文件(bin文件)内数据存储的格式,比如,我要在bin文件中,每隔128字节放一个nop指令,不管是code段还是data段,都要放,我的需求太特殊,所以必须通过反汇编来改。如果您非要知道我为什么有这样极其特殊的需求,请您给我发邮件,我会告诉您的。谢谢!



    另外,如果您真能解决我的问题,找到问题之所在,那我真要谢谢你。
   我的QQ:27577012
   email:junhuaven#gmail.com

plc_avr 发表于 2009-7-22 18:32:41

40多K,转成汇编,可是一个庞大的工程啊。我不会,呵呵。

snoopyzz 发表于 2009-7-22 18:41:13

我知道了,LZ上是次那个升级协议改掉了的那贴吧?

easteast 发表于 2009-7-22 19:20:40

是的,就是上次升级协议那个,还请各路高手帮我出出主意啊,谢谢呀

yutianyiren 发表于 2009-10-11 22:16:22

我转换完成后也是出错 ,上面有很多的
         .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)
这样的语句,不知道是什么意思,有什么作用。

qianhng 发表于 2009-10-12 08:27:03

看了你的“如何实现MEGA64单片机FLASH特殊存储格式?”,你想在“比如0X7F,0XFF,0X17F,0X1FF,0X27F,0X2FF,0X37F,0X3FF…等些个地方分别定义一个无用的字节”是不可能的,因为AVR一条指令至少是两字节,所以至少要定义两个字节,否则程序会出错。

qianhng 发表于 2009-10-12 15:01:43

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)

anxiangbo 发表于 2010-9-28 09:03:20

记号

verycard 发表于 2012-12-19 21:43:45

记号啦{:sad:}{:sad:}{:sad:}{:sad:}
页: [1]
查看完整版本: 用reAVR反汇编的汇编程序为什么在AVRSTUDIO 中无法编译通过,请问该如何解决呢