Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
boot.ini
0 / 0 / 0
Регистрация: 07.02.2011
Сообщений: 23
1

XMS что это?

29.11.2011, 09:01. Просмотров 2128. Ответов 7
Метки нет (Все метки)

"Дополнительная память (англ. Extended memory, XMS) — память за пределами
первого мегабайта адресного
пространства IBM PC- совместимого компьютера с процессором Intel 80286 или более поздним. На компьютерах,
совместимых с архитектурой x86, дополнительная память может использоваться только
с процессорами не ниже Intel
80286. Это обусловлено их
способностью адресовать
более одного мегабайта
памяти."

Объяснить более доходчивым языком что такое xms память, желательно провести аналогию с чем-нибудь!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2011, 09:01
Ответы с готовыми решениями:

Что это в исходнике?
есть код IDI_ICON EQU 1001 что он значит? это в описании находиться

Скажите, что это за транслятор?
.model small include io.asm .data a1 dw 0000000010110101b b1 dw...

Что значит это текст?
ASSUME CS:KOM_,SS:STEK_,DS:DAN_ STEK_ SEGMENT STACK DW 10000 DUP (?)...

Ошибка или что это ?
Я начинающий вот код программы CSEG segment org 100h _start: mov ah,...

Подпрограмма обработки прерываний: что это и как использовать
Всем привет.Я начинающий в ассемблере....Возник вопрос насчёт обработки...

