Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: программирование на языке Assembler


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler

Выпуск № 182
от 10.07.2005, 08:30

Администратор:Калашников О.А.
В номере:Вопросов: 3, Ответов: 7


Вопрос № 23007: Терсков Алексей Николаевич Сижу и думаю, т.е. надумал уже. Оперативная память 8086 - го имеет 20 разрядную шину адреса. Адресация происходит с помощью сегментов и смещений от этих сегментов. Если сегментный адрес получается п...
Вопрос № 23038: Вопрос следующий. Как умножить 48 бит в регистрах DX:AX:BX на 2 ? И еще один вопрос: Какие шестнадцатеричные значения строки и столбца соответствуют нижнему правому углу экрана 25x45? Ответ: 19h x 2Dh ? Я прав ? ...
Вопрос № 23040: Непонял почему мне DSota сказал, что 16-ричные значения 18h и 2Ch строки и столбца соответствуют нижнему правому углу экрана 25x45 Ведь 25 и 45, 19h и 2Dh - все они начинают отсчет с нуля :-( , а если с единицы, тогда 26x45 и 1Ahx2Eh ...

Вопрос № 23.007
Терсков Алексей Николаевич

Сижу и думаю, т.е. надумал уже.
Оперативная память 8086 - го имеет 20 разрядную
шину адреса. Адресация происходит с помощью сегментов и
смещений от этих сегментов. Если сегментный адрес
получается путем умножения шестнадцатиразрядного
числа на 16, то получается, что память компьютера имеет
1048576 разделить на 16 равно 65536 сегментов, начиная,
с нулевого, а смещение относительно сегмента может
перескочить 4095 границ параграфов (сегментов).
Процессор может адресовать 1114112 байт памяти,
1048560 т.е. 1024 килобайт или FFFFh * 10h килобайт
да плюс смещение 65536 байт, т.е. у смещения
65535-ый бай последний адрес, а всего адресов 65536 включая 0.

Укажите мои ошибки и неточности, если я прав,
то подтвердите мое мнение.

Приложение:

Отправлен: 04.07.2005, 09:58
Вопрос задал: Терсков Алексей Николаевич (статус: Посетитель)
Всего ответов отправлено: 2

Отвечает: Евгений Иванов
Здравствуйте, Терсков Алексей Николаевич!
в реальном режиме процессор может добраться до адреса
FFFF:FFFF
это если включено управление шиной A20.
если же не включено, то происходит заворот адресов на нулевой сегмент.
поэтом сделана память HMA и управление оной через драйвер HIMEM.
то есть, можно перебраться через 1 Мб и попасть в сегмент за ним, не считая последних 16 байт в нём.

удачи!

---------
Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 04.07.2005, 10:43
Оценка за ответ: 5

Отвечает: Ayl
Здравствуйте, Терсков Алексей Николаевич!

Ты абсолютно прав.
В реальном режиме ты действительно можешь построить логический адрес, который будет превышать предел в 1М. Диапазон логических адресов в реальном режиме состоит из 1М + 65536 - 16 адресов. От адреса 00000 до адреса 10FFFE.
Но все дело в том, что в процессорах 8086/8088/80186 адресная шина ФИЗИЧЕСКИ состояла из 20 разрядов. Поэтому на нее физически нельзя было передать адрес из 21-го разряда. Аппаратура не позволяла. Адрес на аппаратном уровне вычислялся по модулю 2^20.
Но начиная с процессора 80286 адресная шина уже была как минимум 24-разрядная. И позволяла адресовать до 16М.
Т.е. стало возможным в реальном режиме физически передать на нее адрес больше 1М. Но т.к. при старте процессора в реальном режиме адресные линии A20-A24 были запрещены, то все равно получалось эмулирование работы процессоров 8086/8088/80186. Однако ушлые ребята из какой-то фирмы (не помню, кажется из IBM) при тестировании процессора обнаружили, что при записи в определенные порты некоторых значений возможно разрешить работу адресной линии A20, что позволяет получить доступ в реальном режиме дополнительно к 65540 адресам свыше 1М. Эту область назвали областью HMA (High Memory Area) и для доступа к ней выпустили драйвер himem.sys.

---------
Трудное - то, что можно сделать немедленно. Невозможное - то, для выполнения чего требуется немного больше времени
Ответ отправил: Ayl (статус: Профессор)
Отправлен: 04.07.2005, 13:06
Оценка за ответ: 5


Вопрос № 23.038
Вопрос следующий.
Как умножить 48 бит в регистрах DX:AX:BX на 2 ?
И еще один вопрос:
Какие шестнадцатеричные значения строки и столбца
соответствуют нижнему правому углу экрана 25x45?
Ответ: 19h x 2Dh ?
Я прав ?
Отправлен: 04.07.2005, 16:42
Вопрос задал: Терсков Алексей Николаевич (статус: Посетитель)
Всего ответов отправлено: 3

Отвечает: Евгений Иванов
Здравствуйте, Терсков Алексей Николаевич!
да, ты прав. записать можно как угодно, результат не изменится. ;)

