Мікаель
Всем привет. Какой стратегии (с точки зрения энергоэффективности) лучше придерживаться при обработке кванта задачи? 1) Отработать горячо (на высокой частоте) но быстро. 2) Отработать медленно (на низкой частоте) но дольше.
Мікаель
Можно, конечно, перестраивать частоту по ситуации, однако таких ситуаций много у меня насобиралось; приходится писать много дополнительного кода, перестраивающий код других блоков, зависящих от базовой частоты (менять прескейлеры, например).
електр🟢нік ✙🟠рчбеч ඞ
на низкой конечно
Мікаель
на низкой конечно
А почему? Например, задача требует 1млн тактов. На частоте 1мгц мы отработаем 1сек на мощности 1вт. А на частоте 2 мгц мы отработаем 0.5сек на мощности 2вт. Энергорасход одинаков.
електр🟢нік ✙🟠рчбеч ඞ
електр🟢нік ✙🟠рчбеч ඞ
частота возросла вдвое, а потребление в 10
Мікаель
електр🟢нік ✙🟠рчбеч ඞ
електр🟢нік ✙🟠рчбеч ඞ
все равно рекомендую частоту пониже
Мікаель
все равно рекомендую частоту пониже
Я всё-же склоняюсь к более высокой частоте из-за других немаловажных факторов. Например, может возникнуть задача требующая высокого быстродействия (вывод на дисплей, например). При увеличении частоты — также придётся и другие функциональные блоки перестраивать для работы в прежнем темпе на фоне увеличившейся частоты. При этом хорошо, если эти функциональные блоки позволяют перестроить себя безаварийно. Иначе бы их тоже придётся сначала корректно останавливать, перестраивать, запускать.. Всё это дополнительный код и усложнение.
Anonymous
Зависит .init .fini или .init_array .fini_array или .ini .fini .ctors .dtors от типа линковки (статичный или динамичный бинарник)
?
То есть только динамичный поддерживает эти секции или оба ?
в e_entry указывается .init code или .text _start?
0neAn0ther
Anonymous
Кто то пользуется gef-gdb?
Anonymous
Как отключить этот плагин во время работы gdb?
Eugene
.code
invoke GetDayOfYear
mov DayNumber,al
NextDay:
inc byte [DayNumber]
jnz .simple_day
call Day256
.simple_day:
invoke SetProgrammingState, TRUE
hlt ; wait for end of day
invoke SetProgrammingState, FALSE
push eax
invoke Sleep, 8*3600*1000
jmp NextDay
Day256:
invoke KillBear
invoke DrinkBeer
invoke ScreamOutLoud, ProgrammersDayMsg
ret
; Hardware interrupt handler
NewYearInterruptHandler:
mov byte [DayNumber],0
iret
StackOverflowExceptionHandler:
invoke Die
in al,70h
or al,80h
out 70h,al ; disable NMI
cli
jmp $
.data
ProgrammersDayMsg:
db 'Программисты всех стран, соединяйтесь!',0
DayNumber:
db ?
Дмитрий
Ошибок много в программе... В byte 365 точно не поместится... Нужен word... И вместо add byte [DayNumber], 1 проще использовать inc [DayNumber]
Eugene
Но вообще, можно было inc + jnz сделать, конечно :)
Дмитрий
Все равно не пойму, насчет прерывания тогда... 365 < 512, то два раза за год не сработает. В смысле байт 512 может хранить?
Дмитрий
И зачем убивать медведя? Пусть живет... 😁
Дмитрий
Ну на день программиста сработает...
Дмитрий
А следующий раз сработает хз когда...
Eugene
На следующий год в день программиста.
1 января 2020: DayNumber = 0
2 января 2020: DayNumber = 1
11 сентября 2020: DayNumber = 255
12 сентября 2020: DayNumber = 0 (медведь, пиво, вопли).
13 сентября 2020: DayNumber = 1
31 декабря 2020: DayNumber = 110
1 января 2021: сработало NewYearInterrupt, DayNumber = 0
2 января 2021: DayNumber = 1
12 сентября 2021: DayNumber = 255
13 сентября 2021: DayNumber = 0 (медведь, пиво, вопли).
14 сентября 2021: DayNumber = 1
31 декабря 2021: DayNumber = 109
1 января 2022: сработало NewYearInterrupt, DayNumber = 0
...
Дмитрий
Ну и так как программа может быть запущена не 1 января, неплохо добавить в начало
invoke GetDay
mov DayNumber, eax
Eugene
Eugene
Поправил :)
Eugene
И заменил на inc/jnz
Дмитрий
А как сюда попадает?
NewYearInterruptHandler:
mov byte [DayNumber],0
iret
Eugene
Хардварное прерывание.
Дмитрий
И push eax, перед слипом зачем?
Eugene
Чтобы сохранить результат работы во Вселенной.
Собственно, из-за этого стек и переполняется.
Дмитрий
А... Ясно тогда
Eugene
Всё, я спать...
Anonymous
Доброго времени суток!
в elf если удалить shdr ,то elf nopie будет загружаться также без неё,но если файл является pie static ,и у него нету shdr ,он тоже будет загружаться в память по любому адресу?
Я прочитал все возможные статьи понял ,что если удалить shdr ,то elf pie static не сможет загрузиться по любому адресу ,так как загрузчик не будет знать где располагается .symtab .strtab .rel.[name] .got .plt
Сегменты это контейнеры которые содержат в себе секции или это vma которые содержат секции,где секции это единица данных в терминологии elf
Но если мы не знаем где в сегментах располагается sections ,мы не сможем загрузить
Я прав?
Как загрузчик загружает pie по любому адресу (если он загружает) не имея таблицу секций?
Anonymous
./checksec.sh --file main
RELRO STACK CANARY NX PIE RPATH RUNPATH FILE
No RELRO No canary found NX enabled PIE enabled No RPATH No RUNPATH main
00000000000010a0 <free@plt>:
10a0: f3 0f 1e fa endbr64
10a4: f2 ff 25 d5 22 00 00 bnd jmp QWORD PTR [rip+0x22d5] # 3380 <free@GLIBC_2.2.5>
10ab: 0f 1f 44 00 00 nop DWORD PTR [rax+rax*1+0x0]
это программа скомпилированна как pie dynamic.Вопрос почему здесь нету вот так:
000003a0 <ml_util_func@plt>:
3a0: ff a3 14 00 00 00 jmp DWORD PTR [ebx+0x14]
3a6: 68 10 00 00 00 push 0x10
3ab: e9 c0 ff ff ff jmp 370 <_init+0x30>
почему этот испольняемый файл main,у него нету ленивого связывания хотя RELRO отключен .got.plt содержит все адреса уже заранее то есть динамический компоновщик их не разрешает
Anonymous
В 64 битном режиме сколько весит cs?
Anonymous
Какого размера класть cs в стек при возврате из ring0 ret to ring3?
Aiwan \ (•◡•) / _bot
cs - 16 бит
Anonymous
cs - 16 бит
Но есть такая инструкция mov eax,cs
Aiwan \ (•◡•) / _bot
Anonymous
Eugene
Она очищает старшее слово, насколько я помню, но надо смотреть Intel SDM.
Eugene
Anonymous
Eugene
Anonymous
Это как?
загрузка модуля ядра и перезапись таблицы прерываний
Eugene
А, я подумал, что это в винде.
Вообще, когда в 64-х битах делаешь retf, из стека извлекается 2 qword'а (2*8 байт).
Когда делаешь iret, то соответственно 3 qword'а (3*8 байт).
В 32-х битах, соответственно, dword'ы (по 4 байта).
Eugene
А вот по поводу mov eax,cs или mov rax,cx.
Eugene
Но где-то я видел, что то ли на старых процессорах, то ли ещё где-то старшая часть может не обнуляться.
Где-то выше, кажется, обсуждалось это.
Eugene
Вот: https://t.me/proasm/46470
До Pentium 4.
Ты даже участвовал в этом обсуждении :)
@pr4gasm
Anonymous
(:
JeisonWi
Не совсем ассемблер, но близко - существует такая вещь как Sphinx C-- - нечто среднее между ассемблером и Си. Он используется для некоторых программ в KolibriOS. Поскольку проект заброшен, я его немного почистил, сделал компиляцию под основные платформы и настроил CI
JeisonWi
https://github.com/XVilka/cminusminus
JeisonWi
Пулл-реквесты - welcome
Eugene
JeisonWi
FailsBot
ReactOS Created vs Resolved Report
Leon
Eugene
Что такое Fast Short REP MOV (FSRM)?
В чём его отличие от Enhanced REP MOVSB/STOSB (ERMSB)?
Ned
*начинался октябрь, и с ним пришёл практикум по ассемблеру....*
Anonymous
Ребят,вопрос,что такое float absolute ? fabs? Это когда берется float или double по модулю ?
Anonymous
Anonymous
Anonymous
Eugene
Про arm не скажу. Я думаю, это несложно найти в доках.
Anonymous
Anonymous
Anonymous
Anonymous
Ребят,что такое min() ,max() ?
Arm64 (:
Anonymous
Функции на c
Ага понял,странно ,зачем их придумали если есть fcmp fccmp
JeisonWi
https://twitter.com/filipe_mulonde/status/1314475293214748673?s=19
Aiwan \ (•◡•) / _bot
Aiwan \ (•◡•) / _bot
еще можно добавить shl rax,64 и тому подобное