Size: a a a

Ассемблер

2021 August 31

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
define word

ты чего?
источник

d

disba1ancer in Ассемблер
это я в курсе, что за команда так закодирована?
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
у нее нет мнемоники, поэтому приходится кодировать вот так, байтами
источник

d

disba1ancer in Ассемблер
такого не бывает, скорее всего ассемблер просто старый
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
....или это недокументированная инструкция
источник

d

disba1ancer in Ассемблер
такое сейчас редко встречается, чаще оно сразу UD выдаёт
источник

E

Entusiast in Ассемблер
Или это rdtsc
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
прогони через отладчик и скажи тогда как она называется
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
возможно, этому скрину года 3-4
источник

E

Entusiast in Ассемблер
dw 0x310F
fasm source.asm
r2 source.bin
pd 1

0x0F31 rdtsc
источник

d

disba1ancer in Ассемблер
да она и есть и мануал так говорит
источник

E

Entusiast in Ассемблер
Вот странно одинаковые значения, и больно похожие. У меня при первом запуске rdtsc тоже вечно больше 3000 выдаёт
А на втором уже сбивается на нормальные. В зависимости от инструкций, но меньше 3000
Искал-искал, не знаю, почему так (ну есть подозрения, что связано с кэшем)
источник

d

disba1ancer in Ассемблер
а cpuid тут не нужен?
источник

E

Entusiast in Ассемблер
Да с cpuid тоже самое
источник

E

Entusiast in Ассемблер
Вот было бы лучше, если бы на старом скрине в одной программе было прописано сразу 5+ запусков, и вызов MessageBox
Ну или в консоль выводить
А то подозрительные значения какие-то
источник

d

disba1ancer in Ассемблер
для пущей скорости ещё можно div на хитрый mul заменить
источник

d

disba1ancer in Ассемблер
и эту фигню можно на интринсиках сделать:
unsigned long long testfreq() {
   auto ts = __rdtsc();
   Sleep(1000);
   return (__rdtsc() - ts) / 1000000;
}
источник

E

Entusiast in Ассемблер
Что он сгенерирует?
источник

d

disba1ancer in Ассемблер
хз не смотрел
источник

d

disba1ancer in Ассемблер
00000010 <_testfreq>:

unsigned long long testfreq() {
 10:  57                     push   %edi
 11:  56                     push   %esi
 12:  83 ec 14               sub    $0x14,%esp
/* rdtsc */
extern __inline unsigned long long
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
__rdtsc (void)
{
 return __builtin_ia32_rdtsc ();
 15:  0f 31                  rdtsc  
 17:  89 c6                  mov    %eax,%esi
 19:  89 d7                  mov    %edx,%edi
   auto ts = __rdtsc();
   Sleep(1000);
 1b:  c7 04 24 e8 03 00 00   movl   $0x3e8,(%esp)
 22:  ff 15 00 00 00 00      call   *0x0
 28:  83 ec 04               sub    $0x4,%esp
 2b:  0f 31                  rdtsc  
   return (__rdtsc() - ts) / 1000000;
 2d:  29 f0                  sub    %esi,%eax
 2f:  c7 44 24 08 40 42 0f   movl   $0xf4240,0x8(%esp)
 36:  00
 37:  19 fa                  sbb    %edi,%edx
 39:  c7 44 24 0c 00 00 00   movl   $0x0,0xc(%esp)
 40:  00
 41:  89 04 24               mov    %eax,(%esp)
 44:  89 54 24 04            mov    %edx,0x4(%esp)
 48:  e8 00 00 00 00         call   4d <_testfreq+0x3d>
}
 4d:  83 c4 14               add    $0x14,%esp
 50:  5e                     pop    %esi
 51:  5f                     pop    %edi
 52:  c3                     ret
источник