На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
  
> Вставка заданного значения (0 или 1) в любой бит байта со сдвигом влево и ...
    Реализуйте с помощью логических операций вставку заданного значения (0 или 1) в любой бит байта со сдвигом влево и потерей крайнего бита. Как ассемблерная вставка в C++. Помогите пожалуйста
      ExpandedWrap disabled
        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; // допишем голову
        //Готово!
      На ASM переведёте, надеюсь! ;)
        Можно без циклов:
        ExpandedWrap disabled
          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
          Цитата Jin X @
          Можно без циклов:
          ExpandedWrap disabled
            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

          А не можете кратко пояснить что в строках происходит?
            Jin XJin X А можете пояснить что в строчках происходит?
              Bartimeus, а самому поизучать?
              https://www.club155.ru/programming

              Вкратце только поясню:
              ExpandedWrap disabled
                xor edx,edx
                bts edx,ecx
                dec edx
                and al,dl
              Устанавливаем бит номер pos и вычитаем единицу, получаем маску битов младше указанного, применяем её к значению.

              ExpandedWrap disabled
                not dl
                and ah,dl
                shl ah,1
                or al,ah
                mov ah,[copy]
                shl ah,cl
                or al,ah
              Инвертируем маску, применяем её к старшим битам, затем сдвигаем на 1 влево, объединяем обе части (в середине появляется "дырка").
              Берём бит copy, двигаем влево до нужной позиции и объединяем с результатом.

              Всё остальное – по ссылке выше.

              p.s. Всё сообщение цитировать необязательно...
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0257 ]   [ 16 queries used ]   [ Generated: 19.04.24, 06:14 GMT ]