Физический адрес в реальном режиме

Тема в разделе "WASM.BEGINNERS", создана пользователем Asis, 19 авг 2006.

  1. Asis

    Asis New Member

    Публикаций:
    0
    Регистрация:
    19 авг 2006
    Сообщения:
    6
    Ответьте пожалуйста на вопрос
    Код (Text):
    1. Вам необходимо вычислить абсолютный адрес в памяти, заданный регистрами DS и BX.
    2. Какую последовательность команд следует использовать для решения поставленной задачи?
    3. 1)
    4. mov dx, 0
    5. mov ax, ds
    6. add ax, bx
    7. adc dx, 0  
    8. 2)
    9. mov dx, 0
    10. mov ax, ds
    11. add bx, bx
    12. adc dx, 0
    13. add bx, bx
    14. adc dx, 0
    15. add bx, bx
    16. adc dx, 0
    17. add bx, bx
    18. adc dx, 0
    19. add bx, ax
    20. adc dx, 0  
    21. 3)
    22. mov dx, 0
    23. mov ax, ds
    24. shl ax, 4
    25. rcl dx, 4
    26. add ax, bx
    27. rcl dx, 1  
    28. 4)
    29. mov dx, 0
    30. mov ax, ds
    31. add ax, ax
    32. adc dx, 0
    33. add ax, ax
    34. adc dx, 0
    35. add ax, bx
    36. adc dx, 0  
    37. 5)
    38. mov dx, 0
    39. mov ax, ds
    40. add ax, ax
    41. adc dx, 0
    42. add ax, ax
    43. adc dx, 0
    44. add ax, ax
    45. adc dx, 0
    46. add ax, ax
    47. adc dx, 0
    48. add ax, bx
    49. adc dx, 0
    Заранее спасибо.
     
  2. EvilsInterrupt

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

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Asis
    Не помню как в досе ds:bx но попробую предположить на примере cs:ip (cs * 16 + ip)

    shl ds,4
    add ds,bx
     
  3. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.351
  4. Asis

    Asis New Member

    Публикаций:
    0
    Регистрация:
    19 авг 2006
    Сообщения:
    6
    EvilsInterrupt, все правильно, НО! требуется определить правильный вариант из предложенных. Ах, да - нет таких комманд shl ds - сегментные регистры нельзя сдвигать, и add ds - не учавствуют в арифметических операциях.
    rmn
    Позволю себе с тобой не согласиться
    mov dx, 0 ;
    mov ax, ds ;
    shl ax, 4 ;3 старших бита ax безвозвратно потеряны, 4-й сидит в CF
    rcl dx, 4 ;4-й бит AX (до сдвига AX см выше) станет 3-м (76543210) dx
    add ax, bx ;
    rcl dx, 1 ;следовало бы adc, если бы предыдущий код был правильным.

    P.S. И впредь, пожалуйста, более внимательно отнеситесь к данному вопросу, спасибо.
     
  5. Asis

    Asis New Member

    Публикаций:
    0
    Регистрация:
    19 авг 2006
    Сообщения:
    6
    Хм. На форуме по асму, и никто не знает ответа на такой простой вопрос? Или, может быть, это непростой вопрос? Наверное стоило бы его задать не в разделе "BEGINNERS" :dntknw:
     
  6. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.351
    нет там правильных вариантов.
     
  7. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Asis
    Все правильно rmn сказал. Биты потеряются -- ничего не поделаешь. Если бы можно было умещать весь адрес, то сегментные регистры не понадобились бы :). 'rcl dx, 4' и на что не влияет, т.к. в вычислении адреса не участвует. Когда код выполнится в ax будет лежать абсолютный адрес ds:bx.
     
  8. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.351
    2Mika0x65

    ответ должен быть в dx:ax, как я понял. Только не в виде сегмент:смещение, а как линейный адрес
     
  9. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    rmn
    Да нет, вроде. В задании же не сказано.
     
  10. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    Код (Text):
    1. mov  ax, ds
    2. mov dx, ax
    3. shl  ax, 4
    4. shr  dx, 12
    5. add ax, bx
    6. adc dx, 0
     
  11. Asis

    Asis New Member

    Публикаций:
    0
    Регистрация:
    19 авг 2006
    Сообщения:
    6
    rmn, Ну вот, наконец то :) Там действительно нет правильных вариантов. Мне необходимо было чтобы ктонибудь еще это увидел.
    Mika0x65, а dx:ax должен быть абсолютный (20-битный физический, тот что передается непосредственно по шине при обращении к памяти) адрес.

    Ustus Этого варианта нет в списке предложеных:) А кроме того он не выполнится на 8086, потому что этот процессор может сдвигать только на один бит за раз, если второй операнд представляет собой непосредственное значение. При трансляции такой программы без указания типа процессора, по умолчанию считается именно 8086, и поэтому, инструкция shl ax, 4 будет оттранслирована в четыре инструкции shl ax, 1
    На 8126 и старших моделях все будет Ок. А еще можно выйти из положения так:
    mov cl, 4
    shl ax, cl
    Такой код 8086 воспримет без проблем.
     
  12. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    Asis
    тогда лучше
    Код (Text):
    1. mov  ax, ds
    2. mov dx, ax
    3. shl  ax, 1
    4. rcl  dx,1
    5. shl  ax, 1
    6. rcl  dx,1
    7. shl  ax, 1
    8. rcl  dx,1
    9. shl  ax, 1
    10. rcl  dx,1
    11. add ax, bx
    12. adc dx, 0
    это не было оговорено :)
    как же тогда вариант 3) ? И на 8086 если не ошибаюсь не было mov ax, ds

    кстати вариант 5) - похоже правильный, только я его сразу не заметил.
     
  13. Asis

    Asis New Member

    Публикаций:
    0
    Регистрация:
    19 авг 2006
    Сообщения:
    6
    Ustus,
    mov ax,ds насколько я помню было, как же тогда mov ax, @data mov ds,ax в начале почти каждой exe-программы под ДОС?

    5 вариант, как и 3 - неверны. Попробуй скомпилить и убедишься. А если тебе нужна теория то боюсь я уже запарился ее объяснять( Просто попытайся сам более дотошно разобрать эти варианты - см "P.S. И впредь, пожалуйста, более внимательно отнеситесь к данному вопросу, спасибо.".

    Код (Text):
    1. mov  ax, ds
    2. mov dx, ax   ; <<<<< здесь у тебя ошибка: нужно обнулить dx
    3. shl  ax, 1
    4. rcl  dx,1
    5. shl  ax, 1
    6. rcl  dx,1
    7. shl  ax, 1
    8. rcl  dx,1
    9. shl  ax, 1
    10. rcl  dx,1
    11. add ax, bx
    12. adc dx, 0