Лекция 8. Использование команд логического умножения AND и TEST

Использование команд логического умножения AND и TEST

Результат поразрядного логического умножения дает значение истина только в одном случае: если соответствующие разряды приемника и маски тоже установлены в 1. По этому операция эта операция используется для проверки установленных разрядов в 1.

Команда TEST используется для логического сравнения операндов с последующим условием перехода.

Пример:

Пусть в результате каких-то вычислений сформировалась целочисленная переменная х, требуется проверить содержимое 1, 2, 10, 15 битов. Проверить биты можно все сразу или по разряду. Проверку всех сразу выполним в программе на СРР побитовую проверку на ассемблере.

Бит1 0002

Бит2 0004

Бит10 0400

Бит15 8000

Результат 8406

#include <iostream.h>

int k, x=0xFA01;

void main()

{

cout<<"\n==Incoming value==\n"<<"x="<<hex<<x<<"(hex);"<<dec<<x<<"(dec)\n";

k=x&8406;

cout<<"\n Logic Multiplication Result \n"<<"k="<<hex<<k<<"(hex);"<<dec<<k<<"(dec)\n";

}

OUT:

x=FFFFFA01(hex); -1535(dec);

Logic Multiplication Result

FFFF8000(hex); -32768(dec);

FA01->1111 1010 0000 0001

8406->1000 0100 0000 0110

1000 0000 0000 0000 -> 8000 hex

Пусть начальное значение

х=FFFF CFC7 (hex) -> -12345(dec)

Результат FFFF8406(hex); -31738(hex)

Число -12345 в двоичном виде имеет единицы в битах 1,2,10,15

Код на ассеблере

Public ex AND

ex AND proc far

;test bit 1

mov ax,x

AND ax,Ox0002

mov k,ax

;test bit 2

mov ax,x

AND ax,Ox0004

mov k,ax

;test bit 10

ret

ex AND endp

Использование команд логического сложения OR

Результат поразрядного логического сложения дает 0 только в случае если соответствующие разряды приемника или маски = 0

Использование команды логического сложения по модулю XOR

Эта команда дает значение 0 если соответствующие приемника и маски ОДИНАКОВЫЕ. Истина (1) получается если соответствующие разряды приемника и маски разные.

Команда логического отрицания NOT

Используется для инверсии.

k=~x; поразрядное НЕ

k=!x; НЕ

КОМАНДЫ СДВИГА

Это другая разновидность побитовых команд. Они перемещают биты в поле операнда "приемник" либо влево либо вправо.

Имя_команды приемник, источник

Сдвиг:

1. Линейный

a. Арифметический

b. Логический

2. Цикличный

Допустимые сочетания операндов для команд сдвигов

Приемник Источник(счетчик) Пояснение
R8   Сдвиг на 1 разряд
R16   Сдвиг на 1 разряд
Mem8   Сдвиг на 1 разряд
Mem16   Сдвиг на 1 разряд
R8 CL Сдвиг указан в CL
R16 CL Сдвиг указан в CL
Mem8 CL Сдвиг указан в CL
Mem16 CL Сдвиг указан в CL
R8 Im8 Сдвиг на 1 разряд
R16 Im8 Сдвиг на 1 разряд
Mem8 Im8 Сдвиг на 1 разряд
Mem16 Im8 Сдвиг на 1 разряд

.................

Линейные команды сдвига добавляют ноль в младший разряд при сдвиге влево либо в старший разряд при сдвиге вправо. При сдвиге вправо старший разряд различается для знаковых или без знаковых чисел.

Удаляемые из операнда разряды последовательно перемещаются в регистр флагов CF

Эти команды позволяют очень быстро выполнять деление операндов сдвиг вправо и умножение - сдвиг влево на степени числа 2

SAL - Shift Arithmetical operand Left

SAR - Shift Arithmetical operand Right

Применяются для знаковых целочисленых данных

Логика работы команды SAL

CF Знаковый бит Инф. Разряд Мл.разряд  
  <---- <------------- --------------  

Логика работы команды SAR

Таблица

Пример

mov al,58

sal al,1;сдвиг влево на 1 разряд

sal al,3

Таблица

Выводы:

· Изначально в регистре al хранилось число 58

· Сдвиг al=116

· Следующий сдвиг НЕКОРЕКТЕН АХАХАХА т.к. результат не помещается в байт

· При использовании сдвига следует четко представлять диапазон допустимых значений в поле операнда

· На знаковый бит у команды sal нет никакой реакции

КОМАНДЫ ЛОГИЧЕСКОГО СДВИГА SHL,SHR

Предназначен для работы с без знаковыми целыми числами. Абсолютно одинаковы с командами SAL и SAR

КОМАНДЫ ЦИКЛИЧЕСКОГО СДВИГА

В отличии от арифметического и логического сдвига эти команды сохраняют значение сдвигаемых бит. Команды делятся на 2 группы:

· Команды простого циклического сдвига

o ROL

o ROR

· Команды циклического сдвига через флаг переноса CF

o RCL

o RCR

Логика работы команды ROL

Таблица

Логика работы команды RCR

Таблица

Команды передачи управления

Команды безусловной передачи управления

Адрес следующей выполняемой команды находится в регистре IP (Instruction Pointer) команды передачи управления позволяют нарушить естественную последовательность команд посредством изменения содержимого регистра IP.

В ассемблере есть 3 группы базовых команд передачи управления

· Команды безусловного перехода на определенный адрес в памяти

· Команды перехода в зависимости от проверки результатов условия

· Команды организации циклических вычислений

Команды передачи управления не изменяют значения флагов

КОМАНДЫ БЕЗУСЛОВНОГО ПЕРЕХОДА

· JMP. Аналог высокоуровнего goto метка. JMP метка. Метка помечает команду на которую нужно передать управление. Метка может иметь 2 атрибута

o NEAR(deafult). <IP>=<IP>+смещение к команде. Смещение не более 2х байт. Команда на которую указывает метка может распологаться в сторону больших адресов. JMP FORWARD/JMP BACK. Можно с экономить 1 байт если задать короткий переход (1 байтовое смещение) JMP SHORT метка.

o FAR. Безусловный переход осуществляется в другой сегмент. В этом меняется не только содержимое регистра IP, но и изменяется содержимое регистра CS. <CS>=<CS>+Code

· CALL.

o Идейно команда call аналогична команде JMP, но команда call вызывает процедуру и возвращает к точке прыжка. Адрес начальной точки сохраняется в стеке. CALL имя_процедуры. Если у процедуры есть параметны то они передаются в стек до вызова процедуры. Разные языки по разному работают с параметрами процедуры. Для учета этого команду CALL следует использовать в расширеном синтаксисе.

CALL имя_процедуры, язык, параметр1...параметр N

§ NEAR.

PUSH IP

<IP>=<IP>+смещение

§ FAR.

PUSH IP

PUSH CS

<IP>=<IP>+смещение

<CS>=<CS>+Code

· RET. Команда возврата в точку вызова из процедуры. Эта команда команда обратная команде CALL она обеспечивает возврат управления вызывающей команде и если нужно очистку стека на величину 16-ти разрядной константы. RET [Im16]


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: