Assembler для начинающих


         

Проверки кода условия - часть 4


    флаги установила команда CMP, вычитавшая два операнда.
 
      Знак S = 0, переполнение O = 0.
 
      Условие S=0 означает, что результат вычитания положителен.
    Условие O=0 означает, что переполнения не было, т.е. результат,
    представленный в дополнительном коде, правильный. Вычитание двух
    чисел, дающее положительный результат, показывает, что первое число
    больше второго, и поэтому имеет место соотношение "больше". Однако
    вычитание двух равных чисел также дает положительный результат, так
    что условие S=0, O=0 означает "больше или равно".
 
      S=1, O=0
 
      В этом случае O=0 означает, что результат верен, а S=1 говорит
    о том, что он отрицателен. Чтобы получить отрицательный результат,
    большее число должно вычитаться из меньшего, и соотношение означает
    "меньше".
 
      S = 0, O = 1
 
      Здесь O=1 показывает, что результат неверен, т.е. вышел за
    пределы возможностей разрядной сетки. Это значит, что сложение двух
    положительных чисел дало отрицательный результат или наоборот. В
    данном случае это сравнение показывает, что знак результата
    неверен; поэтому результат этого сравнения идентичен случаю, когда
    S=1, O=0, что означает "меньше".
 
      S = 1, O = 1
 
      Снова O=1 говорит о том, что знак результата неверен. Поэтому
    вычитание должно было привести к очень большому положительному
    числу, и соотношение будет "больше или равно".
 
      В некоторых случаях также учитывается флаг нуля. Например,
    команда JLE выполняется, если условие есть "меньше" (знак и
    переполнение разные) или "равно" (флаг нуля равен 1). Эти три флага
    позволяют микропроцессору 8088 проверить все возможные комбинации
    чисел со знаком.
 
      Последняя часть таблицы (Фиг.4.29в) показывает условия,
    проверяемые для арифметики без знака. Как и в случае арифметики со
    знаком, существуют четыре возможные соотношения между операндами,



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