К оглавлению

ДИРЕКТИВА and
 
Осуществляет операции побитового умножения (операция И) .
 
СИНТАКСИС
 
 
AND reg,reg
AND con,reg
AND con,mem
AND mem,reg
AND reg,mem
 
АРГУМЕНТЫ
 
 
 
reg — регистры общего назначения
con — константное значение, адрес памяти и т.п.
mem — адрес памяти
 
ОПИСАНИЕ
 
Данная инструкция позволяет производить операции логического умножения пятью способами, указанными выше.
Операция логического умножения представляет собой побитовую операцию по И (конъюнкции), осуществляемой с двумя операндами A и B в качестве которых могут выступать хранящиеся значение в регистре, доступное по адресу памяти или непосредственно константным значением.
AND операнд А, операнд B
Побитовая операция по И осуществляется согласно с таблицей истиности, представленной в таблице 1, операнд B логически умножается на операнд А. Поэтому результат выполнения данной операции будет представлен в операнде B в соотвествие с синтаксисом в GAS.
В языке программирования GNU C данная oперация выполняется через оператор & между двумя переменными ( в т.ч. с членами структуры и элементами массива) или константой с одной переменной.
Таблица 1
A B &
0 0 0
0 1 0
1 0 0
1 1 1
Как видно из таблицы истинности (табл. 1), побитовая операция И даст логическую единицу только тогда, когда оба операнда A и B имеют равное ей значение.
Из следующего примера, инструкция andl обнуляет младщие 4-ре бита адреса в регистре ESP для выравнивания стека перед выделением кадра к 16-ти разрядной границе.
 
 
    :
movl     $-16, %esp # наложение битовой маски 0xfffffff0
    :
 
 
Другой интересный пример – использование инструкции andl при взятии остатка от деления оператором % в GNU C.
 
 
    :
movb   $18, -1(%ebp)  # Перемещение конст. значения в регистр EAX
movzbl -1(%ebp), %eax # c обнулением 24 старших разрядов
andl   $1, %eax       # взятие остатка от деления оператором % на 2
    :
 
 

К оглавлению



Сайт создан в системе uCoz