s54820
Aiwan \ (•◡•) / _bot
если пишешь в сасме, то не используй макорсы, удали строку c include 'io.inc'.
так будет понятней что по чем
Aiwan \ (•◡•) / _bot
скрин в студию
Aiwan \ (•◡•) / _bot
ты про сасм говорил. или я уже что т опутаю
Aiwan \ (•◡•) / _bot
сасм это редактор
Aiwan \ (•◡•) / _bot
дай скрин первых строк
Aiwan \ (•◡•) / _bot
уже чуть ясней
Aiwan \ (•◡•) / _bot
а зачем эта пляска с rbp? все равно не использцешь этот регистр
Aiwan \ (•◡•) / _bot
попробуй другие отладчики и сравни результаты
Aiwan \ (•◡•) / _bot
терпенья тебе
The Bird of Hermes
Вообще обычно rbp используется как база для стековых переменных и вообще предназначен для работы со стеком как с кучей
The Bird of Hermes
Локальные переменные, они же организуются так:
push rbp
mov rbp, rsp
И потом аргументы будут [rbp-24], [rbp-32],...
А для локальных переменных надо уменьшить rsp на нужное кол-во байт и потом использовать положительное смещение относительно rbp
The Bird of Hermes
Чуть не забыл про адрес возврата
The Bird of Hermes
Ну тут у тебя не используются языковые соглашения, нет локальных переменных, соответственно и изменения rbp ни на что влиять не должны
The Bird of Hermes
Каким образом?
bilka00
Я бы советовал почитать про механизм "стэкфреймов"
bilka00
Странно, у меня отладчик от такого никогда не падал
bilka00
А непредвиденные проблемы - вполне себе логичны. Если игратся с динамическими алоками на стэк.
Aiwan \ (•◡•) / _bot
выполняет не отладчик, а программа. отладчик только останавливает выполнение после каждой инструкции, если ты об этом его просишь. если ошибка в проге (ошибка в логике выполнения механизмов), то отладчик должен это показать явно или косвенно. анализ всего этого висит на тебе. имхо
bilka00
Aiwan \ (•◡•) / _bot
мож нужно поставить версии инструментов как у автора? (по году книги определить версию отладчика, если автор явно не говорит ее)
s54820
s54820
Ты лучше скажи, как ты это собираешь и линкуешь? Тебе там случайно про -g не рассказывали?
s54820
Да, всё ок.
s54820
Но у тебя на скриншоте зелёном явно пишет, что main has no line number information. Т.е., оно почему-то отладочную информацию не сожрало, и поэтому проблемы с s. И rbp тут никакой роли не играет. У меня работает, кстати.
s54820
А у меня — если собрать без g.
disba1ancer
что не так то?
Leon
Поправьте если я не прав но мне кажется в 16-байтовое выравнивание будет тогда когда в конце регистра три нуля а не один
s54820
Leon
Три нуля это кратно 4к.
Чета я туплю. Как это так? Ведь rsp содержит адрес верхушки стека и как и все адреса - он в байтах. Или я чтото не догоняю?
The Bird of Hermes
Leon
The Bird of Hermes
Leon
Kaydzyu
Привет. Направили сюда. Хз куда еще писать.
Kaydzyu
https://kwork.ru/projects/2049962
disba1ancer
@Ioann_V а movsd или movsq быстрее чем копирование через sse?
Ioann_
Ioann_
Есть ссе, а есть спец инструкция.
disba1ancer
Может ты про repb?
rep movsd или rep movsq, про rep movsb я речь не веду, и не уверен, что он будет быстрее или медленнее первых двух
Eugene
Салют!
Интересная штука.
Загрузились в DOS, выключили программно Turbo Boost (через MSR, в итоге cpuid и rdmsr показал, что он выключился). Запустили тест скорости до и после. Результат одинаковый на ряде копов (2, 3, 6 поколение). На 12-м разница в 2 раза.
Почему такое может быть?
Может, влияние каких-то других технологий? Или в DOS'е так странно работает или ещё что?
Eugene
Там разбег большой по частоте (турбо и не турбо) - это да. Но не в 2 раза. Хотя и там, где разница чуть больше 10%, всё равно это должно быть заметно ж.
Может, какие-то доп новые технологии влияют. Надо почитать подробнее про ТВ и про новые (и старые) технологии управления частотами и пр.
Может просто запускается выполнение на "энергоэффективном" ядре?
А, оно наоборот более производительнее становится.
Eugene
Aiwan \ (•◡•) / _bot
попробуй 99% поставить. так проц в буст не будет уходить, будет работать на базовых частотах
Aiwan \ (•◡•) / _bot
в твоих тестах это скорей всего стояло (надо перепроходить)
Eugene
Aiwan \ (•◡•) / _bot
Eugene
Попробовал на AMD (другие регистры). На глаз разницы не видно, но я нашёл описание в сколько шагов.
Кто-нибудь знает, как определить текущую частоту ядра? Пока не нашёл, надо ещё рыться...
Aiwan \ (•◡•) / _bot
Eugene
TSC (rdtsc) вообще не отражает частоту ядра.
В современных процессорах он шагает с постоянной скоростью вне зависимости от частоты ядра (даже во время сна).
См. invariant tsc. Его скорость вычисляется через CPUID leaf 15h.
Ask
disba1ancer
Leon
как это независимо от частоты? такты процессора уже не зависят частоты его чтоль? мож я чегото не знаю🤪
Изначально это был просто счетчик тактов но потом оказалось что он мешается, в меньшей степени, при переменной частоте и, в большей степени, при многоядерных конфигурациях, когда каждое ядро на своей частоте. В итоге начиная с не помню каких моделей гдето в CRx есть бит который превращает rdtsc в привилегированную инструкцию, соответсвенно исключение при вызове, и ОС уже обрабатывает и эмулирует выполнение так чтобы нигде никаких проблем не было.
Ask
ничоси... спасибо за инфу)
Eugene
Грядёт появление архитектуры x86-s, которая, судя по всему, заменит x86 (вопрос времени).
Вот что пишут люди в Свиттере:
https://twitter.com/lemire/status/1659766296358133760
Ну и прикладываю сам документ о том + отрывок из него.
Что думаете об этом?
Eugene
Eugene
Leon
Вопрос так ли много они упрощают чтобы прозводительтность выросла хотя бы на 3% и так ли много это упростит в плане логики и транзисторного бюджета. Там Небось всё таскается из поколение в поколение практически без изменений уже больше 10 лет, особенно 16б части.
Leon
А ещё будет прикол если AMD сможет остаться с поддержкой всего этого И тогда кто-то будет покупать AMD это всё сильно нужно
usernameak
Aiwan \ (•◡•) / _bot
Aiwan \ (•◡•) / _bot
но для этого надо все перепроектировать
usernameak
по сути, 16 бит выпиливают полностью, а 32 бита только в кернелмоде?
usernameak
мало кому это нужно
единственная проблема которая приходит в голову - системы будут UEFI-онли
usernameak
Leon
Да кстати сейчас после старта компьютера процессор стартует шестнадцатибитном Real mode. Видимо и это изменит
usernameak