Конспект лекций Системное программирование (семестр 2) Возле названия каждой лекции написано число пар, в течение которых она будет читаться (+ ср обозначает

Вид материалаКонспект
Схема команды
Состояние флагов после выполнения команды
См. также
Схема команды
См. также
Подобный материал:
1   ...   33   34   35   36   37   38   39   40   ...   57

SAR


(Shift Arithmetic operand Right)

Сдвиг арифметический операнда вправо

 

Схема команды: 

sar операнд,количество_сдвигов 

Назначение: арифметический сдвиг операнда вправо.

Синтаксис

Алгоритм работы:
  • сдвиг всех битов операнда вправо на один разряд, при этом выдвигаемый справа бит становится значением флага переноса cf;
  • обратите внимание: одновременно слева в операнд вдвигается не нулевой бит, а значение старшего бита операнда, то есть по мере сдвига вправо освобождающиеся места заполняются значением знакового разряда. По этой причине этот тип сдвига и называется арифметическим;
  • указанные выше два действия повторяются количество раз, равное значению второго операнда.

Состояние флагов после выполнения команды:

11

00

OF

CF

?r



Применение:

Команда sar используется для арифметического сдвига разрядов операнда вправо. Так же, как и для других сдвигов, значение второго операнда (счетчика сдвига) ограничено диапазоном 0...31. Это объясняется тем, что микропроцессор использует только пять младших разрядов операнда количество_разрядов. В отличие от других команд сдвига флаг of всегда сбрасывается в ноль в операциях сдвига на один разряд.

Команду sar можно использовать для деления целочисленных операндов со знаком на степени 2.

        mov     ax,88

;(ax) разделить на 2 во второй степени, то есть на 4

        sar     ax,2

        

См. также: урок 8, 9 и команды rcr, rcl, ror, rol, sal, shl, shr

SBB


(SuBtract with Borrow)

Вычитание с заемом

 

Схема команды: 

sbb операнд_1,операнд_2 

Назначение: целочисленное вычитание с учетом результата предыдущего вычитания командами sbb и sub (по состоянию флага переноса cf).

Синтаксис

Алгоритм работы:
  • выполнить сложение операнд_2=операнд_2+(cf);
  • выполнить вычитание операнд_1=операнд_1-операнд_2;

Состояние флагов после выполнения команды:

11

07

06

04

02

00

OF

SF

ZF

AF

PF

CF

r

r

r

r



r

Применение:

Команда sbb используется для выполнения вычитания старших частей значений многобайтных операндов с учетом возможного предыдущего заема при вычитании младших частей значений этих операндов.

;выполнить вычитание 64-битных значений: vich_1-vich_2

vich_1  dd      2 dup (0)

vich_2  dd      2 dup (0)

rez     dd      2 dup (0)

...

;ввести значения в поля vich_1 и vich_2:

;младший байт по младшему адресу

...

        mov     eax,vich_1

        sub     eax,vich_2      ;вычесть младшие половинки чисел

        mov     rez,eax ;младшая часть результата

        mov     eax,vich_1+4

        sbb     eax,vich_2+4    ;вычесть старшие половинки чисел

        mov     rez+4,eax       ;старшая часть результата

        

См. также: урок 8, Приложение 7 и команды sub