![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Altair |
![]()
Сообщение
#1
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Код Uses CRT; Const n=2; D:word=12; var a:array[1..n] of integer; b:word absolute n:2; i:word; c:word absolute d; begin ClrScr; readln(b); for i:=1 to b do a[i]:=random(100); for i:=1 to b do write(a[i],' '); writeln; writeln('c='); readln(c); writeln(d); end. Значение константы, используемой для индексации можно безболезненно менять в меньшую сторону. Значение свободной константы можно изменять свободно. Почему значение констант индексирования нельзя менять в большую сторону при сохранении размера переменной в памяти? ответ: массив или строка увеличится, автоматически новая облать памяти попытается обнулиться, а там могут быть данные чужие, и получаем RUN-TIME ERROR. ![]() Если есть подобные примеры работы с директивой absolute, кидайте сюда, может получиться интересная статья в итоге... ЗЫ: Странно, зачем вообще константы в Паскале .... :D -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
![]() ![]() |
xds |
![]()
Сообщение
#2
|
![]() N337 ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: ![]() ![]() ![]() |
Под "памятью" подразумеваются адресное пространство ЦП, в котором располагаются ОЗУ (оперативная память), основное ПЗУ (обычно содержит BIOS), видеобуфер и т. п.
Сегментные адреса были введены в семействе x86 по той простой причине, что первые модели (i8086/88, i80186, i80286) были 16-разрядными. Перед разработчиками Intel стояла проблема: с помощью 16-разрядного слова можно адресовать только 64 кб, что шло в разрез с уже достаточно высоким потенциалом возможностей системы команд x86. Поступили следующим образом: шину адреса сделали 20-разрядной, что позволило увеличить адресное пространство до 1 Мб. Поскольку процессор мог оперировать только словами длиной 8 и 16 бит, то ввели концепцию сегментных адресов. Сегментный адрес имеет длину 32 бита и состоит из 2 16-разрядных слов - сегмента и смещения. Сегментный адрес автоматически преобразуется процессором в физический следующим образом (повторюсь): <физический_адрес> := <сегмент> * 16 + <смещение>. Т. о. одной физической ячейке памяти соответствует 4096 различных сегментных адресов. Все указанное выше справедливо для любой модели x86, работающей в режиме real x86. -------------------- The idiots are winning.
|
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 14:01 |