Re: Matteproblem i C
Postat: 20 december 2009, 17:39:30
Det skulle vara intressant att se på den genererade koden. Kan någon berätta hur man får MCC18 att putta ut en ASM fil spå man slipper syna .o filen?
Svenskt forum för elektroniksnack.
https://elektronikforumet.com/forum/
Kod: Markera allt
4: void main(){
5: if( a == b)
002 0100 MOVLB 0
004 5162 MOVF 0x62, W, BANKED
006 1960 XORWF 0x60, W, BANKED
008 E102 BNZ 0xe
00A 5163 MOVF 0x63, W, BANKED
00C 1961 XORWF 0x61, W, BANKED
00E E103 BNZ 0x16
6: {
7: c = 1;
010 0E01 MOVLW 0x1
012 6F64 MOVWF 0x64, BANKED
014 6B65 CLRF 0x65, BANKED
8: }
9: // ex2
10: if(a^b == 0)
016 5162 MOVF 0x62, W, BANKED
018 1163 IORWF 0x63, W, BANKED
01A E002 BZ 0x20
01C 0E00 MOVLW 0
01E D001 BRA 0x22
020 0E01 MOVLW 0x1
022 6E02 MOVWF 0x2, ACCESS
024 6A03 CLRF 0x3, ACCESS
026 BE02 BTFSC 0x2, 0x7, ACCESS
028 6803 SETF 0x3, ACCESS
02A 5160 MOVF 0x60, W, BANKED
02C 1802 XORWF 0x2, W, ACCESS
02E 6E00 MOVWF 0, ACCESS
030 5161 MOVF 0x61, W, BANKED
032 1803 XORWF 0x3, W, ACCESS
034 6E01 MOVWF 0x1, ACCESS
036 5000 MOVF 0, W, ACCESS
038 1001 IORWF 0x1, W, ACCESS
03A E003 BZ 0x42
11: {
12: c = 1;
03C 0E01 MOVLW 0x1
03E 6F64 MOVWF 0x64, BANKED
040 6B65 CLRF 0x65, BANKED
13: }
14: }
Kod: Markera allt
2626 0E04 MOVLW 0x4
2628 CFDB MOVFF 0xfdb, 0
262A F000 NOP
262C 0E05 MOVLW 0x5
262E CFDB MOVFF 0xfdb, 0x1
2630 F001 NOP
2632 0E06 MOVLW 0x6
2634 CFDB MOVFF 0xfdb, 0x2
2636 F002 NOP
2638 0E07 MOVLW 0x7
263A CFDB MOVFF 0xfdb, 0x3
263C F003 NOP
263E 0E08 MOVLW 0x8
2640 90D8 BCF 0xfd8, 0, ACCESS
2642 3203 RRCF 0x3, F, ACCESS
2644 3202 RRCF 0x2, F, ACCESS
2646 3201 RRCF 0x1, F, ACCESS
2648 3200 RRCF 0, F, ACCESS
264A 06E8 DECF 0xfe8, F, ACCESS
264C E1F9 BNZ 0x2640
264E 0E02 MOVLW 0x2
2650 C000 MOVFF 0, 0xfdb
2652 FFDB NOP
2654 0E03 MOVLW 0x3
2656 C001 MOVFF 0x1, 0xfdb
2658 FFDB NOP
tror ni att shift operationen hade otimerats på annat sätt om denna otimering var tillgänglig?PROCEDURAL ABSTRACTION
MPLAB C18, like most compilers, frequently generates code sequences that appear
multiple times in a single object file. This optimization reduces the size of the generated
code by creating a procedure containing the repeated code and replacing the copies
with a call to the procedure. Procedural abstraction is performed across all functions in
a given code section