умножить 48 бит?
для этого есть сопроцессор.
там числа очень большие.

но если тебе очень нужно, то умножить вот так:
DX:AX:BX

shl bx,1
rcl ax, 1
rcl dx, 1
jc overflower

вот и всё. удачи!


---------
Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 04.07.2005, 16:55

Отвечает: DSota
Здравствуйте, Терсков Алексей Николаевич!

2. 18hx2ch - координаты обычно считаются с нуля.

---------
Открыть глаза навстречу солнцу.
Ответ отправил: DSota (статус: Практикант)
Отправлен: 04.07.2005, 17:21

Отвечает: Ayl
Здравствуйте, Терсков Алексей Николаевич!

Сложением:
add bx, bx
adc ax, ax
adc dx, dx

Возможно переполнение, если старший бит DX равен 1.

Можно также через сдвиг:
shl bx, 1
rcl ax, 1
rcl dx, 1

2.
Да, 24*44 в десятичном виде, т.е. 19h*2Dh в 16-тиричном. Отсчет координат идет от 0.
---------
Трудное - то, что можно сделать немедленно. Невозможное - то, для выполнения чего требуется немного больше времени
Ответ отправил: Ayl (статус: Профессор)
Отправлен: 04.07.2005, 18:09


Вопрос № 23.040
Непонял почему мне DSota
сказал, что 16-ричные значения 18h и 2Ch строки и столбца
соответствуют нижнему правому углу экрана 25x45
Ведь 25 и 45, 19h и 2Dh - все они начинают отсчет с нуля :-(
, а если с единицы, тогда 26x45 и 1Ahx2Eh получится !!!
Я правильно думаю ???
Отправлен: 04.07.2005, 18:12
Вопрос задал: Терсков Алексей Николаевич (статус: Посетитель)
Всего ответов отправлено: 2

Отвечает: Евгений Иванов
Здравствуйте, Терсков Алексей Николаевич!
ты неправильно задал вопрос.
допустим, экран 80*25 (типичный экран дос) - это размеры символов по гор и верт.
тогда самый нижний правый угол будет иметь координаты 79 на 24.
у тебя координаты 25*45.
зачем тебе 16-ричные значения-то? а? ;)
это же числа. неважно, в каком они счислении представлены, они будут иметь одни и те же значения. если тебе нужно записать их в слове, то используй вот так:

crd0 DW 25*256+45
теперь в старшем байте слова будет 25, в младшем - 45. и никаких 16-ричных чисел! ;)))

удачи!

---------
Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 04.07.2005, 18:33

Отвечает: Ayl
Здравствуйте, Терсков Алексей Николаевич!

Нет, неправильно. 25*45 - это размер экрана. Координаты верхнего левого угла - (0,0). Соответственно, координаты правого нижнего угла равны (0+25-1,0+45-1) = (24,44).
---------
Трудное - то, что можно сделать немедленно. Невозможное - то, для выполнения чего требуется немного больше времени
Ответ отправил: Ayl (статус: Профессор)
Отправлен: 05.07.2005, 13:44


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Яндекс


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.faq
Отписаться
Вспомнить пароль

В избранное