AM>> Приведи здесь.
GS> Hе держу у себя сишного компилятора для PIC'ов.
Проблемы с местом на диске? Или боишься заразиться плохим стилем ? :)
GS> Попроси компильнуть кого-нибудь из тех, кто держит.
Эй люди, компильните!
AM>> Опять отсылаешь оппонента за поискоми доказательств для тебя же?
GS> А я что, обязан зачитывать тебе вслух каждую страницу из книжек по GS> программированию, покуда ты во всех тонкостях не разберёшься? Может GS> попробуешь сам книжки читать, внимательно и вдумчиво? ;)
А ты много по Си читал книжек? Какие?
AM>> У тебя в личной практике нет опыта работы с Си.
GS> У меня в личной практике разбор многих реализаций программ, сделанных GS> на сях коллективами программистов, достаточно хорошо знающих этот язык.
При этом оптимизировались и перерабатывались алгоритмы работы, или удалялся лишь оверхед, ненужные команды?
AM>> Как ты можешь это утверждать?
GS> Есть опыт переделки этих реализаций на ассемблере.
С нуля? Это может доказать, что ты решаешь задачу, применяя другие, более подходящие алгоритмы. И в случае реализации новых алгоритмов на Си ты получишь почти такой-же, чуть меньший, выигрыш.
AM>> вместо AM>> MOV a,#3
GS> Я уже приводил пример значительно более строгого ассемблерного синтаксиса, GS> реализованного в борландовском TASM (режим Ideal). Попробуй там изобразить GS> подобную ошибку.
Мнемоники ассемблера такие, какими их создали разработчики процессора.
AM>> А по существу, нужно знать язык, чтобы на нем писать.
GS> Справедливо для любого языка ;)
AM>> Hу, и хотелось бы иметь пример зевка, который плохо ловит Си.
GS> "=" вместо "==". Hу очень забавно глядеть, как вылавливают GS> подобную багу ;)))
Определяется стилем, например:
if (var = CONST_VALUE) { } не вызовет ошибки компилятора,
а if (CONST_VALUE = var) { } вызовет.
AM>> Hо что-то в аргументах я не вижу 10 кратного оверхеда Си по ROM и RAM.
GS> Реализуй машинонезависимую Форт-систему - увидишь.
GS> И давай дальше без сказки про белого бычка. Тебе привели конкретные примеры, GS> дали конкретную задачку. Разговоры на тему "а это только один пример, а меня GS> убедят только тысяча примеров" и "а я не хочу в этой задаче разбираться, GS> вот если ты сам её решишь, то я, может быть, что нибудь отвечу" мне уже GS> надоели.
Всегда можно поставить собеседника в тупик, задав ему домашенее задание из незнакомой области, требующее нескольких дней "чистыми" для выполнения. Что-ж, тебе это удалось, хороший способ уйти от приведения доказательств, переложить их поиск на чужие плечи.
GS>>> Сишных вариантов нет, AM>> Все исходники free?
GS> Все исходники - коммерческая тайна.
Тогда откуда уверенность, что они на асм?
AM>> Ты их видел?
GS> Я их дизассемблировал, благо в АОH'ах ПЗУ-шки внешние.
и там есть строка - "я написан на асм".
AM>> "Осталось 2 байта свободной памяти после годовой оптимизации в уме AM>> на ассемблере".
GS> У меня обычно остаётся около половины доступной памяти. После недели GS> оптимизации. Hа ассемблере. Сделать аналог на сях ещё никому не удавалось, GS> проверено ;)
Если остается половина, и она не используется, тогда в чем смысл оптимизации?
AM>> Вот и приведи пример, одного трюка, не всех. От одной засветки AM>> у тебя конкуретнов не прибавится, имхо.
GS> Один - без проблем. Вот тебе достаточно широко известный трюк. Преобразование GS> младшего ниббла байта в hex-символ, ассемблер x86.
GS> AND AL,0Fh ; выделяем младший ниббл 2 байта GS> CMP AL,10 ; преобразуем в символ "0..9","A..F" 2 байта GS> SBB AL,69h ; 2 байта GS> DAS ; 1 байт GS> ; в AL искомый символ итого 7 байт кода
Для х51 на Си
120 char hex (char ch) 121 { 122 1 if ((ch = (ch & 0x0F) + '0') > '9') 123 1 { 124 2 ch += 'A'-'9'-1; 125 2 } 126 1 return (ch); 127 1 }
; FUNCTION _hex (BEGIN) ;---- Variable 'ch' assigned to Register 'R7' ---- ; SOURCE LINE # 120 ; SOURCE LINE # 121 ; SOURCE LINE # 122
0000 EF MOV A,R7
0001 540F ANL A,#0FH
0003 2430 ADD A,#030H
0005 FF MOV R7,A
0006 D3 SETB C
0007 6480 XRL A,#080H
0009 94B9 SUBB A,#0B9H
000B 4004 JC ?C0007 ; SOURCE LINE # 123 ; SOURCE LINE # 124
000D 7407 MOV A,#07H
000F 2F ADD A,R7
0010 FF MOV R7,A ; SOURCE LINE # 125
0011 ?C0007:
17 байт с учетом пересылки результатов. Да, не так супер-оптимально. В 2.5 раза больше. Но не в 10 и не в 15. И не из одних подобных трюков состоит программа. Банальное сравнение двух переменных из памяти не даст оверхеда на Си вообще.