Cтраница 4
В расширенном режиме этот бит является четвертым битом указателя стека, как часть 16-битного инкрементирующего / декрементирующего счетчика. В нерасширенном режиме он служит в качестве флага ошибки стека ( SE), который показывает, что произошла ошибка. Изменение значения флага с 0 на 1 в нерасширенном режиме вызывает исключительную ситуацию третьей по приоритету ошибки. Когда нерасширенный стек полон, SP содержит значение 001111; при этом любая операция занесения в стек вызовет возникновение исключительной ситуации ошибки стека. В SP образуется значение 010000 ( или 010001), если произойдет сдвоенное занесение в стек. [46]
Команда FPREM позволяет получить частичный остаток от деления чисел. Циклическое использование этой команды с запоминанием промежуточных значений частного позволяет получить точное значение частного с любой, наперед заданной, степенью точности. Признаком завершения команды ( получения нулевого частичного остатка) является значение флага С2 ( C2 - Q - команда завершена, С2 1 - команда не завершена), который позволяет управлять переходом на повторение цикла или завершение операции. [47]
Если результат превышает 9, то команда ААА добавляет 1 к содержимому регистра АН ( чтобы учесть избыточную цифру) и полагает флаг CF равным 1; в противном случае она обнуляет флаг CF. Кроме того, команда ААА изменяет состояние флага AF и оставляет значения флагов PF, ZF, SF и OF неопределенными. Но так как в данном случае только флаг CF имеет смысл, то считайте значения остальных флагов уничтоженными. [48]
Если результат превышает 9, то команда AAS вычитает 1 из содержимого регистра АН и полагает флаг CF равным 1, в противном случае она обнуляет флаг CF. Кроме того, команда AAS изменяет состояние флага AF и оставляет значения флагов PF, ZF, SF и OF неопределенными. Но так как в данном случае только флаг CF имеет смысл, то считайте значения остальных флагов уничтоженными. [49]
К группе арифметических команд относится также команда сравнения, которая реализуется с помбшью операции вычитания. В отличие от команды вычитания, при сравнении не происходит изменения операндов; единственным результатом является установка новых значений флагов Z, 5, С. Необходимо помнить, что при сравнении двоичных чисел со знаком и без знака одним и тем же значениям флагов результата могут соответствовать совершенно разные соотношения между числами. В табл. 2.5 представлены все возможные случаи сравнения чисел Х, Х % как со знаком ( Sj, 2), так и без знака. [50]
Особенность команды деления IDIV состоит в том, что частное и остаток всегда имеют одинаковые знаки. Например, при делении числа - 47 на 3 из двух возможных результатов: - 15 с остатком - 2 и - 16 с остатком 1, будет получен первый результат. Дробные значения частного округлены до ближайшего целого. Значения флагов при выполнении команды IDIV также не определены. [51]
Флаг отрицательного переполнения расширенного стека устанавливается, когда происходит отрицательное переполнение стека в расширенном режиме. Отрицательное переполнение расширенного стека определяется, когда требуется операция извлечения из стека, значение SP равно 0 и с помощью бита EN разрешается работа в расширенном режиме. Бит сбрасывается аппаратно или с помощью операции явного занесения значения в OMR. Изменение значения флага от 0 к 1 вызывает исключительную ситуацию третьего уровня приоритета ошибки стека. Флаг сбрасывается во время аппаратного сброса. [52]
Флаг переполнения расширенного стека устанавливается, когда происходит переполнение стека в расширенном режиме. Отрицательное переполнение расширенного стека определяется, когда требуется операция занесения в стек, когда значение SP равно SZ ( регистр размера стека), и с помощью бита EN разрешается работа в расширенном режиме. Бит сбрасывается аппаратного или с помощью операции явного занесения значения в OMR. Изменение значения флага от 0 к 1 вызывает исключительную ситуацию третьего уровня приоритета ошибки стека. Флаг сбрасывается во время аппаратного сброса. [53]
Формат регистра операционного режима OMR. [54] |
Флаг отрицательного переполнения расширенного стека устанавливается, когда происходит отрицательное переполнение стека в расширенном режиме. Отрицательное переполнение расширенного стека определяется, когда требуется операция извлечения из стека, значение SP равно 0 и с помощью бита EN разрешается работа в расширенном режиме. Бит сбрасывается аппаратно или с помощью операции явного занесения значения в OMR. Изменение значения флага от 0 к 1 вызывает исключительную ситуацию третьего уровня приоритета ошибки стека. Флаг сбрасывается во время аппаратного сброса. [55]
Флаг переполнения расширенного стека устанавливается, когда происходит переполнение стека в расширенном режиме. Отрицательное переполнение расширенного стека определяется, когда требуется операция занесения в стек, когда значение SP равно SZ ( регистр размера стека), и с помощью бита EN разрешается работа в расширенном режиме. Битсбрасывается аппаратного или с помощью операции явного занесения значения в OMR. Изменение значения флага от 0 к 1 вызывает исключительную ситуацию третьего уровня приоритета ошибки стека. Флаг сбрасывается во время аппаратного сброса. [56]
Рассмотрим, в каком случае объем выполняемой работы минимален. При первом проходе цикл for должен быть выполнен полностью, и поэтому алгоритму потребуется по меньшей мере N - 1 сравнение. Следует рассмотреть две возможности: при первом проходе была по крайней мере одна перестановка, и перестановок не было. В первом случае перестановка приводит к изменению значения флага swappedElements на true, а значит цикл while будет выполнен повторно, что потребует еще N - 2 сравнений. [57]