微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > hex的反汇编文件译码及说明(获得函数地址)

hex的反汇编文件译码及说明(获得函数地址)

时间:11-18 来源:互联网 点击:
avr单片机用C语言仿真软件编译之后生成hex文件,我们可以通过反汇编软件来还原汇编代码,

hex反汇编软件 :下载地址(右键选择下载工具下载,比如迅雷下载)

以下是我做的一个实验,产生的《实验.hex》文件通过反汇编,之后得到的代码,其此函数的功能也就是获得每一个自定义的函数在flash里的地址,通过反汇编更能了解其数值返回过程,解读。

通过此上的反汇编实验,可以用来做基于avr的多任务机制点击衔接。

如下

; reassembly of "实验.hex"
; created by ReAVR V3.2.0
; at 2010/01/31 - 19:38:25
; for ICCAVR assembler
;---------------------------------------
; AVR_TYPE=
; FLASH_SIZE=8KB
; SRAM_START=0x60
;---------------------------------------
.area text
;; older iccavr need different setup:
;; .area text (abs,ovr)
;; .org 0x0000
;---------------------------------------
; byte constants:
;
k00 = 0x00 ;
k01 = 0x01 ;
k02 = 0x02 ;
k03 = 0x03 ;
k04 = 0x04 ;
k05 = 0x05 ;
k08 = 0x08 ;
k10 = 0x10 ;
k40 = 0x40 ;@
k5F = 0x5F ; _
k60 = 0x60 ; `
k69 = 0x69 ; i
kAA = 0xAA ; ?
kFF = 0xFF ;
;
; io register addresses://Data Address Space
;
p11 = 0x11
p12 = 0x12
p14 = 0x14
p15 = 0x15
p17 = 0x17
p18 = 0x18
p1A = 0x1A
p1B = 0x1B
p34 = 0x34
p35 = 0x35
p3B = 0x3B
p3D = 0x3D
p3E = 0x3E
p3F = 0x3F
;
; bit numbers:
;
b0 = 0x00
b1 = 0x01
b2 = 0x02
b3 = 0x03
b4 = 0x04
b5 = 0x05
b6 = 0x06
b7 = 0x07
;---------------------------------------
;
L0000:
jmp __start ; L0030
; ----------- jump on last line
jmp L006E
; ----------- jump on last line
.word 0xFFFF ; pc=0x0004(0x0008)
.word 0xFFFF ; pc=0x0005(0x000A)
.word 0xFFFF ; pc=0x0006(0x000C)
.word 0xFFFF ; pc=0x0007(0x000E)
.word 0xFFFF ; pc=0x0008(0x0010)
.word 0xFFFF ; pc=0x0009(0x0012)
.word 0xFFFF ; pc=0x000A(0x0014)
.word 0xFFFF ; pc=0x000B(0x0016)
.word 0xFFFF ; pc=0x000C(0x0018)
.word 0xFFFF ; pc=0x000D(0x001A)
.word 0xFFFF ; pc=0x000E(0x001C)
.word 0xFFFF ; pc=0x000F(0x001E)
.word 0xFFFF ; pc=0x0010(0x0020)
.word 0xFFFF ; pc=0x0011(0x0022)
.word 0xFFFF ; pc=0x0012(0x0024)
.word 0xFFFF ; pc=0x0013(0x0026)
.word 0xFFFF ; pc=0x0014(0x0028)
.word 0xFFFF ; pc=0x0015(0x002A)
.word 0xFFFF ; pc=0x0016(0x002C)
.word 0xFFFF ; pc=0x0017(0x002E)
.word 0xFFFF ; pc=0x0018(0x0030)
.word 0xFFFF ; pc=0x0019(0x0032)
.word 0xFFFF ; pc=0x001A(0x0034)
.word 0xFFFF ; pc=0x001B(0x0036)
.word 0xFFFF ; pc=0x001C(0x0038)
.word 0xFFFF ; pc=0x001D(0x003A)
.word 0xFFFF ; pc=0x001E(0x003C)
.word 0xFFFF ; pc=0x001F(0x003E)
.word 0xFFFF ; pc=0x0020(0x0040)
.word 0xFFFF ; pc=0x0021(0x0042)
.word 0xFFFF ; pc=0x0022(0x0044)
.word 0xFFFF ; pc=0x0023(0x0046)
.word 0xFFFF ; pc=0x0024(0x0048)
.word 0xFFFF ; pc=0x0025(0x004A)
.word 0xFFFF ; pc=0x0026(0x004C)
.word 0xFFFF ; pc=0x0027(0x004E)
.word 0xFFFF ; pc=0x0028(0x0050)
.word 0xFFFF ; pc=0x0029(0x0052)
.word 0xFFFF ; pc=0x002A(0x0054)
.word 0xFFFF ; pc=0x002B(0x0056)
.word 0xFFFF ; pc=0x002C(0x0058)
.word 0xFFFF ; pc=0x002D(0x005A)
.word 0xFFFF ; pc=0x002E(0x005C)
.word 0xFFFF ; pc=0x002F(0x005E)
;
__start:://*头文件加载 I/O Registers 0020-005f*/
; L0030:
ldi r28,k5F; LDI Rd, K 加载立即数
ldi r29,k04
out p3D,r28; OUT P, Rr 将数据输出到端口
out p3E,r29
subi r28,k10;SUBI Rd, K 立即数与寄存器相减
sbci r29,k00;SBCI Rd, K 寄存器与常数及进位位相减
ldi r16,kAA
std Y+o00,r16;STD Z+q,Rr 带偏移量的间接存储
clr r0
ldi r30,k60
ldi r31,k00
ldi r17,k00
L003C:
cpi r30,k69;CPI Rd,K 比较寄存器与立即数
cpc r31,r17;CPC Rd,Rr 带进位位比较
breq L0041;BREQ k 相等即跳转
; ----- branch on last line
st Z+,r0;ST Z+, Rr 间接存储并执行后加操作
rjmp L003C
; ----------- jump on last line
L0041:
st Z,r16;ST Z, Rr 间接存储
ldi r30,k60
ldi r31,k00
ldi r26,k60
ldi r27,k00
ldi r17,k00
L0047:
cpi r30,k60
cpc r31,r17
breq L004E
; ----- branch on last line
lpm
adiw r30,k01
st X+,r0
rjmp L0047
; ----------- jump on last line
L004E:
call L00C2
L0050:
rjmp L0050
; ----------- jump on last line

; pc=0x51(0xA2) y

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top