Нести флаг, вспомогательный флаг и флаг переполнения в сборке

Я не могу сказать разницу между флагом переноса, вспомогательным флагом и флагом переполнения в сборке. Я в настоящее время учусь в школе и учитель не вдавался в подробности. Пожалуйста, помогите мне понять, мне это понадобится для экзамена. Я буду очень благодарна!! Из того, что я, кажется, знаю сейчас, что флаг переноса используется, когда вы пытаетесь, скажем, 255+9, Когда у вас есть только 8 бит для данных, вспомогательный флаг тот же, но только для 4 последних бит?? и Переполнение используется, когда у вас есть 7 бит для двоичного числа, а 8(самый левый ) используется для знака???

4 ответов


флаг переноса-это флаг, установленный, когда:

a) добавлены два неподписанных номера, и результат больше, чем" емкость " регистра, где он сохраняется. Например, мы хотим добавить два 8-битных числа и сохранить результат в 8-битный регистр. В вашем примере: 255 + 9 = 264, что больше, чем 8-битный регистр может хранить. Таким образом, значение "8" будет сохранено там (264 & 255 = 8), и флаг CF будет установлен.

b) вычитались два беззнаковых числа, и мы вычитали большее из меньшего один. Например, 1-2 даст вам 255 в результате и флаг CF будет установлен.

вспомогательный флаг используется как CF, но при работе с BCD. Таким образом, AF будет установлен, когда у нас есть переполнение или underflow в расчетах BCD. Например: учитывая 8-битный блок ALU, вспомогательный флаг устанавливается, когда есть перенос с 3-го бита на 4-й бит, т. е. перенос с нижнего укуса на более высокий укус. (Wiki link)

флаг переполнения используется как CF, но когда мы работаем над числами со знаком. Ex мы хотим добавить два 8 разрядных чисел: 127 + 2. результат 129, но это слишком много для 8-битного подписанного числа, поэтому будет установлено. Аналогично, когда результат слишком мал, как -128 - 1 = -129, который выходит за рамки 8 разрядное число.

вы можете узнать больше о флагах в Википедии


Нести Флаг

правила включения флага переноса в двоичной / целочисленной математике два:

  1. флаг переноса устанавливается, если добавление двух чисел вызывает перенос из наиболее значимых (левых) битов добавлены. 1111 + 0001 = 0000 (флаг переноса включен)

  2. флаг переноса (заимствования) также устанавливается, если вычитание двух чисел требует заимствования в наиболее значительные (самые левые) биты вычитается. 0000 - 0001 = 1111 (флаг переноса включен) В противном случае флаг переноса выключается (ноль).

    • 0111 + 0001 = 1000 (флаг переноса выключен [ноль])
    • 1000-0001 = 0111 (флаг переноса выключен [ноль])

в арифметике без знака следите за флагом переноса для обнаружения ошибок.

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

переполнение Флаг

правила включения флага переполнения в двоичной / целочисленной математике два:

  1. Если сумма двух чисел со знаком bits off дает число результата с битом знака дальше, флаг "переполнения" включен. 0100 + 0100 = 1000 (флаг переполнения включен)

  2. Если сумма двух чисел со знаком бит на результат количество при выключенном знаке включается флаг "переполнение". 1000 + 1000 = 0000 (переполнение флаг включен)

в противном случае флаг" overflow " выключен

  • 0100 + 0001 = 0101 (флаг переполнения выключен)
  • 0110 + 1001 = 1111 (флаг переполнения выключен)
  • 1000 + 0001 = 1001 (флаг переполнения выключен)
  • 1100 + 1100 = 1000 (флаг переполнения выключен)

обратите внимание, что вам нужно только посмотреть на знаковые биты (самые левые) из трех числа, чтобы решить, если переполнение флаг включен или выключен.

если вы выполняете арифметику дополнения двух (со знаком), флаг переполнения на значит ответ неправильный-вы добавили два положительных числа и получили отрицательно, или вы добавили два отрицательных числа и получили положительное.

если вы делаете арифметику без знака, флаг переполнения ничего не значит и его следует игнорировать.

дополнительные разъяснения, пожалуйста, обратитесь: http://teaching.idallen.com/dat2343/10f/notes/040_overflow.txt


имя: нести флаг

тип:флаг состояния

бит(ы): 0 в регистре EFLAGS

описание: установите, если перенос или заимствование были созданы из большинства бит в предыдущей инструкции.


имя: флаг переполнения

тип:флаг состояния

бит(ы): 11 в EFLAGS Регистрация

описание: установить, когда значение переполнено предыдущей инструкцией, например, когда ADD выполняется на положительном значение и результат-отрицательное значение.


имя: (Adjust or Auxiliary ) флаг

тип:флаг состояния

бит(ы): 4 в регистре EFLAGS

описание: то же самое, что флаг переноса, но считает 4 наименее значимые биты, используемые в двоично-десятичном коде .


Overflow Flag (OF): указывает на переполнение бита высокого порядка (самого левого бита) данных после подписанной арифметической операции.

Flag флаг направления (DF): определяет левое или правое направление для перемещения или сравнения строковых данных. Когда значение DF равно 0, строковая операция принимает направление слева направо, а когда значение равно 1, строковая операция принимает направление справа налево.

 Флаг Прерывания (IF): определяет, будут ли внешние прерывания, такие как ввод с клавиатуры и т. д., должны игнорироваться или обрабатываться. Он отключает внешнее прерывание при значении 0 и включает прерывания при значении 1.

Flag Trap Flag (TF): позволяет настроить работу процессора в одношаговом режиме. Отладочная программа, которую мы использовали, устанавливает флаг trap, поэтому мы можем выполнить одну инструкцию за раз.

Регистрация Флаг (SF): показывает знак результата арифметической операции. Этот флаг устанавливается в соответствии со знаком элемента данных после арифметической операции. Знак обозначается верхним порядком крайнего левого бита. Положительный результат очищает значение SF до 0, а отрицательный результат устанавливает его в 1.

Zero нулевой флаг (ZF): указывает результат арифметической операции или операции сравнения. Ненулевой результат очищает нулевой флаг до 0, а нулевой результат устанавливает его в 1.

 Вспомогательный флаг переноса (ФП) содержит перенос из бита 3 в бит 4 после арифметической операции; используется для специальных арифметических. AF устанавливается, когда 1-байтовая арифметическая операция вызывает перенос из бита 3 в бит 4.

Flag флаг четности (PF): указывает общее количество 1-бит в результате, полученном в результате арифметической операции. Четное число 1-бит очищает флаг четности до 0, а нечетное число 1-бит устанавливает флаг четности в 1.

Flag нести флаг (CF): Содержит перенос 0 или 1 из бита высокого порядка (крайнего слева) после арифметической операции. Он также хранит содержимое последнего бита операции shift или rotates.