Win32asm обучение



Урок 5 - Коды операции - часть 4


/p>

* = Например: если dx = 2030h, а ax = 0040h, dx: ax = 20300040h. Dx:ax - значение dword, где dx представляет старшее word, а ax - младшее. Edx:eax - значение quadword (64 бита), где старшее dword в edx и младшее в eax.

Источник операции деления (div) может быть:

  • 8-бит регистр (al, ah, cl,...)
  • 16-бит регистр (ax, dx, ...)
  • 32-бит регистр (eax, edx, ecx...)
  • 8-бит значение из памяти (byte ptr [xxxx])
  • 16-бит значение из памяти (word ptr [xxxx])
  • a 32-бит значение памяти (dword ptr [xxxx])
  • Источник не может быть непосредственным значением, потому что тогда процессор не сможет определить размер исходного операнда.

    ОПЕРАЦИИ С БИТАМИ

    Эти команды работают с приемником и источником, исключение команда 'NOT'. Каждый бит в приемнике сравнивается с тем же самым битом в источнике, и в зависимости от команды, 0 или 1 помещается в бит приемника:

    команда AND OR XOR NOT
    Бит источника 0 0 1 1 0 0 1 1 0 0 1 1 0 1
    Бит приемника 0 1 0 1 0 1 0 1 0 1 0 1 X X
    Бит результата 0 0 0 1 0 1 1 1 0 1 1 0 1 0

    AND устанавливает бит результата в 1, если оба бита, бит источника и бит приемника установлены в 1.

    OR устанавливает бит результата в 1, если один из битов, бит источника или бит приемника установлен в 1.

    XOR устанавливает бит результата в 1, если бит источника отличается от бита приемника.

    NOT инвертирует бит источника.

    Пример:

    mov ax, 3406

    mov dx, 13EAh

    xor ax, dx

    ax = 3406 (десятичное), в двоичном - 0000110101001110.

    dx = 13EA (шестнадцатиричное), в двоичном - 0001001111101010.

    Выполнение операции XOR на этими битами:

    Источник 0001001111101010 (dx)
    Приемник 0000110101001110 (ax)
    Результат 0001111010100101 (новое значение в ax)

    Новое значение в ax, после выполнения команды - 0001111010100101 (7845 - в десятичном, 1EA5 - в шестнадцатиричном).

    Другой пример:

    mov ecx, FFFF0000h

    not ecx

    FFFF0000 в двоичном это - 11111111111111110000000000000000

    Если вы выполните инверсию каждого бита, то получите:



    Содержание  Назад  Вперед