Вставка заданного значения (0 или 1) в любой бит байта со сдвигом влево - Assembler

Узнай цену своей работы

Формулировка задачи:

Реализуйте с помощью логических операций вставку заданного значения (0 или 1) в любой бит байта со сдвигом влево и потерей крайнего бита. Как ассемблерная вставка в C++. Мне бы и код на обоих языках. И пожалуйста, поясните что происходит в строчках кода.

Решение задачи: «Вставка заданного значения (0 или 1) в любой бит байта со сдвигом влево»

textual
Листинг программы
        mov     al,     [Val]
        mov     cx,     [BitNo]
        mov     bx,     [BitVal]
 
        and     bx,     1       ;выделение младшего бита
        and     cx,     7h      ;ограничение номера бита одним байтом
 
        shl     bx,     cl      ;получение маски вставляемого бита
 
        mov     ah,     al      ;обнуление правой части байта
        shr     ah,     cl
        shl     ah,     cl
        shl     ah,     1
 
        sub     cl,     8       ;обнуление левой части байта
        neg     cl
        shl     al,     cl
        shr     al,     cl
 
        or      al,     ah      ;объединение левой и правой частей
        or      al,     bl      ;сохранение вставляемого бита
 
        mov     [Val],  al

Объяснение кода листинга программы

  1. Переменная Val содержит значение, в которое необходимо вставить бит.
  2. Переменная BitNo содержит номер бита, который необходимо сдвинуть влево.
  3. Переменная BitVal содержит значение бита, который необходимо вставить.
  4. Выделение младшего бита переменной BitVal с помощью операции and с числом 1.
  5. Ограничение номера бита одним байтом с помощью операции and с числом 7h.
  6. Получение маски вставляемого бита с помощью операции shl, используя значение переменной BitNo.
  7. Обнуление правой части байта переменной Val с помощью операций mov, shr и shl.
  8. Обнуление левой части байта переменной Val с помощью операции sub и neg.
  9. Объединение левой и правой частей байта с помощью операции or, используя значение переменной Val.
  10. Сохранение вставляемого бита с помощью операции or, используя значение переменной Bl.
  11. Запись обновленного значения переменной Val в память с помощью операции mov.

Оцени полезность:

9   голосов , оценка 4.444 из 5
Похожие ответы