Инвертирование определенных битов в числе - Assembler

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

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

подскажите как проинвертировать биты 0,5,10,14,15 если дано число X=CD5B

Решение задачи: «Инвертирование определенных битов в числе»

textual
Листинг программы
; masm windows gui #
.686
.model flat
.code
start:;вариант 1-ый-----------------------
    mov  eax,x
    xor eax,1100010000100001y
;вариант 2-ой------------------------------------
    mov eax,x
    btc eax,15
    btc eax,14
    btc eax,10
    btc eax,5
    btc eax,0
;вариант 3-ий------------------------------------
    mov eax,x
    rcl ax,1;15
    cmc
    rcl ax,1;14
    cmc
    rcl ax,4;10
    cmc
    rcl ax,5;5
    cmc 
    rcl ax,5;0
    cmc
    rcl ax,1
;вариант 4-ый--------------------------------------
    mov eax,x
    or eax,1100010000100001y
    mov ebx,x
    and ebx,1100010000100001y
    sub eax,ebx
    retn
.data
x dd 0CD5Bh
end start

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

  1. Первый вариант кода инвертирует биты числа, используя операцию XOR с инвертированным значением бита.
  2. Второй вариант кода инвертирует биты числа, используя последовательность операций BTC (Bit Test and Complement).
  3. Третий вариант кода инвертирует биты числа, используя последовательность операций RCL (Rotate and Shift Left) и CMC (Complement Carry Flag).
  4. Четвертый вариант кода инвертирует биты числа, используя операции OR и AND, а затем вычитает результат из исходного числа.
  5. Переменная x содержит число, которое нужно инвертировать.
  6. Значение переменной x равно 0CD5Bh (в шестнадцатеричной системе счисления).

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

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