Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,792
Записей в блоге: 4
1

Есть ли накладные расходы при чтении 1го байта?

25.07.2021, 01:21. Показов 1017. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Смотрел я как работают Ассемблеры. Если я правильно понял регистр оперирует 4 байтами(грубо говоря), может уже посильнее есть процессоры. Нашёл сайт где человек показывал устройство регистра, внутри него есть дополнительные функции например регистр может проводить математические операции, логические операции и часть регистра может быть отдана под это дело но весь регистр может быть общего назначения.
И мне вот интересно если ячейка памяти в частности весь регистр 4 байта будут ли накладные расходы чтобы читать из него 1 байт или нет ведь многие регистры поделены и могут выполнять сразу несколько функций?
Я так понимаю что в любом случае если регистр читает 1 байт то он весь занят или нет, может ли он ещё что-то делать одновременно с чтением этого байта?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.07.2021, 01:21
Ответы с готовыми решениями:

Накладные расходы при создании лямбды
Имеет смысл создавать лямбда функцию таким образом: static const auto lam = (){ /* много строк */...

Влечет ли std :: atomic накладные расходы на одноядерные процессоры?
Я пишу библиотеку планирования задач для «голого металла», и я хотел бы обрабатывать несколько...

Вывести значение переменной или константы больше 1го байта
Привет. я хотел загрузить значение такой длинной переменной в массив и затем прочитать его по...

Как посчитать сколько цифр из 1го числа есть во 2м?
Даны два числа. Подсчитать, сколько цифр из первого числа есть во втором. При наличии...

12
Native x86
Эксперт Hardware
5594 / 3338 / 951
Регистрация: 13.02.2013
Сообщений: 10,587
25.07.2021, 01:51 2
Цитата Сообщение от Nexi99 Посмотреть сообщение
Если я правильно понял регистр оперирует 4 байтами(грубо говоря), может уже посильнее есть процессоры.
Любой мало-мальски актуальный процессор имеет регистры общего назначения шириной 8 байт (64 бита). Регистры SIMD-расширений могут иметь ширину до 256 бит.

Цитата Сообщение от Nexi99 Посмотреть сообщение
И мне вот интересно если ячейка памяти в частности весь регистр 4 байта будут ли накладные расходы чтобы читать из него 1 байт
Как таковых накладных расходов нет. Но тут смотря как считать. Просто любое действие с 64-битным регистром RAX выполняется столько же времени, сколько аналогичное действие с его 8-битным подмножеством AL или AH. Т.е. при взаимодействии с 8-битным AL/AH мы как бы делаем в 8 раз меньше полезной работы за то же время, чем могли бы выполнить, если бы работали с RAX. Другой вопрос, что далеко не всегда нужно 64 бита ширины для выполнения нужного нам действия над данными.

Цитата Сообщение от Nexi99 Посмотреть сообщение
Я так понимаю что в любом случае если регистр читает 1 байт то он весь занят или нет, может ли он ещё что-то делать одновременно с чтением этого байта?
Это крайне дискуссионный вопрос. Современные процессоры очень сложны, в них используется масса не очевидных оптимизаций. Запросто может оказаться, что две стоящих рядом элементарных операции над AH и AL будут выполнены одновременно за один такт, не смотря на то, что AH и AL -- части одного регистра AX/EAX/RAX. А может и не будут. Сильно зависит от самих инструкций и от общего контекста.
2
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,792
Записей в блоге: 4
25.07.2021, 02:13  [ТС] 3
Цитата Сообщение от quwy Посмотреть сообщение
Просто любое действие с 64-битным регистром RAX
А регистр RAX может разбиваться на 2 регистра по 32 бита или это отдельные регистры, мне всегда было интересно как они пакуются?

Добавлено через 1 минуту
Цитата Сообщение от quwy Посмотреть сообщение
что AH и AL -- части одного регистра AX/EAX/RAX.
видимо оно так и есть по вопросу выше что я спрашивал. Наверное вопрос в том происходит ли это со всем процессорами.
0
Native x86
Эксперт Hardware
5594 / 3338 / 951
Регистрация: 13.02.2013
Сообщений: 10,587
25.07.2021, 02:32 4
Цитата Сообщение от Nexi99 Посмотреть сообщение
А регистр RAX может разбиваться на 2 регистра по 32 бита или это отдельные регистры, мне всегда было интересно как они пакуются?
Нет. Именно RAX (и все остальные 64-битные) состоит из EAX и безымянной верхней половины, к которой отдельно добраться можно только сдвигом вправо. Впрочем, EAX точно так же состоит из нижней половины AX и безымянной верхней. Разницы почти нет.

Цитата Сообщение от Nexi99 Посмотреть сообщение
Наверное вопрос в том происходит ли это со всем процессорами.
Точного ответа нет. Современные процессоры гарантируют только то, что в результате выполнения любой последовательности инструкций, регистры будут содержать определенные значения. А вот время выполнения этого набора не детерменирована.
1
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,792
Записей в блоге: 4
25.07.2021, 06:01  [ТС] 5
Цитата Сообщение от quwy Посмотреть сообщение
Нет.
Значит некоторые регистры например 64 битные расположены отдельно он 32 битных. Я думал они могут просто дробиться мне кажется это было бы более эффективно. Например если есть 2 запроса в процессор на 32 бита то можно собрать 2 регистра и запустить 2 процесса, а так получается не очень. Ну всё же знать как оно устроено довольно трудоёмко, читать нужно материалы какие-нить интересные.
Если читается 1ин байт то наверное все 32 бита коту под хвост, пока регистр не освободится новая задача которая на него претендует не запустится, вне зависимости от того сколько байт она требует 1 2 или 4, мне кажется так.
0
Модератор
2125 / 994 / 170
Регистрация: 23.07.2018
Сообщений: 3,344
Записей в блоге: 3
25.07.2021, 09:35 6
Цитата Сообщение от Nexi99 Посмотреть сообщение
Смотрел я как работают Ассемблеры.
Процессоры ?

Цитата Сообщение от Nexi99 Посмотреть сообщение
Наверное вопрос в том происходит ли это со всем процессорами.
Возможны разные аппаратно-микропрограммные реализации одной и той же архитектуры. В конце концов можно на С++ или на python написать чисто программный симулятор.

Цитата Сообщение от Nexi99 Посмотреть сообщение
если есть 2 запроса в процессор на 32 бита то можно собрать 2 регистра и запустить 2 процесса, а так получается не очень
В высокопроизводительных машинах физических устройств хранения, которые можно использовать в качестве GPR, внутри процессора обычно больше, чем количество программно доступных GPR, определённых архитектурой ЭВМ, особенно если эта архитектура родом из 1960-1980-х, и регистров там не больше 16.
Это позволяет, если повезёт, параллельно выполнить несколько ветвей вычислений, конфликтующих по данным. Вычисления выполняются не совсем так, как написано в программе, но конечный результат тот же.
1
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,792
Записей в блоге: 4
15.03.2022, 00:27  [ТС] 7
Цитата Сообщение от quwy Посмотреть сообщение
Нет. Именно RAX (и все остальные 64-битные) состоит из EAX и безымянной верхней половины, к которой отдельно добраться можно только сдвигом вправо. Впрочем, EAX точно так же состоит из нижней половины AX и безымянной верхней. Разницы почти нет.
Решил поинтересоваться ещё раз этой темой. По ссылке https://ru.wikipedia.org/wiki/... 1%80%D0%B0 есть интересное описание. Мне интересно если происходит чтение регистра AH то чтение AX уже невозможно? Если происходит чтение AX то чтение EAX невозможно? Если происходит чтение EAX то чтение RAX невозможно? Если происходит чтение AH то чтение AL тоже невозможно?
Имеется в виду если читается малый регистр то уже чтение остальных регистров из этого большого блока невозможно?
А пустые поля слева что означают там какие регистры?
Миниатюры
Есть ли накладные расходы при чтении 1го байта?  
0
1562 / 1488 / 248
Регистрация: 19.02.2010
Сообщений: 4,045
15.03.2022, 01:52 8
Цитата Сообщение от Nexi99 Посмотреть сообщение
Мне интересно если происходит чтение регистра AH то чтение AX уже невозможно? Если происходит чтение AX то чтение EAX невозможно? Если происходит чтение EAX то чтение RAX невозможно? Если происходит чтение AH то чтение AL тоже невозможно?
Имеется в виду если читается малый регистр то уже чтение остальных регистров из этого большого блока невозможно?
Всё возможно. На чтение регистра-источника (при командах пересылки / сравнения / арифметических) никакого лока нет.
Т.е. подобный набор команд сейчас (на современных процессорах с большим числом портов в ядре) может быть выполнен одновременно и параллельно:
Assembler
1
2
3
4
mov bl,ah
movsx rdx,al
сmovge cx,ax
lea rdi,[rax*4]
Цитата Сообщение от Nexi99 Посмотреть сообщение
А пустые поля слева что означают там какие регистры?
Там всё те же регистры максимальной (для процессора и его текущего режима работы) разрядности. Просто к этим частям "больших" регистров никак нельзя адресоваться мнемонически. Т.е. если надо, например, залезть в пятый байт регистра rax - то надо юзать битовые маски и/или сдвиги.
Тебе же уже про это говорили в посте #4 - про безымянные части регистров. Регистры есть - но нет символьных мнемоник (для ассемблера) и двоичных кодов (у процессорных команд) для адресации к некоторым частям этих регистров.
1
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
15.03.2022, 14:47 9
Nexi99,
  1. Минимально адресуемая ячейка памяти 1-ин байт!
  2. В каждом ядре процессора есть конвееры, которые позволяют не связанные между собой команды выполнять одновременно.
  3. Чтобы не задавать "философских" вопросов - изучите структуру процессора, ядра.
1
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,792
Записей в блоге: 4
15.03.2022, 19:36  [ТС] 10
Цитата Сообщение от Constantin Cat Посмотреть сообщение
В каждом ядре процессора есть конвееры, которые позволяют не связанные между собой команды выполнять одновременно.
если из общего модуля (например 64-ого) читается 1ин байт, т.е. читаются данные из самых маленьких регистров, то значит можно параллельно читать остальные такие маленькие однобайтовые регистры, т.е. параллелизм?
0
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
15.03.2022, 20:18 11
Если меняется AL, то можно выполнить команду с изменением/анализом АН,
НО,
если меняется AL, то нельзя выполнить команду с изменением/анализом АХ.(и т.д. вплоть до RAX).
Цитата Сообщение от Constantin Cat Посмотреть сообщение
Чтобы не задавать "философских" вопросов - изучите структуру процессора, ядра.
Пока Вы не изучите структуру процессора-ядра, Вы будете заниматся демагогией, ломая свою "клаву", задавая "философские" вопросы, т.е. ниочем:-"Привет, у меня 64 рубля, какие у меня тапочки?"

Думайте пока!
0
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,792
Записей в блоге: 4
15.03.2022, 23:36  [ТС] 12
Цитата Сообщение от Constantin Cat Посмотреть сообщение
если меняется AL, то нельзя выполнить команду с изменением/анализом АХ.(и т.д. вплоть до RAX).
ну я об этом и написал ранее что если читаются нижестоящие регистры, то получается что вышестоящий уже не прочитать, что в принципе логично, но прочитать регистры такого же типа можно. Например если читается 1-байтовый то можно параллельно прочитать соседний такой же, там конечно есть определённые нюансы и ограничения, но работает это примерно так.
Я так смотрю что многие регистры у Интел и AMD то же совпадают, ну а в дальнейшем процессоры модифицируются и могут сильно отличаться: как по маркам имеется в виду сами регистры так и по версиям, или по версиям не сильно отличаются? Читал что в новые версии добавляются новые регистры, по 1му из законов Мура, который гласит, что количество транзисторов в процессорах удваивается каждые 24 месяца. Есть обратный закон по моему от Амдала точно не помню, который гласит рано или поздно процессоры себя изживут и их мощность нельзя будет увеличить и придётся искать новые варианты по разработкам процессоров.
Частично проблему решают параллелизмом, т.к. параллелизм не зависит от последовательных вычислений. Да это конечно трудоёмкая тема.
0
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
16.03.2022, 16:38 13
Цитата Сообщение от Nexi99 Посмотреть сообщение
Я так смотрю что многие регистры у Интел и AMD то же совпадают,
Не смотрите, а учите: AMD клон Intel, до х586-го. Вернее изготовлялся по лицензии Intel, как продукт дочернего производства. Потом AMD, решил стать самостоятельным и после этого начались разногласия к подходу к технологиям.
Но это Вы должны были сами вычитать.

Пардон - Вы читать умеете? Вы упорно не хотите читать о том, что Вам советуют и продолжаете задавать "философские" вопросы.

Вы так и не ответили на мой вопрос:
Цитата Сообщение от Constantin Cat Посмотреть сообщение
"Привет, у меня 64 рубля, какие у меня тапочки?"
0
16.03.2022, 16:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.03.2022, 16:38
Помогаю со студенческими работами здесь

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

Крашится сеть предприятия, при отключении 1го ПК в сети
Добрый день! Народ помогите разобраться в определенной проблеме. Есть сеть административного...

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

Формирование отчета "Доходы и расходы предпринимателя при общей с
Доброго времени суток. Такая проблема: Надо сформировать отчет Доходы и расходы предпринимателя при...

Старший бит старшего байта поменять местами с младшим битом младшего байта
Ребят помогите прогу доработать. Задача такая: В одномерном массиве чисел целого типа (16 бит)...

При закрытии месяца все расходы по з/п кидает на одно подразделение (д
Поставили новый релиз 505 в предприятии 7.7. Не, знаю, может, конечно, не его косяк, тем не менее:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru