реклама на сайте
подробности

 
 
> Странный asm код, после компиляции в Keil
greatbaobab
сообщение Apr 25 2010, 07:20
Сообщение #1





Группа: Участник
Сообщений: 14
Регистрация: 21-07-09
Пользователь №: 51 428



Си знаю хорошо, а вот с кейлом только начинаю,
тем не менее это поставило меня в ступор.

простой код
Цитата
U8 i
for(i = 0; i < 255; i++);//задержка


который я бы "скомпилировал" бы так

Цитата
mov r0, 0xFF;
LOOP: djnz r0, LOOP;


компилируется в бесконечный цикл с непонятным колдовством в теле

Цитата
0B: CLR A;
0C: MOV R7, A;
0D: MOV A, R7; //СЮДА ЦИКЛ ПРЫГАТЬ БУДЕТ
0E: MOV R5, A;
0F: RLC A; //какие-то сдвиги
10: SUBB A, 0xE0; //какие-то непонятные константы
12: MOV R4, A;
13: CLR C;
14: MOV A, R5;
15: SUBB A, #0xFE; //какие-то вычитания
17: MOV A, R4;
18: XRL A, #P0 (0x80); // там был адрес указан, а не P0
1A: SUBB A, #P0 (0x80); // он что, ещё и с портом решил поработать зачем-то????
1C: JNC C:21; // я так понял выход из цикла, зачем???
1E: INC R7; //R7 я так понял, это счётчик i
1F: SJMP C:0D;//наверх //так и убрали бы всё кроме этих двух команд
21:


Мне собственно было бы всё равно, если б цикл выполнялся правильно,
но он зависает в бесконечном цикле!!!
как в этом может быть ошибка???
Цитата
U8 i
for(i = 0; i < 255; i++);//задержка


ЗЫ Кейл юВижн 3.6

Сообщение отредактировал greatbaobab - Apr 25 2010, 07:27
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Apr 25 2010, 11:28
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(greatbaobab @ Apr 25 2010, 10:35) *
который я бы "скомпилировал" бы так
Я бы на месте компилятора вообще выкинул этот код, поскольку он не делает ничего полезного с точки зрения стандарта. И многие компиляторы такой код выкидывают при включенной оптимизации. Во избежание сюрпризов объявите i как volatile


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Палыч
сообщение Apr 26 2010, 05:43
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Возможно, что Вы запутались в коде, генерируемом транслятором: приведенный ассемблерный текст не соответствует этому тексту языка Си. У меня получается вполне ожидаемое
Код
;---- Variable 'i' assigned to Register 'R7' ----
0000 E4                CLR     A
0001 FF                MOV     R7,A
0002         ?C0001:
0002 0F                INC     R7
0003 BFFFFC            CJNE    R7,#0FFH,?C0001

Включите генерацию листинга и ассемблерного кода
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 05:09
Рейтинг@Mail.ru


Страница сгенерированна за 0.01387 секунд с 7
ELECTRONIX ©2004-2016