| Автор |
Съобщение |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
 Във връзка с темата за C
Може ли някой, който работи с PIC да направи следният експеримент. Да компилира (с изключени оптимизации) следният код:
Да го дезасемблира и да постне кода тука 
|
| Пон Дек 13, 2004 1:24 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
Довечера ще ти го направя сега съм на другия комп.
|
| Пон Дек 13, 2004 3:28 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
С Hi-tech съм направил компилацията.
void Test()
{
long n = 424242;
long* p;
p = &n;
*p=0;
}
А това е дизасемблираната програма
353 void Test()
354: {
0001E9 3032 MOVLW 0x32
355: long n = 424242;
0001EA 1283 BCF 0x3, 0x5
0001EB 094 MOVWF 0x14
0001EC 3079 MOVLW 0x79
0001ED 095 MOVWF 0x15
0001EE 3006 MOVLW 0x6
0001EF 096 MOVWF 0x16
0001F0 197 CLRF 0x17
356: long* p;
357:
358: p = &n;
0001F1 3014 MOVLW 0x14
0001F2 093 MOVWF 0x13
359:
360: *p=0;
0001F3 084 MOVWF 0x4
0001F4 3000 MOVLW 0
0001F5 180 CLRF 0
0001F6 A84 INCF 0x4, F
0001F7 180 CLRF 0
0001F8 A84 INCF 0x4, F
0001F9 180 CLRF 0
0001FA A84 INCF 0x4, F
0001FB 180 CLRF 0
361: }
0001FC 008 RETURN
Надявам се да не съм закъснял много
|
| Вто Дек 14, 2004 12:45 am |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Тва за кой PIC е? 
|
| Вто Дек 14, 2004 10:06 am |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
za 16F84
|
| Вто Дек 14, 2004 10:51 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
А къде е превключването на банките? 
|
| Сря Дек 15, 2004 9:11 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30684 Местоположение: София
|
А за какво ти е тук превключване на банките ?void Test()
.................... {
.................... long n = 424242;
0004: MOVLW 32
0005: MOVWF 12
0006: MOVLW 79
0007: MOVWF 13
.................... long* p;
....................
.................... p = &n;
0008: MOVLW 12
0009: MOVWF 14
....................
.................... *p=0;
000A: MOVF 14,W
000B: MOVWF 04
000C: INCF 04,F
000D: CLRF 00
000E: DECF 04,F
000F: CLRF 00
.................... }
0010: GOTO 01B (RETURN)
ето това прави CCS, сложено е като функция ....затова има return, ама е inline функция 
|
| Съб Дек 18, 2004 8:59 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Тая променлива къде е?
|
| Нед Дек 19, 2004 12:04 am |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
За вътрешна информация : тъпото CCS си мисли че : INT = 8 bits, LONG = 16 bits. Ако искаш да стане "нормален" трябва да му сложиш най-отпред директива, не помня каква беше. Та твоят LONG е отрязан до 16 бита и това, което е останало е напъхано в клетки 0x12 и 0x13. Поне така ми изглежда на мене.
|
| Нед Дек 19, 2004 12:29 am |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30684 Местоположение: София
|
А да така прави, ам и аз придобих неговото мислене
void Test()
.................... {
.................... int32 n = 424242;
0004: MOVLW 32
0005: MOVWF 12
0006: MOVLW 79
0007: MOVWF 13
0008: MOVLW 06
0009: MOVWF 14
000A: CLRF 15
.................... int32* p;
....................
.................... p = &n;
000B: MOVLW 12
000C: MOVWF 16
....................
.................... *p=0;
000D: MOVF 16,W
000E: MOVWF 04
000F: INCF 04,F
0010: INCF 04,F
0011: INCF 04,F
0012: CLRF 00
0013: DECF 04,F
0014: CLRF 00
0015: DECF 04,F
0016: CLRF 00
0017: DECF 04,F
0018: CLRF 00
.................... }
0019: GOTO 024 (RETURN)
012-015 Test.n
016 Test.p
017 Test.@SCRATCH
|
| Нед Дек 19, 2004 8:49 am |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
Така може,не погледнах за какво става дума и се бях притеснил че Hi-Tech нещо прави много раздут код в случая но .... успокоих се
|
| Нед Дек 19, 2004 2:11 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Добре де, ако тия променливи са в паметта, не трябва ли да се извършва превключване на банките, където се намират?
|
| Нед Дек 19, 2004 2:15 pm |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
Приема се , че са в една банка. Ако се раздуе програмата и поиска повече RAM, тогава ще се появят "банкерите" 
|
| Нед Дек 19, 2004 2:35 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Добре, тогава нека разширим експеримента - преди въпросният код сложете превключване към някоя друга банка, да видим какво ще измисли компилаторът. 
|
| Нед Дек 19, 2004 2:38 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
ne e li po lesno da kajesh kwo tochno te interesuwa da ti go obqsnim
|
| Нед Дек 19, 2004 2:59 pm |
|
|