7
Fedor666
Основоположник на всё
42 / 42 / 2
Регистрация: 22.02.2010
Сообщений: 311
29.11.2011, 10:00 2
Тяжелое детство, 16-битные игрушки...
Старые процы для адресации к памяти использовали сегменты и смещения в них. Поскольку регистры были 16-разрядные, в них влазили числа только до 655535 (или 0FFFFh). Адрес вычислялся так: сегментный регистр умножался на 16, путем сдвига влево на 4 двоичных разряда, затем складывался со смещением (то же 16 разрядов). Итого, получался адрес типа 0XXXXXh, который, ясно дело, не мог превышать 1048575 (1 мег). Потом в процах появилась адресная линия А20 и стало возможным обращаться к дополнительной памяти. Появился драйвер XMS, который предоставлял обычным программам к ней доступ через окошки в верхней памяти. Уф.
2
boot.ini
0 / 0 / 0
Регистрация: 07.02.2011
Сообщений: 23
29.11.2011, 10:31  [ТС] 3
Ставлю +1 за интересную информацию.Но мне все равно не ясно что это.
0
Mikl___
Автор FAQ
11910 / 6197 / 575
Регистрация: 11.11.2010
Сообщений: 11,207
29.11.2011, 11:39 4
boot.ini, пробую еще раз, для понятности используй калькулятор из стандартных программ.
1)в DOS полный адрес получается из двух частей = значение в сегментном регистре * 16 + смещение
2)максимальное значение сегментного регистра =FFFF
3)максимальное значение смещения =FFFF
4) смотрим какому максимальному адресу это соответствует?
FFFFh*10h+FFFFh=FFFF0h+FFFFh=10FFEFh=10FFEF в шестнадцатеричной = 1114095 в десятичной = 100001111111111101111 в двоичной, а вот и нет 8086 имели 20 адресных линий (от нулевой до 19-ой) поэтому самая старшая единица здесь не учитывается поэтому FFFFh*10h+FFFFh=FFFF0h+FFFFh=0FFEFh а самый старший адрес будет равен 11111111111111111111 в двоичной, FFFFF в шестнадцатеричной, 1048575 в десятеричной. В intel 286 появляется 20-ая адресная линия и теперь максимальный адрес стал равен 1FFFFF hex= 2097151 dec = 111111111111111111111 bin память от 2097151 до 1048575 и называется XMS
1
Fedor666
Основоположник на всё
42 / 42 / 2
Регистрация: 22.02.2010
Сообщений: 311
29.11.2011, 11:50 5
Что бы обратиться к ячейке оперативной памяти, нужно указать ее номер. Это число. Оно ДОЛЖНО поместиться в регистр процессора, а он был 16-разрядный, т.е. маленький. Тута идет двоичная математика: 0,1,10,11,100,101,110,111,1000,1001,1010,1011... Как видишь, длина числа растет очень быстро, а в 16 разрядный регистр может поместится максимальное 16-разрядное число 1111111111111111 (двоичное) = 65535 (десятичное). 65535*16+65535 и есть тот предел, который можно засунуть в регистры СЕГМЕНТ:СМЕЩЕНИЕ, т.е. мегабайт. В этом-то и была вся трабла. Как заставить процессор обратится к ячейки памяти № 30000000, если он не понимает таких больших чисел? Когда 1 мега стало явно маловато, процы доработали, что бы они понимали числа по-больше и могли адресоваться к бОльшим объемам оперативной памяти. Так и повелось: первые 640Kb - стандартная память (доступная программам без всяких выкрутасов), от 640Kb до 1Mb - верхняя память и остальная - дополнительная, к которой можно обращаться через специальный драйвер XMS. Причем, это все одна плата. Вопрос лишь в способе адресации.
Я то же не понял зачем все это? Сейчас даже сами эти понятия устарели.
1
Mikl___
Автор FAQ
11910 / 6197 / 575
Регистрация: 11.11.2010
Сообщений: 11,207
29.11.2011, 11:53 6
Цитирую кусками с Лурка
исходя из особенностей ранних микропроцессоров Intel (а именно — 20 адресных линий на выходе, больше мегабайта напрямую они адресовать не могли физически http://www.cyberforum.ru/cgi-bin/latex.cgi?2^{20}=1048576
после выхода 80286, который мог в защищённом режиме адресовать до 16Мб памяти (ибо имел уже 24 ноги на адрес) http://www.cyberforum.ru/cgi-bin/latex.cgi?2^{24}=16777216
Ограничение, тем не менее, осталось, так как воспользоваться расширенным адресным пространством можно было только в защищённом режиме, с которым DOS принципиально не дружила. Беда была в том, что благодаря некоторой багофиче 286-й процессор раз переключившись в защищённый режим намертво в нём залипал, и вернуться в реальный мог только через перезагрузку, а интерфейс DOS-а, реализованный не через вызовы подпрограмм, а через программные прерывания (это позволяло сэкономить немаловажные в те годы несколько тактов), нормально работал только в режиме реальном.
Отсюда и величайшее множество программных и аппаратных костылей, вроде плат расширения памяти, работающих через 64К окошечко в основном адресном пространстве (тот самый EMS) и первых попыток написать (тормозной и глючный) менеджер расширенной памяти, работающий в защищённом режиме, — что работало очень плохо из-за вышеописанной багофичи, ибо перезагружать процессор надо было долго и печально через контроллер клавиатуры. из-за этой особенности пошли следующие костыли со всякими EMS, HMA, XMS типами памяти и VCPI и DPMI интерфейсами.
1
boot.ini
0 / 0 / 0
Регистрация: 07.02.2011
Сообщений: 23
29.11.2011, 12:00  [ТС] 7
Огромное спасибо за такую информацию.
0
Mikl___
Автор FAQ
11910 / 6197 / 575
Регистрация: 11.11.2010
Сообщений: 11,207
29.11.2011, 12:04 8
boot.ini, а главное доступную через GOOGL, Яндекс и т.п.
0
29.11.2011, 12:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2011, 12:04

Что изменяется, записывается в стек и где это в стеке после команды?
1 0000 stseg segment para stack 2 0000 10*(????) ...

Тип данных "%" в IDA Pro - что это
Начал изучать ассемблер (работаю с ARM процессорами) Однажды понадобилось...

Дано текущее время (H M S), где H - это часы, M - это минуты, а S - секунды. Напи- сать программу, определяющую время спустя 1 секунду
Дано текущее время (H M S), где H - это часы, M - это минуты, а S - секунды....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru