Size: a a a

Ассемблер

2020 December 21

A

Aleksandr in Ассемблер
Тогда и данные не потеряются
источник

LW

Loren White in Ассемблер
Aleksandr
Ну или вращениями
вращения ?
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Dima Richev
И всё же - а как тогда получить из начала? 0x12
Блин, чего тут непонятного?
Вот есть число 0x12345678
Разбивает на байтики: 12 34 56 67 (hex, от старшего к младшему)
AL и AH — это младший и старший байт AX, который является младшим словом EAX
  12   34   56   78
+-------------------+
|       E A X       |
+---------+---------+
         |   A X   |
         +----+----+
         | AH | AL |
         +----+----+
 12   34   56   78

Что у нас в AX ? Правильно, 0x5678
Что в AL ? 0x78
Что в AH ? 0x56

Как получить в AL 0x12 ?
Сдвинуть вправо. На сколько бит? На 8*3 (на 2 байта)
shr eax,24, получаем AL = 0x12, всё остальное будет обнулено.
источник

A

Aleksandr in Ассемблер
Loren White
вращения ?
ROL, ROR, RCR, RCL
источник

DR

Dima Richev in Ассемблер
Оо, спасибо)
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Loren White
вращения ?
Вращаем ror eax,24:

Получаем:
 34   56   78   12
+-------------------+
|       E A X       |
+---------+---------+
         |   A X   |
         +----+----+
         | AH | AL |
         +----+----+
 34   56   78   12
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
rol eax,8 будет то же самое.
источник

LW

Loren White in Ассемблер
а, понял, не знал о такой инструкции
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Если памяти (var) будет число 0x12345678, то чтобы получить 0x12 (т.е. 3-й байт), надо написать mov al,byte [var+3].
В памяти байты в обратном порядке записаны: сначала младшие, потом старшие.
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Eugene Krasnikov (ᴊɪɴ x)
Блин, чего тут непонятного?
Вот есть число 0x12345678
Разбивает на байтики: 12 34 56 67 (hex, от старшего к младшему)
AL и AH — это младший и старший байт AX, который является младшим словом EAX
  12   34   56   78
+-------------------+
|       E A X       |
+---------+---------+
         |   A X   |
         +----+----+
         | AH | AL |
         +----+----+
 12   34   56   78

Что у нас в AX ? Правильно, 0x5678
Что в AL ? 0x78
Что в AH ? 0x56

Как получить в AL 0x12 ?
Сдвинуть вправо. На сколько бит? На 8*3 (на 2 байта)
shr eax,24, получаем AL = 0x12, всё остальное будет обнулено.
Если сделаем sar eax,24, то получим тоже EAX=0x12 (AL=0x12).
Но если бы в eax было число 0x87654321, то получили бы EAX=0xFFFFFF21 (AL=0x21).
источник

A

Aleksandr in Ассемблер
Кем вы таки работаете, Евгений?
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Eugene Krasnikov (ᴊɪɴ x)
Если памяти (var) будет число 0x12345678, то чтобы получить 0x12 (т.е. 3-й байт), надо написать mov al,byte [var+3].
В памяти байты в обратном порядке записаны: сначала младшие, потом старшие.
byte мы тут пишем, если переменная объявлена как dword (var dd 0x12345678), чтобы не было несоответствия типов.
Это важно для MASM, TASM, fasm.
А для NASM пофиг, там проверки размерности типов нет.
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Aleksandr
Кем вы таки работаете, Евгений?
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
@Aiwan, зачем ты стикеры отключил? :))
Картинки ж больше размером :)
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Недавно был организатором мероприятий :)
Хотел начать фестивали делать, но тут вдруг возник нюанс...
источник

A

Aleksandr in Ассемблер
Чтобы любители стикеров не увлекались
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Aleksandr
Чтобы любители стикеров не увлекались
Я не любитель, я профессионал стикеров 😜
источник

A

Aleksandr in Ассемблер
Eugene Krasnikov (ᴊɪɴ x)
Недавно был организатором мероприятий :)
Хотел начать фестивали делать, но тут вдруг возник нюанс...
Жаль, я уж подумал человек из смежной области
источник

EK

Eugene Krasnikov (ᴊɪ... in Ассемблер
Aleksandr
Жаль, я уж подумал человек из смежной области
А что у тебя за область?
источник

A

Aleksandr in Ассемблер
Микроконтроллеры, тестирование оборудования и автоматизация производства
источник