Rst7 5 17 октября, 2009 Опубликовано 17 октября, 2009 · Жалоба Убогость не в ограничении длины модификатора, а в том, что кроме этих +/- с литералом оно ничего не умеет. Я Вам больше скажу. В общем случае операция pointer+scalar имеет кривую реализацию на большинстве архитектур. Часто имеются костыли для небольших размеров элементов - типа на 680x0 - move.l r0,(a0,d0*4), тут может быть *1, *2, *4, *8 (вот не помню, есть ли *16, давно не брал я в руки шашек), но не произвольный *sizeof(). Так что в любом случае этой операции следует избегать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 17 октября, 2009 Опубликовано 17 октября, 2009 · Жалоба тут может быть *1, *2, *4, *8 (вот не помню, есть ли *16, давно не брал я в руки шашек), но не произвольный *sizeof(). Дык тут уже необходимость в выравнивании данных возникает. Одновременно изчезает весь шарм от таких инструкций. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 17 октября, 2009 Опубликовано 17 октября, 2009 · Жалоба Дык тут уже необходимость в выравнивании данных возникает. Использование невыровненных данных на системах с разрядностью больше 8 должно пререкаться на корню путем отрывания рук гуанокодеру, даже если система позволяет невыровненный доступ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Экспериментатор 0 21 октября, 2009 Опубликовано 21 октября, 2009 · Жалоба Отсутствие программных прерываний - серьёзный прокол. Тоже очевидно недодумали.Учитывая что раздел для новичков осмелюсь задать вопрос. Что такое программные прерывания? Зачем они нужны? И почему прокол что них нет в АВР? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость @Ark 21 октября, 2009 Опубликовано 21 октября, 2009 · Жалоба Что такое программные прерывания? Зачем они нужны? Программные прерывания, в отличие от аппаратных, инициируются не внешними событиями и/или работой аппаратных модулей МК, а специальными командами процессора, либо вызываются при определенных результатах выполнения обычных команд процессора. Например, при переполнении в результате выполнения арифметических вычислениях, попытках деления на ноль, и т.п. Программные прерывания, по сути, являются специфическим вызовами подпрограмм, только при таком вызове используется "механизм" прерываний. В стеке автоматически сохраняется не только адрес возврата, но текущее состояние процессора, а адрес перехода берется не из инструкции команды, а заранее определенного вектора прерывания. Хотя программные прерывания, как правило, выполняются медленее обычных вызовов/возвратов из подпрограмм из-за того, что приходится еще сохранять/восстанавливать состояние процессора, но обладают рядом преимуществ. При наличии в программной среде определенных соглашений, как использовать те или иные программные прерывания, построение прикладных программ заметно упрощается. Программные прерывания используются, например, при обращении к функциям операционной системы, драйверам устройств, функциям резидентных программ (библиотек). При таком подходе, прикладная программа, может не содержать фактических адресов (векторов) обработчиков программных прерываний, ни при компиляции, ни при компоновке, ни при загрузке и выполнении. Это дает заметную бОльшую гибкость при разработке систем, чем прямая компоновка с необходимыми библиотеками функций для их вызова из прикладной программы. А также позволяет избежать дублирования исполняемого кода (библиотек функций, например) в многозадачной системе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться