jmp в E9 как определить операнд машинного кода ?

Тема в разделе "WASM.BEGINNERS", создана пользователем Les555, 24 июл 2010.

  1. Les555

    Les555 New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2010
    Сообщения:
    15
    jmp в E9 как определить операнд машинного кода ? Например jmp на позицию 0248 кодируется как " e9 45 01 "
    Как можно самому расчитать операнд , если я знаю что например нужно прыгнуть на 300h ?
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Ip = $(0xE9) + Disp + 5.
     
  3. Les555

    Les555 New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2010
    Сообщения:
    15
    не понял ...
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    используется смещение относительно текущей позиции кода.
     
  5. Les555

    Les555 New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2010
    Сообщения:
    15
    допустим текущая позиция ip = 100h , нужно прыгнуть на 300 h ...относительно текущей позиции
    какая будет команда ? e9 .... и ....как рассчитать ?
     
  6. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    248
    ну и считаете : 5 байт на jmp, то есть 300h - 5 = 2FBh и записываете в обратном порядке байты: E9 FB 02 00 00
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Disp = Ip - $ - 5. Disp = 0x300 - 0x100 - 5 = 0x1FB, что в памяти будет E9 FB 01 00 00.
     
  8. ruzmaz

    ruzmaz New Member

    Публикаций:
    0
    Регистрация:
    22 мар 2010
    Сообщения:
    12
    А почему кстати 5 байт? Челу, судя по всему, под 8086 надо, т.е. 3 байта
     
  9. Les555

    Les555 New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2010
    Сообщения:
    15
    точняг ... с 3 байтами наверно ...в моем случае будет работать .
     
  10. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    ruzmaz
    Судя по чему ?
    Les555
    Вы что не знаете какой режим у камня ?
    Добавление префиксов на формулу не повлияет, так же как и мод.
     
  11. ruzmaz

    ruzmaz New Member

    Публикаций:
    0
    Регистрация:
    22 мар 2010
    Сообщения:
    12
     
  12. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    ruzmaz
    Точно, не заметил.
     
  13. Les555

    Les555 New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2010
    Сообщения:
    15
    Я изучаю 16 разрядный ассемблер, а о том что на режим компиляции среда может повлиять (сколлько вычитать ) я воще не знал.

    Спасибо за помосчь!
     
  14. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Les555
    Такое кстати не только с 0xE9, но и много других к примеру 0xE8, jnX \ jX переходы, но на них уже не 5 вычитать нужно, а двойку! Логика тут проста нужно учитывать размер самой инструкции
     
  15. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    EvilsInterrupt
    а можно не морочить начинающим голову циферками и сказать, что операнд = адрес назначения - адрес следующей инструкции :)
     
  16. Les555

    Les555 New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2010
    Сообщения:
    15
    интресная мысль...буду ее думать..но результат, наверно, будет тот же ))