дан линейный адрес. нужно получить смещение, страницу и таблицу

Тема в разделе "WASM.BEGINNERS", создана пользователем DemonP, 18 фев 2007.

  1. DemonP

    DemonP New Member

    Публикаций:
    0
    Регистрация:
    18 фев 2007
    Сообщения:
    8
    линейный адрес дан в таком формате:

    А=143А:6641.

    нужно получить смещение, страницу и таблицу.
    тут прочитал метод получения всегог етого из лин. адреса.
    проблема заключается в том, что там лин. адрес был 32-разрядный, а у меня получается 2 16-ти разрядных.
    че с ними делать? как получить 32разряд? просто тупо приставить один к другому, убрав ":" ?
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    это че, сегмент:смещение в 16битном режиме чтоли?
     
  3. DemonP

    DemonP New Member

    Публикаций:
    0
    Регистрация:
    18 фев 2007
    Сообщения:
    8
    да вот я и не знаю. в задании больше нихрена нет!
    но думаю, что второе число - полюбому смещение
     
  4. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Режим, судя по всему 16 бит. Чтобы получить линейный адрес необходимо базу умножить на 16, а затем прибавить смещение. Правда, неизвестно, можно ли использовать 32разрядные регистры. Если нет, то надо что-то в духе:

    Код (Text):
    1.  mov ax, 0x143A
    2.  mov cx, 0x6641
    3.  xor dx, dx
    4.  shld dx, ax, 0x4
    5.  shl ax, 0x4
    6.  add ax, cx
    7.  adc dx, 0x0
    В результате в dx:ax лежит линейный адрес.
     
  5. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    для 16разрядного режима размерность линейного адреса 20 бит ввиду того, что используется адресация сегмент:смещение, лин адрес равен сегмент*16+смещение.
     
  6. DemonP

    DemonP New Member

    Публикаций:
    0
    Регистрация:
    18 фев 2007
    Сообщения:
    8
    хорошо, но тогда как мне из 20-битного линейного адреса получить сегмент и таблицу?
    размерность адреса сегмента 10 бит, размерность адреса таблицы 10 бит. всего 20.
    но там же еще должно быть смещение!

    там разбивка такая:

    таблица (10 бит) : сегмент (10бит) : смещение (12 бит)
    а если сделать как вы советуете, получается всего 20 бит! где взять остальные? или смещение уже учитывать не надо мне?
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    DemonP
    нет, 16 бит сегмент и 16 бит смещение. вместе 20 бит с учетом наложения и сдвига
     
  8. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Тогда 20битный адрес надо просто дополнить нулями справа. Нижние 12 бит -- смещение в странице, следующие 10 -- выбор таблицы страниц, следующие 10 -- выбор каталога таблиц. Понятно, что при 20битном адресе будет всегда выбираться нулевой каталог таблиц. Если речь вообще о страничном преобразовании идет :). Но лучше уточнить у препода, что имелось ввиду.
     
  9. DemonP

    DemonP New Member

    Публикаций:
    0
    Регистрация:
    18 фев 2007
    Сообщения:
    8
    наверно слева??

    я к такому же выводу пришел.

    спасибо за ответы!
     
  10. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Тьфу, конечно же слева :).