Ветвление

Тема в разделе "WASM.ASSEMBLER", создана пользователем IPKILLER, 23 сен 2004.

  1. IPKILLER

    IPKILLER New Member

    Публикаций:
    0
    Регистрация:
    18 сен 2004
    Сообщения:
    9
    Здравствуйте!

    У меня такой вопросик: Есть некая программка в машинных кодах, расположенная ниже.



    :0001.0100 50 push ax

    :0001.0101 51 push cx

    :0001.0102 B0B6 mov al, B6

    :0001.0104 E643 out 43, al

    :0001.0106 B000 mov al, 00

    :0001.0108 E642 out 42, al

    :0001.010A B00A mov al, 0A

    :0001.010C E642 out 42, al

    :0001.010E E461 in al, 61

    :0001.0110 50 push ax

    :0001.0111 0C03 or al, 03

    :0001.0113 E661 out 61, al

    :0001.0115 B90400 mov cx, 0004

    :0001.0118 E2FE loop 0118

    :0001.011A 58 pop ax

    :0001.011B E661 out 61, al

    :0001.011D 59 pop cx

    :0001.011E 58 pop ax

    :0001.011F B8004C mov ax, 4C00

    :0001.0122 CD21 int 21



    По адресу 0001.0118 находится код E2FE. Он соответствует команде loop 0118. Понятно, что в цикле loop 0118, 0118 получается складыванием FE c 11A, т.е. 00FE+011A. А как вычислить, что должно быть написано вместо FE в коде E2FE, чтобы выполнялась команда loop 0110, вместо loop 0118?



    Заранее благодарю!
     
  2. Funbit

    Funbit Member

    Публикаций:
    0
    Регистрация:
    13 апр 2003
    Сообщения:
    92
    Адрес:
    Russia
    :)) ну спросил,



    если ты понял, что FE+11A=118 (на калькуляторе это лучше посчитать, всключив Byte размер и сложив FE и 1A, т.е. берем только байт от слова 011A, чтобы знаковое сложение было), то в чем сложность обратного расчета? если нужно на 110, а не на 118, то что нужно прибавить к 11A чтобы получить 110? :



    10-1A=F6

    (адрес_куда_нужно_прыгнуть-адрес_следующей_за_loop_команды)



    т.е. получается E2F6. проверка: 11A+F6=110...
     
  3. Johnikum

    Johnikum Member

    Публикаций:
    0
    Регистрация:
    6 июн 2003
    Сообщения:
    97
    (необходимый_адрес)-(адрес_след_инстр_после_loop)=(то_что_надо)

    110-11A=F6
     
  4. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    А я ленивый, но умный. 110=118-8

    Значит FE меняем на FE-8=F6
     
  5. EvilsInterrupt

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

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    >А я ленивый, но умный. 110=118-8

    >Значит FE меняем на FE-8=F6



    ШЕДЕВР! На доску почета! :))))))))
     
  6. IPKILLER

    IPKILLER New Member

    Публикаций:
    0
    Регистрация:
    18 сен 2004
    Сообщения:
    9
    Всем большое спасибо!