
- •175. Навіщо потрібні криптографічні протоколи.
- •176. Гібридні криптосистеми.
- •177. Цифровий підпис.
- •181. Екранування, аналіз захищеності.
- •182. Антивірус Касперського.
- •Антивірус Касперського 2010 Базовий захист
- •183. Антивірус BitDefender.
- •184. Антивірус Dr.Web.
- •Характерные особенности
- •185. Антивірус nod32.
- •186. Поняття та переваги мови асемблера. Запис лексем. Запис рядків.
- •Ссылки вперед
- •Большой размерности
- •31 (Таким образом, этот флаг можно использовать для операций над числами
- •Команда сравнения
- •Безусловные переходы
- •Команда безусловного перехода
- •Команды условного перехода и флаги
- •228 Глава 10. Команды передачи управления
- •Xor: Если один из сравниваемых битов равен 0, а другой равен 1, то результат равен 1; если сравниваемые биты одинаковы (оба - 0 или оба - 1) то результат - 0.
Большой размерности
Если вы заметили, команды сложения и вычитания работают с операндами фик-
сированной размерности: 8, 16, 32 бита. А что делать, если нужно сложить числа
большей размерности, например 48 битов, используя 16-разрядные операнды?
К примеру, сложим два 48-разрядных числа (рис. 8.5).
Рис. 8.5. Сложение операндов большой размерности
Рисунок по шагам иллюстрирует технологию сложения длинных чисел. Вид-
но, что процесс сложения многобайтных чисел происходит так же, как и при сло-
жении двух чисел ≪в столбик≫, — с осуществлением при необходимости переноса
1 в старший разряд. Если нам удастся запрограммировать этот процесс, то мы зна-
чительно расширим диапазон двоичных чисел, над которыми можно выполнять
операции сложения и вычитания.
Принцип вычитания чисел с диапазоном представления, превышающим стан-
дартные разрядные сетки операндов, тот же, что и при сложении, то есть использу-
Арифметические операции над целыми двоичными числами 177
ется флаг переноса CF. Нужно только представлять себе процесс вычитания в стол-
бик и правильно комбинировать команды процессора с командой SB В. Чтобы на-
писать достаточно интересную программу, моделирующую этот процесс, необхо-
димо привлечь те конструкции языка ассемблера, которые мы еще не обсуждали.
Среди прилагаемых к книге файлов в каталоге данной главы находятся исходные
тексты подпрограмм, реализующих четыре основных арифметических действия
для двоичных операндов произвольной размерности1. Не поленитесь вниматель-
но изучить их, так как они являются хорошей иллюстрацией к материалу, изучае-
мому в этой и последующих главах. К этим примерам можно будет обратиться в -
полной мере после того, как будут изучены механизмы процедур и макрокоманд
(главы 14 и 15). Кроме того, в [8] обсуждаются вопросы программирования цело-
численных арифметических операций, но в расширенном контексте.
В завершение обсуждения команд сложения и вычитания отметим, что кроме
флагов CF и OF в регистре EFLAGS есть еще несколько флагов, которые можно ис-
пользовать с двоичными арифметическими командами. Речь идет о следующих
флагах:
^ ZF — флаг нуля, который устанавливается в 1, если результат операции равен О,
и в 0, если результат не равен 0;
Ш SF — флаг знака, значение которого после арифметических операций (и не толь-
ко) совпадает со значением старшего бита результата, то есть с битом 7,15 или
31 (Таким образом, этот флаг можно использовать для операций над числами
со знаком).
Команда сравнения
Команда сравнения СМР (СоМРаге) имеет интересный принцип работы. Он абсо-
лютно такой же, как у команды вычитания SUB (см. главу 8). Команда СМР так же,
как и команда SUB, выполняет вычитание операндов и по результатам сравнения
устанавливает флаги. Единственное, чего она не делает, — не записывает резуль-
тат вычитания на место первого операнда.
Синтаксис команды СМР:
стр операнд_1,операнд_2
Флаги, устанавливаемые командой СМР, можно анализировать специальными
командами условного перехода. Прежде чем мы их рассмотрим, уделим немного
внимания мнемонике этих команд (табл. 10.1). Понимание обозначений (элемен-
тов в названии команды JCC, обозначенных нами символами ≪ее≫) при формирова-
нии названия команд условного перехода облегчит их запоминание и дальнейшее
практическое использование.
Таблица 10.1. Значение аббревиатур в названии команды jcc
В табл. 10.2 представлен перечень команд условного перехода для команды СМР.
Не удивляйтесь тому обстоятельству, что одинаковым значениям флагов соответ-
ствуют несколько разных мнемокодов команд условного перехода (они отделены
друг от друга косой чертой). Разница в названии обусловлена желанием разработ-
8 Зак. 256
226 Глава 10. Команды передачи управления
чиков процессора упростить использование команд условного перехода с разны-
ми группами команд. Поэтому разные названия отражают скорее разную функцио-
нальную направленность. Тем не менее, то, что эти команды реагируют на одни
и те же флаги, делает их абсолютно эквивалентными и равноправными в програм-
ме. Именно поэтому они сгруппированы не по названиям, а по значениям флагов
(условиям), на которые они реагируют.
Таблица 10.2. Перечень команд условного перехода для команды стр
В качестве примера применения команды CMP рассмотрим фрагмент програм-
мы, который обнуляет поле pole_m длиной п байт:
.data
n equ 50
pole_m db
.code
n dup (?)
xor bx.bx ;bx=0
ml: mov mem[bx],0
inc bx
cmp bx,n
jne ml
exit:
Так как команды условного перехода не изменяют флагов, то после одной ко-
манды СМР вполне могут следовать несколько команд условного перехода. Это
может быть сделано для того, например, чтобы исследовать каждую из альтерна-
тивных ветвей: больше, меньше или равно:
.data
mas db
.code
dup (?)
eql:
cmp mas[si].5
je eql
jl low
jg grt
;сравнить очередной элемент массива с
; переход, если элемент mas равен 5
•.переход, если элемент mas меньше 5
;переход, если элемент mas больше 5
Условные переходы 227
low:
grt: