меняю местами объявление переменных и программа не работает

Тема в разделе "WASM.BEGINNERS", создана пользователем Denis_den, 20 июл 2005.

  1. Denis_den

    Denis_den New Member

    Публикаций:
    0
    Регистрация:
    20 июл 2005
    Сообщения:
    2
    Хочу перейти в сегмент памяти BF00h, но переход просиходит в сегмент 068Eh. Если объявляю Off_move первее, чем Seg_move, то все работает хорошо. Почему?

    Как вообще происходит переход? Ведь cs не менял.





    .286



    cseg SEGMENT

    assume cs: CSEG, ds: CSEG, es: CSEG, ss: CSEG

    org 100h



    start:

    jmp Init



    Seg_move dw 0BF00h

    Off_move dw offset Lab_jmp

    ; если объявить Off_move первее чем Seg_move , то все

    ; работает хорошо



    Init:

    mov es, Seg_move

    mov di, 100h

    mov cx, offset Finish-100h

    mov si, 100h

    rep movsb



    jmp dword ptr cs:[Off_move]





    Lab_jmp:

    nop

    ret

    Finish equ $



    CSEG ends

    end start
     
  2. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Denis_den

    Что значит "первее чем"?

    Пару сегмент:смещение надо определять так
    Код (Text):
    1. off dw ...
    2. seg dw ...
     
  3. Denis_den

    Denis_den New Member

    Публикаций:
    0
    Регистрация:
    20 июл 2005
    Сообщения:
    2
    Привет q_q. Я знаю что надо определять так:

    off dw ...

    seg dw ...

    но я не понимал почему.

    Я разобрался в чем дело. Я не правильно понимал jmp dword ptr cs:[Off_move] . Спасибо за ответ.
     
  4. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Denis_den

    не понимал почему

    Так зеведено у ms-intel. По младшим адресам смещение, по старшим сегмент, а сама пара адресуется младшим адресом.