Size: a a a

Ассемблер

2021 October 10

A

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

C

Cofeefee in Ассемблер
Их можно неограниченно пихать, не больше размера опкода (вроде 15 байт максимальный размер инструкции)
источник

A

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

C

Cofeefee in Ассемблер
тайна, покрытая мраком. Изначально вопрос был про выравнивание кода, для чего оно применяется, а вопрос применения префикса 66/67 - следствие.

На вопрос - зачем выравнивать КОД - у меня нет ответа
источник

И

Игорь in Ассемблер
источник

И

Игорь in Ассемблер
может это?
источник

A

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

C

Cofeefee in Ассемблер
это про данные, а вот чтобы код выравнивания требовал - впервые вижу. Инструкций SSE в коде нет
источник

И

Игорь in Ассемблер
да чет хз, разница какая код или данные? считывается код и данные то одинаково блоками определенными или не так?
источник

A

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

A

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

C

Cofeefee in Ассемблер
Иногда надо сокращать время исполнения nop, поэтому для них придумали многобайтовые нопы
источник

C

Cofeefee in Ассемблер
/* nop */
 static const char nop_1[] = { 0x90 };
 /* xchg %ax,%ax */
 static const char nop_2[] = { 0x66, 0x90 };
 /* nopl (%[re]ax) */
 static const char nop_3[] = { 0x0f, 0x1f, 0x00 };
 /* nopl 0(%[re]ax) */
 static const char nop_4[] = { 0x0f, 0x1f, 0x40, 0x00 };
 /* nopl 0(%[re]ax,%[re]ax,1) */
 static const char nop_5[] = { 0x0f, 0x1f, 0x44, 0x00, 0x00 };
 /* nopw 0(%[re]ax,%[re]ax,1) */
 static const char nop_6[] = { 0x66, 0x0f, 0x1f, 0x44, 0x00, 0x00 };
 /* nopl 0L(%[re]ax) */
 static const char nop_7[] = { 0x0f, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00 };
 /* nopl 0L(%[re]ax,%[re]ax,1) */
 static const char nop_8[] =
   { 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00};
 /* nopw 0L(%[re]ax,%[re]ax,1) */
 static const char nop_9[] =
   { 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00 };
 /* nopw %cs:0L(%[re]ax,%[re]ax,1) */
 static const char nop_10[] =
   { 0x66, 0x2e, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00 };
источник

II

Ira Irina in Ассемблер
66 и 67 вместе превратят mov ax, [dx] в mov eax, [edx]
источник

И

Игорь in Ассемблер
https://habr.com/ru/company/infopulse/blog/347394/  ну вот про код, тоже интересно
источник

C

Cofeefee in Ассемблер
О, оно! Спасибо! Странно, что приведённый ранее код никак не относится к высоконагруженным ))
источник
2021 October 11

DA

Dmitry Anisimov in Ассемблер
Нет такой инструкции mov ax,[dx] . 16битная адресация не предусматривает. Адресация будет посложнее меняться при использовании префикса 67.
источник

a

asm in Ассемблер
Добро пожаловать Strawberry Boutique. Не ответив на вопрос, будешь удалён из чата
источник

A

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

БЗ

Богдан Зараник... in Ассемблер
Привет всем! Вот так срабатывает sf, а когда пишу напрямую cmp [bx], 91 - не срабатывает. Почему? Спасибо.
источник