Перейти к содержанию
    

Архитектура оптимизированна для языка С

Убогость не в ограничении длины модификатора, а в том, что кроме этих +/- с литералом оно ничего не умеет.

 

Я Вам больше скажу. В общем случае операция pointer+scalar имеет кривую реализацию на большинстве архитектур. Часто имеются костыли для небольших размеров элементов - типа на 680x0 - move.l r0,(a0,d0*4), тут может быть *1, *2, *4, *8 (вот не помню, есть ли *16, давно не брал я в руки шашек), но не произвольный *sizeof().

 

Так что в любом случае этой операции следует избегать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

тут может быть *1, *2, *4, *8 (вот не помню, есть ли *16, давно не брал я в руки шашек), но не произвольный *sizeof().

Дык тут уже необходимость в выравнивании данных возникает. Одновременно изчезает весь шарм от таких инструкций.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дык тут уже необходимость в выравнивании данных возникает.

 

Использование невыровненных данных на системах с разрядностью больше 8 должно пререкаться на корню путем отрывания рук гуанокодеру, даже если система позволяет невыровненный доступ.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Отсутствие программных прерываний - серьёзный прокол. Тоже очевидно недодумали.
Учитывая что раздел для новичков осмелюсь задать вопрос. Что такое программные прерывания? Зачем они нужны? И почему прокол что них нет в АВР?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость @Ark
Что такое программные прерывания? Зачем они нужны?

Программные прерывания, в отличие от аппаратных, инициируются не внешними событиями и/или работой аппаратных модулей МК, а специальными командами процессора, либо вызываются при определенных результатах выполнения обычных команд процессора. Например, при переполнении в результате выполнения арифметических вычислениях, попытках деления на ноль, и т.п.

Программные прерывания, по сути, являются специфическим вызовами подпрограмм, только при таком вызове используется "механизм" прерываний. В стеке автоматически сохраняется не только адрес возврата, но текущее состояние процессора, а адрес перехода берется не из инструкции команды, а заранее определенного вектора прерывания.

Хотя программные прерывания, как правило, выполняются медленее обычных вызовов/возвратов из подпрограмм из-за того, что приходится еще сохранять/восстанавливать состояние процессора, но обладают рядом преимуществ.

При наличии в программной среде определенных соглашений, как использовать те или иные программные прерывания, построение прикладных программ заметно упрощается. Программные прерывания используются, например, при обращении к функциям операционной системы, драйверам устройств, функциям резидентных программ (библиотек). При таком подходе, прикладная программа, может не содержать фактических адресов (векторов) обработчиков программных прерываний, ни при компиляции, ни при компоновке, ни при загрузке и выполнении. Это дает заметную бОльшую гибкость при разработке систем, чем прямая компоновка с необходимыми библиотеками функций для их вызова из прикладной программы. А также позволяет избежать дублирования исполняемого кода (библиотек функций, например) в многозадачной системе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...