Здравствуйте уважаемые эксперты. У меня вопрос по port[] и mem[]. 1) Много раз видел как используется массив mem, да и сам им пользовался. Там вроде все понятно, кроме одного - где найти инфу по значениям адресов памяти (т.е. что именно находится в определенной области памяти, например от mem[A000:0000] до mem[AFFF:FFFF] видеопамять EGA). 2) С port[] так вообще непонятно ничего - это вроде одномерный массив для доступа к портам ЦП. Но вот я видел как при помощи port программировались мышь и МОДЕМ! А где узнать, по каким именно значениям что находится??? 3) А что значат следующие записи: var CrtMode : Byte Absolute $0040:$0049; Str : String; StrLen : Byte Absolute Str; Жду ваших ответов, Zipper.
Приветствую Вас, Zipper! Есть специальные справочники по обеим темам, и есть люди всё это знающие, так что пиши что конкретно интересно, отвечу! 3) var CrtMode: Byte Absolute $0040:$0049 Абсолютное(самокорректирующееся значение по вышеуказанному адресу, кстати, там лежит текущий номер видеорежима! Str : String; StrLen : Byte Absolute Str; StrLen так как string в паскале строится так, что первый байт это длинна, а дальше сама строка, то эта переменная будет обозначать длинну строки и самомодифицироваться! Ответ отправлен: 10.09.2002, 19:15 Отправитель: Dark_Lord Отвечает Sensey
Здравствуйте, Zipper! А Tech Help тебе зачем? Там еще хвалят какой-то интеррапт лист Ральфа Брауна (мне просто ТечХелпа хватает...), поищи, может и там есть 40:49=Текущий активный видеорежим...
Ответ отправлен: 10.09.2002, 10:21 Отправитель: Sensey Отвечает Ayl
Приветствую Вас, Zipper! Согласен с экспертами Sensey и Артём Шегеда. Просто дополню насчет Absolute, подозреваю, что именно оно вызвало третий вопрос. Описание (1) variable : Type ABSOLUTE xxxx:yyyy; или (2) variable : Type ABSOLUTE variable1; обозначает, что переменная variable будет "размещена" либо по физицескому адресу xxxx:yyyy (сегмент:смещение) в случае (1), либо по адресу, занимаемой переменной variable1 в случае (2). Слово "размещена" взято в кавычки, потому что никакого реального помещения переменной по этому адресу не происходит, просто задается мнемоническое имя для адреса в памяти. Для CrtMode. Сегмент $0040 зарезервирован для переменных BIOS (не весь, конечно, а только 256 байт). По адресу $0049 находится байт, соответствующий текущему видеорежиму. Второе описание с absolute - определение длины строки. Переменные
строкового типа хранятся в Паскале следующим образом: вначале задается байт, определяющий текущую длину строки, а затем идет сама строка. Длину строки можно также узнать с помощью конструкции Byte (Str [0]), но запись с absolute нагляднее и проще. Ответ отправлен: 10.09.2002, 13:37 Отправитель: Ayl Отвечает Артём Шегеда
Здравствуйте, Zipper!
А в чём проблема-то? В хелпе на BP всё это расписано чёрным по циан. 1. Sensey прав - не буду повторяться. 2. Sensey ещё раз прав, но добавлю, что почти все устройства программируются через порты ввода/вывода. И мне не понятно Ваше удивление: "при помощи port программировались мышь и МОДЕМ!" - а как по Вашему они должны программироваться? Кроме того, существует словный массив портов - PortW. 3. CrtMode - Sensey объяснил. Str - ну тут, вроде как, понятно. StrLen - объявляется байтовая переменная, которая хранится в первом байте строки Str. Но если вспомнить формат string, то окажется, что в первом байте строки хранится длина этой строки. То есть, при обращении к переменной StrLen мы обратимся к длине строки. Фактически такое объявление переменной заменяет конструкцию:
var Str : string;
StrLen : ^byte; { ... } begin StrLen:=@Str; WriteLn(StrLen^); { ... } end;
- не правда ли, изврат? Ответ отправлен: 10.09.2002, 11:34 Отправитель: Артём Шегеда
Форма отправки вопроса
Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook"
и "Microsoft Outlook Express". В программе The Bat!
подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте,
что в некоторых браузерах могут стоять запреты на открытие других
окон, а также "чрезмерное" кэширование данных,
при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet
Explorer 5.0+ или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.