19.03.2011, 14:02
|
|
Гражданин KAZUS.RU
Регистрация: 02.06.2003
Адрес: Челябинск
Сообщений: 545
Сказал спасибо: 10
Сказали Спасибо 341 раз(а) в 202 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от omercury
|
Кто бы спорил. Но и тут есть варианты - удлиннители коротких переходов. Хотя, в данном случае какой-то код странный - может прикалывается кто? Компиляторы обычно метки на переходы не ставят. Шуруют сразу по абсолютному адресу.
|
Такое бывает при отключенной оптимизации.
Последний раз редактировалось Falconist; 13.04.2011 в 23:46.
|
|
|
|
19.03.2011, 14:09
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Ну не до такой же степени. Из 11 строки (вместе с метками) переход на L9 и тут же на L10. И метки.
Подобная закрученность была в небезизвестном ZX-Spectrum без всяких компиляторов.
![Нажмите на изображение для увеличения
Название: bill1173.jpg
Просмотров: 50
Размер: 51.4 Кб
ID: 19949](https://kazus.ru/forums/attachment.php?attachmentid=19949&thumb=1&d=1300529565)
Вот такая ерундовина уже не первый раз проскакивает. Я про кнопки(количество).
Последний раз редактировалось omercury; 19.03.2011 в 14:13.
|
|
|
|
19.03.2011, 15:06
|
|
Гражданин KAZUS.RU
Регистрация: 02.06.2003
Адрес: Челябинск
Сообщений: 545
Сказал спасибо: 10
Сказали Спасибо 341 раз(а) в 202 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от omercury
|
Ну не до такой же степени. Из 11 строки (вместе с метками) переход на L9 и тут же на L10. И метки.
Подобная закрученность была в небезизвестном ZX-Spectrum без всяких компиляторов.
|
Ну, вот маленький пример.
Исходный текст
Код:
|
extern char a,b, c;
int test()
{
if (a‹b && a‹c)
{
if (b‹c)
a = b;
else
a = c;
}
else if(a›b && a›c)
{
if (b›c)
a = b;
else
a = c;
}
else
{
a = b = c = 0;
}
} |
Результат при выключенной оптимизации переходов
Код:
|
; C85 compiler V2.6
.ident /CV2.6/
.library /z80lib/
.psect
.title test
_test::
push bc
ld a,(_a)
ld hl,_b
cp (hl)
jr nc,$2
ld a,(_a)
ld hl,_c
cp (hl)
jr nc,$2
ld a,(_b)
ld hl,_c
cp (hl)
jr nc,$3
ld a,(_b)
ld (_a),a
jr $4
$3:
ld a,(_c)
ld (_a),a
$4:
jr $5
$2:
ld a,(_b)
ld hl,_a
cp (hl)
jr nc,$6
ld a,(_c)
ld hl,_a
cp (hl)
jr nc,$6
ld a,(_c)
ld hl,_b
cp (hl)
jr nc,$7
ld a,(_b)
ld (_a),a
jr $10
$7:
ld a,(_c)
ld (_a),a
$10:
jr $11
$6:
xor a
ld (_c),a
ld (_b),a
ld (_a),a
$11:
$5:
$1:
pop bc
ret
; Code size - 99.
; Data size - 0.
.end |
То же самое, но оптимизация включена
Код:
|
; C85 compiler V2.6
.ident /CV2.6/
.library /z80lib/
.psect
.title test
_test::
push bc
ld a,(_a)
ld hl,_b
cp (hl)
jr nc,$2
ld a,(_a)
ld hl,_c
cp (hl)
jr nc,$2
ld a,(_b)
ld hl,_c
cp (hl)
jr nc,$3
ld a,(_b)
ld (_a),a
jr $4
$3:
ld a,(_c)
ld (_a),a
jr $5
$2:
ld a,(_b)
ld hl,_a
cp (hl)
jr nc,$6
ld a,(_c)
ld hl,_a
cp (hl)
jr nc,$6
ld a,(_c)
ld hl,_b
cp (hl)
jr nc,$7
ld a,(_b)
ld (_a),a
jr $10
$7:
ld a,(_c)
ld (_a),a
jr $11
$6:
xor a
ld (_c),a
ld (_b),a
ld (_a),a
$1:
$5:
$4 = $5
$11:
$10 = $11
pop bc
ret
; Code size - 99.
; Data size - 0.
.end |
Я думаю, разница заметна. Или нет?
Последний раз редактировалось Falconist; 13.04.2011 в 23:45.
|
|
|
|
19.03.2011, 15:29
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от Bill
|
Я думаю, разница заметна. Или нет?
|
Собрал код в 2 колонки для наглядности - обхохотался. Такое ощущение, что при отключенной оптимизации намеренно ставятся глупые переходы. ![Прикольно](images/smilies/icon_wink3.gif)
в остальном код абсолютно одинаков.
C85_nooptimizet_optimizet.doc
Сообщение от Bill
|
Или нет?
|
Последний раз редактировалось Falconist; 13.04.2011 в 23:46.
|
|
|
|
19.03.2011, 15:30
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Bill, А что за компилятор ? Либы есть под периферию Спектрума ?
__________________
Осторожно , злой кот
|
|
|
|
19.03.2011, 15:43
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Zilog не умерла. В то время z80 был покруче интеловского флагмена 8080(если правильно помню). Деньги вложили в Intel, а Zilog оттёрли в сторонку. Сейчас выпускает вполне приличные контроллеры. И не только.
Если интересно. Там и софт есть. http://zilog.com/index.php?option=co...=139&Itemid=59
Bill, с меточками генерировался перемещаемый блок для линкера?
Последний раз редактировалось omercury; 19.03.2011 в 15:54.
|
|
|
|
19.03.2011, 21:43
|
|
Гражданин KAZUS.RU
Регистрация: 02.06.2003
Адрес: Челябинск
Сообщений: 545
Сказал спасибо: 10
Сказали Спасибо 341 раз(а) в 202 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от dosikus
|
Bill, А что за компилятор ? Либы есть под периферию Спектрума ?
|
Это мой доморощенный, собственного производства т.с. Правда, давно это было, лет 25 с тех пор прошло. Тогда Спектрума еще не было. А после 91-го я вообще эту работу свернул. Но, тем не менее, некоторый опыт программирования я тогда получил.
Последний раз редактировалось Falconist; 13.04.2011 в 23:45.
|
|
|
|
19.03.2011, 21:49
|
|
Гражданин KAZUS.RU
Регистрация: 02.06.2003
Адрес: Челябинск
Сообщений: 545
Сказал спасибо: 10
Сказали Спасибо 341 раз(а) в 202 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от omercury
|
Собрал код в 2 колонки для наглядности - обхохотался. Такое ощущение, что при отключенной оптимизации намеренно ставятся глупые переходы. ![Прикольно](images/smilies/icon_wink3.gif)
в остальном код абсолютно одинаков.
|
Да, нет, намеренно тут ничего не ставилось, трансляция тут чисто механическая. Я уже ссылку давал на свой опус, там написано как это получается. А оптимизация переходов выполняется в дополнительном проходе полученного ассемблерного текста.
|
|
|
|
19.03.2011, 21:58
|
|
Гражданин KAZUS.RU
Регистрация: 02.06.2003
Адрес: Челябинск
Сообщений: 545
Сказал спасибо: 10
Сказали Спасибо 341 раз(а) в 202 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от omercury
|
Bill, с меточками генерировался перемещаемый блок для линкера?
|
Да, у нас была разработана система - компилятор, ассемблер, линкер. Вссемблер выдавал объектный код в формате OMF. Единственно не сумели разобраться с форматом библиотек, поэтому использовали готовый библиотекарь от Borland.
PS: Изначально все это делалось под систему RSX-11M. Там использовали системные программы библиотекаря и линкера - TKB.
|
|
|
|
19.03.2011, 23:00
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: STM8(S/L), первые впечатления
Сообщение от Bill
|
Да, нет, намеренно тут ничего не ставилось, трансляция тут чисто механическая. Я уже ссылку давал на свой опус, там написано как это получается. А оптимизация переходов выполняется в дополнительном проходе полученного ассемблерного текста.
|
Понятно, что не специально. Логика примерно ясна.
По подобному принципу делал конвертер из SolidWorks(твердотельное моделирование) в программу для ЧПУ. Деталь делается по некоторым простым правилам(от болванки отрезается всё лишнее), зато в результате по нажатию кнопки на выходе готовая программа.
Сообщение от Bill
|
Но, тем не менее, некоторый опыт программирования я тогда получил.
|
Сообщение от Bill
|
Да, у нас была разработана система - компилятор, ассемблер, линкер.
|
Скромничаете?
Последний раз редактировалось omercury; 19.03.2011 в 23:09.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:45.
|
|