Size: a a a

Ассемблер

2021 July 01

L

Leon in Ассемблер
Подозреваю что с тех времён ничего прямо принципиальная сильно не изменилось и где-то такая экономия всё ещё присутствует в какихто количествах
источник

D

Den in Ассемблер
представь ситуацию комманда fidiv это 2 байта DA35 вот невыровнен код, DA попала в страницу кэша а 35 не попала как проц поймет что ему прилетело вот и будет еще раз перегружать например
источник

L

Leon in Ассемблер
Поймёт поймёт вот там есть много-много серьезный логики которая контролирует чтобы данные в кэш были когерентными, если надо загрузить два раза Он загрузит 2 раза а потом выберет нужны байты и занесет  в регистр Ну а команда всё это время будет ждать
источник

АШ

Алексей Шведов... in Ассемблер
Ничего подобного. Ждать будут только зависимые команды, а процессор уже пополнит счётчик, и пойдёт вторую выполнит, пока первая выполняется
источник

L

Leon in Ассемблер
Если у команды есть загрузка из памяти прежде чем выполнять она должна её загрузить с помощью соответствующего блока загрузок и сохранение память который потом общается с кэшами всех уровней и с непосредственно контроллером оперативной памяти. Никто ничего не будет выполнять пока не придут готовые данные, разве что выполнять спекулятивно а потом обнаружить что данные не были готовы и сбросить конвейер и начать сначала, но мы сейчас вообще-то не про это
источник

АШ

Алексей Шведов... in Ассемблер
Будут-будут. Это вы в 8086 застряли
источник

АШ

Алексей Шведов... in Ассемблер
источник

АШ

Алексей Шведов... in Ассемблер
Вот тебе. Вычислительные конвейер называется.
источник

АШ

Алексей Шведов... in Ассемблер
Тут он одновременно выполнит несколько инструкций, если они не зависят от друг-друга:
Запись в регистр
Доступ к памяти
Выполнение
Декодирование инструкции
Получение следующей инструкции
источник

AA

Alehay Alehay in Ассемблер
И прочие супер скалярности...
источник

L

Leon in Ассемблер
Я сейчас не обсуждаю спекулятивное выполнение конвейеризацию и выполнение вне очереди. Если процессоры нужно считать байты по невыровненному адресу или через границы кэшлиний - будет произведено 2 считывания из кэша или из памяти потом в специальных буферах  данные объединяются И выбираются только Те байты которые изначально были нужны и дальше уже посылаются на выполнение как данные или как код
источник

L

Leon in Ассемблер
Оххх. Я это всё изучал еще 20 лет назад и отлично знаю. Спасибо
источник

АШ

Алексей Шведов... in Ассемблер
Выравнивание по 4 байта, а не 2. Потом он вернёт 3, если адрес не выравнен.
Данные не обьединяются, а отбрасываются ненужные биты, и потом возвращаются
источник

АШ

Алексей Шведов... in Ассемблер
Да я вижу как знаете)
источник

АШ

Алексей Шведов... in Ассемблер
Подзабыли за 20 лет, наверное)
Или знания остались ещё 20-летние. Обновляйтесь
источник

L

Leon in Ассемблер
Я вам говорю что что независимо от выравнивания процессор будет выполнять всё корректно, только медленнее за счёт дополнительных операций по считыванию данных их склеиванию выбирания нужных конкретном вопросе байт. Исключение если где-то в регистрах настройки установлена из требования выкидывать исключения при каждой не выровнены обращение к памяти тогда будет Exception в такой ситуации.
источник

D

Den in Ассемблер
так в двух словах беру два числа 25, 35 кладу в сопроцессор как int делю на 10 fidiv-ом, чтобы сформировать float-ы 2.5 и 3.5 в st0, st1 перемножаю fmul-ом и получаю в st0 результат 8.75, по float он норм. выгружается 410C что в ieee754 соответствует 8.75 а по bcd какой то косяк
источник

АШ

Алексей Шведов... in Ассемблер
Ну я это и не отрицал, и выше это всё подробно уже расписал. Не пойму тогда смысл вот это разводить.
источник

L

Leon in Ассемблер
Я изначально вообще только написал что они экономили раньше на дорожках и сложности соединений, Что приводит к необходимости двойной загрузки если мы запрашиваем не выровненный доступ по границам блоков например
источник

АШ

Алексей Шведов... in Ассемблер
А, ну это вы сравнили с совсем аппаратной частью. Ему нужно внутреннее устройство, а это, скорее, как примечание было, мол "раньше так делали". Ну ладно
источник