код loop

Тема в разделе "WASM.ASSEMBLER", создана пользователем boolv, 10 май 2005.

  1. boolv

    boolv New Member

    Публикаций:
    0
    Регистрация:
    10 май 2005
    Сообщения:
    18
    Адрес:
    Russia
    Объясните принцип формирование машинного кода операции LOOP (или JMP)



    Напримеря, я получаю: E2FE

    E2 - это код операции (это ясно), а вот откуда берётся FE? На порядковый номер операции (там, где метка) (06h) что-то не похож.

    Объясните, пожалуйста.
     
  2. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Это не порядковый номер операции, а смещение куда прыгать, FE (-2) значит на 2 байта назад, 7F (+127) - на 127 байт вперед
     
  3. boolv

    boolv New Member

    Публикаций:
    0
    Регистрация:
    10 май 2005
    Сообщения:
    18
    Адрес:
    Russia
    Как определяется отрицательность (что назад)?

    Ведь, если не проделовать соответсвующие махинации, то FE=254
     
  4. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    FE=254 это если смотреть с беззнаковой стороны, а если с учетом знака, то байт делится на 2 (половина чисел отдается отрицательным значениям, половина - положительным)



    0x00 - 0x7F (0 ... 127)

    0x80 - 0xFF (-128 ... -1)
     
  5. OxD

    OxD New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2005
    Сообщения:
    13
    The "label" operand must be within -128 or 127 bytes of the instruction following the loop instruction.



    т.е. больше 07fh уже отрицательное число для loop.
     
  6. boolv

    boolv New Member

    Публикаций:
    0
    Регистрация:
    10 май 2005
    Сообщения:
    18
    Адрес:
    Russia
    понял, спасибо