Вопрос № 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