Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.191.216.163] |
|
Сообщ.
#1
,
|
|
|
Реализуйте с помощью логических операций вставку заданного значения (0 или 1) в любой бит байта со сдвигом влево и потерей крайнего бита. Как ассемблерная вставка в C++. Помогите пожалуйста
|
Сообщ.
#2
,
|
|
|
int pos=3; // положение бита для вставки unsigned char byte=42; // испытуемый unsigned char copy=0; // то, что получится при сдвиге for( int i=6; i>=pos; i--) // идём со старшего copy |= (byte&(1<<i))<<1, // узнали бит, сдвинули, записали на новое место byte &= ~(1<<i); // почистили=приготовили место для записи if( !нольНадо ) byte |= 1<<pos; // поставили 1 // иначе - уже там нолик, ибо чистили byte |= copy; // допишем голову //Готово! |
Сообщ.
#3
,
|
|
|
Можно без циклов:
mov al,[byte] // если заругается, поменять имя переменной mov ah,al mov cl,[pos] xor edx,edx bts edx,ecx dec edx and al,dl not dl and ah,dl shl ah,1 or al,ah mov ah,[copy] shl ah,cl or al,ah mov [byte],al |
Сообщ.
#4
,
|
|
|
Цитата Jin X @ Можно без циклов: mov al,[byte] // если заругается, поменять имя переменной mov ah,al mov cl,[pos] xor edx,edx bts edx,ecx dec edx and al,dl not dl and ah,dl shl ah,1 or al,ah mov ah,[copy] shl ah,cl or al,ah mov [byte],al А не можете кратко пояснить что в строках происходит? |
Сообщ.
#5
,
|
|
|
Jin XJin X А можете пояснить что в строчках происходит?
|
Сообщ.
#6
,
|
|
|
Bartimeus, а самому поизучать?
https://www.club155.ru/programming Вкратце только поясню: xor edx,edx bts edx,ecx dec edx and al,dl not dl and ah,dl shl ah,1 or al,ah mov ah,[copy] shl ah,cl or al,ah Берём бит copy, двигаем влево до нужной позиции и объединяем с результатом. Всё остальное – по ссылке выше. p.s. Всё сообщение цитировать необязательно... |