Эмуляция А флага.

Тема в разделе "WASM.ASSEMBLER", создана пользователем dermatolog, 21 июл 2005.

  1. dermatolog

    dermatolog Member

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    406
    Адрес:
    Екатеринбург
    При операциях вычитания и сложения алгоритм определения А флага у процессора разный (при сложении учитывается перенос из 3-го разряда младшей тетрады в старшую тетраду, а при вычитании наоборот - заём из старшейтетрады в 3-тий разряд младшей тетрады).

    Задачка заключается в следующем - можно ли исскусственно определить состояние А флага при операции сложения - если эта операция эмулирует операцию вычитания.

    Т.е. например есть команда sub eax,5 - её можно выразить как add eax,-5. необходимо определить "правильное" состояние А флага после сложения (чтобы оно было таким же как в случае с вычитанием).
     
  2. Zerro Crash

    Zerro Crash New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2005
    Сообщения:
    29
    а не проще ли провести сложение/вычитание (не совсем понял цель)?



    флаг имеется ввиду AF?

    по определению: AF - флаг полупереноса или вспомогательного переноса. Устанавливается в 1, если в результате предыдущей операции произошел перенос (или заем) из третьего бита в четвертый.



    з.ы. приведи пример, что тебе надо сделать
     
  3. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    dermatolog Так при add eax,-5 переноса не будет и это правильно, нужно эмулировать неправильное выполнение операции?
    Код (Text):
    1.     mov  eax,00000000000000000000000000001111b ; EAX = 0x0F
    2. @1: add  eax,00000000000000000000000000000001b ; EAX = 0x10 AF = 1
    3.     mov  eax,00000000000000000000000000010000b ; EAX = 0x10
    4. @2: sub  eax,00000000000000000000000000000001b ; EAX = 0x0F AF = 1
    5.     mov  eax,00000000000000000000000000010000b ; EAX = 0x10
    6. @3: add  eax,11111111111111111111111111111111b ; EAX = 0x0F AF = 0
    При @1 перенос справа налево, при @2 перенос слева направо, при @3 недонос справа налево
     
  4. dermatolog

    dermatolog Member

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    406
    Адрес:
    Екатеринбург
    bogrus - да совершенно верно. Нужно сделать так, чтобы состояние флагов было такое же как при SUB, хотя на самом деле вы делаем ADD.

    Сейчас тестирую такую идею - для определения правильного состояния флагов делаю 5 + not (eax). В этом случае флаги O, P, A и С уже будут правильные.



    Zerro Crash - нужно всё сделать имея только операцию сложения.
     
  5. Zerro Crash

    Zerro Crash New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2005
    Сообщения:
    29
    dermatolog

    а зачем, если не секрет сабж нужен?
     
  6. dermatolog

    dermatolog Member

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    406
    Адрес:
    Екатеринбург
    Zerro Crash - для виртуальной машины.



    Вопрос снят. Всем спасибо за внимание. Задачка про флаги решается "неправильным" сложением 2-х чисел (сейчас протестировал на всех возможных комбинациях - всё отлично).