This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Disassembly differences

I have problems to save a value in a variable.

When I look at the disassembly code in the Disassembly Window in the Debugger it looks really weird to me. When I generate a disassembly from the axf with the fromelf command it makes much more sense to me.

The C code that interest me. When I run the code at the end the variable local_z  stores not the value 6 as expected instead 0.

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
uint32_t global_c ;
uint32_t *pglobal_c = &global_c;
void MX_FREERTOS_Init(void) {
uint32_t local_c;
uint32_t local_z;
local_c = 5;
local_c = 6;
global_c = 6;
local_z = global_c+local_c;
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Assembly code from the Disassembly Window:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
126: uint32_t local_c;
127: uint32_t local_z;
0x08004788 2002 MOVS r0,#0x02
128: local_c = 5;
0x0800478A 9002 STR r0,[sp,#0x08]
129: local_c = 6;
0x0800478C 2000 MOVS r0,#0x00
135: global_c = 6;
0x0800478E 9003 STR r0,[sp,#0x0C]
0x08004790 2003 MOVS r0,#0x03
0x08004792 9004 STR r0,[sp,#0x10]
136: local_z = global_c+local_c;
0x08004794 2005 MOVS r0,#0x05
0x08004796 9005 STR r0,[sp,#0x14]
0x08004798 A901 ADD r1,sp,#0x04
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Assembly code from the fromelf command:
To generate the assembler code I use the "fromelf $PIntellitraps_CPU_V1_0\%L --disassemble --interleave=source  --text -c --output=outfile.lst" command

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
;;;126 uint32_t local_c;
;;;127 uint32_t local_z;
;;;128 local_c = 5;
0x0800478a: 2505 .% MOVS r5,#5
;;;129 local_c = 6;
0x0800478c: 2506 .% MOVS r5,#6
;;;135 global_c = 6;
0x0800478e: 2006 . MOVS r0,#6
0x08004790: 4904 .I LDR r1,[pc,#16] ; [0x80047a4] = 0x20000028
0x08004792: 6008 .` STR r0,[r1,#0]
;;;136 local_z = global_c+local_c;
0x08004794: 4608 .F MOV r0,r1
0x08004796: 6800 .h LDR r0,[r0,#0]
0x08004798: 1944 D. ADDS r4,r0,r5
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Can anybody explain to me why they are different and why the value don't get stored?

I use uVision V5.29 Professional with the ARM Compiler V5. The optimization Level is 0 and I compile for a STM32F7969NIHx.

Thank you in advance

0