Отговори на тема  [ 19 мнения ]  Отиди на страница 1, 2  Следваща
Във връзка с темата за C 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение Във връзка с темата за C
Може ли някой, който работи с PIC да направи следният експеримент. Да компилира (с изключени оптимизации) следният код:
Код:
long n = 424242;
long* p;

p = &n;

*p=0;


Да го дезасемблира и да постне кода тука :)


Пон Дек 13, 2004 1:24 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 31, 2004 9:19 pm
Мнения: 4464
Местоположение: Stara Zagora
Мнение 
Довечера ще ти го направя сега съм на другия комп.


Пон Дек 13, 2004 3:28 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 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
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 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
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение 
А за какво ти е тук превключване на банките ?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
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Сеп 26, 2004 4:11 pm
Мнения: 3750
Местоположение: София
Мнение 
За вътрешна информация : тъпото CCS си мисли че : INT = 8 bits, LONG = 16 bits. Ако искаш да стане "нормален" трябва да му сложиш най-отпред директива, не помня каква беше. Та твоят LONG е отрязан до 16 бита и това, което е останало е напъхано в клетки 0x12 и 0x13. Поне така ми изглежда на мене.


Нед Дек 19, 2004 12:29 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение 
А да така прави, ам и аз придобих неговото мислене :)
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
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 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
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Сеп 26, 2004 4:11 pm
Мнения: 3750
Местоположение: София
Мнение 
Приема се , че са в една банка. Ако се раздуе програмата и поиска повече RAM, тогава ще се появят "банкерите" :wink:


Нед Дек 19, 2004 2:35 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
Добре, тогава нека разширим експеримента - преди въпросният код сложете превключване към някоя друга банка, да видим какво ще измисли компилаторът. :)


Нед Дек 19, 2004 2:38 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 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
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 19 мнения ]  Отиди на страница 1, 2  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 4 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни