линейный адрес дан в таком формате: А=143А:6641. нужно получить смещение, страницу и таблицу. тут прочитал метод получения всегог етого из лин. адреса. проблема заключается в том, что там лин. адрес был 32-разрядный, а у меня получается 2 16-ти разрядных. че с ними делать? как получить 32разряд? просто тупо приставить один к другому, убрав ":" ?
Режим, судя по всему 16 бит. Чтобы получить линейный адрес необходимо базу умножить на 16, а затем прибавить смещение. Правда, неизвестно, можно ли использовать 32разрядные регистры. Если нет, то надо что-то в духе: Код (Text): mov ax, 0x143A mov cx, 0x6641 xor dx, dx shld dx, ax, 0x4 shl ax, 0x4 add ax, cx adc dx, 0x0 В результате в dx:ax лежит линейный адрес.
для 16разрядного режима размерность линейного адреса 20 бит ввиду того, что используется адресация сегмент:смещение, лин адрес равен сегмент*16+смещение.
хорошо, но тогда как мне из 20-битного линейного адреса получить сегмент и таблицу? размерность адреса сегмента 10 бит, размерность адреса таблицы 10 бит. всего 20. но там же еще должно быть смещение! там разбивка такая: таблица (10 бит) : сегмент (10бит) : смещение (12 бит) а если сделать как вы советуете, получается всего 20 бит! где взять остальные? или смещение уже учитывать не надо мне?
Тогда 20битный адрес надо просто дополнить нулями справа. Нижние 12 бит -- смещение в странице, следующие 10 -- выбор таблицы страниц, следующие 10 -- выбор каталога таблиц. Понятно, что при 20битном адресе будет всегда выбираться нулевой каталог таблиц. Если речь вообще о страничном преобразовании идет . Но лучше уточнить у препода, что имелось ввиду.